Compare commits

...
17 changed files with 134 additions and 75 deletions
@@ -81,6 +81,7 @@
#define CORSAIR_SCIMITAR_PRO_RGB_PID 0x1B3E
#define CORSAIR_SCIMITAR_ELITE_RGB_PID 0x1B8B
#define CORSAIR_SABRE_RGB_PID 0x1B2F
#define CORSAIR_SABRE_RGB_OPTICAL_PID 0x1B32
/*---------------------------------------------------------*\
| Mousepad product IDs |
@@ -215,6 +216,7 @@ REGISTER_HID_DETECTOR_IP("Corsair Scimitar RGB", DetectCorsairPeriphe
REGISTER_HID_DETECTOR_IP("Corsair Scimitar PRO RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SCIMITAR_PRO_RGB_PID, 1, 0xFFC2);
REGISTER_HID_DETECTOR_IP("Corsair Scimitar Elite RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SCIMITAR_ELITE_RGB_PID, 1, 0xFFC2);
REGISTER_HID_DETECTOR_IP("Corsair Sabre RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SABRE_RGB_PID, 1, 0xFFC2);
REGISTER_HID_DETECTOR_IP("Corsair Sabre RGB Optical", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_SABRE_RGB_OPTICAL_PID, 1, 0xFFC2);
/*---------------------------------------------------------*\
| Mousemats |
@@ -130,8 +130,8 @@ REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5080 XTREME WATERFORCE",
REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5080 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5080_XTREME_WATERFORCE_16G_SUB_DEV, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5080 MASTER ICE", DetectGigabyteRGBFusion2BlackwellAorusMaster5080LayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5080_MASTER_ICE_16G_SUB_DEV, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 Gaming OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_GAMING_OC_32G_SUB_DEV, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV1, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV2, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 XTREME WATERFORCE WB", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_XTREME_WATERFORCE_WB_32G_SUB_DEV, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 MASTER", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090_MASTER_32G_SUB_DEV, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 MASTER ICE", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090_MASTER_ICE_32G_SUB_DEV, 0x75);
REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 D V2 MASTER ICE", DetectGigabyteRGBFusion2BlackwellAorusMaster5090DV2IceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090D_V2_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090D_V2_MASTER_ICE_24G_SUB_DEV, 0x75);
@@ -584,6 +584,11 @@ uint8_t RGBFusion2USBController::GetFWID()
return(fw_id);
}
uint8_t RGBFusion2USBController::GetFWRevision()
{
return((report.fw_ver >> 16) & 0xFF);
}
std::string RGBFusion2USBController::GetFWVersion()
{
return(version);
@@ -367,6 +367,7 @@ public:
std::string GetDeviceLocation();
std::string GetFWVersion();
uint8_t GetFWID();
uint8_t GetFWRevision();
uint16_t GetProductID();
std::string GetSerial();
std::vector<Gen2StripInfo> ExportGen2Strips() const;
@@ -25,7 +25,7 @@ struct IT5711ZoneCounts
/*---------------------------------------------------------*\
| Sets LED10/11 counts based on firmware series |
\*---------------------------------------------------------*/
static IT5711ZoneCounts GetIT5711ZoneCounts(uint8_t fw_id, uint32_t lid)
static IT5711ZoneCounts GetIT5711ZoneCounts(uint8_t fw_id, uint8_t fw_revision, uint32_t lid)
{
switch(fw_id)
{
@@ -50,31 +50,63 @@ static IT5711ZoneCounts GetIT5711ZoneCounts(uint8_t fw_id, uint32_t lid)
return {13, 0};
case 0x05:
case 0x0C:
switch(lid)
{
case 0x016001DF:
return {8, 4};
case 0x017001DF:
return {16, 4};
case 0x028001DF:
return {26, 18};
default:
return {16, 4};
return {8, 4};
}
case 0x06:
case 0x09:
return {12, 0};
case 0x0C:
switch(fw_revision)
{
case 0x06:
switch(lid)
{
case 0x017001DF:
return {16, 4};
case 0x028001DF:
return {26, 18};
default:
return {8, 4};
}
case 0x08:
switch(lid)
{
case 0x017001DF:
return {16, 4};
case 0x028001DF:
return {26, 18};
default:
return {10, 4};
}
default:
return {};
}
default:
return {};
}
}
static void ApplyIT5711ZoneCounts(gb_fusion2_device* layout, uint8_t fw_id, std::vector<gb_fusion2_zone*>& allocated_zones)
static void ApplyIT5711ZoneCounts(gb_fusion2_device* layout, uint8_t fw_id, uint8_t fw_revision, std::vector<gb_fusion2_zone*>& allocated_zones)
{
IT5711ZoneCounts counts = GetIT5711ZoneCounts(fw_id, layout->layout_id);
IT5711ZoneCounts counts = GetIT5711ZoneCounts(fw_id, fw_revision, layout->layout_id);
for(uint8_t zone_idx = 0; zone_idx < GB_FUSION2_ZONES_MAX; ++zone_idx)
{
@@ -293,7 +325,6 @@ RGBController_RGBFusion2USB::RGBController_RGBFusion2USB(RGBFusion2USBController
serial = controller->GetSerial();
product_id = controller->GetProductID();
device_num = controller->GetDeviceNum();
fw_id = controller->GetFWID();
mode Direct;
@@ -598,7 +629,10 @@ void RGBController_RGBFusion2USB::Init_Controller()
\*---------------------------------------------------------*/
if(product_id == 0x5711)
{
ApplyIT5711ZoneCounts(&instance_layout, fw_id, allocated_zones);
ApplyIT5711ZoneCounts(&instance_layout,
controller->GetFWID(),
controller->GetFWRevision(),
allocated_zones);
}
/*---------------------------------------------------------*\
@@ -48,7 +48,6 @@ private:
RGBFusion2USBController* controller;
uint8_t device_num;
uint8_t fw_id = 0;
RGBColor null_color = 0;
bool supports_gen2 = 0;
uint8_t gen2_enabled_headers = 0;
@@ -85,7 +85,7 @@ void RGBController_HyperXMicrophoneV2::SetupZones()
Mic.leds_min = HYPERX_QUADCAST_2S_TOTAL_LEDS;
Mic.leds_max = HYPERX_QUADCAST_2S_TOTAL_LEDS;
Mic.leds_count = HYPERX_QUADCAST_2S_TOTAL_LEDS;
Mic.matrix_map.Set(HYPERX_QUADCAST_2S_MATRIX_WIDTH, HYPERX_QUADCAST_2S_MATRIX_HEIGHT, led_mapping);
Mic.matrix_map.Set(HYPERX_QUADCAST_2S_MATRIX_HEIGHT, HYPERX_QUADCAST_2S_MATRIX_WIDTH, led_mapping);
for(unsigned int i = 0; i < HYPERX_QUADCAST_2S_TOTAL_LEDS; i ++)
{
@@ -97,4 +97,5 @@ REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 9060 XT Pure",
REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 9060 XT Nitro+", DetectSapphireV3Controllers, AMD_GPU_VEN, AMD_NAVI48_DEV1, SAPPHIRE_SUB_VEN, SAPPHIRE_NAVI48_NITRO_PLUS_SUB_DEV1, SAPPHIRE_NITRO_GLOW_V3_ADDR);
REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 9070 Pure", DetectSapphireV3Controllers, AMD_GPU_VEN, AMD_NAVI48_DEV, SAPPHIRE_SUB_VEN, SAPPHIRE_NAVI48_PURE_SUB_DEV, SAPPHIRE_NITRO_GLOW_V3_ADDR);
REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 9070 XT Nitro+", DetectSapphireV3Controllers, AMD_GPU_VEN, AMD_NAVI48_DEV, SAPPHIRE_SUB_VEN, SAPPHIRE_NAVI48_NITRO_PLUS_SUB_DEV, SAPPHIRE_NITRO_GLOW_V3_ADDR);
REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 9070 XT Nitro+", DetectSapphireV3Controllers, AMD_GPU_VEN, AMD_NAVI48_DEV, SAPPHIRE_SUB_VEN, SAPPHIRE_NAVI48_NITRO_PLUS_SUB_DEV2, SAPPHIRE_NITRO_GLOW_V3_ADDR);
REGISTER_I2C_PCI_DETECTOR("Sapphire Radeon RX 9070 XT Pure", DetectSapphireV3Controllers, AMD_GPU_VEN, AMD_NAVI48_DEV, SAPPHIRE_SUB_VEN, SAPPHIRE_NAVI48_PURE_XT_SUB_DEV, SAPPHIRE_NITRO_GLOW_V3_ADDR);
+42 -39
View File
@@ -3793,19 +3793,19 @@ void NetworkServer::SendReply_ServerString(NetworkClientInfo* client_info)
void NetworkServer::SendReply_PluginList(NetworkClientInfo* client_info)
{
unsigned int data_size = 0;
unsigned int data_ptr = 0;
/*-----------------------------------------------------*\
| Calculate data size |
\*-----------------------------------------------------*/
unsigned short num_plugins = (unsigned short)plugin_manager->GetPluginCount();
data_size += sizeof(data_size);
data_size += sizeof(num_plugins);
if(plugin_manager)
{
unsigned int data_size = 0;
unsigned int data_ptr = 0;
/*-------------------------------------------------*\
| Calculate data size |
\*-------------------------------------------------*/
unsigned short num_plugins = (unsigned short)plugin_manager->GetPluginCount();
data_size += sizeof(data_size);
data_size += sizeof(num_plugins);
for(unsigned int i = 0; i < num_plugins; i++)
{
data_size += sizeof(unsigned short) * 3;
@@ -3814,24 +3814,27 @@ void NetworkServer::SendReply_PluginList(NetworkClientInfo* client_info)
data_size += (unsigned int)strlen(plugin_manager->GetPluginVersion(i).c_str()) + 1;
data_size += sizeof(unsigned int) * 2;
}
}
/*-------------------------------------------------*\
| Create data buffer |
\*-------------------------------------------------*/
unsigned char* data_buf = new unsigned char[data_size];
/*-----------------------------------------------------*\
| Create data buffer |
\*-----------------------------------------------------*/
unsigned char* data_buf = new unsigned char[data_size];
/*-------------------------------------------------*\
| Copy in data size |
\*-------------------------------------------------*/
memcpy(&data_buf[data_ptr], &data_size, sizeof(data_size));
data_ptr += sizeof(data_size);
/*-----------------------------------------------------*\
| Copy in data size |
\*-----------------------------------------------------*/
memcpy(&data_buf[data_ptr], &data_size, sizeof(data_size));
data_ptr += sizeof(data_size);
/*-------------------------------------------------*\
| Copy in num_plugins |
\*-------------------------------------------------*/
memcpy(&data_buf[data_ptr], &num_plugins, sizeof(num_plugins));
data_ptr += sizeof(num_plugins);
/*-----------------------------------------------------*\
| Copy in num_plugins |
\*-----------------------------------------------------*/
memcpy(&data_buf[data_ptr], &num_plugins, sizeof(num_plugins));
data_ptr += sizeof(num_plugins);
if(plugin_manager)
{
for(unsigned int i = 0; i < num_plugins; i++)
{
/*---------------------------------------------*\
@@ -3880,21 +3883,21 @@ void NetworkServer::SendReply_PluginList(NetworkClientInfo* client_info)
memcpy(&data_buf[data_ptr], &protocol_version, sizeof(unsigned int));
data_ptr += sizeof(unsigned int);
}
NetPacketHeader reply_hdr;
unsigned int reply_size;
memcpy(&reply_size, data_buf, sizeof(reply_size));
InitNetPacketHeader(&reply_hdr, 0, NET_PACKET_ID_PLUGINMANAGER_GET_PLUGIN_LIST, reply_size);
send_in_progress.lock();
send(client_info->client_sock, (const char *)&reply_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL);
send(client_info->client_sock, (const char *)data_buf, reply_size, MSG_NOSIGNAL);
send_in_progress.unlock();
delete [] data_buf;
}
NetPacketHeader reply_hdr;
unsigned int reply_size;
memcpy(&reply_size, data_buf, sizeof(reply_size));
InitNetPacketHeader(&reply_hdr, 0, NET_PACKET_ID_PLUGINMANAGER_GET_PLUGIN_LIST, reply_size);
send_in_progress.lock();
send(client_info->client_sock, (const char *)&reply_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL);
send(client_info->client_sock, (const char *)data_buf, reply_size, MSG_NOSIGNAL);
send_in_progress.unlock();
delete [] data_buf;
}
void NetworkServer::SendReply_PluginSpecific(NetworkClientInfo* client_info, unsigned int data_size, unsigned char* data_ptr, unsigned int pkt_id)
+1 -1
View File
@@ -26,7 +26,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#-----------------------------------------------------------------------------------------------#
MAJOR = 1
MINOR = 0
SUFFIX =
SUFFIX = git
SHORTHASH = $$system("git rev-parse --short=7 HEAD")
LASTTAG = "release_"$$MAJOR"."$$MINOR
+2
View File
@@ -280,6 +280,8 @@ ResourceManager::ResourceManager()
logmanager_settings_schema["file_count_limit"]["default"] = 10;
logmanager_settings_schema["file_count_limit"]["minimum"] = 0;
logmanager_settings_schema["dialog_no_show_hashes"]["ignore"] = true;
settings_manager->RegisterSettingsSchema("LogManager", QT_TRANSLATE_NOOP("Settings", "Log Manager"), logmanager_settings_schema);
/*-----------------------------------------------------*\
+17 -10
View File
@@ -555,18 +555,25 @@ json SettingsManager::FilterSettingsAgainstSchema(std::string& settings_key, jso
continue;
}
/*-------------------------------------------------*\
| Check if the value type matches the schema's |
| declared type |
\*-------------------------------------------------*/
if(schema_properties[key].contains("type"))
if(!schema_properties[key].contains("ignore"))
{
std::string schema_type = schema_properties[key]["type"];
if(!SettingsValueMatchesType(value, schema_type))
/*-------------------------------------------------*\
| Check if the value type matches the schema's |
| declared type |
\*-------------------------------------------------*/
if(schema_properties[key].contains("type"))
{
LOG_WARNING("[%s] Settings key \"%s\" has incorrect type (expected %s), skipping", SETTINGSMANAGER, key.c_str(), schema_type.c_str());
continue;
std::string schema_type = schema_properties[key]["type"];
if(!SettingsValueMatchesType(value, schema_type))
{
LOG_WARNING("[%s] Settings key \"%s\" has incorrect type (expected %s), skipping", SETTINGSMANAGER, key.c_str(), schema_type.c_str());
continue;
}
}
else
{
LOG_WARNING("[%s] Settings key \"%s\" is missing type field, skipping", SETTINGSMANAGER, key.c_str());
}
}
-6
View File
@@ -21,12 +21,6 @@ Depends:
${shlibs:Depends},
${misc:Depends},
udev,
libqt6core6,
libqt6gui6,
libqt6widgets6,
libusb-1.0-0,
libmbedtls14,
libhidapi-hotplug-hidraw0,
libhidapi-hotplug-libusb0,
Recommends:
openrgb-dkms-drivers,
+3 -2
View File
@@ -751,8 +751,8 @@
#define GIGABYTE_AORUS_RTX5090_MASTER_ICE_32G_SUB_DEV 0x4199
#define GIGABYTE_AORUS_RTX5090D_MASTER_32G_SUB_DEV 0x4188
#define GIGABYTE_AORUS_RTX5090D_V2_MASTER_ICE_24G_SUB_DEV 0x41CA
#define GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV1 0x4171
#define GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV2 0x4172
#define GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV 0x4171
#define GIGABYTE_RTX5090_XTREME_WATERFORCE_WB_32G_SUB_DEV 0x4172
#define GIGABYTE_RX6700XT_GAMING_OC_12G_SUB_DEV 0x232D
#define GIGABYTE_RX6700XT_EAGLE_12G_SUB_DEV 0x2331
#define GIGABYTE_AORUS_RX_6750_XT_ELITE_12G_SUB_DEV 0x2407
@@ -1002,6 +1002,7 @@
#define SAPPHIRE_NAVI44_PURE_XT_SUB_DEV 0x493E
#define SAPPHIRE_NAVI48_NITRO_PLUS_SUB_DEV 0xE489
#define SAPPHIRE_NAVI48_NITRO_PLUS_SUB_DEV1 0xE493
#define SAPPHIRE_NAVI48_NITRO_PLUS_SUB_DEV2 0x4892
#define SAPPHIRE_NAVI48_PURE_SUB_DEV 0x4499
#define SAPPHIRE_NAVI48_PURE_XT_SUB_DEV 0x3490
#define SAPPHIRE_NAVI31_GRE_NITRO_PLUS_SUB_DEV 0xE475
@@ -125,6 +125,11 @@ OpenRGBDeviceEditorDialog::OpenRGBDeviceEditorDialog(RGBController *dev, QWidget
\*-----------------------------------------------------*/
for(std::size_t configuration_idx = 0; configuration_idx < configuration_entries.size(); configuration_idx++)
{
if(configuration_entries[configuration_idx].value[configuration_entries[configuration_idxsetting_idx].key].contains("ignore"))
{
continue;
}
OpenRGBDynamicSettingsWidget* item_widget = new OpenRGBDynamicSettingsWidget(configuration_entries[configuration_idx].key, configuration_entries[configuration_idx].value, configuration_value);
item_widget->SetCallback(Callback, this);
@@ -139,6 +139,11 @@ void OpenRGBSettingsPage::UpdateInterface()
\*-----------------------------------------------------*/
for(std::size_t setting_idx = 0; setting_idx < setting_entries.size(); setting_idx++)
{
if(setting_entries[setting_idx].value[setting_entries[setting_idx].key].contains("ignore"))
{
continue;
}
nlohmann::json setting_value;
setting_value[setting_entries[setting_idx].key] = ResourceManager::get()->GetSettingsManager()->GetSettings(setting_entries[setting_idx].key);
OpenRGBDynamicSettingsWidget* item_widget = new OpenRGBDynamicSettingsWidget(setting_entries[setting_idx].key, setting_entries[setting_idx].value, setting_value);
+4 -4
View File
@@ -49,10 +49,10 @@
<releases>
<release version="1.0" date="2026-09-11"></release>
<release version="1.0rc3.1" date="2026-08-23"></release>
<release version="1.0rc3" date="2026-06-28"></release>
<release version="1.0rc2" date="2025-09-14"></release>
<release version="1.0rc1" date="2025-02-22"></release>
<release version="1.0~rc3.1" date="2026-08-23" type="development"></release>
<release version="1.0~rc3" date="2026-06-28" type="development"></release>
<release version="1.0~rc2" date="2025-09-14" type="development"></release>
<release version="1.0~rc1" date="2025-02-22" type="development"></release>
<release version="0.9" date="2023-06-09"></release>
<release version="0.8" date="2022-11-27"></release>
<release version="0.7" date="2021-12-30"></release>