CM ARGB Controller now working for some modes

* Code SegFaults after a few change packets are sent
This commit is contained in:
Chris 2020-10-28 16:34:50 +11:00 committed by Adam Honse
parent 743a27d0a2
commit 90002d9eed
3 changed files with 28 additions and 19 deletions

View file

@ -147,17 +147,25 @@ void CMARGBController::SendUpdate()
bool boolARGB_header = true;
buffer[CM_ARGB_REPORT_BYTE] = 0x80;
buffer[CM_ARGB_COMMAND_BYTE] = 0x01;
buffer[CM_ARGB_MODE_BYTE] = 0x01;
buffer[CM_ARGB_FUNCTION_BYTE] = 0x01;
hid_write(dev, buffer, buffer_size);
hid_read_timeout(dev, buffer, buffer_size, CM_ARGB_INTERRUPT_TIMEOUT );
hid_read_timeout(dev, buffer, buffer_size, CM_ARGB_INTERRUPT_TIMEOUT);
buffer[CM_ARGB_COMMAND_BYTE] = (boolARGB_header) ? 0x0b : 0x04; //ARGB sends 0x0b (1011) RGB sends 0x04 (0100)
buffer[CM_ARGB_MODE_BYTE] = current_mode;
buffer[CM_ARGB_ZONE_BYTE] = argb_header_data[zone_index].header;
buffer[CM_ARGB_COLOUR_INDEX_BYTE] = GetColourIndex( current_red, current_green, current_blue );
buffer[CM_ARGB_SPEED_BYTE] = current_speed;
if ( boolARGB_header )
{
buffer[CM_ARGB_COMMAND_BYTE] = 0x0b; //ARGB sends 0x0b (1011) RGB sends 0x04 (0100)
buffer[CM_ARGB_FUNCTION_BYTE] = (false) ? 0x01 : 0x02; //This controls custom mode TODO
buffer[CM_ARGB_ZONE_BYTE] = argb_header_data[zone_index].header;
buffer[CM_ARGB_MODE_BYTE] = argb_mode_data[1][current_mode];
buffer[CM_ARGB_COLOUR_INDEX_BYTE] = GetColourIndex( current_red, current_green, current_blue );
buffer[CM_ARGB_SPEED_BYTE] = current_speed;
}
else
{
//Todo: 12V Analogue Header
}
hid_write(dev, buffer, buffer_size);
hid_read_timeout(dev, buffer, buffer_size, CM_ARGB_INTERRUPT_TIMEOUT );
hid_read_timeout(dev, buffer, buffer_size, CM_ARGB_INTERRUPT_TIMEOUT);
}

View file

@ -32,8 +32,9 @@ enum
{
CM_ARGB_REPORT_BYTE = 0,
CM_ARGB_COMMAND_BYTE = 1,
CM_ARGB_MODE_BYTE = 2,
CM_ARGB_FUNCTION_BYTE = 2,
CM_ARGB_ZONE_BYTE = 3,
CM_ARGB_MODE_BYTE = 4,
CM_ARGB_COLOUR_INDEX_BYTE = 5,
CM_ARGB_SPEED_BYTE = 6
};
@ -78,15 +79,15 @@ static argb_headers argb_header_data[5] =
enum
{
CM_ARGB_MODE_OFF = 1, //Turn off
CM_ARGB_MODE_SPECTRUM = 2, //Spectrum Mode
CM_ARGB_MODE_RELOAD = 3, //Reload Mode
CM_ARGB_MODE_RECOIL = 4, //Recoil Mode
CM_ARGB_MODE_BREATHING = 5, //Breathing Mode
CM_ARGB_MODE_REFILL = 6, //Refill Mode
CM_ARGB_MODE_DEMO = 7, //Demo Mode
CM_ARGB_MODE_FILLFLOW = 8, //Fill Flow Mode
CM_ARGB_MODE_RAINBOW = 9 //Rainbow Mode
CM_ARGB_MODE_OFF = 0, //Turn off
CM_ARGB_MODE_SPECTRUM = 1, //Spectrum Mode
CM_ARGB_MODE_RELOAD = 2, //Reload Mode
CM_ARGB_MODE_RECOIL = 3, //Recoil Mode
CM_ARGB_MODE_BREATHING = 4, //Breathing Mode
CM_ARGB_MODE_REFILL = 5, //Refill Mode
CM_ARGB_MODE_DEMO = 6, //Demo Mode
CM_ARGB_MODE_FILLFLOW = 7, //Fill Flow Mode
CM_ARGB_MODE_RAINBOW = 8 //Rainbow Mode
};
enum

View file

@ -24,7 +24,7 @@ static const unsigned int cm_pids[][4] =
{ // PID, Interface Type
{ COOLERMASTER_MP750_XL_PID, 0x00, DEVICE_TYPE_MOUSEMAT }, //Coolermaster MP750 (Extra Large)
{ COOLERMASTER_MP750_MEDIUM_PID, 0x00, DEVICE_TYPE_MOUSEMAT }, //Coolermaster MP750 (Medium)
{ COOLERMASTER_ARGB_PID, 0x01, DEVICE_TYPE_LEDSTRIP } //Coolermaster ARGB Controller
{ COOLERMASTER_ARGB_PID, 0x00, DEVICE_TYPE_LEDSTRIP } //Coolermaster ARGB Controller
};
/******************************************************************************************\