From 35bf743005151f8a3dc435b1b6d28855a9e4ddf5 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sun, 30 Jul 2023 00:56:10 -0500 Subject: [PATCH] Add spectrum mode to Seagate controller --- .../RGBController_Seagate.cpp | 24 ++++++++++++++--- .../SeagateController/SeagateController.cpp | 27 +++++++++++++++++++ .../SeagateController/SeagateController.h | 7 +++++ 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/Controllers/SeagateController/RGBController_Seagate.cpp b/Controllers/SeagateController/RGBController_Seagate.cpp index 817079234..5c53fd0b6 100644 --- a/Controllers/SeagateController/RGBController_Seagate.cpp +++ b/Controllers/SeagateController/RGBController_Seagate.cpp @@ -11,10 +11,10 @@ /**------------------------------------------------------------------*\ @name Seagate @category Storage - @type USB - @save :x: - @direct :x: - @effects :x: + @type SCSI + @save :white_check_mark: + @direct :white_check_mark: + @effects :white_check_mark: @detectors DetectSeagateControllers @comment \*-------------------------------------------------------------------*/ @@ -50,6 +50,13 @@ RGBController_Seagate::RGBController_Seagate(SeagateController* controller_ptr) Breathing.color_mode = MODE_COLORS_PER_LED; modes.push_back(Breathing); + mode Spectrum; + Spectrum.name = "Spectrum Cycle"; + Spectrum.value = SEAGATE_MODE_SPECTRUM; + Spectrum.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_MANUAL_SAVE; + Spectrum.color_mode = MODE_COLORS_RANDOM; + modes.push_back(Spectrum); + SetupZones(); } @@ -119,11 +126,16 @@ void RGBController_Seagate::UpdateSingleLED(int led) case SEAGATE_MODE_BREATHING: controller->SetLEDBreathing(led, red, grn, blu, false); break; + + case SEAGATE_MODE_SPECTRUM: + controller->SetLEDsSpectrum(led, false); + break; } } void RGBController_Seagate::DeviceUpdateMode() { + DeviceUpdateLEDs(); } void RGBController_Seagate::DeviceSaveMode() @@ -147,6 +159,10 @@ void RGBController_Seagate::DeviceSaveMode() case SEAGATE_MODE_BREATHING: controller->SetLEDBreathing(led_idx, red, grn, blu, true); break; + + case SEAGATE_MODE_SPECTRUM: + controller->SetLEDsSpectrum(led_idx, true); + break; } } } diff --git a/Controllers/SeagateController/SeagateController.cpp b/Controllers/SeagateController/SeagateController.cpp index f38335d25..a596fa314 100644 --- a/Controllers/SeagateController/SeagateController.cpp +++ b/Controllers/SeagateController/SeagateController.cpp @@ -118,6 +118,33 @@ void SeagateController::SetLEDBreathing SendPacket(data, 0x14); } +void SeagateController::SetLEDsSpectrum + ( + unsigned char led_id, + bool save + ) +{ + /*-----------------------------------------------------------------------------*\ + | Create buffer to hold RGB control data | + \*-----------------------------------------------------------------------------*/ + unsigned char data[0x0A] = {0}; + data[0] = 0x0A; /* size of data packet */ + data[1] = 0x00; + data[2] = 0x01; + data[3] = 0x09; + data[4] = 0x01; + data[5] = 0x06; + data[6] = led_id; + data[7] = SEAGATE_MODE_SPECTRUM; + data[8] = 0x02; + data[9] = 0xB4; + + /*-----------------------------------------------------------------------------*\ + | Send packet | + \*-----------------------------------------------------------------------------*/ + SendPacket(data, 0x0A); +} + void SeagateController::SetLEDStatic ( unsigned char led_id, diff --git a/Controllers/SeagateController/SeagateController.h b/Controllers/SeagateController/SeagateController.h index 5c27a166e..09f274914 100644 --- a/Controllers/SeagateController/SeagateController.h +++ b/Controllers/SeagateController/SeagateController.h @@ -17,6 +17,7 @@ enum SEAGATE_MODE_STATIC = 0x01, /* Static mode */ SEAGATE_MODE_BLINK = 0x02, /* Blink mode */ SEAGATE_MODE_BREATHING = 0x03, /* Breathing mode */ + SEAGATE_MODE_SPECTRUM = 0x05, /* Spectrum mode */ }; class SeagateController @@ -45,6 +46,12 @@ public: bool save ); + void SetLEDsSpectrum + ( + unsigned char led_id, + bool save + ); + void SetLEDStatic ( unsigned char led_id,