mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-05-05 13:16:08 -04:00
Move speed setting to mode function, add struct to hold board information, remove firmware version from name string and add it to firmware version field.
This commit is contained in:
@@ -14,8 +14,8 @@ PolychromeController::PolychromeController(i2c_smbus_interface* bus, polychrome_
|
||||
{
|
||||
this->bus = bus;
|
||||
this->dev = dev;
|
||||
|
||||
unsigned short fw_version = GetFirmwareVersion();
|
||||
|
||||
unsigned short fw_version = ReadFirmwareVersion();
|
||||
unsigned char major_version = fw_version >> 8;
|
||||
unsigned char minor_version = fw_version & 0xFF;
|
||||
|
||||
@@ -27,13 +27,13 @@ PolychromeController::PolychromeController(i2c_smbus_interface* bus, polychrome_
|
||||
\*-----------------------------------------------------*/
|
||||
if((major_version < 0x03) && (major_version > 0x00))
|
||||
{
|
||||
snprintf(device_name, 32, "ASRock ASR LED FW %d.%02d", major_version, minor_version);
|
||||
device_name = "ASRock ASR LED";
|
||||
led_count = 1;
|
||||
asr_led = true;
|
||||
}
|
||||
else if(major_version == 0x03)
|
||||
{
|
||||
snprintf(device_name, 32, "ASRock Polychrome FW %d.%02d", major_version, minor_version);
|
||||
device_name = "ASRock Polychrome";
|
||||
led_count = 1;
|
||||
asr_led = false;
|
||||
}
|
||||
@@ -49,12 +49,21 @@ PolychromeController::~PolychromeController()
|
||||
|
||||
}
|
||||
|
||||
char* PolychromeController::GetDeviceName()
|
||||
std::string PolychromeController::GetDeviceName()
|
||||
{
|
||||
return(device_name);
|
||||
}
|
||||
|
||||
unsigned short PolychromeController::GetFirmwareVersion()
|
||||
std::string PolychromeController::GetFirmwareVersion()
|
||||
{
|
||||
unsigned short fw_version = ReadFirmwareVersion();
|
||||
unsigned char major_version = fw_version >> 8;
|
||||
unsigned char minor_version = fw_version & 0xFF;
|
||||
|
||||
return(std::to_string(major_version) + "." + std::to_string(minor_version));
|
||||
}
|
||||
|
||||
unsigned short PolychromeController::ReadFirmwareVersion()
|
||||
{
|
||||
// The firmware register holds two bytes, so the first read should return 2
|
||||
// If not, report invalid firmware revision FFFF
|
||||
@@ -86,11 +95,10 @@ bool PolychromeController::IsAsrLed()
|
||||
return(asr_led);
|
||||
}
|
||||
|
||||
void PolychromeController::SetColorsAndSpeed(unsigned char led, 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 color_speed_pkt[4] = { red, green, blue, speed };
|
||||
unsigned char select_zone_pkt[1] = { led };
|
||||
unsigned char select_all_pkt[1] = { 0x00 };
|
||||
unsigned char color_speed_pkt[4] = { red, green, blue, active_speed };
|
||||
unsigned char select_led_pkt[1] = { led };
|
||||
|
||||
if (asr_led)
|
||||
{
|
||||
@@ -119,7 +127,7 @@ void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char re
|
||||
\*-----------------------------------------------------*/
|
||||
case ASRLED_MODE_RANDOM:
|
||||
case ASRLED_MODE_WAVE:
|
||||
bus->i2c_smbus_write_block_data(dev, active_mode, 1, &speed);
|
||||
bus->i2c_smbus_write_block_data(dev, active_mode, 1, &active_speed);
|
||||
break;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
@@ -132,18 +140,35 @@ void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char re
|
||||
else
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Select zone |
|
||||
| Select LED |
|
||||
\*-----------------------------------------------------*/
|
||||
bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_ZONE_SELECT, 1, select_zone_pkt);
|
||||
/*-----------------------------------------------------*\
|
||||
| Select all zones for now |
|
||||
\*-----------------------------------------------------*/
|
||||
bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_ZONE_SELECT_ALL, 1, select_all_pkt);
|
||||
bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_SELECT, 1, select_led_pkt);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Polychrome firmware always writes color to fixed reg |
|
||||
\*-----------------------------------------------------*/
|
||||
bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_COLOR, 3, color_speed_pkt);
|
||||
}
|
||||
}
|
||||
|
||||
void PolychromeController::SetMode(unsigned char mode, unsigned char speed)
|
||||
{
|
||||
unsigned char led_count_pkt[1] = { 0x00 };
|
||||
active_mode = mode;
|
||||
active_speed = speed;
|
||||
|
||||
if(asr_led)
|
||||
{
|
||||
bus->i2c_smbus_write_block_data(dev, ASRLED_REG_MODE, 1, &active_mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_MODE, 1, &active_mode);
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Select a single LED |
|
||||
\*-----------------------------------------------------*/
|
||||
bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_LED_COUNT, 0, led_count_pkt);
|
||||
|
||||
switch(active_mode)
|
||||
{
|
||||
@@ -161,20 +186,5 @@ void PolychromeController::SetColorsAndSpeed(unsigned char led, unsigned char re
|
||||
bus->i2c_smbus_write_block_data(dev, active_mode, 1, &speed);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void PolychromeController::SetMode(unsigned char mode)
|
||||
{
|
||||
active_mode = mode;
|
||||
|
||||
if (asr_led)
|
||||
{
|
||||
bus->i2c_smbus_write_block_data(dev, ASRLED_REG_MODE, 1, &active_mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
bus->i2c_smbus_write_block_data(dev, POLYCHROME_REG_MODE, 1, &active_mode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "i2c_smbus.h"
|
||||
#include <string>
|
||||
|
||||
#pragma once
|
||||
|
||||
@@ -45,8 +46,8 @@ enum
|
||||
{
|
||||
POLYCHROME_REG_FIRMWARE_VER = 0x00, /* Firmware version Major.Minor */
|
||||
POLYCHROME_REG_MODE = 0x30, /* Mode selection register */
|
||||
POLYCHROME_REG_ZONE_SELECT = 0x31, /* Zone selection register */
|
||||
POLYCHROME_REG_ZONE_SELECT_ALL = 0x32, /* Zone select all register */
|
||||
POLYCHROME_REG_LED_SELECT = 0x31, /* LED selection register */
|
||||
POLYCHROME_REG_LED_COUNT = 0x32, /* Additional LED count register */
|
||||
POLYCHROME_REG_COLOR = 0x34, /* Color register: Red, Green, Blue */
|
||||
};
|
||||
|
||||
@@ -83,20 +84,22 @@ public:
|
||||
PolychromeController(i2c_smbus_interface* bus, polychrome_dev_id dev);
|
||||
~PolychromeController();
|
||||
|
||||
char* GetDeviceName();
|
||||
std::string GetDeviceName();
|
||||
std::string GetFirmwareVersion();
|
||||
unsigned int GetLEDCount();
|
||||
unsigned int GetMode();
|
||||
bool IsAsrLed();
|
||||
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();
|
||||
void SetColorsAndSpeed(unsigned char led, unsigned char red, unsigned char green, unsigned char blue);
|
||||
void SetMode(unsigned char mode, unsigned char speed);
|
||||
|
||||
private:
|
||||
bool asr_led;
|
||||
char device_name[32];
|
||||
std::string device_name;
|
||||
unsigned int led_count;
|
||||
unsigned char active_mode;
|
||||
unsigned char active_speed;
|
||||
i2c_smbus_interface* bus;
|
||||
polychrome_dev_id dev;
|
||||
|
||||
unsigned short ReadFirmwareVersion();
|
||||
};
|
||||
|
||||
@@ -9,54 +9,129 @@
|
||||
|
||||
#include "RGBController_Polychrome.h"
|
||||
|
||||
static const char* polychrome_zone_names[] =
|
||||
#define ASROCK_MAX_ZONES 4
|
||||
#define ASROCK_MAX_LEDS 22
|
||||
|
||||
typedef struct
|
||||
{
|
||||
"AMD FAN LED Header",
|
||||
"RGB LED 1 Header",
|
||||
"PCH",
|
||||
"IO Cover",
|
||||
const char* zone_names[ASROCK_MAX_ZONES];
|
||||
const zone_type zone_types[ASROCK_MAX_ZONES];
|
||||
const int zone_sizes[ASROCK_MAX_ZONES];
|
||||
const char* led_names[ASROCK_MAX_LEDS];
|
||||
} asrock_layout;
|
||||
|
||||
static const asrock_layout ASRock_B450_Steel_Legend =
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| zone_names |
|
||||
\*---------------------------------------------------------*/
|
||||
{
|
||||
"AMD FAN LED Header",
|
||||
"RGB LED 1 Header",
|
||||
"PCH",
|
||||
"IO Cover",
|
||||
},
|
||||
/*---------------------------------------------------------*\
|
||||
| zone_types |
|
||||
\*---------------------------------------------------------*/
|
||||
{
|
||||
ZONE_TYPE_SINGLE,
|
||||
ZONE_TYPE_SINGLE,
|
||||
ZONE_TYPE_LINEAR,
|
||||
ZONE_TYPE_LINEAR,
|
||||
},
|
||||
/*---------------------------------------------------------*\
|
||||
| zone_sizes |
|
||||
\*---------------------------------------------------------*/
|
||||
{
|
||||
1,
|
||||
1,
|
||||
10,
|
||||
10,
|
||||
},
|
||||
/*---------------------------------------------------------*\
|
||||
| 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",
|
||||
}
|
||||
};
|
||||
|
||||
static const zone_type polychrome_zone_types[] =
|
||||
static const asrock_layout ASRock_B450M_Steel_Legend =
|
||||
{
|
||||
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",
|
||||
/*---------------------------------------------------------*\
|
||||
| zone_names |
|
||||
\*---------------------------------------------------------*/
|
||||
{
|
||||
"AMD FAN LED Header",
|
||||
"RGB LED 1 Header",
|
||||
"PCH",
|
||||
"IO Cover",
|
||||
},
|
||||
/*---------------------------------------------------------*\
|
||||
| zone_types |
|
||||
\*---------------------------------------------------------*/
|
||||
{
|
||||
ZONE_TYPE_SINGLE,
|
||||
ZONE_TYPE_SINGLE,
|
||||
ZONE_TYPE_LINEAR,
|
||||
ZONE_TYPE_LINEAR,
|
||||
},
|
||||
/*---------------------------------------------------------*\
|
||||
| zone_sizes |
|
||||
\*---------------------------------------------------------*/
|
||||
{
|
||||
1,
|
||||
1,
|
||||
8,
|
||||
10,
|
||||
},
|
||||
/*---------------------------------------------------------*\
|
||||
| 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",
|
||||
"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)
|
||||
@@ -64,8 +139,9 @@ RGBController_Polychrome::RGBController_Polychrome(PolychromeController* polychr
|
||||
polychrome = polychrome_ptr;
|
||||
|
||||
name = polychrome->GetDeviceName();
|
||||
version = polychrome->GetFirmwareVersion();
|
||||
type = DEVICE_TYPE_MOTHERBOARD;
|
||||
description = "ASRock Polychrome Device";
|
||||
description = "ASRock ASR LED/Polychrome Device";
|
||||
|
||||
if(polychrome->IsAsrLed())
|
||||
{
|
||||
@@ -289,11 +365,11 @@ void RGBController_Polychrome::SetupZones()
|
||||
/*---------------------------------------------------------*\
|
||||
| Set zone name to channel name |
|
||||
\*---------------------------------------------------------*/
|
||||
new_zone->name = polychrome_zone_names[i];
|
||||
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->name = ASRock_B450_Steel_Legend.zone_names[i];
|
||||
new_zone->type = ASRock_B450_Steel_Legend.zone_types[i];
|
||||
new_zone->leds_min = ASRock_B450_Steel_Legend.zone_sizes[i];
|
||||
new_zone->leds_max = ASRock_B450_Steel_Legend.zone_sizes[i];
|
||||
new_zone->leds_count = ASRock_B450_Steel_Legend.zone_sizes[i];
|
||||
new_zone->matrix_map = NULL;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
@@ -315,7 +391,7 @@ void RGBController_Polychrome::SetupZones()
|
||||
\*---------------------------------------------------------*/
|
||||
led* new_led = new led();
|
||||
|
||||
new_led->name = polychrome_led_names[led_count];
|
||||
new_led->name = ASRock_B450_Steel_Legend.led_names[led_count];
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Push new LED to LEDs vector |
|
||||
@@ -355,7 +431,7 @@ void RGBController_Polychrome::UpdateSingleLED(int led)
|
||||
unsigned char grn = RGBGetGValue(colors[led]);
|
||||
unsigned char blu = RGBGetBValue(colors[led]);
|
||||
|
||||
polychrome->SetColorsAndSpeed(led, red, grn, blu, modes[active_mode].speed);
|
||||
polychrome->SetColorsAndSpeed(led, red, grn, blu);
|
||||
}
|
||||
|
||||
void RGBController_Polychrome::SetCustomMode()
|
||||
@@ -365,7 +441,7 @@ void RGBController_Polychrome::SetCustomMode()
|
||||
|
||||
void RGBController_Polychrome::DeviceUpdateMode()
|
||||
{
|
||||
polychrome->SetMode(modes[active_mode].value);
|
||||
polychrome->SetMode(modes[active_mode].value, modes[active_mode].speed);
|
||||
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user