/**
 * 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");
    }
}
Esempio n. 2
0
/**
 * 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);
}