diff --git a/Controllers/AsusAuraUSBController/AsusAuraMonitorController.cpp b/Controllers/AsusAuraUSBController/AsusAuraMonitorController.cpp new file mode 100644 index 00000000..24917330 --- /dev/null +++ b/Controllers/AsusAuraUSBController/AsusAuraMonitorController.cpp @@ -0,0 +1,94 @@ +/*-----------------------------------------*\ +| AsusAuraMonitorController.cpp | +| | +| Driver for ASUS Aura RGB USB | +| lighting controller | +| | +| Mola19 08/03/2021 | +\*-----------------------------------------*/ + +#include "AsusAuraMonitorController.h" + +#include +#include "LogManager.h" + +AuraMonitorController::AuraMonitorController(hid_device* dev_handle, const char* path) +{ + dev = dev_handle; + location = path; +} + +AuraMonitorController::~AuraMonitorController() +{ + hid_close(dev); +} + +std::string AuraMonitorController::GetDeviceLocation() +{ + return("HID: " + location); +} + +std::string AuraMonitorController::GetSerialString() +{ + wchar_t serial_string[128]; + int ret = hid_get_serial_number_string(dev, serial_string, 128); + + if(ret != 0) + { + return(""); + } + + std::wstring return_wstring = serial_string; + std::string return_string(return_wstring.begin(), return_wstring.end()); + + return(return_string); +} + +void AuraMonitorController::UpdateLed + ( + int led, + unsigned char red, + unsigned char green, + unsigned char blue + ) +{ + unsigned char usb_buf[8]; + + memset(usb_buf, 0x00, sizeof(usb_buf)); + + usb_buf[0x00] = 0x03; + usb_buf[0x01] = 0x02; + usb_buf[0x02] = 0xa1; + usb_buf[0x03] = 0x80; + + usb_buf[0x04] = 16 + led * 3; + usb_buf[0x05] = red; + + hid_send_feature_report(dev, usb_buf, 8); + + usb_buf[0x04] = 16 + led * 3 + 1; + usb_buf[0x05] = blue; + + hid_send_feature_report(dev, usb_buf, 8); + + usb_buf[0x04] = 16 + led * 3 + 2; + usb_buf[0x05] = green; + + hid_send_feature_report(dev, usb_buf, 8); +} + +void AuraMonitorController::ApplyChanges() +{ + unsigned char usb_buf[8]; + + memset(usb_buf, 0x00, sizeof(usb_buf)); + + usb_buf[0x00] = 0x03; + usb_buf[0x01] = 0x02; + usb_buf[0x02] = 0xa1; + usb_buf[0x03] = 0x80; + usb_buf[0x04] = 0xa0; + usb_buf[0x05] = 0x01; + + hid_send_feature_report(dev, usb_buf, 8); +} diff --git a/Controllers/AsusAuraUSBController/AsusAuraMonitorController.h b/Controllers/AsusAuraUSBController/AsusAuraMonitorController.h new file mode 100644 index 00000000..1b320006 --- /dev/null +++ b/Controllers/AsusAuraUSBController/AsusAuraMonitorController.h @@ -0,0 +1,31 @@ +/*-----------------------------------------*\ +| AsusAuraMonitorController.h | +| | +| Definitions and types for ASUS Aura | +| USB RGB lighting controller | +| | +| Mola19 08/03/2023 | +\*-----------------------------------------*/ + +#include "RGBController.h" + +#include + +#pragma once + +class AuraMonitorController +{ +public: + AuraMonitorController(hid_device* dev_handle, const char* path); + virtual ~AuraMonitorController(); + + std::string GetDeviceLocation(); + std::string GetSerialString(); + + void UpdateLed(int led, unsigned char red, unsigned char green, unsigned char blue); + void ApplyChanges(); + +private: + hid_device* dev; + std::string location; +}; diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index bff4efea..d2ad5d21 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -7,6 +7,7 @@ #include "AsusAuraMouseController.h" #include "AsusAuraMousematController.h" #include "AsusAuraStrixEvolveController.h" +#include "AsusAuraMonitorController.h" #include "RGBController.h" #include "RGBController_AsusAuraUSB.h" #include "RGBController_AsusAuraHeadsetStand.h" @@ -16,6 +17,7 @@ #include "RGBController_AsusAuraMousemat.h" #include "RGBController_ROGStrixLC_Controller.h" #include "RGBController_AsusAuraStrixEvolve.h" +#include "RGBController_AsusAuraMonitor.h" #include #include #include "dependencies/dmiinfo.h" @@ -58,6 +60,12 @@ #define AURA_ROG_BALTEUS_PID 0x1891 #define AURA_ROG_BALTEUS_QI_PID 0x1890 +/*-----------------------------------------------------------------*\ +| MONITORS | +\*-----------------------------------------------------------------*/ + +#define AURA_ROG_STRIX_XG27AQ_PID 0x198C + /*-----------------------------------------------------------------*\ | OTHER | \*-----------------------------------------------------------------*/ @@ -233,6 +241,19 @@ void DetectAsusAuraTUFUSBKeyboard(hid_device_info* info, const std::string& name } } +void DetectAsusAuraUSBMonitor(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + + if(dev) + { + AuraMonitorController* controller = new AuraMonitorController(dev, info->path); + RGBController_AuraMonitor* rgb_controller = new RGBController_AuraMonitor(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + /*-----------------------------------------------------------------*\ | MOTHERBOARDS | \*-----------------------------------------------------------------*/ @@ -289,6 +310,11 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Evolve", DetectAsusAuraUS REGISTER_HID_DETECTOR_PU("ASUS ROG Balteus", DetectAsusAuraUSBMousemats, AURA_USB_VID, AURA_ROG_BALTEUS_PID, 0xFF06, 1); REGISTER_HID_DETECTOR_PU("ASUS ROG Balteus Qi", DetectAsusAuraUSBMousemats, AURA_USB_VID, AURA_ROG_BALTEUS_QI_PID, 0xFF06, 1); +/*-----------------------------------------------------------------*\ +| MONITORS | +\*-----------------------------------------------------------------*/ +REGISTER_HID_DETECTOR_PU("ASUS ROG Strix XG27AQ", DetectAsusAuraUSBMonitor, AURA_USB_VID, AURA_ROG_STRIX_XG27AQ_PID, 0xFFA0, 1); + /*-----------------------------------------------------------------*\ | OTHER | \*-----------------------------------------------------------------*/ diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.cpp new file mode 100644 index 00000000..36771791 --- /dev/null +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.cpp @@ -0,0 +1,118 @@ +/*-----------------------------------------*\ +| RGBController_AsusAuraMonitor.cpp | +| | +| Generic RGB Interface for Asus Aura | +| USB controller driver | +| | +| Mola19 08/03/2022 | +\*-----------------------------------------*/ + +#include "RGBController_AsusAuraMonitor.h" + +RGBController_AuraMonitor::RGBController_AuraMonitor(AuraMonitorController* controller_ptr) +{ + controller = controller_ptr; + + name = "ASUS Aura Monitor"; + vendor = "ASUS"; + type = DEVICE_TYPE_LEDSTRIP; + description = "ASUS Aura Monitor Device"; + location = controller->GetDeviceLocation(); + serial = controller->GetSerialString(); + + mode Direct; + Direct.name = "Direct"; + Direct.value = 0; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Direct.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Direct); + + SetupZones(); +} + +RGBController_AuraMonitor::~RGBController_AuraMonitor() +{ + delete controller; +} + +void RGBController_AuraMonitor::SetupZones() +{ + zone underglow_zone; + + underglow_zone.name = "Backlight"; + underglow_zone.type = ZONE_TYPE_LINEAR; + underglow_zone.leds_min = 3; + underglow_zone.leds_max = 3; + underglow_zone.leds_count = 3; + underglow_zone.matrix_map = NULL; + + zones.push_back(underglow_zone); + + for(unsigned int i = 0; i < 3; i++) + { + led underglow_led; + + underglow_led.name = "Backlight LED " + std::to_string(i + 1); + + leds.push_back(underglow_led); + } + + SetupColors(); +} + +void RGBController_AuraMonitor::ResizeZone(int /*zone*/, int /*new_size*/) +{ + /*---------------------------------------------------------*\ + | This device does not support resizing zones | + \*---------------------------------------------------------*/ +} + +void RGBController_AuraMonitor::DeviceUpdateLEDs() +{ + for (int i = 0; i < 3; i++) + { + unsigned char red = RGBGetRValue(colors[i]); + unsigned char green = RGBGetGValue(colors[i]); + unsigned char blue = RGBGetBValue(colors[i]); + + controller->UpdateLed(i, red, green, blue); + } + + controller->ApplyChanges(); +} + +void RGBController_AuraMonitor::UpdateZoneLEDs(int /*zone*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_AuraMonitor::UpdateSingleLED(int led) +{ + unsigned char red = RGBGetRValue(colors[led]); + unsigned char green = RGBGetGValue(colors[led]); + unsigned char blue = RGBGetBValue(colors[led]); + + controller->UpdateLed(led, red, green, blue); + + controller->ApplyChanges(); +} + +void RGBController_AuraMonitor::SetCustomMode() +{ + active_mode = 0; +} + + +void RGBController_AuraMonitor::DeviceUpdateMode() +{ + /*---------------------------------------------------------*\ + | This device does not support Mode changing | + \*---------------------------------------------------------*/ +} + +void RGBController_AuraMonitor::DeviceSaveMode() +{ + /*---------------------------------------------------------*\ + | This device does not support Mode saving | + \*---------------------------------------------------------*/ +} diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.h b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.h new file mode 100644 index 00000000..4d0fd3e7 --- /dev/null +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.h @@ -0,0 +1,34 @@ +/*-----------------------------------------*\ +| RGBController_AsusAuraMonitor.h | +| | +| Generic RGB Interface for Asus Aura | +| USB controller driver | +| | +| Mola19 08/03/2022 | +\*-----------------------------------------*/ + +#pragma once +#include "RGBController.h" +#include "AsusAuraMonitorController.h" + +class RGBController_AuraMonitor : public RGBController +{ +public: + RGBController_AuraMonitor(AuraMonitorController* controller_ptr); + ~RGBController_AuraMonitor(); + + void SetupZones(); + + void ResizeZone(int zone, int new_size); + + void DeviceUpdateLEDs(); + void UpdateZoneLEDs(int zone); + void UpdateSingleLED(int led); + + void SetCustomMode(); + void DeviceUpdateMode(); + void DeviceSaveMode(); + +private: + AuraMonitorController* controller; +}; diff --git a/OpenRGB.pro b/OpenRGB.pro index 6116ab34..afd48299 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -238,6 +238,7 @@ HEADERS += Controllers/AsusAuraUSBController/AsusAuraHeadsetStandController.h \ Controllers/AsusAuraUSBController/AsusAuraKeyboardController.h \ Controllers/AsusAuraUSBController/AsusAuraMainboardController.h \ + Controllers/AsusAuraUSBController/AsusAuraMonitorController.h \ Controllers/AsusAuraUSBController/AsusAuraMouseController.h \ Controllers/AsusAuraUSBController/AsusAuraMousematController.h \ Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h \ @@ -246,6 +247,7 @@ HEADERS += Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraHeadsetStand.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraKeyboard.h \ + Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.h \ @@ -651,6 +653,7 @@ SOURCES += Controllers/AsusAuraUSBController/AsusAuraHeadsetStandController.cpp \ Controllers/AsusAuraUSBController/AsusAuraKeyboardController.cpp \ Controllers/AsusAuraUSBController/AsusAuraMainboardController.cpp \ + Controllers/AsusAuraUSBController/AsusAuraMonitorController.cpp \ Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp \ Controllers/AsusAuraUSBController/AsusAuraMousematController.cpp \ Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.cpp \ @@ -658,6 +661,7 @@ SOURCES += Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraHeadsetStand.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraKeyboard.cpp \ + Controllers/AsusAuraUSBController/RGBController_AsusAuraMonitor.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMousemat.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.cpp \