diff --git a/Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.cpp b/Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.cpp new file mode 100644 index 00000000..fe3474e1 --- /dev/null +++ b/Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.cpp @@ -0,0 +1,146 @@ +/*-----------------------------------------*\ +| AsusAuraStrixEvolveController.cpp | +| | +| Driver for ASUS Aura RGB USB | +| lighting controller | +| | +| Mola19 11/30/2021 | +\*-----------------------------------------*/ + +#include "AsusAuraStrixEvolveController.h" + +#include +#include +#include + +AuraStrixEvolveController::AuraStrixEvolveController(hid_device* dev_handle, const char* path, uint16_t pid) +{ + dev = dev_handle; + location = path; + device_pid = pid; +} + +AuraStrixEvolveController::~AuraStrixEvolveController() +{ + hid_close(dev); +} + +std::string AuraStrixEvolveController::GetDeviceLocation() +{ + return("HID: " + location); +} + +std::string AuraStrixEvolveController::GetSerialString() +{ + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + std::wstring return_wstring = serial_string; + std::string return_string(return_wstring.begin(), return_wstring.end()); + + return(return_string); +} + +std::string AuraStrixEvolveController::GetVersion() +{ + unsigned char usb_buf[9] = { 0x0c, 0xc4, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + hid_send_feature_report(dev, usb_buf, 9); + + unsigned char usb_buf_out[9] = { 0x0c }; + hid_get_feature_report(dev, usb_buf_out, 9); + + return std::string("1." + std::to_string(usb_buf_out[3])); +} + +int AuraStrixEvolveController::GetActiveProfile() +{ + int profile; + + do + { + unsigned char usb_buf[9] = { 0x0c, 0xdf, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + hid_send_feature_report(dev, usb_buf, 9); + + unsigned char usb_buf_out[9] = { 0x0c }; + hid_get_feature_report(dev, usb_buf_out, 9); + + profile = usb_buf_out[4] % 16; + } while (profile > 2); + + return profile + 1; +} + +void AuraStrixEvolveController::SendUpdate + ( + unsigned char key, + unsigned char value + ) +{ + unsigned char usb_buf[9]; + + /*-----------------------------------------------------*\ + | Zero out buffer | + \*-----------------------------------------------------*/ + memset(usb_buf, 0x00, 9); + + /*-----------------------------------------------------*\ + | Set up message packet | + \*-----------------------------------------------------*/ + usb_buf[0x00] = 0x0c; + usb_buf[0x01] = 0xc4; + usb_buf[0x02] = 0x0f; + usb_buf[0x03] = 0x00; + usb_buf[0x04] = key; + usb_buf[0x05] = value; + hid_send_feature_report(dev, usb_buf, 9); +} + + +void AuraStrixEvolveController::UpdateProfile + ( + unsigned char key, + unsigned char profile, + unsigned char value + ) +{ + unsigned char usb_buf[9]; + + /*-----------------------------------------------------*\ + | Zero out buffer | + \*-----------------------------------------------------*/ + memset(usb_buf, 0x00, 9); + + /*-----------------------------------------------------*\ + | Set up message packet | + \*-----------------------------------------------------*/ + usb_buf[0x00] = 0x0c; + usb_buf[0x01] = 0xde; + usb_buf[0x02] = key; + usb_buf[0x03] = profile; + usb_buf[0x04] = value; + hid_send_feature_report(dev, usb_buf, 9); + std::this_thread::sleep_for(std::chrono::milliseconds(5)); +} + +void AuraStrixEvolveController::SendSavePacket() +{ + unsigned char usb_buf[9]; + + /*-----------------------------------------------------*\ + | Zero out buffer | + \*-----------------------------------------------------*/ + memset(usb_buf, 0x00, 9); + + /*-----------------------------------------------------*\ + | Set up message packet | + \*-----------------------------------------------------*/ + usb_buf[0x00] = 0x0c; + usb_buf[0x01] = 0xc4; + + hid_send_feature_report(dev, usb_buf, 9); +} diff --git a/Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.h b/Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.h new file mode 100644 index 00000000..ff196259 --- /dev/null +++ b/Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.h @@ -0,0 +1,50 @@ +/*-----------------------------------------*\ +| AsusAuraStrixEvolveController.h | +| | +| Definitions and types for ASUS Aura | +| USB RGB lighting controller | +| | +| Mola19 11/30/2021 | +\*-----------------------------------------*/ + +#include "RGBController.h" + +#include +#include + +#pragma once + +#define HID_MAX_STR 255 + +class AuraStrixEvolveController +{ +public: + AuraStrixEvolveController(hid_device* dev_handle, const char* path, uint16_t pid); + virtual ~AuraStrixEvolveController(); + + std::string GetDeviceLocation(); + std::string GetSerialString(); + std::string GetVersion(); + int GetActiveProfile(); + + void SendUpdate + ( + unsigned char key, + unsigned char value + ); + + void UpdateProfile + ( + unsigned char key, + unsigned char profile, + unsigned char value + ); + + void SendSavePacket(); + + uint16_t device_pid; + +private: + hid_device* dev; + std::string location; +}; diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 149c3d95..62d60905 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -5,12 +5,14 @@ #include "AsusAuraTUFKeyboardController.h" #include "AsusAuraMainboardController.h" #include "AsusAuraMouseController.h" +#include "AsusAuraStrixEvolveController.h" #include "RGBController.h" #include "RGBController_AsusAuraUSB.h" #include "RGBController_AsusAuraHeadsetStand.h" #include "RGBController_AsusAuraKeyboard.h" #include "RGBController_AsusAuraTUFKeyboard.h" #include "RGBController_AsusAuraMouse.h" +#include "RGBController_AsusAuraStrixEvolve.h" #include #include #include "dependencies/dmiinfo.h" @@ -44,6 +46,7 @@ | MICE - defined in AsusAuraMouseDevices.h | \*-----------------------------------------------------------------*/ +#define AURA_ROG_STRIX_EVOLVE_PID 0x185B /*-----------------------------------------------------------------*\ | OTHER | @@ -151,6 +154,18 @@ void DetectAsusAuraUSBMice(hid_device_info* info, const std::string& name) } } +void DetectAsusAuraUSBStrixEvolve(hid_device_info* info, const std::string& name) +{ + hid_device* dev = hid_open_path(info->path); + if(dev) + { + AuraStrixEvolveController* controller = new AuraStrixEvolveController(dev, info->path, info->product_id); + RGBController_AuraStrixEvolve* rgb_controller = new RGBController_AuraStrixEvolve(controller); + rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); + } +} + void DetectAsusAuraUSBHeadsetStand(hid_device_info* info, const std::string& name) { hid_device* dev = hid_open_path(info->path); @@ -218,6 +233,8 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Impact II", DetectAsusAuraUS REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming M3", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_TUF_M3_PID, 1, 0xFF01); REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming M5", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_TUF_M5_PID, 2, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Evolve", DetectAsusAuraUSBStrixEvolve, AURA_USB_VID, AURA_ROG_STRIX_EVOLVE_PID, 1, 0x0008); + /*-----------------------------------------------------------------*\ | OTHER | \*-----------------------------------------------------------------*/ diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.cpp new file mode 100644 index 00000000..209bb9a7 --- /dev/null +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.cpp @@ -0,0 +1,154 @@ +/*-----------------------------------------*\ +| RGBController_AsusAuraStrixEvolve.cpp | +| | +| Generic RGB Interface for Asus Aura | +| USB controller driver | +| | +| Mola19 11/30/2021 | +\*-----------------------------------------*/ + +#include "RGBController_AsusAuraStrixEvolve.h" + +RGBController_AuraStrixEvolve::RGBController_AuraStrixEvolve(AuraStrixEvolveController* controller_ptr) +{ + controller = controller_ptr; + + name = "ASUS ROG Strix Evolve"; + vendor = "ASUS"; + type = DEVICE_TYPE_MOUSE; + description = "ASUS Aura Mouse Device"; + version = controller->GetVersion(); + location = controller->GetDeviceLocation(); + serial = controller->GetSerialString(); + + mode Direct; + Direct.name = "Direct"; + Direct.value = 1; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Direct.brightness_min = AURA_STRIX_EVOLVE_BRIGHTNESS_MIN; + Direct.brightness_max = AURA_STRIX_EVOLVE_BRIGHTNESS_MAX; + Direct.brightness = AURA_STRIX_EVOLVE_BRIGHTNESS_DEFAULT; + Direct.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Direct); + + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = 2; + Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Breathing.brightness_min = AURA_STRIX_EVOLVE_BRIGHTNESS_MIN; + Breathing.brightness_max = AURA_STRIX_EVOLVE_BRIGHTNESS_MAX; + Breathing.brightness = AURA_STRIX_EVOLVE_BRIGHTNESS_DEFAULT; + Breathing.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Breathing); + + mode ColorCycle; + ColorCycle.name = "Spectrum Cycle"; + ColorCycle.value = 3; + ColorCycle.flags = MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + ColorCycle.brightness_min = AURA_STRIX_EVOLVE_BRIGHTNESS_MIN; + ColorCycle.brightness_max = AURA_STRIX_EVOLVE_BRIGHTNESS_MAX; + ColorCycle.brightness = AURA_STRIX_EVOLVE_BRIGHTNESS_DEFAULT; + ColorCycle.color_mode = MODE_COLORS_NONE; + modes.push_back(ColorCycle); + + mode Reactive; + Reactive.name = "Reactive"; + Reactive.value = 4; + Reactive.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Reactive.brightness_min = AURA_STRIX_EVOLVE_BRIGHTNESS_MIN; + Reactive.brightness_max = AURA_STRIX_EVOLVE_BRIGHTNESS_MAX; + Reactive.brightness = AURA_STRIX_EVOLVE_BRIGHTNESS_DEFAULT; + Reactive.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Reactive); + + SetupZones(); +} + +RGBController_AuraStrixEvolve::~RGBController_AuraStrixEvolve() +{ + delete controller; +} + +void RGBController_AuraStrixEvolve::SetupZones() +{ + zone mouse_zone; + + mouse_zone.name = "Underglow"; + mouse_zone.type = ZONE_TYPE_SINGLE; + mouse_zone.leds_min = 1; + mouse_zone.leds_max = 1; + mouse_zone.leds_count = 1; + mouse_zone.matrix_map = NULL; + + zones.push_back(mouse_zone); + + led mouse_led; + + mouse_led.name = "Underglow"; + mouse_led.value = 1; + + leds.push_back(mouse_led); + + SetupColors(); +} + +void RGBController_AuraStrixEvolve::ResizeZone(int /*zone*/, int /*new_size*/) +{ + +} + +void RGBController_AuraStrixEvolve::DeviceUpdateLEDs() +{ + unsigned char red = RGBGetRValue(colors[0]); + unsigned char grn = RGBGetGValue(colors[0]); + unsigned char blu = RGBGetBValue(colors[0]); + + controller->SendUpdate(0x1C, red); + controller->SendUpdate(0x1D, grn); + controller->SendUpdate(0x1E, blu); +} + +void RGBController_AuraStrixEvolve::UpdateZoneLEDs(int /*zone*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_AuraStrixEvolve::UpdateSingleLED(int /*led*/) +{ + DeviceUpdateLEDs(); +} + +void RGBController_AuraStrixEvolve::SetCustomMode() +{ + active_mode = 0; +} + +void RGBController_AuraStrixEvolve::DeviceUpdateMode() +{ + unsigned char red = RGBGetRValue(colors[0]); + unsigned char grn = RGBGetGValue(colors[0]); + unsigned char blu = RGBGetBValue(colors[0]); + + controller->SendUpdate(0x19, modes[active_mode].value); + controller->SendUpdate(0x1A, modes[active_mode].brightness); + controller->SendUpdate(0x1C, red); + controller->SendUpdate(0x1D, grn); + controller->SendUpdate(0x1E, blu); +} + +void RGBController_AuraStrixEvolve::DeviceSaveMode() +{ + unsigned char red = RGBGetRValue(colors[0]); + unsigned char grn = RGBGetGValue(colors[0]); + unsigned char blu = RGBGetBValue(colors[0]); + + unsigned int profile = controller->GetActiveProfile(); + + controller->UpdateProfile(0x19, profile, modes[active_mode].value); + controller->UpdateProfile(0x1A, profile, modes[active_mode].brightness); + controller->UpdateProfile(0x1C, profile, red); + controller->UpdateProfile(0x1D, profile, grn); + controller->UpdateProfile(0x1E, profile, blu); + + controller->SendSavePacket(); +} diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.h b/Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.h new file mode 100644 index 00000000..61514682 --- /dev/null +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.h @@ -0,0 +1,41 @@ +/*-----------------------------------------*\ +| RGBController_AsusAuraStrixEvolve.h | +| | +| Generic RGB Interface for Asus Aura | +| USB controller driver | +| | +| Mola19 11/30/2021 | +\*-----------------------------------------*/ + +#pragma once +#include "RGBController.h" +#include "AsusAuraStrixEvolveController.h" + +enum +{ + AURA_STRIX_EVOLVE_BRIGHTNESS_MIN = 0, + AURA_STRIX_EVOLVE_BRIGHTNESS_MAX = 255, + AURA_STRIX_EVOLVE_BRIGHTNESS_DEFAULT = 255 +}; + +class RGBController_AuraStrixEvolve : public RGBController +{ +public: + RGBController_AuraStrixEvolve(AuraStrixEvolveController* controller_ptr); + ~RGBController_AuraStrixEvolve(); + + 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: + AuraStrixEvolveController* controller; +}; diff --git a/OpenRGB.pro b/OpenRGB.pro index 7dc2f2fd..1ac2ee28 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -231,11 +231,13 @@ HEADERS += Controllers/AsusAuraUSBController/AsusAuraMainboardController.h \ Controllers/AsusAuraUSBController/AsusAuraMouseController.h \ Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h \ + Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.h \ Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h \ Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraHeadsetStand.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraKeyboard.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.h \ + Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.h \ Controllers/BlinkyTapeController/BlinkyTapeController.h \ @@ -594,11 +596,13 @@ SOURCES += Controllers/AsusAuraUSBController/AsusAuraKeyboardController.cpp \ Controllers/AsusAuraUSBController/AsusAuraMainboardController.cpp \ Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp \ + Controllers/AsusAuraUSBController/AsusAuraStrixEvolveController.cpp \ Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp \ Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraHeadsetStand.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraKeyboard.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp \ + Controllers/AsusAuraUSBController/RGBController_AsusAuraStrixEvolve.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp \ Controllers/AsusAuraUSBController/RGBController_AsusAuraUSB.cpp \ Controllers/BlinkyTapeController/BlinkyTapeController.cpp \