/* input.c Handles keypad (and other?) input from the user. Currently, the keys are as follows: Context Key Function ------- --- -------- Normal "normal" context is handled in this source file. A Pause/Continue B Back(Go to previous screen) C Forward(Go to next screen) D Open main menu E-Z Sent to client, if any; ignored otherwise (menu keys are not handled here, but in the menu code) Menu A Enter/select B Up/Left C Down/Right D Exit/Cancel E-Z Ignored */ #include #include #include "../shared/sockets.h" #include "../shared/debug.h" #include "drivers/lcd.h" #include "client_data.h" #include "clients.h" #include "screen.h" #include "screenlist.h" #include "menus.h" #include "input.h" int server_input (int key); // FIXME! The server tends to crash when "E" is pressed.. (?!) // (but only when the joystick driver is the last one on the list...) // Checks for keypad input, and dispatches it int handle_input () { char str[256]; int key; screen *s; client *c; key = lcd.getkey (); if (!key) return 0; debug ("handle_input(%c)\n", (char) key); if (key) { s = screenlist_current (); if (s) { c = s->parent; if (c) { // TODO: Interpret and translate keys! // If the client should have this keypress... // Send keypress to client if (key >= 'E' && key <= 'Z') { // TODO: Implement client "acceptable key" lists sprintf (str, "key %c\n", key); sock_send_string (c->sock, str); } // Otherwise, tell the server about it. else { server_input (key); } } else { // If no parent, it means we're on the server screen. // so, the server gets all keypresses there. server_input (key); } } } return 0; } int server_input (int key) { debug ("server_input(%c)\n", (char) key); switch (key) { case 'A': if (screenlist_action == SCR_HOLD) screenlist_action = 0; else screenlist_action = SCR_HOLD; break; case 'B': screenlist_action = SCR_BACK; screenlist_prev (); break; case 'C': screenlist_action = SCR_SKIP; screenlist_next (); break; case 'D': debug ("got the menu key!\n"); server_menu (); break; default: debug ("server_input: Invalid key \"%c\" (%i)\n", (char) key, key); break; } return 0; }