Mode selection and Set All Colors working using generic RGB interface for Aura and Corsair Vengeance RGB

This commit is contained in:
Adam Honse 2019-06-13 23:02:27 -05:00
parent f5d7f2e537
commit 8c3acbe889
12 changed files with 327 additions and 423 deletions

View file

@ -59,8 +59,7 @@ AuraController::AuraController(i2c_smbus_interface* bus, aura_dev_id dev)
effect_reg = AURA_REG_COLORS_EFFECT;
led_count = 5;
}
UpdateRGBController();
}
AuraController::~AuraController()
@ -178,39 +177,79 @@ void AuraController::AuraRegisterWriteBlock(aura_register reg, unsigned char * d
}
void AuraController::UpdateRGBController()
int RGBController_Aura::GetMode()
{
rgb.name = device_name;
mode aura_modes[AURA_NUMBER_MODES];
aura_modes[0].name = "Off";
aura_modes[1].name = "Static";
aura_modes[2].name = "Breathing";
aura_modes[3].name = "Flashing";
aura_modes[4].name = "Spectrum Cycle";
aura_modes[5].name = "Rainbow";
aura_modes[6].name = "Spectrum Cycle Breathing";
aura_modes[7].name = "Chase Fade";
aura_modes[8].name = "Spectrum Cycle Chase Fade";
aura_modes[9].name = "Chase";
aura_modes[10].name = "Spectrum Cycle Chase";
aura_modes[11].name = "Spectrum Cycle Wave";
aura_modes[12].name = "Chase Rainbow Pulse";
aura_modes[13].name = "Random Flicker";
for (int i = 0; i < AURA_NUMBER_MODES; i++)
if (aura->AuraRegisterRead(AURA_REG_DIRECT))
{
rgb.modes.push_back(aura_modes[i]);
return(0);
}
else
{
return(aura->AuraRegisterRead(AURA_REG_MODE) + 1);
}
}
void RGBController_Aura::SetMode(int mode)
{
if (mode == 0)
{
aura->SetDirect(true);
}
else
{
aura->SetDirect(false);
aura->SetMode(mode - 1);
}
}
void RGBController_Aura::SetAllLEDs(unsigned char red, unsigned char green, unsigned char blue)
{
if (GetMode() == 0)
{
aura->SetAllColorsDirect(red, green, blue);
}
else
{
aura->SetAllColorsEffect(red, green, blue);
}
}
RGBController_Aura::RGBController_Aura(AuraController* aura_ptr)
{
aura = aura_ptr;
name = aura->GetDeviceName();
mode aura_modes[AURA_NUMBER_MODES + 1];
aura_modes[0].name = "Direct";
aura_modes[1].name = "Off";
aura_modes[2].name = "Static";
aura_modes[3].name = "Breathing";
aura_modes[4].name = "Flashing";
aura_modes[5].name = "Spectrum Cycle";
aura_modes[6].name = "Rainbow";
aura_modes[7].name = "Spectrum Cycle Breathing";
aura_modes[8].name = "Chase Fade";
aura_modes[9].name = "Spectrum Cycle Chase Fade";
aura_modes[10].name = "Chase";
aura_modes[11].name = "Spectrum Cycle Chase";
aura_modes[12].name = "Spectrum Cycle Wave";
aura_modes[13].name = "Chase Rainbow Pulse";
aura_modes[14].name = "Random Flicker";
for (int i = 0; i < (AURA_NUMBER_MODES + 1); i++)
{
modes.push_back(aura_modes[i]);
}
for (int i = 0; i < led_count; i++)
for (int i = 0; i < aura->GetLEDCount(); i++)
{
led* new_led = new led();
new_led->name = "Aura LED";
rgb.leds.push_back(*new_led);
leds.push_back(*new_led);
}
zone new_zone;
@ -220,10 +259,12 @@ void AuraController::UpdateRGBController()
std::vector<int> zone_row;
for (int i = 0; i < led_count; i++)
for (int i = 0; i < aura->GetLEDCount(); i++)
{
zone_row.push_back(i);
}
new_zone.map.push_back(zone_row);
zones.push_back(new_zone);
}

View file

@ -78,7 +78,17 @@ private:
aura_register effect_reg;
i2c_smbus_interface * bus;
aura_dev_id dev;
RGBController rgb;
void UpdateRGBController();
};
class RGBController_Aura : public RGBController
{
public:
RGBController_Aura(AuraController* aura_ptr);
int GetMode();
void SetMode(int mode);
void SetAllLEDs(unsigned char red, unsigned char green, unsigned char blue);
private:
AuraController* aura;
};

View file

@ -41,4 +41,67 @@ void CorsairController::SetAllColorsDirect(unsigned char red, unsigned char gree
bus->i2c_smbus_write_byte_data(dev, CORSAIR_VENGEANCE_RGB_CMD_GREEN_VAL, green);
bus->i2c_smbus_write_byte_data(dev, CORSAIR_VENGEANCE_RGB_CMD_BLUE_VAL, blue);
bus->i2c_smbus_write_byte_data(dev, CORSAIR_VENGEANCE_RGB_CMD_MODE, CORSAIR_VENGEANCE_RGB_MODE_SINGLE);
}
void CorsairController::SetMode(unsigned char mode)
{
bus->i2c_smbus_write_byte_data(dev, CORSAIR_VENGEANCE_RGB_CMD_MODE, CORSAIR_VENGEANCE_RGB_MODE_SINGLE);
}
int RGBController_Corsair::GetMode()
{
return(CORSAIR_VENGEANCE_RGB_MODE_SINGLE);
}
void RGBController_Corsair::SetMode(int mode)
{
corsair->SetMode(mode);
}
void RGBController_Corsair::SetAllLEDs(unsigned char red, unsigned char green, unsigned char blue)
{
corsair->SetAllColorsDirect(red, green, blue);
}
RGBController_Corsair::RGBController_Corsair(CorsairController* corsair_ptr)
{
corsair = corsair_ptr;
name = corsair->GetDeviceName();
mode corsair_modes[CORSAIR_NUMBER_MODES];
corsair_modes[0].name = "Static";
corsair_modes[1].name = "Fade";
corsair_modes[2].name = "Pulse";
for (int i = 0; i < CORSAIR_NUMBER_MODES; i++)
{
modes.push_back(corsair_modes[i]);
}
for (int i = 0; i < corsair->GetLEDCount(); i++)
{
led* new_led = new led();
new_led->name = "Corsair LED";
leds.push_back(*new_led);
}
zone new_zone;
new_zone.name = "Corsair Zone";
new_zone.type = ZONE_TYPE_SINGLE;
std::vector<int> zone_row;
for (int i = 0; i < corsair->GetLEDCount(); i++)
{
zone_row.push_back(i);
}
new_zone.map.push_back(zone_row);
zones.push_back(new_zone);
}

View file

@ -8,6 +8,7 @@
\*-----------------------------------------*/
#include "i2c_smbus.h"
#include "RGBController.h"
#pragma once
@ -29,6 +30,7 @@ enum
CORSAIR_VENGEANCE_RGB_MODE_SINGLE = 0x00, /* Single Color Effect Mode */
CORSAIR_VENGEANCE_RGB_MODE_FADE = 0x01, /* Fade Through Colors */
CORSAIR_VENGEANCE_RGB_MODE_PULSE = 0x02, /* Pulse Through Colors */
CORSAIR_NUMBER_MODES /* Number of Corsair modes */
};
class CorsairController
@ -37,15 +39,27 @@ public:
CorsairController(i2c_smbus_interface* bus, corsair_dev_id dev);
~CorsairController();
char* GetDeviceName();
unsigned int GetLEDCount();
char* GetDeviceName();
unsigned int GetLEDCount();
void SetMode(unsigned char mode);
void SetAllColorsDirect(unsigned char red, unsigned char green, unsigned char blue);
void SetAllColorsDirect(unsigned char red, unsigned char green, unsigned char blue);
private:
char device_name[32];
unsigned int led_count;
i2c_smbus_interface * bus;
corsair_dev_id dev;
};
class RGBController_Corsair : public RGBController
{
public:
RGBController_Corsair(CorsairController* corsair_ptr);
int GetMode();
void SetMode(int mode);
void SetAllLEDs(unsigned char red, unsigned char green, unsigned char blue);
private:
CorsairController* corsair;
};

View file

@ -7,6 +7,8 @@
\******************************************************************************************/
#include "AuraController.h"
#include "CorsairController.h"
#include "RGBController.h"
#include "i2c_smbus.h"
#include <vector>
#include <stdio.h>
@ -35,8 +37,10 @@
#endif /* WIN32 */
std::vector<AuraController *> controllers;
std::vector<AuraController *> aura_controllers;
std::vector<CorsairController*> corsair_controllers;
std::vector<i2c_smbus_interface *> busses;
std::vector<RGBController*> rgb_controllers;
#ifdef WIN32
/******************************************************************************************\
@ -356,6 +360,30 @@ bool TestForAuraController(i2c_smbus_interface* bus, unsigned char address)
} /* TestForAuraController() */
/******************************************************************************************\
* *
* TestForCorsairController *
* *
* Tests the given address to see if a Corsair controller exists there. *
* *
\******************************************************************************************/
bool TestForCorsairController(i2c_smbus_interface* bus, unsigned char address)
{
bool pass = false;
int res = bus->i2c_smbus_write_quick(address, I2C_SMBUS_WRITE);
if (res >= 0)
{
pass = true;
}
return(pass);
} /* TestForCorsairController() */
/******************************************************************************************\
* *
* DetectAuraControllers *
@ -398,7 +426,7 @@ void DetectAuraControllers()
if (TestForAuraController(busses[bus], 0x70 + slot))
{
new_controller = new AuraController(busses[bus], 0x70 + slot);
controllers.push_back(new_controller);
aura_controllers.push_back(new_controller);
}
}
@ -406,34 +434,97 @@ void DetectAuraControllers()
if (TestForAuraController(busses[bus], 0x40))
{
new_controller = new AuraController(busses[bus], 0x40);
controllers.push_back(new_controller);
aura_controllers.push_back(new_controller);
}
// Check for Aura controller at 0x4E
if (TestForAuraController(busses[bus], 0x4E))
{
new_controller = new AuraController(busses[bus], 0x4E);
controllers.push_back(new_controller);
aura_controllers.push_back(new_controller);
}
// Check for Aura controller at 0x4F
if (TestForAuraController(busses[bus], 0x4F))
{
new_controller = new AuraController(busses[bus], 0x4F);
controllers.push_back(new_controller);
aura_controllers.push_back(new_controller);
}
// Check for Aura controller at 0x66
if (TestForAuraController(busses[bus], 0x66))
{
new_controller = new AuraController(busses[bus], 0x66);
controllers.push_back(new_controller);
aura_controllers.push_back(new_controller);
}
}
} /* DetectAuraControllers() */
/******************************************************************************************\
* *
* DetectCorsairControllers *
* *
* Detect Corsair controllers on the enumerated I2C busses. *
* *
* bus - pointer to i2c_smbus_interface where Aura device is connected *
* dev - I2C address of Aura device *
* *
\******************************************************************************************/
void DetectCorsairControllers()
{
CorsairController* new_controller;
for (unsigned int bus = 0; bus < busses.size(); bus++)
{
// Check for Corsair controller at 0x58
if (TestForCorsairController(busses[bus], 0x58))
{
new_controller = new CorsairController(busses[bus], 0x58);
corsair_controllers.push_back(new_controller);
}
// Check for Corsair controller at 0x59
if (TestForCorsairController(busses[bus], 0x59))
{
new_controller = new CorsairController(busses[bus], 0x59);
corsair_controllers.push_back(new_controller);
}
// Check for Corsair controller at 0x5A
if (TestForCorsairController(busses[bus], 0x5A))
{
new_controller = new CorsairController(busses[bus], 0x5A);
corsair_controllers.push_back(new_controller);
}
// Check for Corsair controller at 0x5B
if (TestForCorsairController(busses[bus], 0x5B))
{
new_controller = new CorsairController(busses[bus], 0x5B);
corsair_controllers.push_back(new_controller);
}
// Check for Corsair controller at 0x5C
if (TestForCorsairController(busses[bus], 0x5C))
{
new_controller = new CorsairController(busses[bus], 0x5C);
corsair_controllers.push_back(new_controller);
}
// Check for Corsair controller at 0x5D
if (TestForCorsairController(busses[bus], 0x5D))
{
new_controller = new CorsairController(busses[bus], 0x5D);
corsair_controllers.push_back(new_controller);
}
}
} /* DetectCorsairControllers() */
/******************************************************************************************\
* *
* DetectI2C *
@ -561,9 +652,24 @@ int main(int argc, char *argv[])
DetectI2CBusses();
DetectAuraControllers();
DetectCorsairControllers();
for (int i = 0; i < aura_controllers.size(); i++)
{
RGBController_Aura* aura_rgb = new RGBController_Aura(aura_controllers[i]);
rgb_controllers.push_back(aura_rgb);
}
for (int i = 0; i < corsair_controllers.size(); i++)
{
RGBController_Corsair* corsair_rgb = new RGBController_Corsair(corsair_controllers[i]);
rgb_controllers.push_back(corsair_rgb);
}
#if WIN32
OpenAuraSDKDialog dlg(busses, controllers);
OpenAuraSDKDialog dlg(busses, rgb_controllers);
dlg.DoModal();
return 0;

View file

@ -178,6 +178,7 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="AuraController.h" />
<ClInclude Include="CorsairController.h" />
<ClInclude Include="I2CDetectDialog.h" />
<ClInclude Include="i2c_smbus.h" />
<ClInclude Include="i2c_smbus_i801.h" />
@ -191,6 +192,7 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="AuraController.cpp" />
<ClCompile Include="CorsairController.cpp" />
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="I2CDetectDialog.cpp" />
<ClCompile Include="i2c_smbus.cpp" />

View file

@ -48,6 +48,9 @@
<ClInclude Include="RGBController.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CorsairController.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="OpenAuraSDK.cpp">
@ -80,6 +83,9 @@
<ClCompile Include="i2c_smbus_nuvoton_nct6793d.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CorsairController.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Resource.rc">

View file

@ -4,7 +4,7 @@
IMPLEMENT_DYNAMIC(OpenAuraSDKDialog, CDialogEx)
OpenAuraSDKDialog::OpenAuraSDKDialog(std::vector<i2c_smbus_interface *>& bus, std::vector<AuraController *>& control, CWnd* pParent)
OpenAuraSDKDialog::OpenAuraSDKDialog(std::vector<i2c_smbus_interface *>& bus, std::vector<RGBController *>& control, CWnd* pParent)
: CDialogEx(IDD_DIALOG_OPENAURASDK, pParent), busses(bus), controllers (control)
{
@ -22,37 +22,31 @@ void OpenAuraSDKDialog::DoDataExchange(CDataExchange* pDX)
BEGIN_MESSAGE_MAP(OpenAuraSDKDialog, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON_OPENAURASDK_I2CDETECT, &OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkI2cdetect)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_DIRECT_MODE, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkDirectMode)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_MODE, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectMode)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_OFF, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectOff)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_STATIC, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectStatic)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_BREATHING, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectBreathing)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_FLASHING, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectFlashing)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_SPECTRUM_CYCLE, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectSpectrumCycle)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_RAINBOW, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectRainbow)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_BREATHING_SPECTRUM, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkBreathingSpectrum)
ON_BN_CLICKED(IDC_RADIO_OPENAURASDK_EFFECT_CHASE_FADE, &OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectChaseFade)
ON_BN_CLICKED(IDC_BUTTON_OPENAURASDK_SET_COLORS, &OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkSetColors)
ON_CBN_CLOSEUP(IDC_COMBO_OPENAURASDK_DEVICE, &OpenAuraSDKDialog::OnCbnCloseupComboOpenaurasdkDevice)
ON_BN_CLICKED(IDC_BUTTON_OPENAURASDK_SET_COLORS_ALL, &OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkSetColorsAll)
ON_BN_CLICKED(IDC_BUTTON_OPENAURASDK_DUMP, &OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkDump)
ON_CBN_CLOSEUP(IDC_COMBO_OPENAURASDK_MODE, &OpenAuraSDKDialog::OnCbnCloseupComboOpenaurasdkMode)
END_MESSAGE_MAP()
BOOL OpenAuraSDKDialog::OnInitDialog()
{
CComboBox* aura_device_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE);
aura_device_box->AddString("All Devices");
CComboBox* controller_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE);
CComboBox* mode_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_MODE);
for (int i = 0; i < controllers.size(); i++)
{
aura_device_box->AddString(controllers[i]->GetDeviceName());
controller_box->AddString(controllers[i]->name.c_str());
}
aura_device_box->SetCurSel(0);
controller_box->SetCurSel(0);
CFont* myFont = new CFont();
myFont->CreateFontA(16, 0, 0, 0, FW_DONTCARE, false, false, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, _T("Consolas"));
for (int i = 0; i < controllers[0]->modes.size(); i++)
{
mode_box->AddString(controllers[0]->modes[i].name.c_str());
}
mode_box->SetCurSel(0);
return TRUE;
}
@ -64,378 +58,49 @@ void OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkI2cdetect()
dlg.DoModal();
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkDirectMode()
{
unsigned int aura_device = ((CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE))->GetCurSel();
if ( aura_device == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetDirect(true);
}
}
else
{
controllers[aura_device - 1]->SetDirect(true);
}
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectMode()
{
unsigned int aura_device = ((CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE))->GetCurSel();
if (aura_device == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetDirect(false);
}
}
else
{
controllers[aura_device - 1]->SetDirect(false);
}
}
void OpenAuraSDKDialog::setMode(unsigned char mode_val)
{
unsigned int aura_device = ((CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE))->GetCurSel();
if (aura_device == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetMode(mode_val);
}
}
else
{
controllers[aura_device - 1]->SetMode(mode_val);
}
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectOff()
{
setMode(AURA_MODE_OFF);
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectStatic()
{
setMode(AURA_MODE_STATIC);
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectBreathing()
{
setMode(AURA_MODE_BREATHING);
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectFlashing()
{
setMode(AURA_MODE_FLASHING);
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectSpectrumCycle()
{
setMode(AURA_MODE_SPECTRUM_CYCLE);
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectRainbow()
{
setMode(AURA_MODE_RAINBOW);
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkBreathingSpectrum()
{
setMode(AURA_MODE_SPECTRUM_CYCLE_BREATHING);
}
void OpenAuraSDKDialog::OnBnClickedRadioOpenaurasdkEffectChaseFade()
{
setMode(AURA_MODE_CHASE_FADE);
}
void OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkSetColors()
{
unsigned int aura_device = ((CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE))->GetCurSel();
if (aura_device == 0)
{
unsigned char direct = ((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_DIRECT_MODE))->GetCheck();
if (direct == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetLEDColorEffect( 0,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B) );
controllers[i]->SetLEDColorEffect( 1,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_B) );
controllers[i]->SetLEDColorEffect( 2,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_B) );
controllers[i]->SetLEDColorEffect( 3,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_B) );
controllers[i]->SetLEDColorEffect( 4,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_B) );
controllers[i]->SetDirect(false);
}
}
else
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetLEDColorDirect( 0,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B) );
controllers[i]->SetLEDColorDirect( 1,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_B) );
controllers[i]->SetLEDColorDirect( 2,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_B) );
controllers[i]->SetLEDColorDirect( 3,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_B) );
controllers[i]->SetLEDColorDirect( 4,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_B) );
controllers[i]->SetDirect(true);
}
}
}
else
{
unsigned char direct = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_DIRECT);
if (direct == 0)
{
controllers[aura_device - 1]->SetLEDColorEffect( 0,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B) );
controllers[aura_device - 1]->SetLEDColorEffect( 1,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_B) );
controllers[aura_device - 1]->SetLEDColorEffect( 2,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_B) );
controllers[aura_device - 1]->SetLEDColorEffect( 3,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_B) );
controllers[aura_device - 1]->SetLEDColorEffect( 4,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_B) );
}
else
{
controllers[aura_device - 1]->SetLEDColorDirect( 0,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B) );
controllers[aura_device - 1]->SetLEDColorDirect( 1,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_B) );
controllers[aura_device - 1]->SetLEDColorDirect( 2,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_B) );
controllers[aura_device - 1]->SetLEDColorDirect( 3,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_B) );
controllers[aura_device - 1]->SetLEDColorDirect( 4,
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_B) );
}
}
}
void OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkSetColorsAll()
{
unsigned int aura_device = ((CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE))->GetCurSel();
if (aura_device == 0)
{
unsigned char direct = ((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_DIRECT_MODE))->GetCheck();
if (direct == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetAllColorsEffect(GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B));
controllers[i]->SetDirect(false);
}
}
else
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetAllColorsDirect(GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B));
controllers[i]->SetDirect(true);
}
}
}
else
{
unsigned char direct = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_DIRECT);
if (direct == 0)
{
controllers[aura_device - 1]->SetAllColorsEffect(GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B));
}
else
{
controllers[aura_device - 1]->SetAllColorsDirect(GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B));
}
}
CComboBox* controller_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE);
controllers[controller_box->GetCurSel()]->SetAllLEDs(
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G),
GetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B)
);
}
void OpenAuraSDKDialog::OnCbnCloseupComboOpenaurasdkDevice()
{
unsigned int aura_device = ((CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE))->GetCurSel();
if (aura_device == 0)
CComboBox* controller_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE);
CComboBox* mode_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_MODE);
mode_box->ResetContent();
for (int i = 0; i < controllers[controller_box->GetCurSel()]->modes.size(); i++)
{
/*((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_DIRECT_MODE))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_MODE))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_OFF))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_STATIC))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_BREATHING))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_FLASHING))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_SPECTRUM_CYCLE))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_RAINBOW))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_BREATHING_SPECTRUM))->SetCheck(false);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_CHASE_FADE))->SetCheck(false);
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_0_R, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_0_G, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_0_B, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_1_R, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_1_G, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_1_B, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_2_R, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_2_G, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_2_B, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_3_R, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_3_G, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_3_B, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_4_R, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_4_G, "");
SetDlgItemText(IDC_EDIT_OPENAURASDK_LED_4_B, "");*/
}
else
{
unsigned char direct = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_DIRECT);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_DIRECT_MODE))->SetCheck(direct != 0);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_MODE))->SetCheck(direct == 0);
unsigned char mode = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_MODE);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_OFF))->SetCheck(mode == AURA_MODE_OFF);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_STATIC))->SetCheck(mode == AURA_MODE_STATIC);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_BREATHING))->SetCheck(mode == AURA_MODE_BREATHING);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_FLASHING))->SetCheck(mode == AURA_MODE_FLASHING);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_SPECTRUM_CYCLE))->SetCheck(mode == AURA_MODE_SPECTRUM_CYCLE);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_RAINBOW))->SetCheck(mode == AURA_MODE_RAINBOW);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_BREATHING_SPECTRUM))->SetCheck(mode == AURA_MODE_SPECTRUM_CYCLE_BREATHING);
((CButton*)GetDlgItem(IDC_RADIO_OPENAURASDK_EFFECT_CHASE_FADE))->SetCheck(mode == AURA_MODE_CHASE_FADE);
if (direct == 0)
{
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 0));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 2));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 1));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 3));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 5));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 4));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 6));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 8));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 7));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 9));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 11));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 10));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 12));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 14));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 13));
}
else
{
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 0));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 2));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_0_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 1));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 3));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 5));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_1_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 4));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 6));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 8));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_2_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 7));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 9));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 11));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_3_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 10));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_R, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 12));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_G, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 14));
SetDlgItemInt(IDC_EDIT_OPENAURASDK_LED_4_B, controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 13));
}
mode_box->AddString(controllers[controller_box->GetCurSel()]->modes[i].name.c_str());
}
mode_box->SetCurSel(controllers[controller_box->GetCurSel()]->GetMode());
}
void OpenAuraSDKDialog::OnBnClickedButtonOpenaurasdkDump()
{
unsigned int aura_device = ((CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE))->GetCurSel();
if (aura_device > 0)
{
((CButton*)GetDlgItem(IDC_BUTTON_OPENAURASDK_DUMP))->EnableWindow(false);
DumpAuraRegisters(controllers[aura_device - 1]);
((CButton*)GetDlgItem(IDC_BUTTON_OPENAURASDK_DUMP))->EnableWindow(true);
}
}
void OpenAuraSDKDialog::OnCbnCloseupComboOpenaurasdkMode()
{
CComboBox* controller_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_DEVICE);
CComboBox* mode_box = (CComboBox*)GetDlgItem(IDC_COMBO_OPENAURASDK_MODE);
controllers[controller_box->GetCurSel()]->SetMode(mode_box->GetCurSel());
}

View file

@ -4,7 +4,7 @@
#include <afxdialogex.h>
#include <vector>
#include "i2c_smbus.h"
#include "AuraController.h"
#include "RGBController.h"
#include "resource.h"
class OpenAuraSDKDialog : public CDialogEx
@ -12,7 +12,7 @@ class OpenAuraSDKDialog : public CDialogEx
DECLARE_DYNAMIC(OpenAuraSDKDialog)
public:
OpenAuraSDKDialog(std::vector<i2c_smbus_interface *>& bus, std::vector<AuraController *>& control, CWnd* pParent = NULL);
OpenAuraSDKDialog(std::vector<i2c_smbus_interface *>& bus, std::vector<RGBController *>& control, CWnd* pParent = NULL);
virtual ~OpenAuraSDKDialog();
virtual BOOL OnInitDialog();
@ -21,26 +21,17 @@ private:
protected:
std::vector<i2c_smbus_interface *>& busses;
std::vector<AuraController *>& controllers;
std::vector<RGBController *>& controllers;
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButtonOpenaurasdkI2cdetect();
afx_msg void OnBnClickedRadioOpenaurasdkDirectMode();
afx_msg void OnBnClickedRadioOpenaurasdkEffectMode();
afx_msg void OnBnClickedRadioOpenaurasdkEffectOff();
afx_msg void OnBnClickedRadioOpenaurasdkEffectStatic();
afx_msg void OnBnClickedRadioOpenaurasdkEffectBreathing();
afx_msg void OnBnClickedRadioOpenaurasdkEffectFlashing();
afx_msg void OnBnClickedRadioOpenaurasdkEffectSpectrumCycle();
afx_msg void OnBnClickedRadioOpenaurasdkEffectRainbow();
afx_msg void OnBnClickedRadioOpenaurasdkBreathingSpectrum();
afx_msg void OnBnClickedRadioOpenaurasdkEffectChaseFade();
afx_msg void OnBnClickedButtonOpenaurasdkSetColors();
afx_msg void OnCbnCloseupComboOpenaurasdkDevice();
afx_msg void OnBnClickedButtonOpenaurasdkSetColorsAll();
afx_msg void OnBnClickedButtonOpenaurasdkDump();
afx_msg void OnCbnCloseupComboOpenaurasdkMode();
};
#endif

View file

@ -46,4 +46,8 @@ public:
std::vector<led> leds; /* LEDs */
std::vector<zone> zones; /* Zones */
std::vector<mode> modes; /* Modes */
virtual int GetMode() = 0;
virtual void SetMode(int mode) = 0;
virtual void SetAllLEDs(unsigned char red, unsigned char green, unsigned char blue) = 0;
};

Binary file not shown.

View file

@ -39,6 +39,8 @@
#define IDC_BUTTON_OPENAURASDK_DUMP 1033
#define IDC_BUTTON_OPENAURASDK_SET_COLORS2 1034
#define IDC_BUTTON_OPENAURASDK_SET_COLORS 1034
#define IDC_COMBO_OPENAURASDK_DEVICE2 1035
#define IDC_COMBO_OPENAURASDK_MODE 1035
// Next default values for new objects
//