Refactor the flag display system draft

Fri, 13 Nov 2020 19:35:46 +0100

author
David Douard <david.douard@sdf3.org>
date
Fri, 13 Nov 2020 19:35:46 +0100
changeset 54
f6774bd0d570
parent 53
74e85b34d26b
child 55
694e5030b0e9

Refactor the flag display system

make it stateful

src/display.cpp file | annotate | diff | comparison | revisions
src/display.h file | annotate | diff | comparison | revisions
src/main.cpp file | annotate | diff | comparison | revisions
--- a/src/display.cpp	Thu Nov 12 20:26:35 2020 +0100
+++ b/src/display.cpp	Fri Nov 13 19:35:46 2020 +0100
@@ -4,11 +4,92 @@
 #include "display.h"
 
 
+static DSP table[] =
+{   // cmd,  fg, bg,  x0, y0,       fmt,  maxsize, width, font
+	{ 0x00, 0xF, 0x0,  0,  0, FMT_ASCII, MAX_BUFF, 255, Mono19x27}, // main display
+	{ 0x0C, 0xF, 0x0,194, 38, FMT_ASCII, 3,        45,  Mono15x22}, // channels display
+	{ 0x0A, 0xF, 0x0,  0, 57, FMT_FLAGS, 4,        0, Terminal6x8}, // flags + bits
+};
+
+// 9x10
+const unsigned char icon_alarm[] __attribute__((aligned (2))) =
+{
+		0x1c, 0x0,
+		0x3e, 0x0,
+		0x7f, 0x0,
+		0x7f, 0x0,
+		0x7f, 0x0,
+		0x7f, 0x0,
+		0x7f, 0x0,
+		0x7f, 0x0,
+		0xff, 0x80,
+		0x10, 0x0
+};
+
+const unsigned char icon_curve[] __attribute__((aligned (2))) =
+{
+		0x80, 0x0,
+		0x80, 0x0,
+		0x80, 0x80,
+		0x81, 0x0,
+		0x9e, 0x0,
+		0xa0, 0x0,
+		0xc0, 0x0,
+		0x80, 0x0,
+		0x80, 0x0,
+		0xff, 0x80
+};
+
+static const flags_map flags = {
+	// id    x0   y0  rev.   msg   icon
+    { 0x00, {246, 27, 0, 0, false, NULL, icon_alarm}},  // F1.0  01 00 00 00
+	{ 0x01, {246, 38, 0, 0, false, NULL, icon_curve}},  // F1.1  02 00 00 00
+    { 0x02, {192, 32, 240, 60, false, NULL, NULL}}, // F1.2  04 00 00 00 - Channel frame
+    { 0x03, {195, 29, 0, 0, false, "CHANNEL", NULL}},         // F1.3  08 00 00 00
+    { 0x1c, {0,  38,  0, 0, false, "MON", NULL}},             // F4.4  00 00 00 10
+    { 0x1b, {0,  47,  0, 0, false, "VIEW", NULL}},            // F4.3  00 00 00 08
+    { 0x1d, {0,  29,  0, 0, true,  "SCAN", NULL}},            // F4.5  00 00 00 20
+    { 0x1e, {0,  56,  0, 0, true,  "CONFIG", NULL}},          // F4.6  00 00 00 40
+    { 0x1a, {40,  56, 0, 0, false, "*", NULL}},               // F4.2  00 00 00 04
+    { 0x19, {50,  56, 0, 0, false, "ADRS", NULL}},            // F4.1  00 00 00 02
+    { 0x18, {80,  56, 0, 0, false, "RMT", NULL}},             // F4.0  00 00 00 01
+    { 0x17, {104, 56, 0, 0, true,  "ERROR", NULL}},            // F3.7  00 00 80 00
+    { 0x16, {86, 38, 0, 0, false, "EXT", NULL}},             // F3.6  00 00 40 00
+    { 0x15, {60, 38, 0, 0, false, "ONCE", NULL}},            // F3.5  00 00 20 00
+    { 0x13, {40, 38, 0, 0, false, "MEM", NULL}},             // F3.3  00 00 08 00
+    { 0x0c, {244, 47, 0, 0, false, "4W", NULL}},              // F2.4  00 10 00 00
+	{ 0x0d, {244, 56, 0, 0, false, "OC", NULL}},              // F2.5  00 20 00 00
+    { 0x12, {40,  47, 0, 0, false, "LAST", NULL}},            // F3.2  00 00 04 00
+    { 0x11, {66,  47, 0, 0, false, "MIN", NULL}},             // F3.1  00 00 02 00
+    { 0x10, {86,  47, 0, 0, false, "MAX", NULL}},             // F3.0  00 00 01 00
+    { 0x0f, {106, 47, 0, 0, false, "AVG", NULL}},             // F2.7  00 80 00 00
+    { 0x05, {152, 29, 0, 0, false, "Alarm", NULL}},           // F1.5  20 00 00 00
+    { 0x08, {152, 39, 0, 0, false, "H", NULL}},               // F1.6  40 00 00 00
+    { 0x07, {158, 39, 0, 0, false, "1", NULL}},               // F2.3  00 08 00 00
+    { 0x06, {164, 39, 0, 0, false, "2", NULL}},               // F2.0  00 01 00 00
+    { 0x04, {170, 39, 0, 0, false, "3", NULL}},               // F2.2  00 04 00 00
+    { 0x09, {176, 39, 0, 0, false, "4", NULL}},               // F2.1  00 02 00 00
+    { 0x0a, {182, 39, 0, 0, false, "L", NULL}},               // F1.4  00 10 00 00
+    { 0x0b, {149, 32, 190, 50, false, NULL, NULL}}, // F1.7 - alarm frame
+
+	{ 0x0e, {152, 56, 0, 0, true, "SHIFT", NULL}},   // not an actual command, managed by the front panel
+
+	{ 0x14, {0xFF, 0xFF, 0xFF, 0xFF, false, NULL, NULL}},   // not an actual command, for the sake of completeness
+	{ 0x1f, {0xFF, 0xFF, 0xFF, 0xFF, false, NULL, NULL}},   // not an actual command, for the sake of completeness
+
+};
+
+
 Display::Display(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC,
 				 const char* name)
 		: SSD1322(Hz, mosi, miso, sclk, CS, reset, DC, name)
 {
 	must_refresh = 0;
+	for (flags_map::const_iterator it=flags.cbegin(); it!=flags.cend(); ++it)
+	{
+		flags_status[it->first] = false;
+		flags_dim[it->first] = false;
+	}
 }
 
 Display::~Display()
@@ -37,9 +118,9 @@
 	copy_to_lcd();
 }
 
-void Display::dimm_char(uint8_t n)
+void Display::dim_char(uint8_t n)
 {
-	// dimm the char number of the currently displayed string of the main area;
+	// dim the char number of the currently displayed string of the main area;
 	// do this by printing a modifed version of the last displayed string
 	// but only alphanumeric chars should be counted (not the punctuation)
 	char c;
@@ -56,8 +137,6 @@
 			len = strlen(table[i].buffer);
 			if (n >= len)
 				break;  // nothing to do
-			//::printf("DIMM CHAR %d\n", n);
-			//::printf("  in (len=%d) '%s'\n", len, table[i].buffer);
 
 			for (j=0; (j<len); j++)
 			{
@@ -68,13 +147,11 @@
 					n++;
 				if (n == 0)
 				{
-					//::printf("  Found at pos %d char '%c'\n", j, c);
 					// found it
 					character(c);
 					break;
 				}
 				// otherwise, just advance the char_x
-				//::printf("  move %d for '%c' [%X]\n", , c, c);
 				char_width(c, true);
 				n--;
 			}
@@ -99,7 +176,7 @@
 	}
 	else if (cmd == 0x0D)
 	{ // dimm a character of the main area
-		dimm_char(intxt[0]);
+		dim_char(intxt[0]);
 	}
 	else
 	{
@@ -158,71 +235,25 @@
 						must_refresh = 1;
 					}
 				}
-				/*
-					if (table[i].fmt & FMT_HEX ) {
-					// hex
-					for (uint8_t j=0;; j++) {
-					if (txt[j] == 0x00)
-					break;
-					this->printf("%02X ", txt[j]);
-					}
-					for (uint8_t j=3*strlen(txt); j<table[i].maxsize; j++)
-					this->printf(" ");
-					}
-				*/
+
 				if (table[i].fmt & FMT_FLAGS )  // flag indicators
 				{
-					uint8_t nbyte;
-					uint8_t nbit;
-					uint16_t color;
-					// flags
-					for (uint8_t l=0; l<(sizeof(flags)/sizeof(flags[0])); ++l)
+					uint8_t id;
+					uint8_t c;
+					id = 0;
+					for (uint8_t nc=0; nc<4; nc++)
 					{
-						nbyte = flags[l].flag / 8;
-						nbit = flags[l].flag % 8;
-						if (flags[l].dimm)
-							color = fgcolor/4;
-						else
-							color = fgcolor;
-
-						if (intxt[nbyte] & (1 << nbit))
-						{  // draw the flag, possibly reversed fg/bg
-							foreground(flags[l].reverse ? bgcolor : color);
-							background(flags[l].reverse ? color : bgcolor);
-						}
-						else
-						{  // erase the flag
-							foreground(bgcolor);
-							background(bgcolor);
-						}
-						if (flags[l].msg != NULL)
-						{ // flag is a string
-							locate(flags[l].x, flags[l].y);
-							this->printf(flags[l].msg);}
-						else
-						{ // flag is an icon
-							Bitmap_s pic = {9, 10, 2, (char*) flags[l].icon};
-							Bitmap_BW(pic, flags[l].x, flags[l].y);
+						c = intxt[nc];
+						for (uint8_t nb=0; nb<8; nb++)
+						{
+							if (c & (0x01 << nb))
+								set_flag_status(id, true);
+							else
+								set_flag_status(id, false);
+							draw_flag(id);
+							id++;
 						}
 					}
-
-					// draw frames (Alarm and Channel)
-					for (uint8_t l=0; l<(sizeof(frames)/sizeof(frames[0])); ++l)
-					{
-						nbyte = frames[l].flag / 8;
-						nbit = frames[l].flag % 8;
-						if (intxt[nbyte] & (1 << nbit))
-							color = fgcolor/6;
-						else
-							color = bgcolor;
-						hline(frames[l].x0+1, frames[l].x0+3, frames[l].y0, color);
-						hline(frames[l].x1-3, frames[l].x1-1, frames[l].y0, color);
-						hline(frames[l].x0+1, frames[l].x1-1, frames[l].y1, color);
-
-						vline(frames[l].x0, frames[l].y0+1, frames[l].y1-1, color);
-						vline(frames[l].x1, frames[l].y0+1, frames[l].y1-1, color);
-					}
-					must_refresh = 1; //|= zones[m].flag;
 				}
 
 				for(uint8_t j=0; j<table[i].maxsize; j++)
@@ -231,110 +262,86 @@
 			}
 		}
 		pixel_buffer_mutex.unlock();
-
-		//free(txt);
-		//this->copy_to_lcd();
 	}
 }
 
 
-void Display::set_flag(uint8_t flag, bool show, bool dimm)
+void Display::set_flag_status(uint8_t flagid, bool show)
+{
+	flags_status[flagid] = show;
+}
+
+void Display::set_flag_dim(uint8_t flagid, bool dim)
+{
+	flags_dim[flagid] = dim;
+}
+
+void Display::draw_flag(uint8_t flagid)
 {
 	uint8_t i;
 	uint8_t bgcolor = 0x00, fgcolor = 0x0F;
 
-	if (dimm)
-		fgcolor = fgcolor / 4;
+	::printf("  FLAG %X:", flagid);
+	const FLAG flag = flags.at(flagid);  // can't use the [] operator on a const map...
+	if (flag.msg != NULL)
+		::printf("%s ", flag.msg);
+	else if (flag.icon != NULL)
+		::printf("ICN ");
+	else if (flag.x0 > 0)
+		::printf("FR[%dx%d] ", flag.x0, flag.y0);
+	else
+		::printf("  WTF? ");
 
-	for (uint8_t l=0; l<(sizeof(flags)/sizeof(flags[0])); ++l)
+	if (flags_status[flagid])
 	{
-		if (flag == flags[l].flag)
-		{
-			set_font((unsigned char*)Terminal6x8);
-			::printf("  %s flag %x %s\n", show ? "show": "hide", flag, dimm ? "dimmed":"bright");
-			if (show)
-			{
-				foreground(flags[l].reverse ? bgcolor : fgcolor);
-				background(flags[l].reverse ? fgcolor : bgcolor);
-			}
-			else
-			{
-				foreground(bgcolor);
-				background(bgcolor);
-			}
-			if (flags[l].msg != NULL)
-			{ // flag is a string
-				locate(flags[l].x, flags[l].y);
-				::printf("Move cursor at %dx%d\n", flags[l].x, flags[l].y);
-				::printf("  using fgcolor=%x\n", fgcolor);
-				this->printf(flags[l].msg);}
-			else
-			{ // flag is an icon
-				Bitmap_s pic = {9, 10, 2, (char*) flags[l].icon};
-				Bitmap_BW(pic, flags[l].x, flags[l].y);
-			}
-		}
+		if (flags_dim[flagid])
+			::printf("  DIM\n");
+		else
+			::printf("  ON\n");
+	}
+	else
+		::printf("  OFF\n");
+
+	if ((flag.msg == NULL) && (flag.icon == NULL) && (flag.x0 == 0xFF) && (flag.y0 == 0xFF))
+		// noop command
+		return;
+
+	if (flags_dim[flagid])
+		fgcolor = fgcolor / 4;
+	else if ((flag.msg == NULL) && (flag.icon == NULL))
+		fgcolor = fgcolor / 6; // it's a frame
+
+	if (flags_status[flagid])
+	{
+		foreground(flag.reverse ? bgcolor : fgcolor);
+		background(flag.reverse ? fgcolor : bgcolor);
+	}
+	else
+	{
+		foreground(bgcolor);
+		background(bgcolor);
 	}
 
-	// draw frames (Alarm and Channel)
-	for (uint8_t l=0; l<(sizeof(frames)/sizeof(frames[0])); ++l)
+	if (flag.msg != NULL)
 	{
-		if (flag == frames[l].flag)
-		{
-			uint16_t color;
-			if (show)
-				color = fgcolor/6;
-			else
-				color = bgcolor;
-			hline(frames[l].x0+1, frames[l].x0+3, frames[l].y0, color);
-			hline(frames[l].x1-3, frames[l].x1-1, frames[l].y0, color);
-			hline(frames[l].x0+1, frames[l].x1-1, frames[l].y1, color);
+		set_font((unsigned char*)Terminal6x8);
+		locate(flag.x0, flag.y0);
+		this->printf(flag.msg);
+	}
+	else if (flag.icon != NULL)
+	{ // flag is an icon
+		Bitmap_s pic = {9, 10, 2, (char*) flag.icon};
+		Bitmap_BW(pic, flag.x0, flag.y0);
+	}
+	else
+	{ // draw frames (Alarm and Channel)
+		hline(flag.x0+1, flag.x0+3, flag.y0, foreground());
+		hline(flag.x1-3, flag.x1-1, flag.y0, foreground());
+		hline(flag.x0+1, flag.x1-1, flag.y1, foreground());
 
-			vline(frames[l].x0, frames[l].y0+1, frames[l].y1-1, color);
-			vline(frames[l].x1, frames[l].y0+1, frames[l].y1-1, color);
-		}
+		vline(flag.x0, flag.y0+1, flag.y1-1, foreground());
+		vline(flag.x1, flag.y0+1, flag.y1-1, foreground());
 	}
+
 	must_refresh = 1;
 }
-
-
-void Display::test_dsp()
-{
-	const FRAME *z;
-	printf("TEST DSP\r\n");
-	cls();
-	printf("TEST DSP #2\r\n");
-	show(0x00, "8g8g8g8g8g8g8", 13); // main dsp
-	show(0x0C, "888", 3); // channel dsp
-	show(0x0A, "\xFF\xFF\xFF\xFF", 4); // all flags
-	copy_to_lcd();
-	ThisThread::sleep_for(3ms);
-	cls();
-	printf("TEST DSP #3\r\n");
-	/*
-	for (uint8_t i=0; i<(sizeof(zones)/sizeof(zones[0])); i++)
-	{
-		z = &zones[i];
-		fillrect(z->x0, z->y0, z->x1, z->y1, 4+i);
-		locate(z->x0+1, z->y0+1);
-		this->printf("%d", i);
-	}
-	*/
-	/*
-		for (uint8_t i=0; i<(sizeof(zones)/sizeof(zones[0])); i++)
-		{
-		z = &zones[i];
-		printf("Zone %d [%x]: %d, %d, %d, %d\n", i, z->flag,
-		z->x0, z->y0, z->x1, z->y1);
-		must_refresh = z->flag;
-		wait(1);
-		}
-		printf("Done\n");
-		wait(2);
-		printf("Copy ALL\n");
-		copy_to_lcd();
-	*/
-	ThisThread::sleep_for(2ms);
-	cls();
-	printf("TEST DSP DONE\r\n");
-}
--- a/src/display.h	Thu Nov 12 20:26:35 2020 +0100
+++ b/src/display.h	Fri Nov 13 19:35:46 2020 +0100
@@ -8,6 +8,8 @@
 #include "SSD1322.h"
 #include "hp34comm.h"
 
+#include <map>
+
 //typedef enum {
 #define FMT_ASCII  0x01
 #define FMT_HEX    0x02
@@ -32,153 +34,42 @@
 } DSP;
 
 
-static DSP table[] =
-{       // cmd,  fg, bg,  x0, y0,       fmt,  maxsize, width, font
-	{ 0x00, 0xF, 0x0,  0,  0, FMT_ASCII, MAX_BUFF, 255, Mono19x27}, // main display
-	{ 0x0C, 0xF, 0x0,194, 38, FMT_ASCII, 3,        45,  Mono15x22}, // channels display
-	{ 0x0A, 0xF, 0x0,  0, 57, FMT_FLAGS, 4,        0, Terminal6x8}, // flags + bits
-};
-
-// 9x10
-const unsigned char icon_alarm[] __attribute__((aligned (2))) =
-{
-		0x1c, 0x0,
-		0x3e, 0x0,
-		0x7f, 0x0,
-		0x7f, 0x0,
-		0x7f, 0x0,
-		0x7f, 0x0,
-		0x7f, 0x0,
-		0x7f, 0x0,
-		0xff, 0x80,
-		0x10, 0x0
-};
-
-const unsigned char icon_curve[] __attribute__((aligned (2))) =
-{
-		0x80, 0x0,
-		0x80, 0x0,
-		0x80, 0x80,
-		0x81, 0x0,
-		0x9e, 0x0,
-		0xa0, 0x0,
-		0xc0, 0x0,
-		0x80, 0x0,
-		0x80, 0x0,
-		0xff, 0x80
-};
-
 typedef struct _FLAG
 {
-	uint8_t flag;
-	uint8_t x;
-	uint8_t y;
-	bool reverse;
-	bool dimm;
-	const char* msg;
-	const unsigned char* icon;
-} FLAG;
-
-typedef struct _FRAME
-{
-	uint8_t flag;
 	uint8_t x0;
 	uint8_t y0;
 	uint8_t x1;
 	uint8_t y1;
-} FRAME;
-
-
-
-static const FLAG flags[] =
-{
-    // flag, x0, y0, reverse, dimm, msg, icon
-    // right-side icons area
-	// flag is the bit index in the 4 bytes viewed as a 32bits value
-    { 0x00, 246, 27,  false, false, NULL, icon_alarm}, // F1.0  01 00 00 00
-    { 0x01, 246, 38, false, false, NULL, icon_curve}, // F1.1  02 00 00 00
-                                               // F1.2  04 00 00 00 - Channel frame
-    { 0x03, 195, 29, false, false, "CHANNEL"},        // F1.3  08 00 00 00
-                                               // F1.7  80 00 00 00 - Alarm frame
-    { 0x1c, 0,  38,  false, false, "MON"},          // F4.4  00 00 00 10
-    { 0x1b, 0,  47,  false, false, "VIEW"},         // F4.3  00 00 00 08
-    { 0x1d, 0,  29,  true, false,  "SCAN"},          // F4.5  00 00 00 20
-    { 0x1e, 0,  56,  true, false,  "CONFIG"},        // F4.6  00 00 00 40
-
-    { 0x1a, 40,  56,   false, false, "*"},            // F4.2  00 00 00 04
-    { 0x19, 50,  56,   false, false, "ADRS"},         // F4.1  00 00 00 02
-    { 0x18, 80,  56,   false, false, "RMT"},          // F4.0  00 00 00 01
-    { 0x17, 104, 56,   true, false, "ERROR"},         // F3.7  00 00 80 00
-
-    { 0x16, 86, 38,   false, false, "EXT"},          // F3.6  00 00 40 00
-    { 0x15, 60, 38,   false, false, "ONCE"},         // F3.5  00 00 20 00
-
-    { 0x13, 40, 38,   false, false, "MEM"},         // F3.3  00 00 08 00
-
-
-    // col 5
-    { 0x0c, 244, 47,  false, false, "4W"},            // F2.4  00 10 00 00
-    { 0x0d, 244, 56,  false, false, "OC"},            // F2.5  00 20 00 00
+	bool reverse;
+	const char* msg;
+	const unsigned char* icon;
+} FLAG;
 
-    { 0x12, 40,  47, false, true, "LAST"},        // F3.2  00 00 04 00
-    { 0x11, 66,  47, false, true, "MIN"},         // F3.1  00 00 02 00
-    { 0x10, 86,  47, false, true, "MAX"},         // F3.0  00 00 01 00
-    { 0x0f, 106, 47, false, true, "AVG"},         // F2.7  00 80 00 00
-
-    { 0x05, 152+0,  29, false, false, "Alarm"},    // F1.5  20 00 00 00
-    { 0x08, 152+0,  39, false, false, "H"},        // F1.6  40 00 00 00
-    { 0x07, 152+6,  39, false, false, "1"},        // F2.3  00 08 00 00
-    { 0x06, 152+12, 39, false, false, "2"},        // F2.0  00 01 00 00
-    { 0x04, 152+18, 39, false, false, "3"},        // F2.2  00 04 00 00
-    { 0x09, 152+24, 39, false, false, "4"},        // F2.1  00 02 00 00
-    { 0x0a, 152+30, 39, false, false, "L"},        // F1.4  00 10 00 00
-
-	{ 0x80, 152, 56, true, false, "SHIFT"},   // not an actual command, managed by the front panel
-};
-
-
-static const FRAME frames[] =
-{
-    { 0x02, 192, 32, 240, 60}, // F1.2 - channel frame
-    { 0x0b, 149, 32, 190, 50}, // F1.7 - alarm frame
-};
-
-
-typedef enum {
-	FLAG_OFF,
-	FLAG_ON,
-	FLAG_DIM
-} flag_status_t;
-
-typedef struct _FLAG_STATUS
-{
-	uint8_t flag;
-	flag_status_t status;
-} FLAG_STATUS;
-
+typedef std::map<uint8_t, FLAG> flags_map;
+typedef std::map<uint8_t, bool> flag_status_map;
 
 class Display: public SSD1322
 {
 public:
 	Display(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC,
-					const char* name);
+			const char* name);
 
 	virtual ~Display();
 
-	void test_dsp();
 	void show(uint8_t, const char*, uint8_t);
-	void dimm_char(uint8_t);
+	void dim_char(uint8_t);
 	void show_splashscreen();
 	void show_byescreen();
-	void set_flag(uint8_t flag, bool show=true, bool dimm=false);
-	void show_flag(uint8_t flag) {set_flag(flag, true);};
-	void hide_flag(uint8_t flag) {set_flag(flag, false);};
-	void shift_on() {set_flag(0x80, true);};
-	void shift_off() {set_flag(0x80, false);};
 
+	void set_flag_status(uint8_t flagid, bool show);
+	void set_flag_dim(uint8_t flagid, bool dim);
+
+	void draw_flag(uint8_t flagid);
 
 private:
 	uint8_t must_refresh;
+	flag_status_map flags_status;
+	flag_status_map flags_dim;
 
 };
 
--- a/src/main.cpp	Thu Nov 12 20:26:35 2020 +0100
+++ b/src/main.cpp	Fri Nov 13 19:35:46 2020 +0100
@@ -214,8 +214,8 @@
   curchar = 0;
   nchars = 0;
 
-  for (uint8_t i=0; i<sizeof(table)/sizeof(table[0]); ++i)
-    memset(table[i].buffer, 0, MAX_BUFF+1);
+  //for (uint8_t i=0; i<sizeof(table)/sizeof(table[0]); ++i)
+  //  memset(table[i].buffer, 0, MAX_BUFF+1);
 
   printf("  display splash screen\r\n");
   dsp->show_splashscreen();
@@ -336,7 +336,8 @@
 	  if ((keycode == KC_SHIFT) && (key.keyevent == KEY_PRESSED))
 	  {
 		  shift = true;
-		  dsp->shift_on();
+		  dsp->set_flag_status(0x0E, true);
+		  dsp->draw_flag(0x0E);
 	  }
 
       if (hp != NULL) {
@@ -344,7 +345,7 @@
 		{
           keycode |= 0x20;  // bit 5: key shifted
 		  shift = false;
-		  dsp->shift_off();
+		  dsp->set_flag_status(0x0E, false);
 		}
         if (key.keyevent == KEY_RELEASED)
           keycode |= 0x40;  // bit 6: key relased
@@ -405,13 +406,18 @@
             // clear the Shift flag
             shift = false;
           }
-		  dsp->hide_flag(cmd.value[0]);
+		  dsp->set_flag_status(cmd.value[0], false);
+		  dsp->draw_flag(cmd.value[0]);
 		} else if (cmd.cmd == 0x08) {
 		  // set a flag dimmed
-		  dsp->set_flag(cmd.value[0], true, true);
+		  dsp->set_flag_status(cmd.value[0], true);
+		  dsp->set_flag_dim(cmd.value[0], true);
+		  dsp->draw_flag(cmd.value[0]);
 		} else if (cmd.cmd == 0x09) {
 		  // set a flag bright
-          dsp->set_flag(cmd.value[0], true, false);
+		  dsp->set_flag_status(cmd.value[0], true);
+		  dsp->set_flag_dim(cmd.value[0], false);
+		  dsp->draw_flag(cmd.value[0]);
         } else if (cmd.cmd == 0x86) {
 			// shutdown
 			dsp->show_byescreen();

mercurial