From 503cb7c7fe7dfa37af914d715bd7287a7c45447c Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Mon, 12 Apr 2021 00:17:33 -0500 Subject: [PATCH] Send resize command to Razer ARGB controller when resizing zones --- .../RGBController_RazerAddressable.cpp | 7 +++ .../RazerController/RazerController.cpp | 45 +++++++++++++++++++ Controllers/RazerController/RazerController.h | 3 ++ 3 files changed, 55 insertions(+) diff --git a/Controllers/RazerController/RGBController_RazerAddressable.cpp b/Controllers/RazerController/RGBController_RazerAddressable.cpp index 71de8d0f5..551a3f92b 100644 --- a/Controllers/RazerController/RGBController_RazerAddressable.cpp +++ b/Controllers/RazerController/RGBController_RazerAddressable.cpp @@ -192,6 +192,13 @@ void RGBController_RazerAddressable::ResizeZone(int zone, int new_size) { zones[zone].leds_count = new_size; + controller->SetAddressableZoneSizes(zones[0].leds_count, + zones[1].leds_count, + zones[2].leds_count, + zones[3].leds_count, + zones[4].leds_count, + zones[5].leds_count); + SetupZones(); } } diff --git a/Controllers/RazerController/RazerController.cpp b/Controllers/RazerController/RazerController.cpp index eaaff6a8d..e3b40a328 100644 --- a/Controllers/RazerController/RazerController.cpp +++ b/Controllers/RazerController/RazerController.cpp @@ -276,6 +276,13 @@ std::string RazerController::GetSerialString() return(razer_get_serial()); } +void RazerController::SetAddressableZoneSizes(unsigned char zone_1_size, unsigned char zone_2_size, unsigned char zone_3_size, unsigned char zone_4_size, unsigned char zone_5_size, unsigned char zone_6_size) +{ + razer_report report = razer_create_addressable_size_report(zone_1_size, zone_2_size, zone_3_size, zone_4_size, zone_5_size, zone_6_size); + + razer_usb_send(&report); +} + void RazerController::SetLEDs(RGBColor* colors) { /*---------------------------------------------------------*\ @@ -447,6 +454,44 @@ razer_report RazerController::razer_create_response() | Command report creation functions | \*---------------------------------------------------------------------------------*/ +razer_report RazerController::razer_create_addressable_size_report + ( + unsigned char zone_1_size, + unsigned char zone_2_size, + unsigned char zone_3_size, + unsigned char zone_4_size, + unsigned char zone_5_size, + unsigned char zone_6_size + ) +{ + razer_report report = razer_create_report(0x0F, 0x08, 0x0D); + + report.arguments[0] = 0x06; + report.arguments[1] = (zone_1_size == 0) ? 0x01 : 0x19; + report.arguments[2] = zone_1_size; + report.arguments[3] = (zone_2_size == 0) ? 0x02 : 0x19; + report.arguments[4] = zone_2_size; + report.arguments[5] = (zone_3_size == 0) ? 0x03 : 0x19; + report.arguments[6] = zone_3_size; + report.arguments[7] = (zone_4_size == 0) ? 0x04 : 0x19; + report.arguments[8] = zone_4_size; + report.arguments[9] = (zone_5_size == 0) ? 0x05 : 0x19; + report.arguments[10] = zone_5_size; + report.arguments[11] = (zone_6_size == 0) ? 0x06 : 0x19; + report.arguments[12] = zone_6_size; + + return report; +} + +razer_report RazerController::razer_create_addressable_startup_detect_report(bool enable) +{ + razer_report report = razer_create_report(0x00, 0x44, 0x01); + + report.arguments[0] = enable; + + return report; +} + razer_report RazerController::razer_create_brightness_extended_matrix_report(unsigned char variable_storage, unsigned char led_id, unsigned char brightness) { razer_report report = razer_create_report(0x0F, 0x04, 0x03); diff --git a/Controllers/RazerController/RazerController.h b/Controllers/RazerController/RazerController.h index 2e095cdbb..6fb8d1444 100644 --- a/Controllers/RazerController/RazerController.h +++ b/Controllers/RazerController/RazerController.h @@ -170,6 +170,7 @@ public: std::string GetSerialString(); void SetLEDs(RGBColor* colors); + void SetAddressableZoneSizes(unsigned char zone_1_size, unsigned char zone_2_size, unsigned char zone_3_size, unsigned char zone_4_size, unsigned char zone_5_size, unsigned char zone_6_size); void SetModeBreathingRandom(); void SetModeBreathingOneColor(unsigned char red, unsigned char grn, unsigned char blu); @@ -221,6 +222,8 @@ private: razer_report razer_create_report(unsigned char command_class, unsigned char command_id, unsigned char data_size); razer_report razer_create_response(); + razer_report razer_create_addressable_size_report(unsigned char zone_1_size, unsigned char zone_2_size, unsigned char zone_3_size, unsigned char zone_4_size, unsigned char zone_5_size, unsigned char zone_6_size); + razer_report razer_create_addressable_startup_detect_report(bool enable); razer_report razer_create_brightness_extended_matrix_report(unsigned char variable_storage, unsigned char led_id, unsigned char brightness); razer_report razer_create_brightness_standard_report(unsigned char variable_storage, unsigned char led_id, unsigned char brightness); razer_argb_report razer_create_custom_frame_argb_report(unsigned char row_index, unsigned char stop_col, unsigned char* rgb_data);