1
0
forked from drath/libratbag

Merge pull request #13 from cvuchener/small_fixes

Small fixes
This commit is contained in:
Peter Hutterer
2015-09-17 04:44:49 +10:00
3 changed files with 48 additions and 11 deletions

View File

@@ -288,6 +288,9 @@ static const struct ratbag_id hidpp10drv_table[] = {
/* G9 */
{ .id = LOGITECH_DEVICE(BUS_USB, 0xc048) },
/* G500 */
{ .id = LOGITECH_DEVICE(BUS_USB, 0xc068) },
/* G500s */
{ .id = LOGITECH_DEVICE(BUS_USB, 0xc24e),
.svg_filename = "logitech-g500s.svg" },

View File

@@ -65,6 +65,13 @@ hidpp10_get_unaligned_u16(uint8_t *buf)
return (buf[0] << 8) | buf[1];
}
static inline void
hidpp10_set_unaligned_u16le(uint8_t *buf, uint16_t value)
{
buf[0] = value & 0xFF;
buf[1] = value >> 8;
}
const char *device_types[0xFF] = {
[0x00] = "Unknown",
[0x01] = "Keyboard",
@@ -104,6 +111,16 @@ hidpp10_request_command(struct hidpp10_device *dev, union hidpp10_message *msg)
union hidpp10_message expected_error_dev = ERROR_MSG(msg, msg->msg.device_idx);
int ret;
uint8_t hidpp_err = 0;
int command_size = 0;
switch (msg->msg.report_id) {
case REPORT_ID_SHORT:
command_size = SHORT_MESSAGE_LENGTH;
break;
case REPORT_ID_LONG:
command_size = LONG_MESSAGE_LENGTH;
break;
}
/* create the expected header */
expected_header = *msg;
@@ -122,12 +139,12 @@ hidpp10_request_command(struct hidpp10_device *dev, union hidpp10_message *msg)
break;
}
log_buf_raw(ratbag, "sending: ", msg->data, SHORT_MESSAGE_LENGTH);
log_buf_raw(ratbag, " expected_header: ", expected_header.data, SHORT_MESSAGE_LENGTH);
log_buf_raw(ratbag, "sending: ", msg->data, command_size);
log_buf_raw(ratbag, " expected_header: ", expected_header.data, 4);
log_buf_raw(ratbag, " expected_error_dev: ", expected_error_dev.data, SHORT_MESSAGE_LENGTH);
/* Send the message to the Device */
ret = hidpp10_write_command(dev, msg->data, SHORT_MESSAGE_LENGTH);
ret = hidpp10_write_command(dev, msg->data, command_size);
if (ret)
goto out_err;
@@ -503,32 +520,32 @@ hidpp10_get_profile(struct hidpp10_device *dev, int8_t number, struct hidpp10_pr
for (i = 0; i < 13; i++) {
union _hidpp10_button_binding *button = &p->buttons[i];
switch (button->any.type) {
case 0x81:
case PROFILE_BUTTON_TYPE_BUTTON:
log_raw(ratbag,
"Button %d: button %d\n",
i,
ffs(hidpp10_get_unaligned_u16le(&button->button.button_flags_lsb)));
break;
case 0x82:
case PROFILE_BUTTON_TYPE_KEYS:
log_raw(ratbag,
"Button %d: key %d modifier %x\n",
i,
button->keyboard_keys.key,
button->keyboard_keys.modifier_flags);
break;
case 0x83:
case PROFILE_BUTTON_TYPE_SPECIAL:
log_raw(ratbag,
"Button %d: special %x\n",
i,
ffs(hidpp10_get_unaligned_u16le(&button->special.flags1)));
break;
case 0x84:
case PROFILE_BUTTON_TYPE_CONSUMER_CONTROL:
log_raw(ratbag,
"Button %d: consumer: %x\n",
i,
hidpp10_get_unaligned_u16(&button->consumer_control.consumer_control1));
break;
case 0x8F:
case PROFILE_BUTTON_TYPE_DISABLED:
log_raw(ratbag, "Button %d: disabled\n", i);
break;
default:
@@ -702,9 +719,9 @@ hidpp10_get_optical_sensor_settings(struct hidpp10_device *dev,
/* -------------------------------------------------------------------------- */
#define __CMD_CURRENT_RESOLUTION 0x63
#define CMD_CURRENT_RESOLUTION(idx, sub) { \
#define CMD_CURRENT_RESOLUTION(id, idx, sub) { \
.msg = { \
.report_id = REPORT_ID_SHORT, \
.report_id = id, \
.device_idx = idx, \
.sub_id = sub, \
.address = __CMD_CURRENT_RESOLUTION, \
@@ -718,7 +735,7 @@ hidpp10_get_current_resolution(struct hidpp10_device *dev,
uint16_t *yres)
{
unsigned idx = dev->index;
union hidpp10_message resolution = CMD_CURRENT_RESOLUTION(idx, GET_LONG_REGISTER_REQ);
union hidpp10_message resolution = CMD_CURRENT_RESOLUTION(REPORT_ID_SHORT, idx, GET_LONG_REGISTER_REQ);
int res;
log_raw(dev->ratbag_device->ratbag, "Fetching current resolution\n");
@@ -734,6 +751,20 @@ hidpp10_get_current_resolution(struct hidpp10_device *dev,
return 0;
}
int
hidpp10_set_current_resolution(struct hidpp10_device *dev,
uint16_t xres,
uint16_t yres)
{
unsigned idx = dev->index;
union hidpp10_message resolution = CMD_CURRENT_RESOLUTION(REPORT_ID_LONG, idx, SET_LONG_REGISTER_REQ);
hidpp10_set_unaligned_u16le(&resolution.data[4], xres / 50);
hidpp10_set_unaligned_u16le(&resolution.data[6], yres / 50);
return hidpp10_request_command(dev, &resolution);
}
/* -------------------------------------------------------------------------- */
/* 0x64: USB Refresh Rate */
/* -------------------------------------------------------------------------- */

View File

@@ -203,6 +203,9 @@ hidpp10_get_optical_sensor_settings(struct hidpp10_device *dev,
int
hidpp10_get_current_resolution(struct hidpp10_device *dev,
uint16_t *xres, uint16_t *yres);
int
hidpp10_set_current_resolution(struct hidpp10_device *dev,
uint16_t xres, uint16_t yres);
/* -------------------------------------------------------------------------- */
/* 0x64: USB Refresh Rate */