X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Fhost_pnd.c;h=86e9910d7e1ebdb4f92e8c08a5750e9a65fdbcb8;hp=773a087a38336764e2629f53285872e45810686a;hb=3ef07128a8ad8a12688beee244c5e0a2629581de;hpb=3d295a9fe6e27f6103701e8d8ae23257b43ff2dd diff --git a/loader/host_pnd.c b/loader/host_pnd.c index 773a087..86e9910 100644 --- a/loader/host_pnd.c +++ b/loader/host_pnd.c @@ -1,102 +1,43 @@ -// vim:shiftwidth=2:expandtab -#define _GNU_SOURCE -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "header.h" +/* + * GINGE - GINGE Is Not Gp2x Emulator + * (C) notaz, 2010-2011,2015 + * + * This work is licensed under the MAME license, see COPYING file for details. + */ + +static struct in_default_bind in_evdev_defbinds[] = { + { KEY_UP, IN_BINDTYPE_PLAYER12, GP2X_UP }, + { KEY_LEFT, IN_BINDTYPE_PLAYER12, GP2X_LEFT }, + { KEY_DOWN, IN_BINDTYPE_PLAYER12, GP2X_DOWN }, + { KEY_RIGHT, IN_BINDTYPE_PLAYER12, GP2X_RIGHT }, + { KEY_PAGEUP, IN_BINDTYPE_PLAYER12, GP2X_Y }, + { KEY_END, IN_BINDTYPE_PLAYER12, GP2X_B }, + { KEY_PAGEDOWN, IN_BINDTYPE_PLAYER12, GP2X_X }, + { KEY_HOME, IN_BINDTYPE_PLAYER12, GP2X_A }, + { KEY_RIGHTSHIFT, IN_BINDTYPE_PLAYER12, GP2X_L }, + { KEY_RIGHTCTRL, IN_BINDTYPE_PLAYER12, GP2X_R }, + { KEY_LEFTALT, IN_BINDTYPE_PLAYER12, GP2X_START }, + { KEY_LEFTCTRL, IN_BINDTYPE_PLAYER12, GP2X_SELECT }, + { KEY_COMMA, IN_BINDTYPE_PLAYER12, GP2X_VOL_DOWN }, + { KEY_DOT, IN_BINDTYPE_PLAYER12, GP2X_VOL_UP }, + { KEY_1, IN_BINDTYPE_PLAYER12, GP2X_PUSH }, + { KEY_Q, IN_BINDTYPE_EMU, 0 }, + { 0, 0, 0 }, +}; -static int ifd = -1; -static int keystate; +static const struct in_pdata pandora_evdev_pdata = { + .defbinds = in_evdev_defbinds, +}; -static void init(void) +static void host_actions(int actions[IN_BINDTYPE_COUNT]) { - char buff[64]; - int i; - - for (ifd = -1, i = 0; ; 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) - break; - close(ifd); - } - - if (ifd < 0) - printf("no input device\n"); + if (actions[IN_BINDTYPE_EMU] & 1) + host_forced_exit(); } -static const struct { - unsigned short key; - unsigned short btn; -} key_map[] = { - { KEY_LEFT, GP2X_LEFT }, - { KEY_RIGHT, GP2X_RIGHT }, - { KEY_UP, GP2X_UP }, - { KEY_DOWN, GP2X_DOWN }, - { KEY_PAGEUP, GP2X_Y }, - { BTN_BASE, GP2X_Y }, - { KEY_END, GP2X_B }, - { BTN_BASE2, GP2X_B }, - { KEY_PAGEDOWN, GP2X_X }, - { BTN_BASE3, GP2X_X }, - { KEY_HOME, GP2X_A }, - { BTN_BASE4, GP2X_A }, - { KEY_RIGHTSHIFT, GP2X_L }, - { BTN_TL, GP2X_L }, - { KEY_RIGHTCTRL, GP2X_R }, - { BTN_TR, GP2X_R }, - { KEY_LEFTALT, GP2X_START }, - { BTN_START, GP2X_START }, - { KEY_LEFTCTRL, GP2X_SELECT }, - { BTN_SELECT, GP2X_SELECT }, -}; - -int host_read_btns(void) +static void host_init_input(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)); - if (ret < (int) sizeof(ev)) { - if (errno != EAGAIN && errno != EWOULDBLOCK) - perror("evtest: read error"); - - return keystate; - } - - if (ev.type != EV_KEY) - continue; - - for (i = 0; i < sizeof(key_map) / sizeof(key_map[0]); i++) { - if (key_map[i].key != ev.code) - continue; - if (ev.value) - keystate |= (1 << key_map[i].btn); - else - keystate &= ~(1 << key_map[i].btn); - break; - } - } - - return keystate; + in_evdev_init(&pandora_evdev_pdata); } +// vim:shiftwidth=2:expandtab