1
0
forked from drath/libratbag

etekcity: retrieve the macros while reading the button

Avoids one for loop and will allow to store the macro in the button.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
Benjamin Tissoires
2015-09-08 11:34:56 -04:00
parent 7a679c9f97
commit a7a1f1a2a4

View File

@@ -464,7 +464,7 @@ etekcity_read_profile(struct ratbag_profile *profile, unsigned int index)
struct etekcity_settings_report *setting_report;
uint8_t *buf;
unsigned int report_rate;
unsigned int i, j;
unsigned int i;
int dpi_x, dpi_y, hz;
int rc;
@@ -521,35 +521,6 @@ etekcity_read_profile(struct ratbag_profile *profile, unsigned int index)
msleep(10);
for (i = 0; i < ETEKCITY_BUTTON_MAX; i++) {
const struct ratbag_button_action *action;
struct etekcity_macro *macro;
action = etekcity_button_to_action(profile, i);
if (!action || action->type != RATBAG_BUTTON_ACTION_TYPE_MACRO)
continue;
etekcity_set_config_profile(device, index, i);
macro = &drv_data->macros[index][i];
buf = (uint8_t*)macro;
rc = ratbag_hidraw_raw_request(device, ETEKCITY_REPORT_ID_MACRO,
buf, ETEKCITY_REPORT_SIZE_MACRO,
HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
log_info(device->ratbag,
"macro on button %d of profile %d is named '%s', and contains %d events:\n",
i, profile->index,
macro->name, macro->length);
for (j = 0; j < macro->length; j++) {
log_info(device->ratbag,
" - %s %s\n",
libevdev_event_code_get_name(EV_KEY, macro_mapping[macro->keys[j].keycode]),
macro->keys[j].flag & 0x80 ? "released" : "pressed");
}
}
msleep(10);
if (rc < ETEKCITY_REPORT_SIZE_PROFILE)
return;
@@ -592,6 +563,12 @@ static void
etekcity_read_button(struct ratbag_button *button)
{
const struct ratbag_button_action *action;
struct ratbag_device *device;
struct etekcity_macro *macro;
struct etekcity_data *drv_data;
uint8_t *buf;
unsigned j;
int rc;
action = etekcity_button_to_action(button->profile, button->index);
if (action)
@@ -602,6 +579,38 @@ etekcity_read_button(struct ratbag_button *button)
ratbag_button_enable_action_type(button, RATBAG_BUTTON_ACTION_TYPE_KEY);
ratbag_button_enable_action_type(button, RATBAG_BUTTON_ACTION_TYPE_SPECIAL);
ratbag_button_enable_action_type(button, RATBAG_BUTTON_ACTION_TYPE_MACRO);
if (action && action->type == RATBAG_BUTTON_ACTION_TYPE_MACRO) {
device = button->profile->device;
drv_data = ratbag_get_drv_data(device);
etekcity_set_config_profile(device,
button->profile->index,
button->index);
macro = &drv_data->macros[button->profile->index][button->index];
buf = (uint8_t*)macro;
rc = ratbag_hidraw_raw_request(device, ETEKCITY_REPORT_ID_MACRO,
buf, ETEKCITY_REPORT_SIZE_MACRO,
HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
if (rc != ETEKCITY_REPORT_SIZE_MACRO) {
log_error(device->ratbag,
"Unable to retrieve the macro for button %d of profile %d: %s (%d)\n",
button->index, button->profile->index,
rc < 0 ? strerror(-rc) : "not read enough", rc);
} else {
log_info(device->ratbag,
"macro on button %d of profile %d is named '%s', and contains %d events:\n",
button->index, button->profile->index,
macro->name, macro->length);
for (j = 0; j < macro->length; j++) {
log_info(device->ratbag,
" - %s %s\n",
libevdev_event_code_get_name(EV_KEY, macro_mapping[macro->keys[j].keycode]),
macro->keys[j].flag & 0x80 ? "released" : "pressed");
}
}
msleep(10);
}
}
static int