Add Asus USB Motherboard save and shutdown effect support

This commit is contained in:
rytypete 2023-09-14 22:01:52 +00:00 committed by Adam Honse
parent 479b8e8ea4
commit e55da57f46
8 changed files with 157 additions and 15 deletions

View file

@ -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 |

View file

@ -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();
};

View file

@ -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);
}

View file

@ -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();
}

View file

@ -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();
};

View file

@ -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) :

View file

@ -29,8 +29,10 @@ public:
void DeviceUpdateMode();
private:
protected:
AuraUSBController* controller;
private:
std::vector<unsigned int> leds_channel;
std::vector<unsigned int> zones_channel;
bool initializedMode;

View file

@ -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 \