Just tweeked orientation and contrast values
Fork of NokiaLCD by
Diff: NokiaLCD.cpp
- Revision:
- 1:8f005b0dcfa7
- Parent:
- 0:ff874f85ed33
- Child:
- 3:51cb48ebad3e
--- a/NokiaLCD.cpp Wed Jun 09 08:02:04 2010 +0000 +++ b/NokiaLCD.cpp Fri Nov 19 22:07:46 2010 +0000 @@ -312,8 +312,26 @@ void NokiaLCD::fill(int x, int y, int width, int height, int colour) { _cs = 0; _window(x, y, width, height); - for (int i=0; i<width*height; i++) { - _putp(colour); + switch (_type) { + case LCD6100: + case PCF8833: + for (int i=0; i<width*height; i++) { + _putp(colour); + } + break; + case LCD6610: + for (int i=0; i<width*height/2; i++) { + int r4 = (colour >> (16 + 4)) & 0xF; + int g4 = (colour >> (8 + 4)) & 0xF; + int b4 = (colour >> (0 + 4)) & 0xF; + int d1 = (r4 << 4) | g4; + int d2 = (b4 << 4) | r4; + int d3 = (g4 << 4) | b4; + data(d1); + data(d2); + data(d3); + } + break; } _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT); _cs = 1; @@ -322,9 +340,32 @@ void NokiaLCD::blit(int x, int y, int width, int height, const int* colour) { _cs = 0; _window(x, y, width, height); - for (int i=0; i<width*height; i++) { - _putp(colour[i]); - } + + switch (_type) { + case LCD6100: + case PCF8833: + for (int i=0; i<width*height; i++) { + _putp(colour[i]); + } + break; + case LCD6610: + for (int i=0; i<width*height/2; i++) { + int r41 = (colour[i*2] >> (16 + 4)) & 0xF; + int g41 = (colour[i*2] >> (8 + 4)) & 0xF; + int b41 = (colour[i*2] >> (0 + 4)) & 0xF; + + int r42 = (colour[i*2+1] >> (16 + 4)) & 0xF; + int g42 = (colour[i*2+1] >> (8 + 4)) & 0xF; + int b42 = (colour[i*2+1] >> (0 + 4)) & 0xF; + int d1 = (r41 << 4) | g41; + int d2 = (b41 << 4) | r42; + int d3 = (g42 << 4) | b42; + data(d1); + data(d2); + data(d3); + } + break; + } _window(0, 0, NOKIALCD_WIDTH, NOKIALCD_HEIGHT); _cs = 1; } @@ -332,12 +373,42 @@ void NokiaLCD::bitblit(int x, int y, int width, int height, const char* bitstream) { _cs = 0; _window(x, y, width, height); - for (int i=0; i<height*width; i++) { - int byte = i / 8; - int bit = i % 8; - int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background; - _putp(colour); - } + + switch (_type) { + case LCD6100: + case PCF8833: + for (int i=0; i<height*width; i++) { + int byte = i / 8; + int bit = i % 8; + int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background; + _putp(colour); + } + break; + case LCD6610: + for(int i=0; i<height*width/2; i++) { + int byte1 = (i*2) / 8; + int bit1 = (i*2) % 8; + int colour1 = ((bitstream[byte1] << bit1) & 0x80) ? _foreground : _background; + int byte2 = (i*2+1) / 8; + int bit2 = (i*2+1) % 8; + int colour2 = ((bitstream[byte2] << bit2) & 0x80) ? _foreground : _background; + + int r41 = (colour1 >> (16 + 4)) & 0xF; + int g41 = (colour1 >> (8 + 4)) & 0xF; + int b41 = (colour1 >> (0 + 4)) & 0xF; + + int r42 = (colour2 >> (16 + 4)) & 0xF; + int g42 = (colour2 >> (8 + 4)) & 0xF; + int b42 = (colour2 >> (0 + 4)) & 0xF; + int d1 = (r41 << 4) | g41; + int d2 = (b41 << 4) | r42; + int d3 = (g42 << 4) | b42; + data(d1); + data(d2); + data(d3); + } + break; + } _window(0, 0, _width, _height); _cs = 1; }