diff --git a/server/drivers/MtxOrb.c b/server/drivers/MtxOrb.c index d4d3778..307c599 100644 --- a/server/drivers/MtxOrb.c +++ b/server/drivers/MtxOrb.c @@ -25,6 +25,7 @@ # include "config.h" #endif +#include "render.h" #include "lcd.h" #include "lcd_lib.h" #include "MtxOrb.h" @@ -383,6 +384,7 @@ MtxOrb_init (lcd_logical_driver * driver, char *args) driver->getkey = MtxOrb_getkey; driver->getinfo = MtxOrb_getinfo; + driver->heartbeat = MtxOrb_heartbeat; return fd; } @@ -1265,12 +1267,33 @@ MtxOrb_ask_bar (int type) ///////////////////////////////////////////////////////////// // Does the heartbeat... // -static char -MtxOrb_heartbeat (int timer) +static void +MtxOrb_heartbeat (int type) { - MtxOrb_icon (!((timer + 4) & 5), 0); - MtxOrb_chr (MtxOrb->wid, 1, 0); - return (char) 0; + static int timer = 0; + int whichIcon; + static int saved_type = HEARTBEAT_ON; + + if (type) + saved_type = type; + + if (type == HEARTBEAT_ON) { + // Set this to pulsate like a real heart beat... + whichIcon = (! ((timer + 4) & 5)); + + // This defines a custom character EVERY time... + // not efficient... is this necessary? + MtxOrb_icon (whichIcon, 0); + + // Put character on screen... + MtxOrb_chr (MtxOrb->wid, 1, 0); + + // change display... + MtxOrb_flush (); + } + + timer++; + timer &= 0x0f; } ///////////////////////////////////////////////////////////////// diff --git a/server/drivers/MtxOrb.h b/server/drivers/MtxOrb.h index 178d45d..02bd225 100644 --- a/server/drivers/MtxOrb.h +++ b/server/drivers/MtxOrb.h @@ -23,6 +23,7 @@ static void MtxOrb_icon (int which, char dest); static void MtxOrb_draw_frame (char *dat); static char MtxOrb_getkey (); static char * MtxOrb_getinfo (); +static void MtxOrb_heartbeat (int type); static int MtxOrb_ask_bar (int type); static void MtxOrb_set_known_char (int car, int type); diff --git a/server/drivers/curses_drv.c b/server/drivers/curses_drv.c index bde3933..b3dc784 100644 --- a/server/drivers/curses_drv.c +++ b/server/drivers/curses_drv.c @@ -26,9 +26,10 @@ #include "shared/str.h" +#include "render.h" #include "lcd.h" #include "curses_drv.h" -#include "drv_base.h" +//#include "drv_base.h" lcd_logical_driver *curses_drv; @@ -258,6 +259,7 @@ curses_drv_init (struct lcd_logical_driver *driver, char *args) driver->draw_frame = curses_drv_draw_frame; driver->getkey = curses_drv_getkey; + driver->heartbeat = curses_drv_heartbeat; // Change the character used for "..." ELLIPSIS = '~'; @@ -519,6 +521,38 @@ curses_drv_icon (int which, char dest) } +///////////////////////////////////////////////////////////// +// Does the heartbeat... +// +static void +curses_drv_heartbeat (int type) +{ + static int timer = 0; + int whichIcon; + static int saved_type = HEARTBEAT_ON; + + if (type) + saved_type = type; + + if (type == HEARTBEAT_ON) { + // Set this to pulsate like a real heart beat... + whichIcon = (! ((timer + 4) & 5)); + + // This defines a custom character EVERY time... + // not efficient... is this necessary? + curses_drv_icon (whichIcon, 0); + + // Put character on screen... + curses_drv_chr (curses_drv->wid, 1, 0); + + // change display... + curses_drv_flush (); + } + + timer++; + timer &= 0x0f; +} + ////////////////////////////////////////////////////////////////// // Flushes all output to the lcd... // diff --git a/server/drivers/curses_drv.h b/server/drivers/curses_drv.h index 3b59427..4359950 100644 --- a/server/drivers/curses_drv.h +++ b/server/drivers/curses_drv.h @@ -19,5 +19,6 @@ void curses_drv_draw_frame (char *dat); char curses_drv_getkey (); void curses_drv_init_num (); void curses_drv_num (int x, int num); +void curses_drv_heartbeat (int type); #endif diff --git a/server/drivers/lcd.c b/server/drivers/lcd.c index 6098ce3..b32cb02 100644 --- a/server/drivers/lcd.c +++ b/server/drivers/lcd.c @@ -58,6 +58,7 @@ static void lcd_drv_draw_frame (); static char lcd_drv_getkey (); static char lcd_drv_getkey_loop (); static char *lcd_drv_getinfo (); +static void lcd_drv_heartbeat (int type); /* * Add all of the driver's header files in... @@ -306,6 +307,7 @@ lcd_drv_init (struct lcd_logical_driver *driver, char *args) driver->getkey = lcd_drv_getkey; driver->getinfo = lcd_drv_getinfo; + driver->heartbeat = lcd_drv_heartbeat; return 1; // 1 is arbitrary. (must be 1 or more) } @@ -340,6 +342,7 @@ lcd_drv_patch_init (struct lcd_logical_driver *driver) ChkNull(getkey, lcd_drv_getkey, "getkey"); ChkNull(getinfo, lcd_drv_getinfo, "getinfo"); + ChkNull(heartbeat, lcd_drv_heartbeat, "heartbeat"); // Now check for base driver entries...; ChkBaseDrv(clear, lcd_drv_clear, "clear"); @@ -365,6 +368,7 @@ lcd_drv_patch_init (struct lcd_logical_driver *driver) ChkBaseDrv(getkey, lcd_drv_getkey, "getkey"); ChkBaseDrv(getinfo, lcd_drv_getinfo, "getinfo"); + ChkBaseDrv(heartbeat, lcd_drv_heartbeat, "heartbeat"); return 0; } @@ -692,3 +696,9 @@ lcd_drv_getkey_loop () { return 0; } +static void +lcd_drv_heartbeat (int type) +{ + ; +} + diff --git a/server/drivers/lcd.h b/server/drivers/lcd.h index f4e6f7a..e32fae2 100644 --- a/server/drivers/lcd.h +++ b/server/drivers/lcd.h @@ -67,6 +67,8 @@ typedef struct lcd_logical_driver { // Returns pointer to static string. char * (*getinfo) (); + // Puts up a heartbeat... + void (*heartbeat) (int type); // more? } lcd_logical_driver; diff --git a/server/main.h b/server/main.h index 978ffa0..bf3959c 100644 --- a/server/main.h +++ b/server/main.h @@ -5,6 +5,8 @@ #include "config.h" #endif +#include "render.h" + /* contains a few things that other parts of the program might want to know about... @@ -28,7 +30,7 @@ typedef struct screen_size { #define DEFAULT_SCREEN_PRIORITY 128 #define DEFAULT_SCREEN_DURATION 32 -#define DEFAULT_HEARTBEAT 1 +#define DEFAULT_HEARTBEAT HEARTBEAT_ON #define DEFAULT_ADDR "127.0.0.1" #endif diff --git a/server/render.c b/server/render.c index e5d4f68..cff3e55 100644 --- a/server/render.c +++ b/server/render.c @@ -116,13 +116,14 @@ draw_screen (screen * s, int timer) //debug("draw_screen done\n"); if (heartbeat) { - if ((s->heartbeat == HEART_ON) || heartbeat == HEART_ON) { + lcd_ptr->heartbeat(s->heartbeat); + //if ((s->heartbeat == HEART_ON) || heartbeat == HEART_ON) { // Set this to pulsate like a real heart beat... // (binary is fun... :) // lcd_ptr->heartbeat (); - lcd_ptr->icon (!((timer + 4) & 5), 0); - lcd_ptr->chr (lcd_ptr->wid, 1, 0); - } + //lcd_ptr->icon (!((timer + 4) & 5), 0); + //lcd_ptr->chr (lcd_ptr->wid, 1, 0); + //} // else // This seems unnecessary... heartbeat is nicer... // if ((s->heartbeat == HEART_OPEN) && heartbeat != HEART_OFF) { diff --git a/server/render.h b/server/render.h index f2fb6ac..09befcc 100644 --- a/server/render.h +++ b/server/render.h @@ -3,9 +3,13 @@ #include "screen.h" -#define HEART_OFF 0 -#define HEART_ON 1 -#define HEART_OPEN 2 +#define HEART_OFF 1 +#define HEART_ON 2 +#define HEART_OPEN 3 + +#define HEARTBEAT_OFF HEART_OFF +#define HEARTBEAT_ON HEART_ON +#define HEARTBEAT_OPEN HEART_OPEN #define BACKLIGHT_OFF 0 #define BACKLIGHT_ON 1 diff --git a/server/widget.c b/server/widget.c index fd9af5f..c333e06 100644 --- a/server/widget.c +++ b/server/widget.c @@ -7,6 +7,7 @@ #include "screen.h" #include "widget.h" +#include "render.h" char *types[] = { "none", "string", @@ -164,7 +165,7 @@ widget_add (screen * s, char *id, char *type, char *in, int sock) list = s->widgets; if (0 == strcmp (id, "heartbeat")) { - s->heartbeat = 1; + s->heartbeat = HEARTBEAT_ON; // was 1 return 0; } @@ -260,7 +261,7 @@ widget_remove (screen * s, char *id, int sock) list = s->widgets; if (0 == strcmp (id, "heartbeat")) { - s->heartbeat = 0; + s->heartbeat = HEARTBEAT_OFF; // was 0 return 0; } // Make sure this screen *does* exist...