#include "realfuncs.h"
static int ifds[2] = { -1, -1 };
-static int init_done;
static int keystate;
-static void init(void)
+int host_init(void)
{
char buff[64];
int i, ifd, ret;
for (ifd = -1, i = 0; ifds[0] == -1 || ifds[1] == -1; i++) {
snprintf(buff, sizeof(buff), "/dev/input/event%i", i);
- ifd = open(buff, O_RDONLY | O_NONBLOCK, 0);
+ ifd = open(buff, O_RDONLY | O_NONBLOCK);
if (ifd == -1)
break;
fprintf(stderr, PFX "missing buttons\n");
if (ifds[1] < 0)
fprintf(stderr, PFX "missing keypad\n");
- init_done = 1;
+
+ return 0;
}
static const struct {
{ BTN_SELECT, GP2X_SELECT },
{ KEY_COMMA, GP2X_VOL_DOWN },
{ KEY_DOT, GP2X_VOL_UP },
- { KEY_Q, GP2X_PUSH },
+ { KEY_1, GP2X_PUSH },
};
int host_read_btns(void)
struct input_event ev;
int i, ret;
- if (!init_done)
- init();
-
while (1)
{
ret = read(ifds[0], &ev, sizeof(ev));
if (ev.type != EV_KEY)
continue;
+ if (ev.code == KEY_Q && ev.value) {
+ // exit() might not be enough because loader and app data is out of sync,
+ // and other threads (which are really processes) might not exit properly.
+ system("killall ginge_sloader");
+ usleep(300000);
+ system("killall -9 ginge_sloader");
+ exit(1);
+ }
+
for (i = 0; i < sizeof(key_map) / sizeof(key_map[0]); i++) {
if (key_map[i].key != ev.code)
continue;