/** * Get the devices serial number * * Makes a request like normal, this must change a variable in the mouse as then we * tell it give us data (same request for get_battery in the mouse driver) and it * gives us a report. * * Supported Devices: * Razer Chroma * Razer BlackWidow Ultimate 2013* * * *Untested but should work */ void razer_get_serial(struct usb_device *usb_dev, unsigned char* serial_string) { struct razer_report response_report; struct razer_report request_report; int retval; int i; razer_prepare_report(&request_report); request_report.parameter_bytes_num = 0x16; request_report.reserved2 = 0x00; request_report.command = 0x82; request_report.sub_command = 0x00; request_report.command_parameters[0] = 0x00; request_report.crc = razer_calculate_crc(&request_report); retval = razer_get_usb_response(usb_dev, 0x01, &request_report, 0x01, &response_report, RAZER_BLACKWIDOW_CHROMA_WAIT_MIN_US, RAZER_BLACKWIDOW_CHROMA_WAIT_MAX_US); if(retval == 0) { if(response_report.report_start_marker == 0x02 && response_report.reserved2 == 0x00 && response_report.command == 0x82) { unsigned char* pointer = &response_report.sub_command; for(i = 0; i < 20; ++i) { serial_string[i] = *pointer; ++pointer; } } else { print_erroneous_report(&response_report, "razerkbd", "Invalid Report Type"); } } else { print_erroneous_report(&response_report, "razerkbd", "Invalid Report Length"); } }
/** * Send report to the mousemat */ int razer_get_report(struct usb_device *usb_dev, struct razer_report *request_report, struct razer_report *response_report) { return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_MOUSEMAT_WAIT_MIN_US, RAZER_MOUSEMAT_WAIT_MAX_US); }