1 /*
2 * This file is part of OpenCorsairLink.
3 * Copyright (C) 2017-2019 Sean Nelson <audiohacked@gmail.com>
4
5 * OpenCorsairLink is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * any later version.
9
10 * OpenCorsairLink is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14
15 * You should have received a copy of the GNU General Public License
16 * along with OpenCorsairLink. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 /*! \file protocol/asetek/core.c
20 * \brief Core Routines for RMi Series of Power Supplies
21 */
22 #include "device.h"
23 #include "driver.h"
24 #include "lowlevel/asetek.h"
25 #include "print.h"
26 #include "protocol/asetekpro.h"
27
28 #include <errno.h>
29 #include <libusb.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <unistd.h>
34
35 int
corsairlink_asetekpro_firmware_id(struct corsair_device_info * dev,struct libusb_device_handle * handle,char * firmware,uint8_t firmware_size)36 corsairlink_asetekpro_firmware_id(
37 struct corsair_device_info* dev,
38 struct libusb_device_handle* handle,
39 char* firmware,
40 uint8_t firmware_size )
41 {
42 int rr;
43 uint8_t response[64];
44 uint8_t commands[64];
45 memset( response, 0, sizeof( response ) );
46 memset( commands, 0, sizeof( commands ) );
47
48 commands[0] = AsetekProReadFirmwareVersion; // query firmware id
49
50 rr = dev->driver->write( handle, dev->write_endpoint, commands, 1 );
51 rr = dev->driver->read( handle, dev->read_endpoint, response, 7 );
52
53 msg_debug2(
54 "%02X %02X %02X %02X %02X %02X %02X\n", response[0], response[1], response[2], response[3],
55 response[4], response[5], response[6] );
56
57 // if (response[0] != 0xAA || response[1] != 0x12
58 // || response[2] != 0x34 || response[3] != selector)
59 // {
60 // msg_debug2("Bad Response\n");
61 // }
62
63 snprintf(
64 firmware, firmware_size, "%d.%d.%d.%d", response[3], response[4], response[5],
65 response[6] );
66
67 return rr;
68 }
69
70 int
corsairlink_asetekpro_hardware_version(struct corsair_device_info * dev,struct libusb_device_handle * handle)71 corsairlink_asetekpro_hardware_version(
72 struct corsair_device_info* dev,
73 struct libusb_device_handle* handle)
74
75 {
76 int rr;
77 uint8_t response[64];
78 uint8_t commands[64];
79 memset( response, 0, sizeof( response ) );
80 memset( commands, 0, sizeof( commands ) );
81
82 commands[0] = AsetekProReadHardwareVersion;
83
84 rr = dev->driver->write( handle, dev->write_endpoint, commands, 1 );
85 rr = dev->driver->read( handle, dev->read_endpoint, response, 7 );
86
87 msg_debug(
88 "hardware version returned: %02X %02X %02X %02X %02X %02X %02X\n", response[0], response[1], response[2], response[3],
89 response[4], response[5], response[6] );
90
91 return rr;
92 }
93