From 086f6beea02ecf42afb2fcfe0ccef91a5709dfc6 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Tue, 25 Mar 2014 00:08:09 +0100 Subject: unifying: add T650 features, start re firmware update The M525 was nice for testing stuff out, but it gets really interesting with the T650 which has a firmware update available. Details will be available in https://git.lekensteyn.nl/ltunify/tree/firmware-update.txt Add the initial feature set for T650, complete M525 feature set (commented out since unknown and seemingly uninteresting to implement). Signed-off-by: Peter Wu --- hw/usb/hid-logitech-hidpp20.c | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'hw/usb/hid-logitech-hidpp20.c') diff --git a/hw/usb/hid-logitech-hidpp20.c b/hw/usb/hid-logitech-hidpp20.c index 915a028b47..4e43eb26a1 100644 --- a/hw/usb/hid-logitech-hidpp20.c +++ b/hw/usb/hid-logitech-hidpp20.c @@ -232,6 +232,24 @@ static HIDPP20_FEATURE(feat_batterystatus) } } +static HIDPP20_FEATURE(feat_featureinfo) +{ + return -HIDPP20_ERR_CODE_UNSUPPORTED; /* TODO: figure out */ + switch (fn) { + default: + return -HIDPP20_ERR_CODE_INVALID_FUNCTION_ID; + } +} + +static HIDPP20_FEATURE(feat_dfucontrol) +{ + return -HIDPP20_ERR_CODE_UNSUPPORTED; /* TODO: figure out */ + switch (fn) { + default: + return -HIDPP20_ERR_CODE_INVALID_FUNCTION_ID; + } +} + static HIDPP20_FEATURE(feat_unknown) { /* Undocumented feature */ @@ -263,6 +281,34 @@ static const HidppFeature features_m525[] = { { 0x1B00, 0, feat_reprogcontrols }, { 0x1DF0, HIDPP20_FEAT_TYPE_HIDDEN, feat_unknown }, { 0x1F03, HIDPP20_FEAT_TYPE_HIDDEN, feat_unknown }, +// { 0x2100, 0, feat_verticalscrolling }, +// { 0x2120, 0, feat_hiresscrolling }, +// { 0x2200, 0, feat_mousepointer }, +}; + +static const HidppFeature features_t650[] = { + { 0x0001, 0, feat_featureset }, + { 0x0002, 0, feat_featureinfo }, + { 0x0003, 0, feat_devicefwversion }, + { 0x0005, 0, feat_devicename }, + { 0x1000, 0, feat_batterystatus }, + { 0x1D4B, 0, NULL }, /* WirelessDeviceStatus events */ + { 0x1DF3, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, + { 0x1B00, 0, feat_reprogcontrols }, + { 0x1F03, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, +// { 0x2100, 0, feat_verticalscrolling }, +// { 0x2120, 0, feat_hiresscrolling }, +// { 0x2200, 0, feat_mousepointer }, + { 0x00C0, 0, feat_dfucontrol }, + { 0x1E80, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, +// { 0x6100, 0, feat_touchpadrawxy }, + { 0x1860, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, + { 0x1E00, HIDPP20_FEAT_TYPE_HIDDEN, feat_unknown }, +// { 0x1B01, 0, feat_reprogcontrolsv2 }, + { 0x1890, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, + { 0x18E5, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, + { 0x18A0, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, + { 0x1830, HIDPP20_FEAT_TYPE_HIDDEN | HIDPP20_FEAT_TYPE_INTERNAL, feat_unknown }, }; void hidpp20_init_features(LHidDevice *hd) { @@ -271,6 +317,10 @@ void hidpp20_init_features(LHidDevice *hd) { hd->info.features = features_m525; hd->info.features_count = ARRAY_SIZE(features_m525); break; + case 0x4026: + hd->info.features = features_t650; + hd->info.features_count = ARRAY_SIZE(features_t650); + break; } } -- cgit v1.2.1