summaryrefslogtreecommitdiffstats
path: root/status.c
diff options
context:
space:
mode:
authorJames <git@panaceas.org>2014-05-05 17:50:20 +0100
committerJames <git@panaceas.org>2014-05-05 17:50:20 +0100
commit470457e22a1b5537013603d5e367c51e47bb61bf (patch)
tree6b72d32bfd9eaec31c8c520d18782ccaebc01759 /status.c
downloadkmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.tar.gz
kmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.tar.bz2
kmd_usb-470457e22a1b5537013603d5e367c51e47bb61bf.zip
fish
Diffstat (limited to 'status.c')
-rw-r--r--status.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/status.c b/status.c
new file mode 100644
index 0000000..e627338
--- /dev/null
+++ b/status.c
@@ -0,0 +1,141 @@
+#include "project.h"
+
+
+static int computer_old_locked[N_COMPUTER + 1];
+static int computer_old_active[N_COMPUTER + 1];
+static int computer_old_console[N_COMPUTER + 1];
+
+
+static int console_old_locked[N_CONSOLE + 1];
+static int console_old_active[N_CONSOLE + 1];
+static int console_old_computer[N_CONSOLE + 1];
+
+
+void
+status_draw_computer (int computer, int locked, int console, int active,
+ int force)
+{
+
+ int x = (computer - 1) * 45;
+ int y = 5;
+ x += 2;
+
+ if (force || (computer_old_locked[computer] != locked))
+ {
+ if (locked != -1)
+ computer_old_locked[computer] = locked;
+ else
+ locked = computer_old_locked[computer];
+ lcd_box (x, y, x + 44, y + 44, locked ? 255 : 0, locked ? 0 : 255,
+ locked ? 127 : 0);
+ }
+
+ if (force || (computer_old_console[computer] != console))
+ {
+ if (console != -1)
+ computer_old_console[computer] = console;
+ else
+ console = computer_old_console[computer];
+ lcd_ss (console ? console : 10, x + 17, y + 11, 11, 22);
+ }
+
+ if (force || (computer_old_active[computer] != active))
+ {
+ if (active != -1)
+ computer_old_active[computer] = active;
+ else
+ active = computer_old_active[computer];
+ lcd_box (x + 5, y + 5, x + 9, y + 9, active ? 255 : 0, active ? 255 : 0,
+ active ? 255 : 0);
+ }
+
+}
+
+void
+status_draw_console (int console, int locked, int computer, int active,
+ int force)
+{
+ int x = (console - 1) * 106;
+ int y = 100;
+
+
+ if (force || (console_old_locked[console] != locked))
+ {
+ if (locked != -1)
+ console_old_locked[console] = locked;
+ else
+ locked = console_old_locked[console];
+ lcd_box (x, y, x + 105, y + 105, locked ? 255 : 0, locked ? 0 : 255,
+ locked ? 127 : 0);
+ }
+
+ if (force || (console_old_computer[console] != computer))
+ {
+ if (computer != -1)
+ console_old_computer[console] = computer;
+ else
+ computer = console_old_computer[console];
+ lcd_ss (computer ? computer : 10, x + 35, y + 20, 30, 60);
+ }
+
+ if (force || (console_old_active[console] != active))
+ {
+ if (active != -1)
+ console_old_active[console] = active;
+ else
+ active = console_old_active[console];
+ lcd_box (x + 5, y + 5, x + 9, y + 9, active ? 255 : 0, active ? 255 : 0,
+ active ? 255 : 0);
+ }
+
+}
+
+
+void
+status_init (void)
+{
+ int i;
+
+ lcd_open ();
+ lcd_on ();
+
+ memset (computer_old_locked, 0xff, sizeof (computer_old_locked));
+ memset (computer_old_active, 0xff, sizeof (computer_old_active));
+ memset (computer_old_console, 0xff, sizeof (computer_old_console));
+
+ for (i = 1; i <= N_COMPUTER; ++i)
+ {
+ status_draw_computer (i, 0, 0, 0, 0);
+ }
+
+ memset (console_old_locked, 0xff, sizeof (console_old_locked));
+ memset (console_old_active, 0xff, sizeof (console_old_active));
+ memset (console_old_computer, 0xff, sizeof (console_old_computer));
+
+ for (i = 1; i <= N_CONSOLE; ++i)
+ {
+ status_draw_console (i, 0, 0, 0, 0);
+ }
+
+}
+
+void
+status_reset (void)
+{
+ int i;
+
+ lcd_close ();
+ lcd_open ();
+ lcd_on ();
+
+ for (i = 1; i <= N_COMPUTER; ++i)
+ {
+ status_draw_computer (i, -1, -1, -1, 0);
+ }
+
+ for (i = 1; i <= N_CONSOLE; ++i)
+ {
+ status_draw_console (i, -1, -1, -1, 0);
+ }
+
+}