diff --git a/Controllers/CrucialController/CrucialController.cpp b/Controllers/CrucialController/CrucialController.cpp index b1cf23fc..4f313b95 100644 --- a/Controllers/CrucialController/CrucialController.cpp +++ b/Controllers/CrucialController/CrucialController.cpp @@ -7,6 +7,7 @@ | Adam Honse (CalcProgrammer1) 1/19/2020 | \*-----------------------------------------*/ +#include "RGBController.h" #include "CrucialController.h" #include @@ -46,10 +47,9 @@ void CrucialController::SetMode(unsigned char mode) SendEffectMode(mode, 0x10); } -void CrucialController::SetAllColorsDirect(unsigned char red, unsigned char green, unsigned char blue) +void CrucialController::SetAllColorsDirect(RGBColor* colors) { - SendEffectColors(red, green, blue); - SendEffectMode(CRUCIAL_MODE_STATIC, 0); + SendDirectColors(colors); } void CrucialController::SendEffectColors(unsigned char red, unsigned char green, unsigned char blue) @@ -79,6 +79,39 @@ void CrucialController::SendEffectMode(unsigned char mode, unsigned char speed) CrucialRegisterWrite(0x82F0, 0x84); } +void CrucialController::SendDirectColors(RGBColor* color_buf) +{ + //Red Channels + CrucialRegisterWrite(0x8300, RGBGetRValue(color_buf[0])); + CrucialRegisterWrite(0x8301, RGBGetRValue(color_buf[1])); + CrucialRegisterWrite(0x8302, RGBGetRValue(color_buf[2])); + CrucialRegisterWrite(0x8303, RGBGetRValue(color_buf[3])); + CrucialRegisterWrite(0x8304, RGBGetRValue(color_buf[4])); + CrucialRegisterWrite(0x8305, RGBGetRValue(color_buf[5])); + CrucialRegisterWrite(0x8306, RGBGetRValue(color_buf[6])); + CrucialRegisterWrite(0x8307, RGBGetRValue(color_buf[7])); + + //Green Channels + CrucialRegisterWrite(0x8340, RGBGetGValue(color_buf[0])); + CrucialRegisterWrite(0x8341, RGBGetGValue(color_buf[1])); + CrucialRegisterWrite(0x8342, RGBGetGValue(color_buf[2])); + CrucialRegisterWrite(0x8343, RGBGetGValue(color_buf[3])); + CrucialRegisterWrite(0x8344, RGBGetGValue(color_buf[4])); + CrucialRegisterWrite(0x8345, RGBGetGValue(color_buf[5])); + CrucialRegisterWrite(0x8346, RGBGetGValue(color_buf[6])); + CrucialRegisterWrite(0x8347, RGBGetGValue(color_buf[7])); + + //Blue Channels + CrucialRegisterWrite(0x8380, RGBGetBValue(color_buf[0])); + CrucialRegisterWrite(0x8381, RGBGetBValue(color_buf[1])); + CrucialRegisterWrite(0x8382, RGBGetBValue(color_buf[2])); + CrucialRegisterWrite(0x8383, RGBGetBValue(color_buf[3])); + CrucialRegisterWrite(0x8384, RGBGetBValue(color_buf[4])); + CrucialRegisterWrite(0x8385, RGBGetBValue(color_buf[5])); + CrucialRegisterWrite(0x8386, RGBGetBValue(color_buf[6])); + CrucialRegisterWrite(0x8387, RGBGetBValue(color_buf[7])); +} + unsigned char CrucialController::CrucialRegisterRead(crucial_register reg) { //Write Crucial register diff --git a/Controllers/CrucialController/CrucialController.h b/Controllers/CrucialController/CrucialController.h index f8fb9f0c..64b5ec65 100644 --- a/Controllers/CrucialController/CrucialController.h +++ b/Controllers/CrucialController/CrucialController.h @@ -7,6 +7,7 @@ | Adam Honse (CalcProgrammer1) 1/19/2020 | \*-----------------------------------------*/ +#include "RGBController.h" #include #include "i2c_smbus.h" @@ -40,7 +41,7 @@ public: std::string GetDeviceName(); std::string GetDeviceLocation(); unsigned int GetLEDCount(); - void SetAllColorsDirect(unsigned char red, unsigned char green, unsigned char blue); + void SetAllColorsDirect(RGBColor* colors); void SetMode(unsigned char mode); unsigned char CrucialRegisterRead(crucial_register reg); @@ -54,6 +55,7 @@ private: i2c_smbus_interface * bus; crucial_dev_id dev; + void SendDirectColors(RGBColor* color_buf); void SendEffectColors(unsigned char red, unsigned char green, unsigned char blue); void SendBrightness(unsigned char brightness); void SendEffectMode(unsigned char mode, unsigned char speed); diff --git a/Controllers/CrucialController/CrucialControllerDetect.cpp b/Controllers/CrucialController/CrucialControllerDetect.cpp index 8735e154..09ab18cb 100644 --- a/Controllers/CrucialController/CrucialControllerDetect.cpp +++ b/Controllers/CrucialController/CrucialControllerDetect.cpp @@ -6,6 +6,20 @@ #include #include +/*----------------------------------------------------------------------*\ +| This list contains the available SMBus addresses for Crucial RAM | +\*----------------------------------------------------------------------*/ +#define CRUCIAL_ADDRESS_COUNT 4 + +static const unsigned char crucial_addresses[] = +{ + 0x20, + 0x21, + 0x22, + 0x22 +}; + + /******************************************************************************************\ * * * TestForCrucialController * @@ -59,13 +73,16 @@ void DetectCrucialControllers(std::vector &busses, std::ve for (unsigned int bus = 0; bus < busses.size(); bus++) { - if (TestForCrucialController(busses[bus], 0x23)) + // Add Crucial controllers + for (unsigned int address_list_idx = 0; address_list_idx < CRUCIAL_ADDRESS_COUNT; address_list_idx++) { - new_crucial = new CrucialController(busses[bus], 0x23); - new_controller = new RGBController_Crucial(new_crucial); - rgb_controllers.push_back(new_controller); + if (TestForCrucialController(busses[bus], crucial_addresses[address_list_idx])) + { + new_crucial = new CrucialController(busses[bus], crucial_addresses[address_list_idx]); + new_controller = new RGBController_Crucial(new_crucial); + rgb_controllers.push_back(new_controller); + } } - } } /* DetectCrucialControllers() */ diff --git a/RGBController/RGBController_Crucial.cpp b/RGBController/RGBController_Crucial.cpp index 071f3827..fe7ade61 100644 --- a/RGBController/RGBController_Crucial.cpp +++ b/RGBController/RGBController_Crucial.cpp @@ -27,17 +27,17 @@ void RGBController_Crucial::SetCustomMode() void RGBController_Crucial::UpdateLEDs() { -crucial->SetAllColorsDirect(RGBGetRValue(colors[0]),RGBGetGValue(colors[0]),RGBGetBValue(colors[0])); +crucial->SetAllColorsDirect(&colors[0]); } void RGBController_Crucial::UpdateZoneLEDs(int zone) { - +crucial->SetAllColorsDirect(&colors[0]); } void RGBController_Crucial::UpdateSingleLED(int led) { - +crucial->SetAllColorsDirect(&colors[0]); } RGBController_Crucial::RGBController_Crucial(CrucialController * crucial_ptr) @@ -120,5 +120,24 @@ RGBController_Crucial::RGBController_Crucial(CrucialController * crucial_ptr) //Static.flags = 0; modes.push_back(Static); - colors.push_back(0x00000000); + zone new_zone; + new_zone.name = "DRAM"; + new_zone.type = ZONE_TYPE_LINEAR; + + std::vector new_zone_map; + + for(int led_idx = 0; led_idx < 8; led_idx++) + { + colors.push_back(0x00000000); + + led new_led; + new_led.name = "DRAM LED"; + + leds.push_back(new_led); + new_zone_map.push_back(led_idx); + } + + new_zone.map.push_back(new_zone_map); + + zones.push_back(new_zone); }