#include "g-wolves.h" static int send_command(libusb_device_handle* hand, uint8_t command, uint8_t size, void* report, bool wireless) { report_header_t* head = report; head->report_size = size; head->command = command; if(wireless) head->wireless = 0x1; // Send command int res = libusb_control_transfer(hand, 0x21, // request type 0x09, // request (SET_REPORT) 0x300, // wValue (FEATURE << 8 | REPORT(0)) 0x2, // wIndex = 0x2 : interface report, REPORT_MAX_SIZE, // wLength = 64 0 /* timeout*/); if(res <= 0) return res; // Wait for mouse if necessary if(wireless) usleep(100000); // Get response report res = libusb_control_transfer(hand, 0xa1, // request type 0x01, // request (GET_REPORT) 0x300, // wValue (FEATURE << 8 | REPORT(0)) 0x2, // wIndex = 0x2 : interface report, REPORT_MAX_SIZE, // wLength = 64 0); return res; } void driver_init(void) {} uint32_t driver_getkey(void) { static int count = 0; count++; // Register ALL G-Wolves compatible devices uint16_t id = 0; switch(count) { case 1: id = HTX_4K_PRODUCT_ID_WIRED; break; case 2: id = HTX_4K_PRODUCT_ID_WIRELESS; break; case 3: id = HTS_PLUS_4K_PRODUCT_ID_WIRED; break; case 4: id = HTS_PLUS_4K_PRODUCT_ID_WIRELESS; break; case 5: id = HSK_PRO_ACE_PRODUCT_ID_WIRED; break; case 6: id = HSK_PRO_ACE_PRODUCT_ID_WIRELESS; break; default: id = 0; } if(id == 0) return 0; return (VENDOR_ID << 16) | id; } char* driver_get_name(void* handle) { libusb_device* dev = handle; struct libusb_device_descriptor desc; libusb_get_device_descriptor(dev, &desc); switch(desc.idProduct) { case HTX_4K_PRODUCT_ID_WIRED: case HTX_4K_PRODUCT_ID_WIRELESS: return HTX_4K_PRODUCT_NAME; case HTS_PLUS_4K_PRODUCT_ID_WIRED: case HTS_PLUS_4K_PRODUCT_ID_WIRELESS: return HTS_PLUS_4K_PRODUCT_NAME; case HSK_PRO_ACE_PRODUCT_ID_WIRED: case HSK_PRO_ACE_PRODUCT_ID_WIRELESS: return HSK_PRO_ACE_PRODUCT_NAME; default: return "Unknown G-Wolves mice"; } } char* driver_get_image(void* handle) { libusb_device* dev = handle; struct libusb_device_descriptor desc; libusb_get_device_descriptor(dev, &desc); switch(desc.idProduct) { case HTX_4K_PRODUCT_ID_WIRED: case HTX_4K_PRODUCT_ID_WIRELESS: return HTX_IMAGE; case HTS_PLUS_4K_PRODUCT_ID_WIRED: case HTS_PLUS_4K_PRODUCT_ID_WIRELESS: return HTS_PLUS_IMAGE; case HSK_PRO_ACE_PRODUCT_ID_WIRED: case HSK_PRO_ACE_PRODUCT_ID_WIRELESS: return HSK_PRO_IMAGE; default: return ""; } }