From 80d2282313fc20750a1ef7668b46bb0577cfbcfe Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 29 Jan 2020 12:32:32 -0600 Subject: [PATCH] Add modes and additional set functions to Polychrome controller --- .../PolychromeController.cpp | 35 ++-- .../PolychromeController.h | 7 +- RGBController/RGBController_Polychrome.cpp | 150 ++++++++++++++++-- 3 files changed, 156 insertions(+), 36 deletions(-) diff --git a/Controllers/PolychromeController/PolychromeController.cpp b/Controllers/PolychromeController/PolychromeController.cpp index d7cd4d9a..7692647a 100644 --- a/Controllers/PolychromeController/PolychromeController.cpp +++ b/Controllers/PolychromeController/PolychromeController.cpp @@ -76,45 +76,38 @@ unsigned int PolychromeController::GetLEDCount() unsigned int PolychromeController::GetMode() { - return(0); + return(active_mode); } -void PolychromeController::SetAllColors(unsigned char red, unsigned char green, unsigned char blue) +bool PolychromeController::IsAsrLed() { + return(asr_led); +} + +void PolychromeController::SetColor(unsigned char red, unsigned char green, unsigned char blue) +{ + unsigned char colors[3] = { red, green, blue }; + if (asr_led) { - + bus->i2c_smbus_write_block_data(dev, active_mode, 3, colors); } else { - unsigned char colors[3] = { red, green, blue }; - - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_COLOR, 3, colors); - } -} - -void PolychromeController::SetLEDColor(unsigned int /*led*/, unsigned char red, unsigned char green, unsigned char blue) -{ - if (asr_led) - { - - } - else - { - unsigned char colors[3] = { red, green, blue }; - bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_COLOR, 3, colors); } } void PolychromeController::SetMode(unsigned char mode) { + active_mode = mode; + if (asr_led) { - + bus->i2c_smbus_write_byte_data(dev, ASRLED_REG_MODE, active_mode); } else { - bus->i2c_smbus_write_byte_data(dev, POLYCHROME_REG_MODE, mode); + bus->i2c_smbus_write_byte_data(dev, POLYCHROME_REG_MODE, active_mode); } } diff --git a/Controllers/PolychromeController/PolychromeController.h b/Controllers/PolychromeController/PolychromeController.h index 60ec8ab0..4d525682 100644 --- a/Controllers/PolychromeController/PolychromeController.h +++ b/Controllers/PolychromeController/PolychromeController.h @@ -77,8 +77,8 @@ public: char* GetDeviceName(); unsigned int GetLEDCount(); unsigned int GetMode(); - void SetAllColors(unsigned char red, unsigned char green, unsigned char blue); - void SetLEDColor(unsigned int led, unsigned char red, unsigned char green, unsigned char blue); + bool IsAsrLed(); + void SetColor(unsigned char red, unsigned char green, unsigned char blue); void SetMode(unsigned char mode); unsigned short GetFirmwareVersion(); @@ -86,7 +86,8 @@ private: bool asr_led; char device_name[32]; unsigned int led_count; + unsigned char active_mode; i2c_smbus_interface* bus; polychrome_dev_id dev; -}; \ No newline at end of file +}; diff --git a/RGBController/RGBController_Polychrome.cpp b/RGBController/RGBController_Polychrome.cpp index 085f8a97..40eacd1d 100644 --- a/RGBController/RGBController_Polychrome.cpp +++ b/RGBController/RGBController_Polychrome.cpp @@ -18,7 +18,7 @@ void RGBController_Polychrome::UpdateLEDs() unsigned char grn = RGBGetGValue(colors[led]); unsigned char blu = RGBGetBValue(colors[led]); - polychrome->SetLEDColor(led, red, grn, blu); + polychrome->SetColor(red, grn, blu); } } @@ -43,15 +43,141 @@ RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychr name = polychrome->GetDeviceName(); - mode polychrome_modes[POLYCHROME_NUM_MODES]; - - polychrome_modes[0].name = "Static"; - polychrome_modes[1].name = "Breathing"; - polychrome_modes[2].name = "Flashing"; - - for (int i = 0; i < POLYCHROME_NUM_MODES; i++) + if(polychrome->IsAsrLed()) { - modes.push_back(polychrome_modes[i]); + mode Off; + Off.name = "Off"; + Off.value = ASRLED_MODE_OFF; + Off.flags = 0; + modes.push_back(Off); + + mode Static; + Static.name = "Static"; + Static.value = ASRLED_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_COLOR; + modes.push_back(Static); + + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = ASRLED_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; + modes.push_back(Breathing); + + mode Strobe; + Strobe.name = "Strobe"; + Strobe.value = ASRLED_MODE_FLASHING; + Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; + modes.push_back(Strobe); + + mode SpectrumCycle; + SpectrumCycle.name = "Spectrum Cycle"; + SpectrumCycle.value = ASRLED_MODE_SPECTRUM_CYCLE; + SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(SpectrumCycle); + + mode Random; + Random.name = "Random"; + Random.value = ASRLED_MODE_RANDOM; + Random.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Random); + + mode Music; + Music.name = "Music"; + Music.value = ASRLED_MODE_MUSIC; + Music.flags = MODE_FLAG_HAS_COLOR; + modes.push_back(Music); + + mode Wave; + Wave.name = "Wave"; + Wave.value = ASRLED_MODE_WAVE; + Wave.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Wave); + } + else + { + mode Off; + Off.name = "Off"; + Off.value = POLYCHROME_MODE_OFF; + Off.flags = 0; + modes.push_back(Off); + + mode Static; + Static.name = "Static"; + Static.value = POLYCHROME_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_COLOR; + modes.push_back(Static); + + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = POLYCHROME_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; + modes.push_back(Breathing); + + mode Strobe; + Strobe.name = "Strobe"; + Strobe.value = POLYCHROME_MODE_FLASHING; + Strobe.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_COLOR; + modes.push_back(Strobe); + + mode SpectrumCycle; + SpectrumCycle.name = "Spectrum Cycle"; + SpectrumCycle.value = POLYCHROME_MODE_SPECTRUM_CYCLE; + SpectrumCycle.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(SpectrumCycle); + + mode Random; + Random.name = "Random"; + Random.value = POLYCHROME_MODE_RANDOM; + Random.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Random); + + mode Wave; + Wave.name = "Wave"; + Wave.value = POLYCHROME_MODE_WAVE; + Wave.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Wave); + + mode Spring; + Spring.name = "Spring"; + Spring.value = POLYCHROME_MODE_SPRING; + Spring.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Spring); + + mode Stack; + Stack.name = "Stack"; + Stack.value = POLYCHROME_MODE_STACK; + Stack.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Stack); + + mode Cram; + Cram.name = "Cram"; + Cram.value = POLYCHROME_MODE_CRAM; + Cram.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Cram); + + mode Scan; + Scan.name = "Scan"; + Scan.value = POLYCHROME_MODE_SCAN; + Scan.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Scan); + + mode Neon; + Neon.name = "Neon"; + Neon.value = POLYCHROME_MODE_NEON; + Neon.flags = 0; + modes.push_back(Neon); + + mode Water; + Water.name = "Water"; + Water.value = POLYCHROME_MODE_WATER; + Water.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Water); + + mode Rainbow; + Rainbow.name = "Rainbow"; + Rainbow.value = POLYCHROME_MODE_RAINBOW; + Rainbow.flags = MODE_FLAG_HAS_SPEED; + modes.push_back(Rainbow); } colors.resize(polychrome->GetLEDCount()); @@ -84,10 +210,10 @@ RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychr void RGBController_Polychrome::SetCustomMode() { - SetMode(0); + SetMode(1); } void RGBController_Polychrome::UpdateMode() { - polychrome->SetMode(active_mode); -} \ No newline at end of file + polychrome->SetMode(modes[active_mode].value); +}