X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=linux%2Fin_evdev.c;h=aca15ad424c0f2f8618ec1282f74847755652d60;hb=HEAD;hp=08e35965ac75a432524f66458b56e2d5d0b27619;hpb=c19e28f62660cdaed26698234cff9c084517b34c;p=libpicofe.git diff --git a/linux/in_evdev.c b/linux/in_evdev.c index 08e3596..b3fb825 100644 --- a/linux/in_evdev.c +++ b/linux/in_evdev.c @@ -17,7 +17,11 @@ #include #include #include +#ifdef __FreeBSD__ +#include +#else #include +#endif #include #include "../input.h" @@ -259,6 +263,7 @@ static void in_evdev_probe(const in_drv_t *drv) no_abs: if (count == 0 && !have_abs) { + free(dev->kbits); free(dev); goto skip; } @@ -290,9 +295,13 @@ static void in_evdev_free(void *drv_data) } static const char * const * -in_evdev_get_key_names(int *count) +in_evdev_get_key_names(const in_drv_t *drv, int *count) { + const struct in_pdata *pdata = drv->pdata; *count = KEY_CNT; + + if (pdata->key_names) + return pdata->key_names; return in_evdev_keys; } @@ -364,6 +373,11 @@ static int in_evdev_update(void *drv_data, const int *binds, int *result) return 0; } +static int in_evdev_update_kbd(void *drv_data, const int *binds, int *result) +{ + return in_evdev_update(drv_data, binds, result); +} + static int in_evdev_update_analog(void *drv_data, int axis_id, int *result) { struct input_absinfo ainfo; @@ -415,7 +429,7 @@ static int in_evdev_set_blocking(in_evdev_t *dev, int y) return 0; } -static int in_evdev_get_config(void *drv_data, int what, int *val) +static int in_evdev_get_config(void *drv_data, enum in_cfg_opt what, int *val) { in_evdev_t *dev = drv_data; @@ -423,6 +437,8 @@ static int in_evdev_get_config(void *drv_data, int what, int *val) case IN_CFG_ABS_AXIS_COUNT: *val = dev->abs_count; break; + case IN_CFG_ANALOG_MAP_ULDR: + *val = dev->abs_to_digital; default: return -1; } @@ -430,7 +446,7 @@ static int in_evdev_get_config(void *drv_data, int what, int *val) return 0; } -static int in_evdev_set_config(void *drv_data, int what, int val) +static int in_evdev_set_config(void *drv_data, enum in_cfg_opt what, int val) { in_evdev_t *dev = drv_data; int tmp; @@ -449,6 +465,8 @@ static int in_evdev_set_config(void *drv_data, int what, int val) else if (dev->abs_lzone >= tmp) dev->abs_lzone = tmp - 1; break; + case IN_CFG_ANALOG_MAP_ULDR: + dev->abs_to_digital = val; default: return -1; } @@ -603,17 +621,18 @@ static int in_evdev_clean_binds(void *drv_data, int *binds, int *def_binds) } static const in_drv_t in_evdev_drv = { - .prefix = IN_EVDEV_PREFIX, - .probe = in_evdev_probe, - .free = in_evdev_free, - .get_key_names = in_evdev_get_key_names, - .clean_binds = in_evdev_clean_binds, - .get_config = in_evdev_get_config, - .set_config = in_evdev_set_config, - .update = in_evdev_update, - .update_analog = in_evdev_update_analog, - .update_keycode = in_evdev_update_keycode, - .menu_translate = in_evdev_menu_translate, + .prefix = IN_EVDEV_PREFIX, + .probe = in_evdev_probe, + .free = in_evdev_free, + .get_key_names = in_evdev_get_key_names, + .clean_binds = in_evdev_clean_binds, + .get_config = in_evdev_get_config, + .set_config = in_evdev_set_config, + .update = in_evdev_update, + .update_kbd = in_evdev_update_kbd, + .update_analog = in_evdev_update_analog, + .update_keycode = in_evdev_update_keycode, + .menu_translate = in_evdev_menu_translate, }; int in_evdev_init(const struct in_pdata *pdata) @@ -623,7 +642,7 @@ int in_evdev_init(const struct in_pdata *pdata) return -1; } - in_register_driver(&in_evdev_drv, pdata->defbinds, pdata); + in_register_driver(&in_evdev_drv, pdata->defbinds, pdata->kbd_map, pdata); return 0; }