Initial version for Modtronix LCD2S I2C and SPI serial LCD displays. For details, see http://modtronix.com/products-serial-lcd-board/
Revision 2:fe0c1e27f362, committed 2015-08-07
- Comitter:
- modtronix
- Date:
- Fri Aug 07 18:27:11 2015 +1000
- Parent:
- 1:429b7d3f7b95
- Commit message:
- Improvements
Changed in this revision
diff -r 429b7d3f7b95 -r fe0c1e27f362 lcd2s.cpp --- a/lcd2s.cpp Tue Aug 04 18:54:37 2015 +1000 +++ b/lcd2s.cpp Fri Aug 07 18:27:11 2015 +1000 @@ -21,6 +21,7 @@ #include "mbed.h" #include "lcd2s.h" + // DEFINES //////////////////////////////////////////////////////////////////// @@ -33,6 +34,30 @@ // Function Prototypes //////////////////////////////////////////////////////// +// DEBUG //////////////////////////////////////////////////////////////////// +//IMPORTANT, when enabling debugging, it is very important to note the following: +//- If (MX_DEBUG_IS_POINTER==1), ensure there is global Stream pointer defined somewhere in code to override "pMxDebug = NULL" below! +//- If (MX_DEBUG_IS_POINTER==0), define a mxDebug() function somewhere in code to handel debug output +#define DEBUG_ENABLE 1 +#if (DEBUG_ENABLE==1) && !defined(NDEBUG) +//Alternative method in stead of using NULL below. This requires to create derived Stream class in each file we want to use debugging +// class modtronixDebugStream : public Stream {int _putc(int value) {return 0;}int _getc() {return 0;}}; +// static modtronixDebugStream modtronixDebug; +// WEAK Stream* pMxDebug = &modtronixDebug; + #if (MX_DEBUG_IS_POINTER==1) //More efficient, but only works if pMxDebug is defined in code. Disabled by default! + WEAK Stream* pMxDebug = NULL; + #define MX_DEBUG pMxDebug->printf + #else + WEAK void mxDebug(const char *format, ...) {} + #define MX_DEBUG mxDebug + #endif +#else + //GCC's CPP has extensions; it allows for macros with a variable number of arguments. We use this extension here to preprocess pmesg away. + #define MX_DEBUG(format, args...) ((void)0) +#endif + + + LCD2S::LCD2S(uint8_t rows/* = 4*/, uint8_t columns/* = 20*/) { contrast = 200; brightness = 200; @@ -41,6 +66,8 @@ bufSize = rows * columns; cursor_row = cursor_col = 0; + //MX_DEBUG("\r\nLCD2S()"); + #if (LCD2S_USE_MALLOC == 1) buf = new uint8_t[bufSize)]; dirtyRows = new uint32_t(rows);
diff -r 429b7d3f7b95 -r fe0c1e27f362 lcd2s.h --- a/lcd2s.h Tue Aug 04 18:54:37 2015 +1000 +++ b/lcd2s.h Fri Aug 07 18:27:11 2015 +1000 @@ -24,6 +24,15 @@ #include "mbed.h" +#ifndef WEAK + #if defined (__ICCARM__) + #define WEAK __weak + #else + #define WEAK __attribute__((weak)) + #endif +#endif + + //LCD2S Commands /** Cursor moves backwards, no parameters */ #define LCD2S_CMD_CURSOR_MOVES_BACKWARDS 0x01 @@ -205,8 +214,10 @@ virtual void initDefault(uint8_t contrast) = 0; /** Causes the display to be updated with buffer content + * + * @return 0 if success, else error code */ - virtual void display() = 0; + virtual uint8_t display() = 0; void clearDisplay();
diff -r 429b7d3f7b95 -r fe0c1e27f362 lcd2s_i2c.cpp --- a/lcd2s_i2c.cpp Tue Aug 04 18:54:37 2015 +1000 +++ b/lcd2s_i2c.cpp Fri Aug 07 18:27:11 2015 +1000 @@ -93,7 +93,8 @@ /** Causes the display to be updated with buffer content */ -void LCD2S_I2C::display(void) { +uint8_t LCD2S_I2C::display(void) { + uint8_t retVal = 0; uint8_t row, col; uint8_t colFirstDirty = 0xff; uint8_t colLastDirty = 0xff; @@ -132,7 +133,9 @@ cmd[0] = LCD2S_CMD_SET_CURSOR_POSITION; cmd[1] = row+1; cmd[2] = colFirstDirty+1; - pI2C->write(this->i2cAdr, cmd, 3); + if ((retVal = pI2C->write(this->i2cAdr, cmd, 3)) != 0) { + return retVal; //Return error code + } wait_ms(5); //Write string - only dirty characters are written @@ -140,9 +143,13 @@ for(col=colFirstDirty; col<=colLastDirty; col++) { cmd[col-colFirstDirty+1] = pBuf[(row*columns)+col]; } - pI2C->write(this->i2cAdr, cmd, colLastDirty-colFirstDirty+2); + if ((retVal = pI2C->write(this->i2cAdr, cmd, colLastDirty-colFirstDirty+2)) != 0) { + return retVal; //Return error code + } } } + + return retVal; } int LCD2S_I2C::writeChar(uint8_t c) {
diff -r 429b7d3f7b95 -r fe0c1e27f362 lcd2s_i2c.h --- a/lcd2s_i2c.h Tue Aug 04 18:54:37 2015 +1000 +++ b/lcd2s_i2c.h Fri Aug 07 18:27:11 2015 +1000 @@ -51,8 +51,10 @@ /** Causes the display to be updated with buffer content + * + * @return: 0 is successful, else non-0 */ - void display(); + uint8_t display(); int writeChar(uint8_t c);