Ken Segler
/
ezLCD4_mbed
Not Complete
Fork of Nucleo_rtos by
ezLCD405.cpp@77:cd59ac40b3be, 2016-06-23 (annotated)
- Committer:
- codeman
- Date:
- Thu Jun 23 22:57:30 2016 +0000
- Revision:
- 77:cd59ac40b3be
Not Complete;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
codeman | 77:cd59ac40b3be | 1 | #include "mbed.h" |
codeman | 77:cd59ac40b3be | 2 | #include "ezLCD405.h" |
codeman | 77:cd59ac40b3be | 3 | |
codeman | 77:cd59ac40b3be | 4 | |
codeman | 77:cd59ac40b3be | 5 | void Tx_interrupt(); |
codeman | 77:cd59ac40b3be | 6 | void Rx_interrupt(); |
codeman | 77:cd59ac40b3be | 7 | void send_line(); |
codeman | 77:cd59ac40b3be | 8 | void read_line(); |
codeman | 77:cd59ac40b3be | 9 | |
codeman | 77:cd59ac40b3be | 10 | Timer timer; |
codeman | 77:cd59ac40b3be | 11 | |
codeman | 77:cd59ac40b3be | 12 | // MOSI = PA7 |
codeman | 77:cd59ac40b3be | 13 | // MISO = PA6 |
codeman | 77:cd59ac40b3be | 14 | // SCK = PA5 |
codeman | 77:cd59ac40b3be | 15 | // NSS = PA_4 |
codeman | 77:cd59ac40b3be | 16 | |
codeman | 77:cd59ac40b3be | 17 | SPI device(PA_7, PA_6, PA_5, PA_4); |
codeman | 77:cd59ac40b3be | 18 | DigitalOut nss(PA_4); |
codeman | 77:cd59ac40b3be | 19 | |
codeman | 77:cd59ac40b3be | 20 | // Circular buffers for serial TX and RX data - used by interrupt routines |
codeman | 77:cd59ac40b3be | 21 | const int buffer_size = 4096; |
codeman | 77:cd59ac40b3be | 22 | // might need to increase buffer size for high baud rates |
codeman | 77:cd59ac40b3be | 23 | char tx_buffer[buffer_size]; |
codeman | 77:cd59ac40b3be | 24 | char rx_buffer[buffer_size]; |
codeman | 77:cd59ac40b3be | 25 | // Circular buffer pointers |
codeman | 77:cd59ac40b3be | 26 | // volatile makes read-modify-write atomic |
codeman | 77:cd59ac40b3be | 27 | volatile int tx_in=0; |
codeman | 77:cd59ac40b3be | 28 | volatile int tx_out=0; |
codeman | 77:cd59ac40b3be | 29 | volatile int rx_in=0; |
codeman | 77:cd59ac40b3be | 30 | volatile int rx_out=0; |
codeman | 77:cd59ac40b3be | 31 | char buf[64]; |
codeman | 77:cd59ac40b3be | 32 | uint8_t ExtendedMode=0; |
codeman | 77:cd59ac40b3be | 33 | |
codeman | 77:cd59ac40b3be | 34 | uint8_t interface = SPI_IF; |
codeman | 77:cd59ac40b3be | 35 | |
codeman | 77:cd59ac40b3be | 36 | ezLCD4::ezLCD4(PinName tx, PinName rx) : Stream("ezLCD4") , _ser(tx, rx) |
codeman | 77:cd59ac40b3be | 37 | { |
codeman | 77:cd59ac40b3be | 38 | // _ser.attach(this,&ezLCD4::Rx_interrupt, Serial::RxIrq); |
codeman | 77:cd59ac40b3be | 39 | // _ser.attach(this,&ezLCD4::Tx_interrupt, Serial::TxIrq); |
codeman | 77:cd59ac40b3be | 40 | _ser.baud(115200); // default baud rate |
codeman | 77:cd59ac40b3be | 41 | status = 0; |
codeman | 77:cd59ac40b3be | 42 | |
codeman | 77:cd59ac40b3be | 43 | } |
codeman | 77:cd59ac40b3be | 44 | |
codeman | 77:cd59ac40b3be | 45 | void ezLCD4::Rx_interrupt( void ) |
codeman | 77:cd59ac40b3be | 46 | { |
codeman | 77:cd59ac40b3be | 47 | // Loop just in case more than one character is in UART's receive FIFO buffer |
codeman | 77:cd59ac40b3be | 48 | // Stop if buffer full |
codeman | 77:cd59ac40b3be | 49 | // while ((_ser.readable()) || (((rx_in + 1) % buffer_size) == rx_out)) { |
codeman | 77:cd59ac40b3be | 50 | // rx_buffer[rx_in] = _ser.getc(); |
codeman | 77:cd59ac40b3be | 51 | // rx_in = (rx_in + 1) % buffer_size; |
codeman | 77:cd59ac40b3be | 52 | // } |
codeman | 77:cd59ac40b3be | 53 | uint8_t c; |
codeman | 77:cd59ac40b3be | 54 | if(_ser.readable()) { |
codeman | 77:cd59ac40b3be | 55 | c=_ser.getc(); |
codeman | 77:cd59ac40b3be | 56 | //status=c; |
codeman | 77:cd59ac40b3be | 57 | // if(c==0xea) |
codeman | 77:cd59ac40b3be | 58 | // status=1; |
codeman | 77:cd59ac40b3be | 59 | // if(c==0x38) |
codeman | 77:cd59ac40b3be | 60 | // pong=1; |
codeman | 77:cd59ac40b3be | 61 | /* |
codeman | 77:cd59ac40b3be | 62 | if((c & 0xc0)==0x40) { |
codeman | 77:cd59ac40b3be | 63 | button=(c & 0x3f); |
codeman | 77:cd59ac40b3be | 64 | bState=1; |
codeman | 77:cd59ac40b3be | 65 | // beep(5); |
codeman | 77:cd59ac40b3be | 66 | } |
codeman | 77:cd59ac40b3be | 67 | if((c & 0xc0)==0x80) { |
codeman | 77:cd59ac40b3be | 68 | button=(c & 0x3f); |
codeman | 77:cd59ac40b3be | 69 | bState=0; |
codeman | 77:cd59ac40b3be | 70 | } |
codeman | 77:cd59ac40b3be | 71 | */ |
codeman | 77:cd59ac40b3be | 72 | |
codeman | 77:cd59ac40b3be | 73 | |
codeman | 77:cd59ac40b3be | 74 | if(c == 0x81) { |
codeman | 77:cd59ac40b3be | 75 | while(!_ser.readable()); |
codeman | 77:cd59ac40b3be | 76 | x = _ser.getc(); |
codeman | 77:cd59ac40b3be | 77 | while(!_ser.readable()); |
codeman | 77:cd59ac40b3be | 78 | x |= _ser.getc() << 7; |
codeman | 77:cd59ac40b3be | 79 | while(!_ser.readable()); |
codeman | 77:cd59ac40b3be | 80 | y = _ser.getc(); |
codeman | 77:cd59ac40b3be | 81 | while(!_ser.readable()); |
codeman | 77:cd59ac40b3be | 82 | y = _ser.getc(); |
codeman | 77:cd59ac40b3be | 83 | while(!_ser.readable()); |
codeman | 77:cd59ac40b3be | 84 | y |= _ser.getc() << 7; |
codeman | 77:cd59ac40b3be | 85 | } |
codeman | 77:cd59ac40b3be | 86 | |
codeman | 77:cd59ac40b3be | 87 | } |
codeman | 77:cd59ac40b3be | 88 | return; |
codeman | 77:cd59ac40b3be | 89 | } |
codeman | 77:cd59ac40b3be | 90 | |
codeman | 77:cd59ac40b3be | 91 | // Interupt Routine to write out data to serial port |
codeman | 77:cd59ac40b3be | 92 | void ezLCD4::Tx_interrupt( void ) |
codeman | 77:cd59ac40b3be | 93 | { |
codeman | 77:cd59ac40b3be | 94 | // led2=1; |
codeman | 77:cd59ac40b3be | 95 | // Loop to fill more than one character in UART's transmit FIFO buffer |
codeman | 77:cd59ac40b3be | 96 | // Stop if buffer empty |
codeman | 77:cd59ac40b3be | 97 | /* |
codeman | 77:cd59ac40b3be | 98 | while (( _ser.writeable() ) && (tx_in != tx_out)) { |
codeman | 77:cd59ac40b3be | 99 | _ser.putc(tx_buffer[tx_out]); |
codeman | 77:cd59ac40b3be | 100 | tx_out = (tx_out + 1) % buffer_size; |
codeman | 77:cd59ac40b3be | 101 | } |
codeman | 77:cd59ac40b3be | 102 | // led2=0; |
codeman | 77:cd59ac40b3be | 103 | return; |
codeman | 77:cd59ac40b3be | 104 | */ |
codeman | 77:cd59ac40b3be | 105 | } |
codeman | 77:cd59ac40b3be | 106 | |
codeman | 77:cd59ac40b3be | 107 | |
codeman | 77:cd59ac40b3be | 108 | |
codeman | 77:cd59ac40b3be | 109 | uint8_t ezLCD4::getByte( void ) |
codeman | 77:cd59ac40b3be | 110 | { |
codeman | 77:cd59ac40b3be | 111 | return rx_buffer[rx_out]; |
codeman | 77:cd59ac40b3be | 112 | } |
codeman | 77:cd59ac40b3be | 113 | uint8_t ezLCD4::getCount( void ) |
codeman | 77:cd59ac40b3be | 114 | { |
codeman | 77:cd59ac40b3be | 115 | return rx_in; |
codeman | 77:cd59ac40b3be | 116 | } |
codeman | 77:cd59ac40b3be | 117 | |
codeman | 77:cd59ac40b3be | 118 | void ezLCD4::ezLCD405Init( uint8_t iface ) |
codeman | 77:cd59ac40b3be | 119 | { |
codeman | 77:cd59ac40b3be | 120 | /* |
codeman | 77:cd59ac40b3be | 121 | while(c!=PONG) { |
codeman | 77:cd59ac40b3be | 122 | |
codeman | 77:cd59ac40b3be | 123 | _ser.putc(PING); |
codeman | 77:cd59ac40b3be | 124 | c=pc.getc(); |
codeman | 77:cd59ac40b3be | 125 | } |
codeman | 77:cd59ac40b3be | 126 | */ |
codeman | 77:cd59ac40b3be | 127 | //writeData(0x00); |
codeman | 77:cd59ac40b3be | 128 | interface = iface; |
codeman | 77:cd59ac40b3be | 129 | if(interface == SPI_IF) { |
codeman | 77:cd59ac40b3be | 130 | nss=1; |
codeman | 77:cd59ac40b3be | 131 | device.format(8,3); |
codeman | 77:cd59ac40b3be | 132 | device.frequency(10000000); |
codeman | 77:cd59ac40b3be | 133 | } |
codeman | 77:cd59ac40b3be | 134 | |
codeman | 77:cd59ac40b3be | 135 | } |
codeman | 77:cd59ac40b3be | 136 | void ezLCD4::showSettings( void ) |
codeman | 77:cd59ac40b3be | 137 | { |
codeman | 77:cd59ac40b3be | 138 | writeData(SHOWSETTINGS); |
codeman | 77:cd59ac40b3be | 139 | } |
codeman | 77:cd59ac40b3be | 140 | void ezLCD4::buzzerOn( void ) |
codeman | 77:cd59ac40b3be | 141 | { |
codeman | 77:cd59ac40b3be | 142 | writeData(EZNOW_BUZZER_ON ); |
codeman | 77:cd59ac40b3be | 143 | } |
codeman | 77:cd59ac40b3be | 144 | void ezLCD4::buzzerOff( void ) |
codeman | 77:cd59ac40b3be | 145 | { |
codeman | 77:cd59ac40b3be | 146 | writeData(EZNOW_BUZZER_OFF ); |
codeman | 77:cd59ac40b3be | 147 | } |
codeman | 77:cd59ac40b3be | 148 | |
codeman | 77:cd59ac40b3be | 149 | void ezLCD4::beep( uint8_t duration ) |
codeman | 77:cd59ac40b3be | 150 | { |
codeman | 77:cd59ac40b3be | 151 | writeData(EZNOW_BUZZER_BEEP ); |
codeman | 77:cd59ac40b3be | 152 | writeData(duration); |
codeman | 77:cd59ac40b3be | 153 | } |
codeman | 77:cd59ac40b3be | 154 | |
codeman | 77:cd59ac40b3be | 155 | void ezLCD4::lightON( void ) |
codeman | 77:cd59ac40b3be | 156 | { |
codeman | 77:cd59ac40b3be | 157 | writeData(LIGHT_ON); |
codeman | 77:cd59ac40b3be | 158 | } |
codeman | 77:cd59ac40b3be | 159 | |
codeman | 77:cd59ac40b3be | 160 | void ezLCD4::lightOFF( void ) |
codeman | 77:cd59ac40b3be | 161 | { |
codeman | 77:cd59ac40b3be | 162 | writeData(LIGHT_OFF); |
codeman | 77:cd59ac40b3be | 163 | } |
codeman | 77:cd59ac40b3be | 164 | |
codeman | 77:cd59ac40b3be | 165 | void ezLCD4::lightBright( uint8_t bright ) |
codeman | 77:cd59ac40b3be | 166 | { |
codeman | 77:cd59ac40b3be | 167 | writeData(LIGHT_BRIGHT); |
codeman | 77:cd59ac40b3be | 168 | writeData(bright); |
codeman | 77:cd59ac40b3be | 169 | } |
codeman | 77:cd59ac40b3be | 170 | void ezLCD4::setTouchProtocol( uint8_t protocol) |
codeman | 77:cd59ac40b3be | 171 | { |
codeman | 77:cd59ac40b3be | 172 | writeData(TOUCH_PROTOCOL); |
codeman | 77:cd59ac40b3be | 173 | writeData(protocol); |
codeman | 77:cd59ac40b3be | 174 | } |
codeman | 77:cd59ac40b3be | 175 | |
codeman | 77:cd59ac40b3be | 176 | void ezLCD4::putSfIcon( uint8_t icon ) |
codeman | 77:cd59ac40b3be | 177 | { |
codeman | 77:cd59ac40b3be | 178 | writeData(PUT_SF_ICON); |
codeman | 77:cd59ac40b3be | 179 | writeData(icon); |
codeman | 77:cd59ac40b3be | 180 | } |
codeman | 77:cd59ac40b3be | 181 | |
codeman | 77:cd59ac40b3be | 182 | void ezLCD4::direct( uint8_t c ) |
codeman | 77:cd59ac40b3be | 183 | { |
codeman | 77:cd59ac40b3be | 184 | writeData(c); |
codeman | 77:cd59ac40b3be | 185 | } |
codeman | 77:cd59ac40b3be | 186 | |
codeman | 77:cd59ac40b3be | 187 | void ezLCD4::exmode( void ) |
codeman | 77:cd59ac40b3be | 188 | { |
codeman | 77:cd59ac40b3be | 189 | writeData(EXMODE); |
codeman | 77:cd59ac40b3be | 190 | ExtendedMode=true; |
codeman | 77:cd59ac40b3be | 191 | } |
codeman | 77:cd59ac40b3be | 192 | void ezLCD4::stdmode( void ) |
codeman | 77:cd59ac40b3be | 193 | { |
codeman | 77:cd59ac40b3be | 194 | writeData(STDMODE); |
codeman | 77:cd59ac40b3be | 195 | ExtendedMode =false; |
codeman | 77:cd59ac40b3be | 196 | } |
codeman | 77:cd59ac40b3be | 197 | void ezLCD4::setLayer ( uint8_t layer ) |
codeman | 77:cd59ac40b3be | 198 | { |
codeman | 77:cd59ac40b3be | 199 | writeData(SET_LAYER); |
codeman | 77:cd59ac40b3be | 200 | writeData(layer); |
codeman | 77:cd59ac40b3be | 201 | } |
codeman | 77:cd59ac40b3be | 202 | void ezLCD4::setLayerVisible ( uint8_t layer, uint8_t visible ) |
codeman | 77:cd59ac40b3be | 203 | { |
codeman | 77:cd59ac40b3be | 204 | writeData(SET_LAYERVISIBLE); |
codeman | 77:cd59ac40b3be | 205 | writeData(layer); |
codeman | 77:cd59ac40b3be | 206 | writeData(visible); |
codeman | 77:cd59ac40b3be | 207 | } |
codeman | 77:cd59ac40b3be | 208 | void ezLCD4::setColorKey ( uint16_t color ) |
codeman | 77:cd59ac40b3be | 209 | { |
codeman | 77:cd59ac40b3be | 210 | writeData(SET_COLORKEY); |
codeman | 77:cd59ac40b3be | 211 | writeData(color & 0x00ff); |
codeman | 77:cd59ac40b3be | 212 | writeData((color & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 213 | } |
codeman | 77:cd59ac40b3be | 214 | void ezLCD4::SDPutIcon( char *str ) |
codeman | 77:cd59ac40b3be | 215 | { |
codeman | 77:cd59ac40b3be | 216 | writeData(SD_PUT_ICON); |
codeman | 77:cd59ac40b3be | 217 | while( (char) *str ) |
codeman | 77:cd59ac40b3be | 218 | writeData((char) *str++); |
codeman | 77:cd59ac40b3be | 219 | writeData(0x00); |
codeman | 77:cd59ac40b3be | 220 | } |
codeman | 77:cd59ac40b3be | 221 | void ezLCD4::setColor( uint16_t color ) |
codeman | 77:cd59ac40b3be | 222 | { |
codeman | 77:cd59ac40b3be | 223 | writeData(SET_COLORH); |
codeman | 77:cd59ac40b3be | 224 | writeData(color & 0x00ff); |
codeman | 77:cd59ac40b3be | 225 | writeData((color & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 226 | } |
codeman | 77:cd59ac40b3be | 227 | void ezLCD4::setBgColor( uint16_t color ) |
codeman | 77:cd59ac40b3be | 228 | { |
codeman | 77:cd59ac40b3be | 229 | writeData(SET_BG_COLORH); |
codeman | 77:cd59ac40b3be | 230 | writeData(color & 0x00ff); |
codeman | 77:cd59ac40b3be | 231 | writeData((color & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 232 | } |
codeman | 77:cd59ac40b3be | 233 | void ezLCD4::cls( void ) |
codeman | 77:cd59ac40b3be | 234 | { |
codeman | 77:cd59ac40b3be | 235 | writeData(CLS); |
codeman | 77:cd59ac40b3be | 236 | } |
codeman | 77:cd59ac40b3be | 237 | |
codeman | 77:cd59ac40b3be | 238 | void ezLCD4::cls( uint16_t color) |
codeman | 77:cd59ac40b3be | 239 | { |
codeman | 77:cd59ac40b3be | 240 | writeData(SET_COLORH); |
codeman | 77:cd59ac40b3be | 241 | send16LSB( color ); |
codeman | 77:cd59ac40b3be | 242 | writeData(CLS); |
codeman | 77:cd59ac40b3be | 243 | } |
codeman | 77:cd59ac40b3be | 244 | void ezLCD4::setXY( uint16_t x, uint16_t y) |
codeman | 77:cd59ac40b3be | 245 | { |
codeman | 77:cd59ac40b3be | 246 | writeData(SET_XHY); |
codeman | 77:cd59ac40b3be | 247 | send16MSB( x ); |
codeman | 77:cd59ac40b3be | 248 | if(ExtendedMode == false) |
codeman | 77:cd59ac40b3be | 249 | writeData(y & 0x00ff); |
codeman | 77:cd59ac40b3be | 250 | else |
codeman | 77:cd59ac40b3be | 251 | send16MSB( y ); |
codeman | 77:cd59ac40b3be | 252 | } |
codeman | 77:cd59ac40b3be | 253 | void ezLCD4::printString( char *str ) |
codeman | 77:cd59ac40b3be | 254 | { |
codeman | 77:cd59ac40b3be | 255 | writeData(PRINT_STRING); |
codeman | 77:cd59ac40b3be | 256 | while( (char) *str ) |
codeman | 77:cd59ac40b3be | 257 | writeData((char) *str++); |
codeman | 77:cd59ac40b3be | 258 | writeData(0x00); |
codeman | 77:cd59ac40b3be | 259 | } |
codeman | 77:cd59ac40b3be | 260 | void ezLCD4::textDirection( uint8_t dir ) |
codeman | 77:cd59ac40b3be | 261 | { |
codeman | 77:cd59ac40b3be | 262 | writeData( dir ); |
codeman | 77:cd59ac40b3be | 263 | } |
codeman | 77:cd59ac40b3be | 264 | |
codeman | 77:cd59ac40b3be | 265 | void ezLCD4::printString( uint16_t x, uint16_t y, uint8_t font, uint16_t color, char *str , uint8_t dir, uint8_t efx, uint16_t ocolor) |
codeman | 77:cd59ac40b3be | 266 | { |
codeman | 77:cd59ac40b3be | 267 | writeData( dir ); |
codeman | 77:cd59ac40b3be | 268 | writeData(SELECT_FONT); |
codeman | 77:cd59ac40b3be | 269 | writeData(font); |
codeman | 77:cd59ac40b3be | 270 | if(efx==OUTLINE) |
codeman | 77:cd59ac40b3be | 271 | { |
codeman | 77:cd59ac40b3be | 272 | setXY(x-1,y); |
codeman | 77:cd59ac40b3be | 273 | setColor(ocolor); |
codeman | 77:cd59ac40b3be | 274 | printString(str); |
codeman | 77:cd59ac40b3be | 275 | |
codeman | 77:cd59ac40b3be | 276 | setXY(x+1,y); |
codeman | 77:cd59ac40b3be | 277 | setColor(ocolor); |
codeman | 77:cd59ac40b3be | 278 | printString(str); |
codeman | 77:cd59ac40b3be | 279 | |
codeman | 77:cd59ac40b3be | 280 | setXY(x,y-1); |
codeman | 77:cd59ac40b3be | 281 | setColor(ocolor); |
codeman | 77:cd59ac40b3be | 282 | printString(str); |
codeman | 77:cd59ac40b3be | 283 | |
codeman | 77:cd59ac40b3be | 284 | setXY(x,y+1); |
codeman | 77:cd59ac40b3be | 285 | setColor(ocolor); |
codeman | 77:cd59ac40b3be | 286 | printString(str); |
codeman | 77:cd59ac40b3be | 287 | } |
codeman | 77:cd59ac40b3be | 288 | if(efx==SHADOW) |
codeman | 77:cd59ac40b3be | 289 | { |
codeman | 77:cd59ac40b3be | 290 | setXY(x+1,y+1); |
codeman | 77:cd59ac40b3be | 291 | setColor(ocolor); |
codeman | 77:cd59ac40b3be | 292 | printString(str); |
codeman | 77:cd59ac40b3be | 293 | } |
codeman | 77:cd59ac40b3be | 294 | |
codeman | 77:cd59ac40b3be | 295 | setXY(x,y); |
codeman | 77:cd59ac40b3be | 296 | setColor(color); |
codeman | 77:cd59ac40b3be | 297 | printString(str); |
codeman | 77:cd59ac40b3be | 298 | } |
codeman | 77:cd59ac40b3be | 299 | void ezLCD4::setFont( uint8_t font ) |
codeman | 77:cd59ac40b3be | 300 | { |
codeman | 77:cd59ac40b3be | 301 | writeData(SELECT_FONT); |
codeman | 77:cd59ac40b3be | 302 | writeData(font); |
codeman | 77:cd59ac40b3be | 303 | } |
codeman | 77:cd59ac40b3be | 304 | |
codeman | 77:cd59ac40b3be | 305 | void ezLCD4::lineTo( uint16_t x , uint16_t y ) |
codeman | 77:cd59ac40b3be | 306 | { |
codeman | 77:cd59ac40b3be | 307 | writeData( LINE_TO_XHY ) ; |
codeman | 77:cd59ac40b3be | 308 | send16MSB( x ); |
codeman | 77:cd59ac40b3be | 309 | if(ExtendedMode == false) |
codeman | 77:cd59ac40b3be | 310 | writeData(y & 0x00ff); |
codeman | 77:cd59ac40b3be | 311 | else |
codeman | 77:cd59ac40b3be | 312 | send16MSB( y ); |
codeman | 77:cd59ac40b3be | 313 | } |
codeman | 77:cd59ac40b3be | 314 | void ezLCD4::vLine( uint8_t y) |
codeman | 77:cd59ac40b3be | 315 | { |
codeman | 77:cd59ac40b3be | 316 | writeData(V_LINE); |
codeman | 77:cd59ac40b3be | 317 | writeData(y ); |
codeman | 77:cd59ac40b3be | 318 | } |
codeman | 77:cd59ac40b3be | 319 | void ezLCD4::hLine( uint8_t x) |
codeman | 77:cd59ac40b3be | 320 | { |
codeman | 77:cd59ac40b3be | 321 | writeData(H_LINE); |
codeman | 77:cd59ac40b3be | 322 | writeData( x ); |
codeman | 77:cd59ac40b3be | 323 | } |
codeman | 77:cd59ac40b3be | 324 | |
codeman | 77:cd59ac40b3be | 325 | void ezLCD4::hLineH( uint16_t x) |
codeman | 77:cd59ac40b3be | 326 | { |
codeman | 77:cd59ac40b3be | 327 | writeData(H_LINEH); |
codeman | 77:cd59ac40b3be | 328 | send16MSB( x ); |
codeman | 77:cd59ac40b3be | 329 | |
codeman | 77:cd59ac40b3be | 330 | } |
codeman | 77:cd59ac40b3be | 331 | void ezLCD4::arc(uint16_t radius, uint16_t begin, uint16_t end) |
codeman | 77:cd59ac40b3be | 332 | { |
codeman | 77:cd59ac40b3be | 333 | writeData(ARCH); |
codeman | 77:cd59ac40b3be | 334 | |
codeman | 77:cd59ac40b3be | 335 | writeData((radius & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 336 | writeData(radius & 0x00ff); |
codeman | 77:cd59ac40b3be | 337 | begin *=2048/45; |
codeman | 77:cd59ac40b3be | 338 | writeData((begin & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 339 | writeData(begin & 0x00ff); |
codeman | 77:cd59ac40b3be | 340 | end *=2048/45; |
codeman | 77:cd59ac40b3be | 341 | writeData((end & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 342 | writeData(end & 0x00ff); |
codeman | 77:cd59ac40b3be | 343 | } |
codeman | 77:cd59ac40b3be | 344 | void ezLCD4::box( uint16_t x, uint16_t y) |
codeman | 77:cd59ac40b3be | 345 | { |
codeman | 77:cd59ac40b3be | 346 | writeData(BOXH); |
codeman | 77:cd59ac40b3be | 347 | send16MSB( x ); |
codeman | 77:cd59ac40b3be | 348 | if(ExtendedMode == false) |
codeman | 77:cd59ac40b3be | 349 | writeData( y & 0x00ff ); |
codeman | 77:cd59ac40b3be | 350 | else |
codeman | 77:cd59ac40b3be | 351 | send16MSB( y ); |
codeman | 77:cd59ac40b3be | 352 | |
codeman | 77:cd59ac40b3be | 353 | } |
codeman | 77:cd59ac40b3be | 354 | void ezLCD4::boxFill( uint16_t x, uint16_t y) |
codeman | 77:cd59ac40b3be | 355 | { |
codeman | 77:cd59ac40b3be | 356 | |
codeman | 77:cd59ac40b3be | 357 | writeData(BOXH_FILL); |
codeman | 77:cd59ac40b3be | 358 | send16MSB( x ); |
codeman | 77:cd59ac40b3be | 359 | if(ExtendedMode == false) |
codeman | 77:cd59ac40b3be | 360 | writeData( y & 0x00ff ); |
codeman | 77:cd59ac40b3be | 361 | else |
codeman | 77:cd59ac40b3be | 362 | send16MSB( y); |
codeman | 77:cd59ac40b3be | 363 | } |
codeman | 77:cd59ac40b3be | 364 | void ezLCD4::createTextBox( uint16_t x , uint16_t y, uint16_t w, uint16_t h, uint16_t bcolor, uint16_t fcolor, uint16_t tcolor, uint16_t fsize, uint8_t font, char *str) |
codeman | 77:cd59ac40b3be | 365 | { |
codeman | 77:cd59ac40b3be | 366 | setXY(x, y); |
codeman | 77:cd59ac40b3be | 367 | setColor(bcolor); |
codeman | 77:cd59ac40b3be | 368 | //boxFill(w,h); |
codeman | 77:cd59ac40b3be | 369 | setXY(x,y); |
codeman | 77:cd59ac40b3be | 370 | setColor(fcolor); |
codeman | 77:cd59ac40b3be | 371 | box(w,h); |
codeman | 77:cd59ac40b3be | 372 | setFont(font); |
codeman | 77:cd59ac40b3be | 373 | printString( x, y, font, tcolor, str , FONT_NORTH , false, 0); |
codeman | 77:cd59ac40b3be | 374 | } |
codeman | 77:cd59ac40b3be | 375 | |
codeman | 77:cd59ac40b3be | 376 | void ezLCD4::buttonsDeleteAll( void ) |
codeman | 77:cd59ac40b3be | 377 | { |
codeman | 77:cd59ac40b3be | 378 | writeData( ERASE_ALL_BUTTONS ); |
codeman | 77:cd59ac40b3be | 379 | } |
codeman | 77:cd59ac40b3be | 380 | |
codeman | 77:cd59ac40b3be | 381 | // #define BUTTON_DEF 0xB0 |
codeman | 77:cd59ac40b3be | 382 | // 1: ID |
codeman | 77:cd59ac40b3be | 383 | // 2: State 0: None, 1: UP, 2: DN, 3: Disabled, 4: Non-Visible |
codeman | 77:cd59ac40b3be | 384 | // 3: IconUP |
codeman | 77:cd59ac40b3be | 385 | // 4: IconDN |
codeman | 77:cd59ac40b3be | 386 | // 5: IconDis |
codeman | 77:cd59ac40b3be | 387 | // 6: x0 MSB |
codeman | 77:cd59ac40b3be | 388 | // 7: x0 LSB |
codeman | 77:cd59ac40b3be | 389 | // 8: y0 |
codeman | 77:cd59ac40b3be | 390 | // 9: Width |
codeman | 77:cd59ac40b3be | 391 | //10: Height |
codeman | 77:cd59ac40b3be | 392 | uint8_t ezLCD4::createButton( uint8_t ID, uint8_t State, uint8_t IconUp, uint8_t IconDn, uint8_t IconDis, uint16_t X, uint16_t Y, uint16_t W, uint16_t H, uint8_t Callback) |
codeman | 77:cd59ac40b3be | 393 | { |
codeman | 77:cd59ac40b3be | 394 | writeData(BUTTON_DEF); |
codeman | 77:cd59ac40b3be | 395 | writeData(ID); |
codeman | 77:cd59ac40b3be | 396 | writeData(State); |
codeman | 77:cd59ac40b3be | 397 | writeData(IconUp); |
codeman | 77:cd59ac40b3be | 398 | writeData(IconDn); |
codeman | 77:cd59ac40b3be | 399 | writeData(IconDis); |
codeman | 77:cd59ac40b3be | 400 | send16MSB( X ); |
codeman | 77:cd59ac40b3be | 401 | if(ExtendedMode == false) |
codeman | 77:cd59ac40b3be | 402 | writeData( Y & 0x00ff ); |
codeman | 77:cd59ac40b3be | 403 | else |
codeman | 77:cd59ac40b3be | 404 | send16MSB( Y ); |
codeman | 77:cd59ac40b3be | 405 | writeData( W ); |
codeman | 77:cd59ac40b3be | 406 | writeData( H ); |
codeman | 77:cd59ac40b3be | 407 | return true; |
codeman | 77:cd59ac40b3be | 408 | } |
codeman | 77:cd59ac40b3be | 409 | void ezLCD4::buttonState( uint8_t ID, uint8_t state ) |
codeman | 77:cd59ac40b3be | 410 | { |
codeman | 77:cd59ac40b3be | 411 | writeData( BUTTON_STATE ); |
codeman | 77:cd59ac40b3be | 412 | writeData( ID ); |
codeman | 77:cd59ac40b3be | 413 | writeData( state ); |
codeman | 77:cd59ac40b3be | 414 | } |
codeman | 77:cd59ac40b3be | 415 | |
codeman | 77:cd59ac40b3be | 416 | void ezLCD4::send16MSB( uint16_t val ) |
codeman | 77:cd59ac40b3be | 417 | { |
codeman | 77:cd59ac40b3be | 418 | writeData(( val & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 419 | writeData( val & 0x00ff); |
codeman | 77:cd59ac40b3be | 420 | } |
codeman | 77:cd59ac40b3be | 421 | void ezLCD4::send16LSB( uint16_t val ) |
codeman | 77:cd59ac40b3be | 422 | { |
codeman | 77:cd59ac40b3be | 423 | writeData( val & 0x00ff); |
codeman | 77:cd59ac40b3be | 424 | writeData(( val & 0xff00) >>8); |
codeman | 77:cd59ac40b3be | 425 | } |
codeman | 77:cd59ac40b3be | 426 | uint8_t ezLCD4::ping( uint16_t timeout ) |
codeman | 77:cd59ac40b3be | 427 | { |
codeman | 77:cd59ac40b3be | 428 | timer.reset(); |
codeman | 77:cd59ac40b3be | 429 | writeData(PING); |
codeman | 77:cd59ac40b3be | 430 | timer.start(); |
codeman | 77:cd59ac40b3be | 431 | while(timer.read_ms() < timeout) { |
codeman | 77:cd59ac40b3be | 432 | if( pollTouch(1, 0x00) == 0x38) |
codeman | 77:cd59ac40b3be | 433 | return true; |
codeman | 77:cd59ac40b3be | 434 | } |
codeman | 77:cd59ac40b3be | 435 | timer.stop(); |
codeman | 77:cd59ac40b3be | 436 | return timedOut; |
codeman | 77:cd59ac40b3be | 437 | |
codeman | 77:cd59ac40b3be | 438 | } |
codeman | 77:cd59ac40b3be | 439 | |
codeman | 77:cd59ac40b3be | 440 | |
codeman | 77:cd59ac40b3be | 441 | |
codeman | 77:cd59ac40b3be | 442 | uint8_t ezLCD4::pollTouch( uint8_t count, uint8_t cmd ) |
codeman | 77:cd59ac40b3be | 443 | { |
codeman | 77:cd59ac40b3be | 444 | uint8_t c; |
codeman | 77:cd59ac40b3be | 445 | c = 0x00; |
codeman | 77:cd59ac40b3be | 446 | if(interface == SPI_IF) { |
codeman | 77:cd59ac40b3be | 447 | nss=0; |
codeman | 77:cd59ac40b3be | 448 | for(uint8_t i=0; i< count; i++) |
codeman | 77:cd59ac40b3be | 449 | c=device.write(cmd); |
codeman | 77:cd59ac40b3be | 450 | nss=1; |
codeman | 77:cd59ac40b3be | 451 | } |
codeman | 77:cd59ac40b3be | 452 | return c; |
codeman | 77:cd59ac40b3be | 453 | } |
codeman | 77:cd59ac40b3be | 454 | |
codeman | 77:cd59ac40b3be | 455 | uint8_t ezLCD4::writeData(uint8_t c) |
codeman | 77:cd59ac40b3be | 456 | { |
codeman | 77:cd59ac40b3be | 457 | if(interface == SERIAL_IF) |
codeman | 77:cd59ac40b3be | 458 | _ser.putc(c); |
codeman | 77:cd59ac40b3be | 459 | if(interface == SPI_IF) { |
codeman | 77:cd59ac40b3be | 460 | nss=0; |
codeman | 77:cd59ac40b3be | 461 | device.write(c); |
codeman | 77:cd59ac40b3be | 462 | nss=1; |
codeman | 77:cd59ac40b3be | 463 | |
codeman | 77:cd59ac40b3be | 464 | } |
codeman | 77:cd59ac40b3be | 465 | } |
codeman | 77:cd59ac40b3be | 466 | |
codeman | 77:cd59ac40b3be | 467 | int ezLCD4::_putc( int c) |
codeman | 77:cd59ac40b3be | 468 | { |
codeman | 77:cd59ac40b3be | 469 | |
codeman | 77:cd59ac40b3be | 470 | return (c); |
codeman | 77:cd59ac40b3be | 471 | } |
codeman | 77:cd59ac40b3be | 472 | |
codeman | 77:cd59ac40b3be | 473 | int ezLCD4::_getc(void) |
codeman | 77:cd59ac40b3be | 474 | { |
codeman | 77:cd59ac40b3be | 475 | char r = 0; |
codeman | 77:cd59ac40b3be | 476 | return(r); |
codeman | 77:cd59ac40b3be | 477 | } |