summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrwastl <mrwastl@users.sourceforge.net>2011-05-28 13:23:09 +0200
committermrwastl <mrwastl@users.sourceforge.net>2011-05-28 13:23:09 +0200
commit9adb8f879bcad24978b4ac4d96920dc8727c17a0 (patch)
treee1e1790d0c6da0f61de72f986d1710467b3942e0
parent219dd7dd5d52d07032b4129a96499c7cbe7a4ab3 (diff)
downloadgraphlcd-base-9adb8f879bcad24978b4ac4d96920dc8727c17a0.tar.gz
graphlcd-base-9adb8f879bcad24978b4ac4d96920dc8727c17a0.tar.bz2
added generic Set8Pixels() to base class cDriver; serdisp-driver: class members fg/bg_colours now uint32_t, better adaption to new cColor-scheme, use Set8Pixels() from base class
-rw-r--r--glcddrivers/driver.c17
-rw-r--r--glcddrivers/driver.h2
-rw-r--r--glcddrivers/serdisp.c34
-rw-r--r--glcddrivers/serdisp.h6
4 files changed, 37 insertions, 22 deletions
diff --git a/glcddrivers/driver.c b/glcddrivers/driver.c
index 056f8bc..2a823d7 100644
--- a/glcddrivers/driver.c
+++ b/glcddrivers/driver.c
@@ -65,4 +65,21 @@ void cDriver::SetScreen(const uint32_t * data, int wid, int hgt)
*/
}
+void cDriver::Set8Pixels(int x, int y, unsigned char data)
+{
+ int n;
+ // calling GetForegroundColor() and GetBackgroundColor() is slow in some situations.
+ // will be replaced through setting object-wide (incl. derived objs) class members
+ uint32_t fg = GetForegroundColor();
+ uint32_t bg = GetBackgroundColor();
+
+ // guarante that x starts at a position divisible by 8
+ x &= 0xFFF8;
+
+ for (n = 0; n < 8; ++n) {
+ SetPixel(x + n, y, (data & (0x80 >> n)) ? fg : bg);
+ }
+}
+
+
} // end of namespace
diff --git a/glcddrivers/driver.h b/glcddrivers/driver.h
index babb71a..c235459 100644
--- a/glcddrivers/driver.h
+++ b/glcddrivers/driver.h
@@ -58,7 +58,7 @@ public:
virtual void Clear() {}
virtual void SetPixel(int x, int y, uint32_t data) {}
- virtual void Set8Pixels(int x, int y, unsigned char data) {}
+ virtual void Set8Pixels(int x, int y, unsigned char data);
// virtual void SetScreen(const unsigned char * data, int width, int height, int lineSize);
virtual void SetScreen(const uint32_t *data, int width, int height);
virtual void Refresh(bool refreshAll = false) {}
diff --git a/glcddrivers/serdisp.c b/glcddrivers/serdisp.c
index 2b46a8a..9c667dc 100644
--- a/glcddrivers/serdisp.c
+++ b/glcddrivers/serdisp.c
@@ -32,9 +32,6 @@
#define FEATURE_BACKLIGHT 0x03
#define FEATURE_ROTATE 0x04
-#define SD_COL_BLACK 0xFF000000
-#define SD_COL_WHITE 0xFFFFFFFF
-
// taken from serdisp_gpevents.h
#define SDGPT_SIMPLETOUCH 0x10 /* simple touch screen event, type: SDGP_evpkt_simpletouch_t */
@@ -89,8 +86,8 @@ int cDriverSerDisp::Init(void)
/* pre-init some flags, function pointers, ... */
supports_options = 0;
- fg_colour = 1;
- bg_colour = -1;
+ fg_colour = GLCD::cColor::Black; /* set foreground colour to black */
+ bg_colour = GLCD::cColor::ERRCOL;
// get serdisp version
fp_serdisp_getversioncode = (long int (*)()) dlsym(sdhnd, "serdisp_getversioncode");
@@ -123,7 +120,6 @@ int cDriverSerDisp::Init(void)
config->name.c_str(), "serdisp_setcolour", errmsg);
return -1;
}
- fg_colour = SD_COL_BLACK; /* set foreground colour to black */
if (serdisp_version >= SERDISP_VERSION(1,96) ) {
supports_options = 1;
@@ -236,12 +232,12 @@ int cDriverSerDisp::Init(void)
} else if (config->options[i].name == "Wiring") {
wiringstring = config->options[i].value;
} else if (config->options[i].name == "FGColour") {
- fg_colour = strtoul(config->options[i].value.c_str(), (char **)NULL, 0);
- fg_colour |= 0xFF000000L; /* force alpha to 0xFF */
+ fg_colour = (uint32_t)strtoul(config->options[i].value.c_str(), (char **)NULL, 0);
+ fg_colour |= 0xFF000000; /* force alpha to 0xFF */
fg_forced = 1;
} else if (config->options[i].name == "BGColour") {
- bg_colour = strtoul(config->options[i].value.c_str(), (char **)NULL, 0);
- bg_colour |= 0xFF000000L; /* force alpha to 0xFF */
+ bg_colour = (uint32_t)strtoul(config->options[i].value.c_str(), (char **)NULL, 0);
+ bg_colour |= 0xFF000000; /* force alpha to 0xFF */
bg_forced = 1;
}
}
@@ -301,9 +297,9 @@ int cDriverSerDisp::Init(void)
// self-emitting displays (like OLEDs): default background colour => black
if ( supports_options && fp_serdisp_isoption(dd, "SELFEMITTING") && (fp_serdisp_getoption(dd, "SELFEMITTING", 0)) ) {
if (!bg_forced)
- bg_colour = SD_COL_BLACK; /* set background colour to black */
+ bg_colour = GLCD::cColor::Black; /* set background colour to black */
if (!fg_forced)
- fg_colour = SD_COL_WHITE; /* set foreground colour to white */
+ fg_colour = GLCD::cColor::White; /* set foreground colour to white */
}
width = config->width;
@@ -432,16 +428,17 @@ int cDriverSerDisp::CheckSetup()
void cDriverSerDisp::Clear(void)
{
- if (bg_colour == -1)
+ if (bg_colour == GLCD::cColor::ERRCOL) // bg_colour not set
fp_serdisp_clearbuffer(dd);
else { /* if bg_colour is set, draw background 'by hand' */
int x,y;
for (y = 0; y < fp_serdisp_getheight(dd); y++)
for (x = 0; x < fp_serdisp_getwidth(dd); x++)
- fp_serdisp_setcolour(dd, x, y, bg_colour);
+ fp_serdisp_setcolour(dd, x, y, (long)bg_colour);
}
}
+#if 0
void cDriverSerDisp::Set8Pixels(int x, int y, unsigned char data) {
int i, start, pixel;
@@ -452,16 +449,17 @@ void cDriverSerDisp::Set8Pixels(int x, int y, unsigned char data) {
for (i = 0; i < 8; i++) {
pixel = data & (1 << i);
if (pixel) {
- SetPixel(start + i, y, fg_colour);
- } else if (!pixel && bg_colour != -1) { /* if bg_colour is set: use it if pixel is not set */
- SetPixel(start + i, y, bg_colour);
+ SetPixel(start + i, y, (long)fg_colour);
+ } else if (!pixel && bg_colour != GLCD::cColor::ERRCOL) { /* if bg_colour is set: use it if pixel is not set */
+ SetPixel(start + i, y, (long)bg_colour);
}
}
}
+#endif
void cDriverSerDisp::SetPixel(int x, int y, uint32_t data)
{
- fp_serdisp_setcolour(dd, x, y, data);
+ fp_serdisp_setcolour(dd, x, y, (long)data);
}
#if 0
diff --git a/glcddrivers/serdisp.h b/glcddrivers/serdisp.h
index b748083..2300357 100644
--- a/glcddrivers/serdisp.h
+++ b/glcddrivers/serdisp.h
@@ -65,8 +65,8 @@ private:
long serdisp_version;
int supports_options;
- long fg_colour;
- long bg_colour;
+ uint32_t fg_colour;
+ uint32_t bg_colour;
void* sdhnd; // serdisplib handle
void* dd; // display descriptor
@@ -113,7 +113,7 @@ public:
virtual void Clear();
virtual void SetPixel(int x, int y, uint32_t data);
- virtual void Set8Pixels(int x, int y, unsigned char data);
+ //virtual void Set8Pixels(int x, int y, unsigned char data);
#if 0
virtual void SetScreen(const unsigned char * data, int width, int height, int lineSize);
#endif