diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp b/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp index a70cd7ad..65282c3a 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralController.cpp @@ -80,10 +80,11 @@ void CorsairPeripheralController::SetLEDs(std::vectorcolors) break; case DEVICE_TYPE_MOUSE: + SetLEDsMouse(colors); break; case DEVICE_TYPE_MOUSEMAT: - SetLEDsMouse(colors); + SetLEDsMousemat(colors); break; } } @@ -142,6 +143,11 @@ void CorsairPeripheralController::SetLEDsMouse(std::vector colors) SubmitMouseColors(colors.size(), &colors[0]); } +void CorsairPeripheralController::SetLEDsMousemat(std::vector colors) +{ + SubmitMousematColors(colors.size(), &colors[0]); +} + void CorsairPeripheralController::SetLEDsKeyboardLimited(std::vector colors) { unsigned char data_pkt[216]; @@ -439,6 +445,44 @@ void CorsairPeripheralController::SubmitMouseColors usb_buf[0x02] = num_zones; usb_buf[0x03] = 0x00; + /*-----------------------------------------------------*\ + | Copy in colors in order | + \*-----------------------------------------------------*/ + for(unsigned int zone_idx = 0; zone_idx < num_zones; zone_idx++) + { + usb_buf[(zone_idx * 4) + 4] = zone_idx; + usb_buf[(zone_idx * 4) + 5] = RGBGetRValue(color_data[zone_idx]); + usb_buf[(zone_idx * 4) + 6] = RGBGetGValue(color_data[zone_idx]); + usb_buf[(zone_idx * 4) + 7] = RGBGetBValue(color_data[zone_idx]); + } + + /*-----------------------------------------------------*\ + | Send packet | + \*-----------------------------------------------------*/ + send_usb_msg(dev, usb_buf); +} + +void CorsairPeripheralController::SubmitMousematColors + ( + unsigned char num_zones, + RGBColor * color_data + ) +{ + char usb_buf[64]; + + /*-----------------------------------------------------*\ + | Zero out buffer | + \*-----------------------------------------------------*/ + memset(usb_buf, 0x00, sizeof(usb_buf)); + + /*-----------------------------------------------------*\ + | Set up Submit Mouse Colors packet | + \*-----------------------------------------------------*/ + usb_buf[0x00] = CORSAIR_COMMAND_WRITE; + usb_buf[0x01] = CORSAIR_PROPERTY_SUBMIT_MOUSE_COLOR; + usb_buf[0x02] = num_zones; + usb_buf[0x03] = 0x00; + /*-----------------------------------------------------*\ | Copy in colors in order | \*-----------------------------------------------------*/ @@ -454,4 +498,4 @@ void CorsairPeripheralController::SubmitMouseColors | Send packet | \*-----------------------------------------------------*/ send_usb_msg(dev, usb_buf); -} +} \ No newline at end of file diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralController.h b/Controllers/CorsairPeripheralController/CorsairPeripheralController.h index 3f018427..d810dcc4 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralController.h +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralController.h @@ -60,6 +60,7 @@ public: void SetLEDsKeyboardFull(std::vector colors); void SetLEDsKeyboardLimited(std::vector colors); void SetLEDsMouse(std::vector colors); + void SetLEDsMousemat(std::vector colors); private: hid_device* dev; @@ -96,4 +97,10 @@ private: unsigned char num_zones, RGBColor * color_data ); + + void SubmitMousematColors + ( + unsigned char num_zones, + RGBColor * color_data + ); }; diff --git a/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp b/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp index cca858a3..0f49ef70 100644 --- a/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp +++ b/Controllers/CorsairPeripheralController/CorsairPeripheralControllerDetect.cpp @@ -39,6 +39,8 @@ | Mouse product IDs | | List taken from ckb-next | \*-----------------------------------------------------*/ +#define CORSAIR_M65_PRO_PID 0x1B2E +#define CORSAIR_M65_RGB_ELITE_PID 0x1B5A /*-----------------------------------------------------*\ | Mousepad product IDs | @@ -73,6 +75,8 @@ static const corsair_node_device device_list[] = /*-----------------------------------------------------------------------------------------------------*\ | Mice | \*-----------------------------------------------------------------------------------------------------*/ + { CORSAIR_VID, CORSAIR_M65_PRO_PID, 1, "Corsair M65 PRO" }, + { CORSAIR_VID, CORSAIR_M65_RGB_ELITE_PID, 1, "Corsair M65 RGB Elite" }, /*-----------------------------------------------------------------------------------------------------*\ | Mousemats | \*-----------------------------------------------------------------------------------------------------*/ diff --git a/RGBController/RGBController_CorsairPeripheral.cpp b/RGBController/RGBController_CorsairPeripheral.cpp index 84e9b747..a71f4346 100644 --- a/RGBController/RGBController_CorsairPeripheral.cpp +++ b/RGBController/RGBController_CorsairPeripheral.cpp @@ -175,6 +175,7 @@ void RGBController_CorsairPeripheral::SetupZones() num_zones = 2; break; + case DEVICE_TYPE_MOUSE: case DEVICE_TYPE_MOUSEMAT: num_zones = 1; break; @@ -196,6 +197,7 @@ void RGBController_CorsairPeripheral::SetupZones() new_zone.leds_count = zone_sizes[zone_idx]; break; + case DEVICE_TYPE_MOUSE: case DEVICE_TYPE_MOUSEMAT: new_zone.name = "Mousemat Zone"; new_zone.leds_min = 15; @@ -219,6 +221,7 @@ void RGBController_CorsairPeripheral::SetupZones() new_led.name = led_names[led_idx]; break; + case DEVICE_TYPE_MOUSE: case DEVICE_TYPE_MOUSEMAT: new_led.name = "Mousemat LED "; new_led.name.append(std::to_string(led_idx + 1));