diff --git a/Controllers/RazerController/RGBController_Razer.cpp b/Controllers/RazerController/RGBController_Razer.cpp index f6449081a..bd103bc2f 100644 --- a/Controllers/RazerController/RGBController_Razer.cpp +++ b/Controllers/RazerController/RGBController_Razer.cpp @@ -37,16 +37,15 @@ RGBController_Razer::RGBController_Razer(RazerController* controller_ptr) Static.colors.resize(1); modes.push_back(Static); - // Breathing disabled, not yet implemented - //mode Breathing; - //Breathing.name = "Breathing"; - //Breathing.value = RAZER_MODE_BREATHING; - //Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; - //Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; - //Breathing.colors_min = 1; - //Breathing.colors_max = 2; - //Breathing.colors.resize(1); - //modes.push_back(Breathing); + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = RAZER_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR; + Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; + Breathing.colors_min = 1; + Breathing.colors_max = 2; + Breathing.colors.resize(1); + modes.push_back(Breathing); mode SpectrumCycle; SpectrumCycle.name = "Spectrum Cycle"; @@ -213,6 +212,10 @@ void RGBController_Razer::DeviceUpdateMode() break; case RAZER_MODE_BREATHING: + if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) + { + controller->SetModeBreathingRandom(); + } break; case RAZER_MODE_SPECTRUM_CYCLE: diff --git a/Controllers/RazerController/RazerController.cpp b/Controllers/RazerController/RazerController.cpp index 0c7fe92e1..1a3fb89f0 100644 --- a/Controllers/RazerController/RazerController.cpp +++ b/Controllers/RazerController/RazerController.cpp @@ -206,6 +206,11 @@ void RazerController::SetLEDs(RGBColor* colors) delete[] output_array; } +void RazerController::SetModeBreathingRandom() +{ + razer_set_mode_breathing_random(); +} + void RazerController::SetModeOff() { razer_set_mode_none(); @@ -432,6 +437,27 @@ razer_report RazerController::razer_create_device_mode_report(unsigned char mode return report; } +razer_report RazerController::razer_create_mode_breathing_random_extended_matrix_report(unsigned char variable_storage, unsigned char led_id) +{ + razer_report report = razer_create_report(0x0F, 0x02, 0x06); + + report.arguments[0] = variable_storage; + report.arguments[1] = led_id; + report.arguments[2] = 0x02; + + return report; +} + +razer_report RazerController::razer_create_mode_breathing_random_standard_matrix_report(unsigned char variable_storage, unsigned char led_id) +{ + razer_report report = razer_create_report(0x03, 0x0A, 0x08); + + report.arguments[0] = 0x03; + report.arguments[1] = 0x03; + + return report; +} + razer_report RazerController::razer_create_mode_custom_extended_matrix_report() { struct razer_report report = razer_create_report(0x0F, 0x02, 0x0C); @@ -850,6 +876,82 @@ void RazerController::razer_set_device_mode(unsigned char device_mode) razer_usb_send(&report); } +void RazerController::razer_set_mode_breathing_random() +{ + razer_report report; + + switch(dev_pid) + { + /*-----------------------------------------------------*\ + | These devices use an extended matrix report | + \*-----------------------------------------------------*/ + /*-----------------*\ + | Keyboards | + \*-----------------*/ + case RAZER_BLACKWIDOW_2019_PID: + case RAZER_BLACKWIDOW_ELITE_PID: + case RAZER_BLACKWIDOW_ESSENTIAL_PID: + case RAZER_CYNOSA_CHROMA_PID: + //case RAZER_CYNOSA_CHROMA_PRO_PID: + case RAZER_CYNOSA_LITE_PID: + case RAZER_CYNOSA_V2_PID: + case RAZER_HUNTSMAN_PID: + case RAZER_HUNTSMAN_ELITE_PID: + //case RAZER_HUNTSMAN_MINI_PID: + case RAZER_HUNTSMAN_TE_PID: + case RAZER_ORNATA_CHROMA_PID: + case RAZER_ORNATA_CHROMA_V2_PID: + case RAZER_TARTARUS_V2_PID: + + /*-----------------*\ + | Mice | + \*-----------------*/ + case RAZER_NAGA_CHROMA_PID: + case RAZER_NAGA_HEX_V2_PID: + + /*-----------------*\ + | Accessories | + \*-----------------*/ + case RAZER_BASE_STATION_V2_CHROMA_PID: + case RAZER_CHARGING_PAD_CHROMA_PID: + case RAZER_CHROMA_BASE_PID: + case RAZER_CHROMA_HDK_PID: + case RAZER_FIREFLY_HYPERFLUX_PID: + case RAZER_FIREFLY_V2_PID: + case RAZER_GOLIATHUS_CHROMA_PID: + case RAZER_GOLIATHUS_CHROMA_EXTENDED_PID: + case RAZER_KRAKEN_KITTY_EDITION_PID: + case RAZER_MOUSE_BUNGEE_V3_CHROMA_PID: + //case RAZER_MOUSE_DOCK_PID: + case RAZER_NOMMO_CHROMA_PID: + case RAZER_NOMMO_PRO_PID: + report = razer_create_mode_breathing_random_extended_matrix_report(RAZER_STORAGE_NO_SAVE, dev_led_id); + break; + + /*-----------------------------------------------------*\ + | These devices use a standard matrix report | + \*-----------------------------------------------------*/ + /*-----------------*\ + | Keyboards | + \*-----------------*/ + default: + case RAZER_BLACKWIDOW_CHROMA_PID: + case RAZER_BLACKWIDOW_CHROMA_TE_PID: + case RAZER_BLACKWIDOW_CHROMA_V2_PID: + + /*-----------------*\ + | Accessories | + \*-----------------*/ + case RAZER_CHROMA_MUG_PID: + case RAZER_CORE_PID: + case RAZER_FIREFLY_PID: + report = razer_create_mode_breathing_random_standard_matrix_report(RAZER_STORAGE_NO_SAVE, dev_led_id); + break; + } + + razer_usb_send(&report); +} + void RazerController::razer_set_mode_custom() { razer_report report; diff --git a/Controllers/RazerController/RazerController.h b/Controllers/RazerController/RazerController.h index f92b930d8..450a661e5 100644 --- a/Controllers/RazerController/RazerController.h +++ b/Controllers/RazerController/RazerController.h @@ -159,6 +159,9 @@ public: void SetLEDs(RGBColor* colors); + void SetModeBreathingRandom(); + void SetModeBreathingOneColor(unsigned char red, unsigned char grn, unsigned char blu); + void SetModeBreathingTwoColors(unsigned char r1, unsigned char g1, unsigned char b1, unsigned char r2, unsigned char g2, unsigned char b2); void SetModeOff(); void SetModeSpectrumCycle(); void SetModeStatic(unsigned char red, unsigned char grn, unsigned char blu); @@ -208,6 +211,8 @@ private: razer_report razer_create_custom_frame_extended_matrix_report(unsigned char row_index, unsigned char start_col, unsigned char stop_col, unsigned char* rgb_data); razer_report razer_create_custom_frame_standard_matrix_report(unsigned char row_index, unsigned char start_col, unsigned char stop_col, unsigned char* rgb_data); razer_report razer_create_device_mode_report(unsigned char mode, unsigned char param); + razer_report razer_create_mode_breathing_random_extended_matrix_report(unsigned char variable_storage, unsigned char led_id); + razer_report razer_create_mode_breathing_random_standard_matrix_report(unsigned char variable_storage, unsigned char led_id); razer_report razer_create_mode_custom_extended_matrix_report(); razer_report razer_create_mode_custom_standard_matrix_report(unsigned char variable_storage); razer_report razer_create_mode_none_extended_matrix_report(unsigned char variable_storage, unsigned char led_id); @@ -229,7 +234,9 @@ private: void razer_set_device_mode(unsigned char device_mode); - void razer_set_mode_breathing(); + void razer_set_mode_breathing_random(); + void razer_set_mode_breathing_one_color(unsigned char red, unsigned char grn, unsigned char blu); + void razer_set_mode_breathing_two_colors(unsigned char r1, unsigned char g1, unsigned char b1, unsigned char r2, unsigned char g2, unsigned char b2); void razer_set_mode_custom(); void razer_set_mode_none(); void razer_set_mode_spectrum_cycle();