Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of NokiaLCD by
Diff: NokiaLCD.cpp
- Revision:
- 1:8f005b0dcfa7
- Parent:
- 0:ff874f85ed33
- Child:
- 3:ea0c085881f3
--- 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;
}
