Add firmware version to Corsair Lighting Node driver

This commit is contained in:
Adam Honse 2020-03-10 15:57:46 -05:00
parent da9f6d7c72
commit e6c21f0a72
3 changed files with 41 additions and 0 deletions

View file

@ -54,6 +54,8 @@ CorsairLightingNodeController::CorsairLightingNodeController(libusb_device_handl
channel_leds[0] = 60;
channel_leds[1] = 60;
SendFirmwareRequest();
/*-----------------------------------------------------*\
| The Corsair Lighting Node Pro requires a packet within|
| 20 seconds of sending the lighting change in order |
@ -81,6 +83,11 @@ void CorsairLightingNodeController::KeepaliveThread()
}
}
std::string CorsairLightingNodeController::GetFirmwareString()
{
return(firmware_version);
}
void CorsairLightingNodeController::SetChannelEffect(unsigned char channel,
unsigned char num_leds,
unsigned char mode,
@ -276,6 +283,33 @@ void CorsairLightingNodeController::SetChannelLEDs(unsigned char channel, RGBCol
| Private packet sending functions. |
\*-------------------------------------------------------------------------------------------------*/
void CorsairLightingNodeController::SendFirmwareRequest()
{
int actual;
unsigned char usb_buf[64];
/*-----------------------------------------------------*\
| Zero out buffer |
\*-----------------------------------------------------*/
memset(usb_buf, 0x00, sizeof(usb_buf));
/*-----------------------------------------------------*\
| Set up Firmware Version Request packet |
\*-----------------------------------------------------*/
usb_buf[0x00] = CORSAIR_LIGHTING_NODE_PACKET_ID_FIRMWARE;
/*-----------------------------------------------------*\
| Send packet |
\*-----------------------------------------------------*/
libusb_interrupt_transfer(dev, endpoint, usb_buf, 64, &actual, 0);
libusb_interrupt_transfer(dev, 0x80 + endpoint, usb_buf, 64, &actual, 0);
if(actual > 0)
{
firmware_version = std::to_string(usb_buf[0x01]) + "." + std::to_string(usb_buf[0x02]) + "." + std::to_string(usb_buf[0x03]);
}
}
void CorsairLightingNodeController::SendDirect
(
unsigned char channel,

View file

@ -12,6 +12,7 @@
enum
{
CORSAIR_LIGHTING_NODE_PACKET_ID_FIRMWARE = 0x02, /* Get firmware version */
CORSAIR_LIGHTING_NODE_PACKET_ID_DIRECT = 0x32, /* Direct mode LED update packet */
CORSAIR_LIGHTING_NODE_PACKET_ID_COMMIT = 0x33, /* Commit changes packet */
CORSAIR_LIGHTING_NODE_PACKET_ID_BEGIN = 0x34, /* Begin effect packet */
@ -80,6 +81,8 @@ public:
CorsairLightingNodeController(libusb_device_handle* dev_handle, unsigned int dev_endpoint);
~CorsairLightingNodeController();
std::string GetFirmwareString();
unsigned int GetStripsOnChannel(unsigned int channel);
void SetChannelEffect(unsigned char channel,
@ -107,6 +110,9 @@ public:
private:
libusb_device_handle* dev;
unsigned int endpoint;
std::string firmware_version;
void SendFirmwareRequest();
void SendDirect
(

View file

@ -17,6 +17,7 @@ RGBController_CorsairLightingNode::RGBController_CorsairLightingNode(CorsairLigh
name = "Corsair Lighting Node Device";
description = "Corsair Lighting Node Device";
type = DEVICE_TYPE_LEDSTRIP;
version = corsair->GetFirmwareString();
mode Direct;
Direct.name = "Direct";