--- a/thermferm/panel.c Sat Aug 09 17:24:32 2014 +0200 +++ b/thermferm/panel.c Sat Aug 09 21:42:28 2014 +0200 @@ -21,18 +21,51 @@ *****************************************************************************/ #include "thermferm.h" +#include "lcd-pcf8574.h" #include "panel.h" + #ifdef HAVE_WIRINGPI_H extern int my_shutdown; extern int debug; +int Key_Enter = FALSE; +int Key_Enter_Long = FALSE; +int Key_Up = FALSE; +int Key_Down = FALSE; + + +int keycheck(void) +{ + if (Key_Enter && Key_Up && Key_Down) + return KEY_ALL; + if (Key_Up && Key_Down) + return KEY_UPDOWN; + if (Key_Up) + return KEY_UP; + if (Key_Down) + return KEY_DOWN; + if (Key_Enter_Long) + return KEY_CONFIRM; + if (Key_Enter) + return KEY_ENTER; + return KEY_NONE; +} + PI_THREAD (my_panel_loop) { + int Enter = 0, Up = 0, Down = 0, Backlight = LCD_SLEEP, AnyKey = FALSE; + time_t Last = (time_t)0, Now; + + pinMode(PANEL_LED, OUTPUT); + pinMode(PANEL_ENTER, INPUT); + pinMode(PANEL_UP, INPUT); + pinMode(PANEL_DOWN, INPUT); + syslog(LOG_NOTICE, "Thread my_panel_loop started"); if (debug) @@ -45,6 +78,71 @@ if (my_shutdown) break; + if (digitalRead(PANEL_ENTER)) { + Enter = 0; + Key_Enter = FALSE; + Key_Enter_Long = FALSE; + } else { + Enter++; + if (Enter > PRESS_NORMAL) + Key_Enter = TRUE; + if (Enter > PRESS_LONG) + Key_Enter_Long = TRUE; + } + + if (digitalRead(PANEL_UP)) { + Up = 0; + Key_Up = FALSE; + } else { + Up++; + if (Up > PRESS_NORMAL) + Key_Up = TRUE; + } + + if (digitalRead(PANEL_DOWN)) { + Down = 0; + Key_Down = FALSE; + } else { + Down++; + if (Down > PRESS_NORMAL) + Key_Down = TRUE; + } + + if (Key_Enter || Key_Up || Key_Down) { + AnyKey = TRUE; + /* + * Any key is pressed. + */ + if (Backlight == 0) + setBacklight(1); + Backlight = LCD_SLEEP; + } else { + /* + * No key pressed. + */ + AnyKey = FALSE; + } + +// if (debug && AnyKey) +// fprintf(stdout, "keys Enter=%d,%s,%s Up=%d,%s Down=%d,%s\n", +// Enter, Key_Enter ?"True":"False", Key_Enter_Long ?"True":"False", Up, Key_Up ?"True":"False", Down, Key_Down ?"True":"False"); + + Now = time(NULL); + if (Now != Last) { + Last = Now; + +// if (debug) +// fprintf(stdout, "AnyKey=%s Backlight=%d\n", AnyKey ?"True":"False", Backlight); + if (AnyKey == FALSE) { + if (Backlight == 1) + setBacklight(0); + if (Backlight > 0) { + Backlight--; + } + } + + } + /* * Loop 10 milliseconds */