Driver for the Seeedstudio RGB OLED module for the xadow M0
Revision 4:1707ca53e7d5, committed 2015-11-12
- Comitter:
- messi1
- Date:
- Thu Nov 12 23:53:58 2015 +0000
- Parent:
- 3:af00512c9694
- Child:
- 5:9de43186f5ea
- Commit message:
- Improved drawLine function
Changed in this revision
--- a/include/SGL.h Thu Nov 12 23:23:33 2015 +0000 +++ b/include/SGL.h Thu Nov 12 23:53:58 2015 +0000 @@ -145,7 +145,7 @@ public: SGL(uint16_t width, uint16_t height); virtual void drawPixel(uint8_t x, uint8_t y, uint16_t color) = 0; // implemented by subclass - virtual void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color); + virtual void drawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint16_t color); virtual void drawVerticalLine(uint16_t x, uint16_t y, uint16_t height,uint16_t color); virtual void drawHorizontalLine(uint16_t x, uint16_t y, uint16_t width, uint16_t color); virtual void drawRectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color);
--- a/include/SSD1331.h Thu Nov 12 23:23:33 2015 +0000 +++ b/include/SSD1331.h Thu Nov 12 23:53:58 2015 +0000 @@ -189,7 +189,7 @@ SSD1331(PinName cs, PinName rst, PinName dc, PinName mosi, PinName miso, PinName sclk); void init(void); virtual void drawPixel(uint8_t x, uint8_t y, uint16_t color); - virtual void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color); + virtual void drawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint16_t color); void drawFrame(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t outColor, uint16_t fillColor); void copyWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,uint16_t x2, uint16_t y2); void dimWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
--- a/src/SGL.cpp Thu Nov 12 23:23:33 2015 +0000 +++ b/src/SGL.cpp Thu Nov 12 23:53:58 2015 +0000 @@ -36,15 +36,15 @@ _height = height; } -void SGL::drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) +void SGL::drawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint16_t color) { - int x = x1-x0; - int y = y1-y0; - int dx = abs(x), sx = x0<x1 ? 1 : -1; - int dy = -abs(y), sy = y0<y1 ? 1 : -1; - int err = dx+dy, e2; + uint8_t x = x1-x0; + uint8_t y = y1-y0; + uint8_t dx = abs(x), sx = x0<x1 ? 1 : -1; + uint8_t dy = -abs(y), sy = y0<y1 ? 1 : -1; + uint8_t err = dx+dy, e2; for (;;){ - drawPixel(x0,y0,color); + drawPixel(x0, y0,color); e2 = 2*err; if (e2 >= dy) { if (x0 == x1) break;
--- a/src/SSD1331.cpp Thu Nov 12 23:23:33 2015 +0000 +++ b/src/SSD1331.cpp Thu Nov 12 23:53:58 2015 +0000 @@ -69,6 +69,7 @@ init(); }; +//------------------------------------------------------------------------------------ void SSD1331::sendCmd(uint8_t cmd) { _dc = 0; @@ -77,6 +78,7 @@ _cs = 1; } +//------------------------------------------------------------------------------------ void SSD1331::sendCmd(uint8_t cmd, uint8_t arg1) { _dc = 0; @@ -85,7 +87,8 @@ _spiPort.write(arg1); _cs = 1; } - + +//------------------------------------------------------------------------------------ void SSD1331::sendCmd(uint8_t cmd, uint8_t arg1, uint8_t arg2) { _dc = 0; @@ -96,6 +99,7 @@ _cs = 1; } +//------------------------------------------------------------------------------------ void SSD1331::sendCmd(uint8_t *cmd, uint8_t count) { if(!cmd) return; @@ -107,6 +111,7 @@ _cs = 1; } +//------------------------------------------------------------------------------------ void SSD1331::sendData(uint16_t data) { _dc = HIGH; @@ -116,16 +121,7 @@ _cs = HIGH; } -int SSD1331::_getc() -{ - return -1; -} - -int SSD1331::_putc( int c ) -{ - return -1; -} - +//------------------------------------------------------------------------------------ void SSD1331::init(void) { // initialize sequence @@ -198,42 +194,38 @@ // sendCmd(CMD_NORMAL_BRIGHTNESS_DISPLAY_ON);//set display on } +//------------------------------------------------------------------------------------ void SSD1331::drawPixel(uint8_t x, uint8_t y, uint16_t color) { if ((x >= RGB_OLED_WIDTH) || (y >= RGB_OLED_HEIGHT)) return; // set column point set row point - uint8_t cmd[7] = {CMD_SET_COLUMN_ADDRESS, x, x, CMD_SET_ROW_ADDRESS, y, y, 0x00}; + uint8_t cmd[6] = { CMD_SET_COLUMN_ADDRESS, x, x, CMD_SET_ROW_ADDRESS, y, y }; sendCmd(cmd, 6); //fill 16bit colour sendData(color); } -//------------------------------------------------------------------------- -void SSD1331::drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) +//------------------------------------------------------------------------------------ +void SSD1331::drawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint16_t color) { - if (x0 >= RGB_OLED_WIDTH) x0 = RGB_OLED_WIDTH - 1; + if (x0 >= RGB_OLED_WIDTH) x0 = RGB_OLED_WIDTH - 1; if (y0 >= RGB_OLED_HEIGHT) y0 = RGB_OLED_HEIGHT - 1; - if (x1 >= RGB_OLED_WIDTH) x1 = RGB_OLED_WIDTH - 1; + if (x1 >= RGB_OLED_WIDTH) x1 = RGB_OLED_WIDTH - 1; if (y1 >= RGB_OLED_HEIGHT) y1 = RGB_OLED_HEIGHT - 1; - - sendCmd(CMD_DRAW_LINE);//draw line - sendCmd(x0);//start column - sendCmd(y0);//start row - sendCmd(x1);//end column - sendCmd(y1);//end row - sendCmd((uint8_t)((color>>11)&0x1F));//R - sendCmd((uint8_t)((color>>5)&0x3F));//G - sendCmd((uint8_t)(color&0x1F));//B + + uint8_t cmd[8] = { CMD_DRAW_LINE, x0, y0, x1, y1, (uint8_t)((color>>11)&0x1F), (uint8_t)((color>>5)&0x3F), (uint8_t)(color&0x1F) }; + sendCmd(cmd, 8); } +//------------------------------------------------------------------------------------ void SSD1331::drawFrame(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t outColor, uint16_t fillColor) { - if (x0 >= RGB_OLED_WIDTH) x0 = RGB_OLED_WIDTH - 1; + if (x0 >= RGB_OLED_WIDTH) x0 = RGB_OLED_WIDTH - 1; if (y0 >= RGB_OLED_HEIGHT) y0 = RGB_OLED_HEIGHT - 1; - if (x1 >= RGB_OLED_WIDTH) x1 = RGB_OLED_WIDTH - 1; + if (x1 >= RGB_OLED_WIDTH) x1 = RGB_OLED_WIDTH - 1; if (y1 >= RGB_OLED_HEIGHT) y1 = RGB_OLED_HEIGHT - 1; sendCmd(CMD_FILL_WINDOW);//fill window @@ -251,6 +243,7 @@ sendCmd((uint8_t)(fillColor&0x1F));//B } +//------------------------------------------------------------------------------------ void SSD1331::copyWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,uint16_t x2, uint16_t y2) { sendCmd(CMD_COPY_WINDOW);//copy window @@ -262,6 +255,7 @@ sendCmd(y2);//new row } +//------------------------------------------------------------------------------------ void SSD1331::dimWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { sendCmd(CMD_DIM_WINDOW);//copy area @@ -271,6 +265,7 @@ sendCmd(y1);//end row } +//------------------------------------------------------------------------------------ void SSD1331::clearWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { sendCmd(CMD_CLEAR_WINDOW);//clear window @@ -280,6 +275,7 @@ sendCmd(y1);//end row } +//------------------------------------------------------------------------------------ void SSD1331::setScolling(ScollingDirection direction, uint8_t rowAddr, uint8_t rowNum, uint8_t timeInterval) { uint8_t scolling_horizontal = 0x0; @@ -309,6 +305,7 @@ sendCmd(CMD_ACTIVE_SCROLLING); } +//------------------------------------------------------------------------------------ void SSD1331::enableScolling(bool enable) { if(enable) @@ -317,12 +314,26 @@ sendCmd(CMD_DEACTIVE_SCROLLING); } +//------------------------------------------------------------------------------------ void SSD1331::setDisplayMode(DisplayMode mode) { sendCmd(mode); } +//------------------------------------------------------------------------------------ void SSD1331::setDisplayPower(DisplayPower power) { sendCmd(power); } + +//------------------------------------------------------------------------------------ +int SSD1331::_getc() +{ + return -1; +} + +//------------------------------------------------------------------------------------ +int SSD1331::_putc( int c ) +{ + return -1; +} \ No newline at end of file