1
0
forked from drath/libratbag

tools: dump the action mapped to the buttons

The buttons are given as plain numbers, not sure if we should
use BTN_LEFT, BTN_RIGHT, etc instead.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
Benjamin Tissoires
2015-08-26 12:38:36 -04:00
parent 52683a866c
commit 11d1a111a0
3 changed files with 91 additions and 1 deletions

View File

@@ -752,6 +752,12 @@ ratbag_button_get_type(struct ratbag_button *button)
return button->type;
}
LIBRATBAG_EXPORT enum ratbag_button_action_type
ratbag_button_get_action_type(struct ratbag_button *button)
{
return button->action.type;
}
LIBRATBAG_EXPORT unsigned int
ratbag_button_get_button(struct ratbag_button *button)
{

View File

@@ -4,6 +4,7 @@ LIBRATBAG_0.1.0 {
global:
ratbag_create_context;
ratbag_button_ref;
ratbag_button_get_action_type;
ratbag_button_get_type;
ratbag_button_get_button;
ratbag_button_get_key;

View File

@@ -164,6 +164,85 @@ button_type_to_str(enum ratbag_button_type type)
return str;
}
static inline const char *
button_action_special_to_str(struct ratbag_button *button)
{
enum ratbag_button_action_special special;
const char *str = "UNKNOWN";
special = ratbag_button_get_special(button);
switch (special) {
case RATBAG_BUTTON_ACTION_SPECIAL_INVALID: str = "invalid"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_DOUBLECLICK: str = "double click"; break;
/* Wheel mappings */
case RATBAG_BUTTON_ACTION_SPECIAL_WHEEL_LEFT: str = "wheel left"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_WHEEL_RIGHT: str = "wheel right"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_WHEEL_UP: str = "wheel up"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_WHEEL_DOWN: str = "wheel down"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_RATCHET_MODE_SWITCH: str = "ratchet mode switch"; break;
/* DPI switch */
case RATBAG_BUTTON_ACTION_SPECIAL_RESOLUTION_CYCLE_UP: str = "resolution cycle up"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_RESOLUTION_UP: str = "resolution up"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_RESOLUTION_DOWN: str = "resolution down"; break;
/* Profile */
case RATBAG_BUTTON_ACTION_SPECIAL_PROFILE_CYCLE_UP: str = "profile cycle up"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_PROFILE_UP: str = "profile up"; break;
case RATBAG_BUTTON_ACTION_SPECIAL_PROFILE_DOWN: str = "profile down"; break;
}
return str;
}
static inline char *
button_action_button_to_str(struct ratbag_button *button)
{
char str[96];
sprintf(str, "button %d", ratbag_button_get_button(button));
return strdup(str);
}
static inline char *
button_action_key_to_str(struct ratbag_button *button)
{
const char *str;
unsigned int modifiers[10];
size_t m_size = 10;
str = libevdev_event_code_get_name(EV_KEY, ratbag_button_get_key(button, modifiers, &m_size));
if (!str)
str = "UNKNOWN";
return strdup(str);
}
static inline char *
button_action_to_str(struct ratbag_button *button)
{
enum ratbag_button_action_type type;
char *str;
type = ratbag_button_get_action_type(button);
switch (type) {
case RATBAG_BUTTON_ACTION_TYPE_BUTTON: str = button_action_button_to_str(button); break;
case RATBAG_BUTTON_ACTION_TYPE_KEY: str = button_action_key_to_str(button); break;
case RATBAG_BUTTON_ACTION_TYPE_SPECIAL: str = strdup(button_action_special_to_str(button)); break;
case RATBAG_BUTTON_ACTION_TYPE_MACRO: str = strdup("macro"); break;
case RATBAG_BUTTON_ACTION_TYPE_NONE: str = strdup("none"); break;
default:
error("type %d unknown\n", type);
str = strdup("UNKNOWN");
}
return str;
}
static struct ratbag_device *
ratbag_cmd_open_device(struct ratbag *ratbag, const char *path)
{
@@ -194,6 +273,7 @@ ratbag_cmd_info(struct ratbag *ratbag, uint32_t flags, int argc, char **argv)
struct ratbag_device *device;
struct ratbag_profile *profile, *active_profile;
struct ratbag_button *button;
char *action;
int num_profiles, num_buttons;
int i, b;
int rc = 1;
@@ -251,7 +331,10 @@ ratbag_cmd_info(struct ratbag *ratbag, uint32_t flags, int argc, char **argv)
button = ratbag_profile_get_button_by_index(profile, b);
type = ratbag_button_get_type(button);
printf(" Button: %d type %s\n", b, button_type_to_str(type));
action = button_action_to_str(button);
printf(" Button: %d type %s is mapped to '%s'\n",
b, button_type_to_str(type), action);
free(action);
button = ratbag_button_unref(button);
}