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° |
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 } |