#include "input.h"
#include "plat.h"
+#include "lprintf.h"
#include "../linux/in_evdev.h"
#include "../gp2x/in_gp2x.h"
+#include "../win32/in_vk.h"
typedef struct
{
for (i = 0; i < IN_MAX_DEVS; i++)
if (!in_devices[i].probed) break;
if (i >= IN_MAX_DEVS) {
- printf("input: too many devices, can't add %s\n", name);
+ lprintf("input: too many devices, can't add %s\n", name);
return;
}
in_free(&in_devices[i]);
if (i + 1 > in_dev_count)
in_dev_count = i + 1;
- printf("input: new device #%d \"%s\"\n", i, name);
+ lprintf("input: new device #%d \"%s\"\n", i, name);
update:
in_devices[i].probed = 1;
in_devices[i].does_combos = combos;
}
if (in_have_async_devs)
- printf("input: async-only devices detected..\n");
+ lprintf("input: async-only devices detected..\n");
}
/* async update */
for (i = 0; i < in_dev_count; i++) {
in_dev_t *dev = &in_devices[i];
if (dev->probed && dev->binds != NULL) {
+ // FIXME: this is stupid, make it indirect
switch (dev->drv_id) {
#ifdef IN_EVDEV
case IN_DRVID_EVDEV:
ret |= in_gp2x_update(dev->drv_data, dev->binds, result);
break;
#endif
+ case IN_DRVID_VK:
+ ret |= in_vk_update(dev->drv_data, dev->binds, result);
+ break;
}
}
}
if (count == 0) {
/* don't deadlock, fail */
- printf("input: failed to find devices to read\n");
+ lprintf("input: failed to find devices to read\n");
exit(1);
}
return xname;
}
-int in_bind_key(int dev_id, int keycode, int bind_type, int mask, int force_unbind)
+int in_bind_key(int dev_id, int keycode, int mask, int bind_type, int force_unbind)
{
int ret, count;
in_dev_t *dev;
return 0;
}
+void in_unbind_all(int dev_id, int act_mask, int bind_type)
+{
+ int i, count;
+ in_dev_t *dev;
+
+ if (dev_id < 0 || dev_id >= IN_MAX_DEVS || bind_type >= IN_BINDTYPE_COUNT)
+ return;
+
+ dev = &in_devices[dev_id];
+ count = dev->key_count;
+
+ if (dev->binds == NULL)
+ return;
+
+ for (i = 0; i < count; i++)
+ dev->binds[IN_BIND_OFFS(i, bind_type)] &= ~act_mask;
+}
+
/* returns device id, or -1 on error */
int in_config_parse_dev(const char *name)
{
}
if (drv_id < 0) {
- printf("input: missing driver for %s\n", name);
+ lprintf("input: missing driver for %s\n", name);
return -1;
}
for (i = 0; i < IN_MAX_DEVS; i++)
if (in_devices[i].name == NULL) break;
if (i >= IN_MAX_DEVS) {
- printf("input: too many devices, can't add %s\n", name);
+ lprintf("input: too many devices, can't add %s\n", name);
return -1;
}
}
}
if (kc < 0 || kc >= dev->key_count) {
- printf("input: bad key: %s\n", key);
+ lprintf("input: bad key: %s\n", key);
return -1;
}
int i;
for (i = 0; i < IN_MAX_DEVS; i++) {
- int n, ret, count, *binds, *def_binds;
+ int n, t, ret, count, *binds, *def_binds;
in_dev_t *dev = &in_devices[i];
if (dev->binds == NULL)
binds = dev->binds;
def_binds = binds + count * IN_BINDTYPE_COUNT;
- for (n = 0; n < count * IN_BINDTYPE_COUNT; n++)
- if (binds[n] == -1)
- binds[n] = def_binds[n];
+ for (n = 0; n < count; n++) {
+ int is_default = 1;
+ for (t = 0; t < IN_BINDTYPE_COUNT; t++)
+ if (binds[IN_BIND_OFFS(n, t)] == -1)
+ binds[IN_BIND_OFFS(n, t)] = 0;
+ else
+ is_default = 0;
+
+ if (is_default)
+ for (t = 0; t < IN_BINDTYPE_COUNT; t++)
+ binds[IN_BIND_OFFS(n, t)] = def_binds[IN_BIND_OFFS(n, t)];
+ }
if (dev->drv_data == NULL)
continue;
{
int i;
- printf("# drv probed binds name\n");
+ lprintf("# drv probed binds name\n");
for (i = 0; i < IN_MAX_DEVS; i++) {
in_dev_t *d = &in_devices[i];
if (!d->probed && d->name == NULL && d->binds == NULL)
continue;
- printf("%d %3d %6c %5c %s\n", i, d->drv_id, d->probed ? 'y' : 'n',
+ lprintf("%d %3d %6c %5c %s\n", i, d->drv_id, d->probed ? 'y' : 'n',
d->binds ? 'y' : 'n', d->name);
}
}
#ifdef IN_EVDEV
in_evdev_init(&in_drivers[IN_DRVID_EVDEV]);
#endif
+ in_vk_init(&in_drivers[IN_DRVID_VK]);
}
#if 0
while (1) {
int dev = 0, down;
ret = in_update_keycode(&dev, &down);
- printf("#%i: %i %i (%s)\n", dev, down, ret, in_get_key_name(dev, ret));
+ lprintf("#%i: %i %i (%s)\n", dev, down, ret, in_get_key_name(dev, ret));
}
#else
while (1) {
ret = in_menu_wait_any();
- printf("%08x\n", ret);
+ lprintf("%08x\n", ret);
}
#endif