diff --git a/Controllers/AsusAuraUSBController/AsusAuraMainboardController.cpp b/Controllers/AsusAuraUSBController/AsusAuraMainboardController.cpp index a18f2b4a..ce8d03c8 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMainboardController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraMainboardController.cpp @@ -86,11 +86,24 @@ void AuraMainboardController::SetMode unsigned char grn, unsigned char blu ) +{ + SetMode(channel, mode, red, grn, blu, false); +} + +void AuraMainboardController::SetMode + ( + unsigned char channel, + unsigned char mode, + unsigned char red, + unsigned char grn, + unsigned char blu, + bool shutdown_effect + ) { this->mode = mode; RGBColor color = ToRGBColor(red, grn, blu); - SendEffect(device_info[channel].effect_channel, mode); + SendEffect(device_info[channel].effect_channel, mode, shutdown_effect); if(mode == AURA_MODE_DIRECT) { return; @@ -116,7 +129,8 @@ void AuraMainboardController::SetMode channel, start_led, device_info[channel].num_leds, - led_data + led_data, + shutdown_effect ); } @@ -128,7 +142,8 @@ unsigned short AuraMainboardController::GetMask(int start, int size) void AuraMainboardController::SendEffect ( unsigned char channel, - unsigned char mode + unsigned char mode, + bool shutdown_effect ) { unsigned char usb_buf[65]; @@ -145,7 +160,7 @@ void AuraMainboardController::SendEffect usb_buf[0x01] = AURA_MAINBOARD_CONTROL_MODE_EFFECT; usb_buf[0x02] = channel; usb_buf[0x03] = 0x00; - usb_buf[0x04] = 0x00; + usb_buf[0x04] = shutdown_effect ? 0x01 : 0x00; usb_buf[0x05] = mode; /*-----------------------------------------------------*\ @@ -159,7 +174,8 @@ void AuraMainboardController::SendColor unsigned char /*channel*/, unsigned char start_led, unsigned char led_count, - unsigned char* led_data + unsigned char* led_data, + bool shutdown_effect ) { unsigned short mask = GetMask(start_led, led_count); @@ -177,7 +193,7 @@ void AuraMainboardController::SendColor usb_buf[0x01] = AURA_MAINBOARD_CONTROL_MODE_EFFECT_COLOR; usb_buf[0x02] = mask >> 8; usb_buf[0x03] = mask & 0xff; - usb_buf[0x04] = 0x00; + usb_buf[0x04] = shutdown_effect ? 0x01 : 0x00; /*-----------------------------------------------------*\ | Copy in color data bytes | diff --git a/Controllers/AsusAuraUSBController/AsusAuraMainboardController.h b/Controllers/AsusAuraUSBController/AsusAuraMainboardController.h index 47788bcc..dcccecde 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMainboardController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraMainboardController.h @@ -44,15 +44,28 @@ public: unsigned char blu ); + void SetMode + ( + unsigned char channel, + unsigned char mode, + unsigned char red, + unsigned char grn, + unsigned char blu, + bool shutdown_effect + ); + + void SendCommit(); + private: unsigned int mode; unsigned short GetMask(int start, int size); - + void SendEffect ( unsigned char channel, - unsigned char mode + unsigned char mode, + bool shutdown_effect ); void SendColor @@ -60,8 +73,7 @@ private: unsigned char channel, unsigned char start_led, unsigned char led_count, - unsigned char* led_data + unsigned char* led_data, + bool shutdown_effect ); - - void SendCommit(); }; diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 49b16c2b..13f6adb7 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -15,6 +15,7 @@ #include "RGBController_AsusAuraHeadsetStand.h" #include "RGBController_AsusAuraKeyboard.h" #include "RGBController_AsusAuraTUFKeyboard.h" +#include "RGBController_AsusAuraMainboard.h" #include "RGBController_AsusAuraMouse.h" #include "RGBController_AsusAuraMousemat.h" #include "RGBController_AsusROGAlly.h" @@ -155,7 +156,7 @@ void DetectAsusAuraUSBMotherboards(hid_device_info* info, const std::string& /*n { DMIInfo dmi; AuraMainboardController* controller = new AuraMainboardController(dev, info->path); - RGBController_AuraUSB* rgb_controller = new RGBController_AuraUSB(controller); + RGBController_AuraMainboard* rgb_controller = new RGBController_AuraMainboard(controller); rgb_controller->name = "ASUS " + dmi.getMainboard(); ResourceManager::get()->RegisterRGBController(rgb_controller); } diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.cpp new file mode 100644 index 00000000..6d717243 --- /dev/null +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.cpp @@ -0,0 +1,83 @@ +/*-----------------------------------------*\ +| RGBController_AsusAuraMainboard.cpp | +| | +| RGB controller for Asus Aura USB | +| mainboards | +| | +| rytypete 8/30/2023 | +| based on RGBController_AsusAuraUSB.cpp | +| code | +\*-----------------------------------------*/ + +#include "RGBController_AsusAuraMainboard.h" + +/**------------------------------------------------------------------*\ + @name Asus Aura USB Mainboard + @category Motherboard + @type USB + @save :white_check_mark: + @direct :white_check_mark: + @effects :white_check_mark: + @detectors DetectAsusAuraUSBMotherboards + @comment The Asus Aura USB Mainboard controller applies to most + AMD and Intel mainboards from the x570 chipset onwards. +\*-------------------------------------------------------------------*/ + +RGBController_AuraMainboard::RGBController_AuraMainboard(AuraMainboardController* controller_ptr) : + RGBController_AuraUSB(controller_ptr) +{ + name = "ASUS Aura USB Mainboard"; + description = "ASUS Aura USB Mainboard Device"; + + /*-------------------------------------------------------*\ + | Add manual save flag to all modes except direct mode | + \*-------------------------------------------------------*/ + for(unsigned int mode_idx = 0; mode_idx < modes.size(); mode_idx++) + { + mode Mode = modes[mode_idx]; + if(Mode.value != AURA_MODE_DIRECT) + { + Mode.flags |= MODE_FLAG_MANUAL_SAVE; + modes[mode_idx] = Mode; + } + } +} + +RGBController_AuraMainboard::~RGBController_AuraMainboard() +{ + delete controller; +} + +void RGBController_AuraMainboard::DeviceUpdateShutdownEffect() +{ + unsigned char red = 0; + unsigned char grn = 0; + unsigned char blu = 0; + + if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) + { + red = RGBGetRValue(modes[active_mode].colors[0]); + grn = RGBGetGValue(modes[active_mode].colors[0]); + blu = RGBGetBValue(modes[active_mode].colors[0]); + } + + for(unsigned int zone_idx = 0; zone_idx < zones.size(); zone_idx++) + { + AuraDeviceInfo device_info = controller->GetAuraDevices()[zone_idx]; + + /*---------------------------------------------------*\ + | Shutdown effect only works with onboard lighting | + \*---------------------------------------------------*/ + if(device_info.device_type == AuraDeviceType::FIXED && zones[zone_idx].leds_count > 0) + { + ((AuraMainboardController*) controller)->SetMode(zone_idx, modes[active_mode].value, red, grn, blu, true); + } + } +} + +void RGBController_AuraMainboard::DeviceSaveMode() +{ + DeviceUpdateMode(); + DeviceUpdateShutdownEffect(); + ((AuraMainboardController*) controller)->SendCommit(); +} diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.h b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.h new file mode 100644 index 00000000..2d39a3bb --- /dev/null +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.h @@ -0,0 +1,26 @@ +/*-----------------------------------------*\ +| RGBController_AsusAuraMainboard.h | +| | +| RGB controller for Asus Aura USB | +| mainboards | +| | +| rytypete 8/30/2023 | +| based on RGBController_AsusAuraUSB.h | +| code | +\*-----------------------------------------*/ + +#pragma once +#include "RGBController_AsusAuraUSB.h" +#include "AsusAuraMainboardController.h" + +class RGBController_AuraMainboard : public RGBController_AuraUSB +{ +public: + RGBController_AuraMainboard(AuraMainboardController* controller_ptr); + ~RGBController_AuraMainboard(); + + void DeviceSaveMode(); + +private: + void DeviceUpdateShutdownEffect(); +}; diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.cpp index a103323d..9a5926c9 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.cpp @@ -16,9 +16,9 @@ @save :x: @direct :white_check_mark: @effects :white_check_mark: - @detectors DetectAsusAuraUSBTerminal,DetectAsusAuraUSBAddressable,DetectAsusAuraUSBMotherboards + @detectors DetectAsusAuraUSBTerminal,DetectAsusAuraUSBAddressable @comment The Asus Aura USB controller applies to most AMD and - Intel mainboards from the x470 and z390 chipsets onwards. + Intel mainboards from the x470 and z390 chipset generations. \*-------------------------------------------------------------------*/ RGBController_AuraUSB::RGBController_AuraUSB(AuraUSBController* controller_ptr) : diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.h b/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.h index d72320b9..9f346da5 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.h +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.h @@ -29,8 +29,10 @@ public: void DeviceUpdateMode(); -private: +protected: AuraUSBController* controller; + +private: std::vector leds_channel; std::vector zones_channel; bool initializedMode; diff --git a/OpenRGB.pro b/OpenRGB.pro index db92f311..a6b71af0 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -367,6 +367,7 @@ HEADERS += Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraHeadsetStand.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraKeyboard.h \ + Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.h \ @@ -968,6 +969,7 @@ SOURCES += Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraHeadsetStand.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraKeyboard.cpp \ + Controllers/AsusAuraUSBController/RGBController_AsusAuraMainboard.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.cpp \