fix for ILI9325
Fork of TFTLCD by
Diff: ssd1289.cpp
- Revision:
- 4:3ac4239f6c9c
- Parent:
- 3:64a5b67d5b51
- Child:
- 10:69571adcfad5
--- a/ssd1289.cpp Sun Dec 02 01:44:23 2012 +0000 +++ b/ssd1289.cpp Sun Dec 02 05:44:52 2012 +0000 @@ -22,21 +22,17 @@ #include "ssd1289.h" #include "helpers.h" -SSD1289LCD::SSD1289LCD( PinName CS, PinName RESET, PinName RS, PinName WR, BusOut* DATA_PORT, PinName RD ) - : LCD( 240, 320, CS, RS ), _lcd_pin_reset( RESET ), _lcd_pin_wr( WR ) +SSD1289_LCD::SSD1289_LCD( PinName CS, PinName RESET, PinName RS, PinName WR, BusOut* DATA_PORT, PinName BL, PinName RD ) + : LCD( 240, 320, CS, RS, RESET ), _lcd_pin_wr( WR ) { _lcd_port = DATA_PORT; - if ( RD != NC ) - _lcd_pin_rd = new DigitalOut( RD ); - else - _lcd_pin_rd = 0; - - SetForeground(); - SetBackground(); - _font.font = 0; + if ( BL != NC ) _lcd_pin_bl = new DigitalOut( BL ); + else _lcd_pin_bl = 0; + if ( RD != NC ) _lcd_pin_rd = new DigitalOut( RD ); + else _lcd_pin_rd = 0; } -void SSD1289LCD::Initialize( orientation_t orientation ) +void SSD1289_LCD::Initialize( orientation_t orientation ) { _orientation = orientation; @@ -46,12 +42,14 @@ wait_ms( 15 ); _lcd_pin_reset = HIGH; _lcd_pin_cs = HIGH; + if ( _lcd_pin_bl != 0 ) + *_lcd_pin_bl = HIGH; if ( _lcd_pin_rd != 0 ) *_lcd_pin_rd = HIGH; _lcd_pin_wr = HIGH; wait_ms( 15 ); - + Activate(); WriteCmdData( 0x00, 0x0001 ); wait_ms( 1 ); WriteCmdData( 0x03, 0xA8A4 ); wait_ms( 1 ); WriteCmdData( 0x0C, 0x0000 ); wait_ms( 1 ); @@ -94,27 +92,38 @@ WriteCmdData( 0x4f, 0x0000 ); wait_ms( 1 ); WriteCmdData( 0x4e, 0x0000 ); wait_ms( 1 ); WriteCmd( 0x22 ); + Deactivate(); } -void SSD1289LCD::WriteCmd( unsigned short cmd ) +void SSD1289_LCD::Sleep( void ) { - _lcd_pin_rs = LOW; - _lcd_pin_cs = LOW; - _lcd_port->write( cmd ); - pulseLow( _lcd_pin_wr ); - _lcd_pin_cs = HIGH; + // TODO: figure out if the SSD1289 controller has sleep and wakeup commands + if ( _lcd_pin_bl != 0 ) + *_lcd_pin_bl = LOW; } -void SSD1289LCD::WriteData( unsigned short data ) +void SSD1289_LCD::WakeUp( void ) +{ + // TODO: figure out if the SSD1289 controller has sleep and wakeup commands + if ( _lcd_pin_bl != 0 ) + *_lcd_pin_bl = HIGH; +} + +void SSD1289_LCD::WriteCmd( unsigned short cmd ) +{ + _lcd_pin_rs = LOW; + _lcd_port->write( cmd ); + pulseLow( _lcd_pin_wr ); +} + +void SSD1289_LCD::WriteData( unsigned short data ) { _lcd_pin_rs = HIGH; - _lcd_pin_cs = LOW; _lcd_port->write( data ); pulseLow( _lcd_pin_wr ); - _lcd_pin_cs = HIGH; } -void SSD1289LCD::SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 ) +void SSD1289_LCD::SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 ) { if ( _orientation == LANDSCAPE ) {