* (at your option):
* - GNU GPL, version 2 or later.
* - GNU LGPL, version 2.1 or later.
+ * - MAME license.
* See the COPYING file in the top-level directory.
*/
#include "plat.h"
#include "lprintf.h"
-#ifdef IN_GP2X
-#error needs update: in_gp2x_init in_gp2x_update
-#include "../gp2x/in_gp2x.h"
-#endif
#ifdef IN_VK
#error needs update: in_vk_init in_vk_update
#include "../win32/in_vk.h"
defbinds = DRV(drv_id).defbinds;
if (defbinds != NULL) {
for (i = 0; ; i++) {
- if (defbinds[i].bit == 0 && defbinds[i].code == 0)
+ if (defbinds[i].bit == 0 && defbinds[i].btype == 0
+ && defbinds[i].bit == 0)
break;
- binds[IN_BIND_OFFS(defbinds[i].code, defbinds[i].btype)] =
+ binds[IN_BIND_OFFS(defbinds[i].code, defbinds[i].btype)] |=
1 << defbinds[i].bit;
}
for (i = 0; i < in_driver_count; i++) {
in_probe_dev_id = i;
- in_drivers[i].probe();
+ in_drivers[i].probe(&DRV(i));
}
/* get rid of devs without binds and probes */
int in_menu_wait_any(char *charcode, int timeout_ms)
{
int keys_old = menu_key_state;
+ int ret;
while (1)
{
}
}
- return menu_key_state;
+ ret = menu_key_state;
+ menu_key_state &= ~PBTN_CHAR;
+ return ret;
}
/* wait for menu input, do autorepeat */
case IN_CFG_KEY_NAMES:
return -1; /* not implemented */
default:
+ if (!dev->probed)
+ return -1;
+
return DRV(dev->drv_id).get_config(dev->drv_data, what, ival);
}
/* have_async_devs means we will have to do all reads async anyway.. */
if (!in_have_async_devs) {
for (i = 0; i < in_dev_count; i++) {
- if (in_devices[i].probed)
- DRV(in_devices[i].drv_id).set_config(in_devices[i].drv_data,
- IN_CFG_BLOCKING, is_blocking);
+ if (!in_devices[i].probed)
+ continue;
+
+ DRV(in_devices[i].drv_id).set_config(
+ in_devices[i].drv_data, IN_CFG_BLOCKING,
+ is_blocking);
}
}
if (in_devices[i].name == NULL)
return -1;
- in_devices[i].key_names = DRV(drv_id).get_key_names(&in_devices[i].key_count);
+ in_devices[i].key_names = DRV(drv_id).get_key_names(&DRV(drv_id),
+ &in_devices[i].key_count);
in_devices[i].drv_id = drv_id;
if (i + 1 > in_dev_count)
int ret, count, *binds, *def_binds;
in_dev_t *dev = &in_devices[i];
- if (dev->binds == NULL || dev->drv_data == NULL)
+ if (dev->binds == NULL || !dev->probed)
continue;
count = dev->key_count;
if (d.f == NULL) d.f = in_def_##f
/* to be called by drivers */
-int in_register_driver(const in_drv_t *drv, const struct in_default_bind *defbinds)
+int in_register_driver(const in_drv_t *drv,
+ const struct in_default_bind *defbinds, const void *pdata)
{
int count_new = in_driver_count + 1;
in_drv_t *new_drivers;
CHECK_ADD_STUB(new_drivers[in_driver_count], menu_translate);
CHECK_ADD_STUB(new_drivers[in_driver_count], get_key_code);
CHECK_ADD_STUB(new_drivers[in_driver_count], get_key_name);
- if (defbinds != NULL)
+ if (pdata)
+ new_drivers[in_driver_count].pdata = pdata;
+ if (defbinds)
new_drivers[in_driver_count].defbinds = defbinds;
in_drivers = new_drivers;
in_driver_count = count_new;