From 47a80ce71e73bcf5a8bdde318984150414f85faa Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Sat, 22 Jun 2013 00:38:02 +0200 Subject: Add support for SteelSeries Call of Duty --- README | 5 +++++ sensei-raw-ctl.c | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/README b/README index 0e7c32f..327e88f 100644 --- a/README +++ b/README @@ -10,6 +10,11 @@ If you don't fancy command line tools, there's also a basic GTK+ frontend available. On Ubuntu and its derivates, you should be able to find it in your System Settings. +Supported devices +================= + - SteelSeries Sensei Raw + - SteelSeries Call of Duty: Black Ops II + Installation ============ Build dependencies: cmake >= 2.8.5, help2man, libusb >= 1.0, diff --git a/sensei-raw-ctl.c b/sensei-raw-ctl.c index 821879d..3c2dbb6 100644 --- a/sensei-raw-ctl.c +++ b/sensei-raw-ctl.c @@ -81,10 +81,33 @@ out: return handle; } +/** Search for a device under various product ID's. */ +static libusb_device_handle * +find_device_list (int vendor, + const int *products, size_t n_products, int *error) +{ + int err = 0; + libusb_device_handle *handle; + + while (n_products--) + { + handle = find_device (vendor, *products++, &err); + if (handle) + return handle; + if (err) + break; + } + + if (error != NULL && err != 0) + *error = err; + return NULL; +} + // --- Device configuration ---------------------------------------------------- #define USB_VENDOR_STEELSERIES 0x1038 -#define USB_PRODUCT_STEELSERIES_SENSEI 0x1369 +#define USB_PRODUCT_STEELSERIES_SENSEI_RAW 0x1369 +#define USB_PRODUCT_STEELSERIES_COD_BO2 0x136f #define USB_GET_REPORT 0x01 #define USB_SET_REPORT 0x09 @@ -511,9 +534,15 @@ main (int argc, char *argv[]) ERROR (error_0, "libusb initialisation failed: %s\n", libusb_error_name (result)); + static const int products[] = + { + USB_PRODUCT_STEELSERIES_SENSEI_RAW, + USB_PRODUCT_STEELSERIES_COD_BO2 + }; + result = 0; - libusb_device_handle *device = find_device - (USB_VENDOR_STEELSERIES, USB_PRODUCT_STEELSERIES_SENSEI, &result); + libusb_device_handle *device = find_device_list (USB_VENDOR_STEELSERIES, + products, sizeof products / sizeof products[0], &result); if (!device) { if (result) -- cgit v1.2.3-70-g09d2