diff --git a/Controllers/PolychromeController/PolychromeController.cpp b/Controllers/PolychromeController/PolychromeController.cpp index 853a50904..ccf086dec 100644 --- a/Controllers/PolychromeController/PolychromeController.cpp +++ b/Controllers/PolychromeController/PolychromeController.cpp @@ -86,10 +86,11 @@ bool PolychromeController::IsAsrLed() return(asr_led); } -void PolychromeController::SetColorsAndSpeed(unsigned char red, unsigned char green, unsigned char blue, unsigned char speed) +void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char red, unsigned char green, unsigned char blue, unsigned char speed) { unsigned char color_speed_pkt[4] = { red, green, blue, speed }; - unsigned char select_all_pkt[1] = { 0x01 }; + unsigned char select_zone_pkt[1] = { led }; + unsigned char select_all_pkt[1] = { 0x00 }; if (asr_led) { @@ -130,6 +131,10 @@ void PolychromeController::SetColorsAndSpeed(unsigned char red, unsigned char gr } else { + /*-----------------------------------------------------*\ + | Select zone | + \*-----------------------------------------------------*/ + bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_ZONE_SELECT, 1, select_zone_pkt); /*-----------------------------------------------------*\ | Select all zones for now | \*-----------------------------------------------------*/ @@ -172,4 +177,4 @@ void PolychromeController::SetMode(unsigned char mode) { bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_MODE, 1, &active_mode); } -} \ No newline at end of file +} diff --git a/Controllers/PolychromeController/PolychromeController.h b/Controllers/PolychromeController/PolychromeController.h index bb6f79444..3337c3cd4 100644 --- a/Controllers/PolychromeController/PolychromeController.h +++ b/Controllers/PolychromeController/PolychromeController.h @@ -87,7 +87,7 @@ public: unsigned int GetLEDCount(); unsigned int GetMode(); bool IsAsrLed(); - void SetColorsAndSpeed(unsigned char red, unsigned char green, unsigned char blue, unsigned char speed); + void SetColorsAndSpeed(unsigned char led, unsigned char red, unsigned char green, unsigned char blue, unsigned char speed); void SetMode(unsigned char mode); unsigned short GetFirmwareVersion(); diff --git a/RGBController/RGBController_Polychrome.cpp b/RGBController/RGBController_Polychrome.cpp index 2c453ef2d..7ee665bc8 100644 --- a/RGBController/RGBController_Polychrome.cpp +++ b/RGBController/RGBController_Polychrome.cpp @@ -11,7 +11,52 @@ static const char* polychrome_zone_names[] = { - "Motherboard" + "AMD FAN LED Header", + "RGB LED 1 Header", + "PCH", + "IO Cover", +}; + +static const zone_type polychrome_zone_types[] = +{ + ZONE_TYPE_SINGLE, + ZONE_TYPE_SINGLE, + ZONE_TYPE_LINEAR, + ZONE_TYPE_LINEAR, +}; + +static const int polychrome_zone_sizes[] = +{ + 1, + 1, + 10, + 10, +}; + +static const char* polychrome_led_names[] = +{ + "AMD FAN LED Header", + "RGB LED 1 Header", + "PCH 0", + "PCH 1", + "PCH 2", + "PCH 3", + "PCH 4", + "PCH 5", + "PCH 6", + "PCH 7", + "PCH 8", + "PCH 9", + "IO Cover 0", + "IO Cover 1", + "IO Cover 2", + "IO Cover 3", + "IO Cover 4", + "IO Cover 5", + "IO Cover 6", + "IO Cover 7", + "IO Cover 8", + "IO Cover 9", }; RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychrome_ptr) @@ -237,7 +282,7 @@ void RGBController_Polychrome::SetupZones() /*---------------------------------------------------------*\ | Set up zones | \*---------------------------------------------------------*/ - for (unsigned int i = 0; i < polychrome->GetLEDCount(); i++) + for (unsigned int i = 0; i < 4; i++) { zone* new_zone = new zone(); @@ -245,10 +290,10 @@ void RGBController_Polychrome::SetupZones() | Set zone name to channel name | \*---------------------------------------------------------*/ new_zone->name = polychrome_zone_names[i]; - new_zone->type = ZONE_TYPE_SINGLE; - new_zone->leds_min = 1; - new_zone->leds_max = 1; - new_zone->leds_count = 1; + new_zone->type = polychrome_zone_types[i]; + new_zone->leds_min = polychrome_zone_sizes[i]; + new_zone->leds_max = polychrome_zone_sizes[i]; + new_zone->leds_count = polychrome_zone_sizes[i]; new_zone->matrix_map = NULL; /*---------------------------------------------------------*\ @@ -257,22 +302,28 @@ void RGBController_Polychrome::SetupZones() zones.push_back(*new_zone); } + unsigned int led_count = 0; /*---------------------------------------------------------*\ | Set up LEDs | \*---------------------------------------------------------*/ for(unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++) { - /*---------------------------------------------------------*\ - | Each zone only has one LED | - \*---------------------------------------------------------*/ - led* new_led = new led(); + for(unsigned int led_idx = 0; led_idx < zones[zone_idx].leds_count; led_idx++) + { + /*---------------------------------------------------------*\ + | Each zone only has one LED | + \*---------------------------------------------------------*/ + led* new_led = new led(); - new_led->name = polychrome_zone_names[zone_idx]; + new_led->name = polychrome_led_names[led_count]; - /*---------------------------------------------------------*\ - | Push new LED to LEDs vector | - \*---------------------------------------------------------*/ - leds.push_back(*new_led); + /*---------------------------------------------------------*\ + | Push new LED to LEDs vector | + \*---------------------------------------------------------*/ + leds.push_back(*new_led); + + led_count++; + } } SetupColors(); @@ -289,11 +340,7 @@ void RGBController_Polychrome::DeviceUpdateLEDs() { for (std::size_t led = 0; led < colors.size(); led++) { - unsigned char red = RGBGetRValue(colors[led]); - unsigned char grn = RGBGetGValue(colors[led]); - unsigned char blu = RGBGetBValue(colors[led]); - - polychrome->SetColorsAndSpeed(red, grn, blu, modes[active_mode].speed); + UpdateSingleLED(led); } } @@ -302,9 +349,13 @@ void RGBController_Polychrome::UpdateZoneLEDs(int /*zone*/) DeviceUpdateLEDs(); } -void RGBController_Polychrome::UpdateSingleLED(int /*led*/) +void RGBController_Polychrome::UpdateSingleLED(int led) { - DeviceUpdateLEDs(); + unsigned char red = RGBGetRValue(colors[led]); + unsigned char grn = RGBGetGValue(colors[led]); + unsigned char blu = RGBGetBValue(colors[led]); + + polychrome->SetColorsAndSpeed(led, red, grn, blu, modes[active_mode].speed); } void RGBController_Polychrome::SetCustomMode()