diff -r 74e85b34d26b -r f6774bd0d570 src/display.h --- 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 + //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 flags_map; +typedef std::map 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; };