lib/unigraphic/SSD1322.cpp

changeset 26
86f099bda525
parent 17
162fe523c37d
child 28
424d792fea4f
equal deleted inserted replaced
25:5b1e0b384d31 26:86f099bda525
1 /* mbed UniGraphic library - Device specific class 1 /* mbed UniGraphic library - Device specific class
2 * Copyright (c) 2015 Peter Drescher 2 * Copyright (c) 2015 Peter Drescher
3 * Released under the MIT License: http://mbed.org/license/mit 3 * Released under the MIT License: http://mbed.org/license/mit
4 */ 4 */
5 5
6 #include "platform.h" 6 #include "platform.h"
7 #include "SSD1322.h" 7 #include "SSD1322.h"
8 8
9 ////////////////////////////////////////////////////////////////////////////////// 9 //////////////////////////////////////////////////////////////////////////////////
10 // display settings /////////////////////////////////////////////////////// 10 // display settings ///////////////////////////////////////////////////////
44 #define SSD1322_CMD_MASTER_CURRENT_CONTROL 0xC7 44 #define SSD1322_CMD_MASTER_CURRENT_CONTROL 0xC7
45 #define SSD1322_CMD_SET_MULTIPLEX_RATIO 0xCA 45 #define SSD1322_CMD_SET_MULTIPLEX_RATIO 0xCA
46 #define SSD1322_CMD_DISPLAY_ENHANCEMENT_B 0xD1 46 #define SSD1322_CMD_DISPLAY_ENHANCEMENT_B 0xD1
47 #define SSD1322_CMD_SET_COMMAND_LOCK 0xFD 47 #define SSD1322_CMD_SET_COMMAND_LOCK 0xFD
48 48
49 // set for some OLED displays 49 // set for some OLED displays
50 //#define ALTERNATE_OLED_VERSION 50 //#define ALTERNATE_OLED_VERSION
51 51
52 52
53 static const uint8_t oledInit[] = { 53 static const uint8_t oledInit[] = {
54 SSD1322_CMD_SET_COMMAND_LOCK, 1, 0x12, /* Unlock OLED driver IC*/ 54 SSD1322_CMD_SET_COMMAND_LOCK, 1, 0x12, /* Unlock OLED driver IC*/
93 93
94 #define SWAP(a, b) { a ^= b; b ^= a; a ^= b; } 94 #define SWAP(a, b) { a ^= b; b ^= a; a ^= b; }
95 95
96 96
97 SSD1322::SSD1322(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC, 97 SSD1322::SSD1322(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC,
98 const char *name) 98 const char *name)
99 : GraphicsDisplay(name), 99 : GraphicsDisplay(name),
100 screensize_X(DISPLAY_WIDTH), screensize_Y(DISPLAY_HEIGHT), 100 screensize_X(DISPLAY_WIDTH), screensize_Y(DISPLAY_HEIGHT),
101 _BPP(BPP), _PAGES(DISPLAY_HEIGHT/8*BPP), 101 _BPP(BPP), _PAGES(DISPLAY_HEIGHT/8*BPP),
102 _IC_X_SEGS(IC_X_SEGS), _IC_Y_COMS(IC_Y_COMS), _IC_PAGES(IC_Y_COMS/8*BPP), 102 _IC_X_SEGS(IC_X_SEGS), _IC_Y_COMS(IC_Y_COMS), _IC_PAGES(IC_Y_COMS/8*BPP),
103 _spi(mosi, miso, sclk), 103 _spi(mosi, miso, sclk),
162 set_width(screensize_X); 162 set_width(screensize_X);
163 set_height(screensize_Y); 163 set_height(screensize_Y);
164 } else { 164 } else {
165 set_width(screensize_Y); 165 set_width(screensize_Y);
166 set_height(screensize_X); 166 set_height(screensize_X);
167 } 167 }
168 switch (o) { 168 switch (o) {
169 case (0):// portrait view -90° 169 case (0):// portrait view -90°
170 mirrorXY(Y); 170 mirrorXY(Y);
171 break; 171 break;
172 case (1): // default, landscape view 0° 172 case (1): // default, landscape view 0°
200 case(Y): 200 case(Y):
201 d = 0x16; 201 d = 0x16;
202 break; 202 break;
203 case(XY): 203 case(XY):
204 d = 0x12; 204 d = 0x12;
205 break; 205 break;
206 } 206 }
207 wr_cmd8(SSD1322_CMD_SET_REMAP); 207 wr_cmd8(SSD1322_CMD_SET_REMAP);
208 wr_data8(d); 208 wr_data8(d);
209 wr_data8(0x11); 209 wr_data8(0x11);
210 } 210 }
211 211
212 void SSD1322::invert(unsigned char o) 212 void SSD1322::invert(unsigned char o)
213 { 213 {
214 if(o == 0) wr_cmd8(SSD1322_CMD_SET_DISPLAY_MODE_NORMAL); 214 if(o == 0) wr_cmd8(SSD1322_CMD_SET_DISPLAY_MODE_NORMAL);
263 } 263 }
264 } 264 }
265 count--; 265 count--;
266 } 266 }
267 } 267 }
268
268 void SSD1322::window_pushpixelbuf(unsigned short* color, unsigned int lenght) { 269 void SSD1322::window_pushpixelbuf(unsigned short* color, unsigned int lenght) {
269 while(lenght) 270 while(lenght)
270 { 271 {
271 pixel(cur_x, cur_y, *color++); 272 pixel(cur_x, cur_y, *color++);
272 cur_x++; 273 cur_x++;
358 unsigned int i; 359 unsigned int i;
359 set_row_address(0); 360 set_row_address(0);
360 set_column_address(0); 361 set_column_address(0);
361 362
362 memcpy((void*)_trBuffer, 363 memcpy((void*)_trBuffer,
363 (const void*)_pixelBuffer, 364 (const void*)_pixelBuffer,
364 DISPLAY_BUFFER_ELEMENTS * sizeof(DISPLAY_BUFFER_TYPE)); 365 DISPLAY_BUFFER_ELEMENTS * sizeof(DISPLAY_BUFFER_TYPE));
366
365 wr_cmd8(SSD1322_CMD_WRITE_RAM); 367 wr_cmd8(SSD1322_CMD_WRITE_RAM);
366 368
367 #ifdef DEVICE_SPI_ASYNCH 369 #ifdef DEVICE_SPI_ASYNCH
368 _CS = 0; 370 _CS = 0;
369 _spi.transfer((uint8_t*) _trBuffer, 64*128, (uint8_t*) NULL, 0, _spiEventCb); 371 _spi.transfer((uint8_t*) _trBuffer, 64*128, (uint8_t*) NULL, 0, _spiEventCb);
370 #else 372 #else
371 i = 0; 373 i = 0;
372 for(y=0; y<64; y++) 374 for(y=0; y<64; y++)
373 for(x=0; x<128; x++) 375 for(x=0; x<128; x++)
374 wr_data8(_trBuffer[i++]); 376 wr_data8(_trBuffer[i++]);
375 #endif 377 #endif
376 } 378 }
377 379
378 void SSD1322::copy_to_lcd(unsigned char from_col, unsigned char to_col, 380 void SSD1322::copy_to_lcd(unsigned char from_col, unsigned char to_col,
383 to_col = 0x3F; 385 to_col = 0x3F;
384 if (to_row>0x3F) 386 if (to_row>0x3F)
385 to_row = 0x3F; 387 to_row = 0x3F;
386 388
387 memcpy((void*)_trBuffer, 389 memcpy((void*)_trBuffer,
388 (const void*)_pixelBuffer, 390 (const void*)_pixelBuffer,
389 DISPLAY_BUFFER_ELEMENTS * sizeof(DISPLAY_BUFFER_TYPE)); 391 DISPLAY_BUFFER_ELEMENTS * sizeof(DISPLAY_BUFFER_TYPE));
390 392
391 set_row_address(from_row, to_row); 393 set_row_address(from_row, to_row);
392 set_column_address(from_col, to_col); 394 set_column_address(from_col, to_col);
393 395
394 wr_cmd8(SSD1322_CMD_WRITE_RAM); 396 wr_cmd8(SSD1322_CMD_WRITE_RAM);
395 for(y=from_row; y<=to_row; y++) { 397 for(y=from_row; y<=to_row; y++) {
396 for(x=from_col; x<=to_col; x++) { 398 for(x=from_col; x<=to_col; x++) {
397 wr_data8(_trBuffer[y*128 + 2*x]); 399 wr_data8(_trBuffer[y*128 + 2*x]);
398 wr_data8(_trBuffer[y*128 + 2*x + 1]); 400 wr_data8(_trBuffer[y*128 + 2*x + 1]);
399 } 401 }
400 } 402 }
401 } 403 }

mercurial