X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Fhost_pnd.c;h=9064047de6703aebaad31df2dc60e2d48e1a84e0;hp=773a087a38336764e2629f53285872e45810686a;hb=adb798406512d2bf868330e74deb2637e0575c2f;hpb=3d295a9fe6e27f6103701e8d8ae23257b43ff2dd diff --git a/loader/host_pnd.c b/loader/host_pnd.c index 773a087..9064047 100644 --- a/loader/host_pnd.c +++ b/loader/host_pnd.c @@ -11,30 +11,43 @@ #include #include "header.h" +#include "realfuncs.h" -static int ifd = -1; +static int ifds[2] = { -1, -1 }; static int keystate; -static void init(void) +int host_init(void) { char buff[64]; - int i; + int i, ifd, ret; - for (ifd = -1, i = 0; ; i++) { + 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); if (ifd == -1) break; - ioctl(ifd, EVIOCGNAME(sizeof(buff)), buff); - - if (strcasestr(buff, "gpio") != NULL) + ret = ioctl(ifd, EVIOCGNAME(sizeof(buff)), buff); + if (ret < 0) break; + + if (strcasestr(buff, "gpio") != NULL) { + ifds[0] = ifd; + continue; + } + if (strcasestr(buff, "keypad") != NULL) { + ifds[1] = ifd; + continue; + } close(ifd); } - if (ifd < 0) - printf("no input device\n"); + if (ifds[0] < 0) + fprintf(stderr, PFX "missing buttons\n"); + if (ifds[1] < 0) + fprintf(stderr, PFX "missing keypad\n"); + + return 0; } static const struct { @@ -61,6 +74,9 @@ static const struct { { BTN_START, GP2X_START }, { KEY_LEFTCTRL, GP2X_SELECT }, { BTN_SELECT, GP2X_SELECT }, + { KEY_COMMA, GP2X_VOL_DOWN }, + { KEY_DOT, GP2X_VOL_UP }, + { KEY_Q, GP2X_PUSH }, }; int host_read_btns(void) @@ -68,21 +84,22 @@ int host_read_btns(void) struct input_event ev; int i, ret; - if (ifd < 0) - init(); - if (ifd < 0) - return keystate; - while (1) { - ret = read(ifd, &ev, sizeof(ev)); + ret = read(ifds[0], &ev, sizeof(ev)); if (ret < (int) sizeof(ev)) { if (errno != EAGAIN && errno != EWOULDBLOCK) - perror("evtest: read error"); + perror(PFX "read error"); - return keystate; + ret = read(ifds[1], &ev, sizeof(ev)); + if (ret < (int) sizeof(ev)) + if (errno != EAGAIN && errno != EWOULDBLOCK) + perror(PFX "read error"); } + if (ret < (int) sizeof(ev)) + return keystate; + if (ev.type != EV_KEY) continue;