diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp b/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp index 24f5e729..219c0edf 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp @@ -11,10 +11,11 @@ #include -AuraMouseController::AuraMouseController(hid_device* dev_handle, const char* path) +AuraMouseController::AuraMouseController(hid_device* dev_handle, const char* path, uint16_t pid) { dev = dev_handle; location = path; + device_pid = pid; } AuraMouseController::~AuraMouseController() @@ -49,7 +50,11 @@ void AuraMouseController::SendUpdate unsigned char mode, unsigned char red, unsigned char grn, - unsigned char blu + unsigned char blu, + unsigned char dir, + bool random, + unsigned char speed, + bool save ) { unsigned char usb_buf[65]; @@ -72,9 +77,35 @@ void AuraMouseController::SendUpdate usb_buf[0x07] = red; usb_buf[0x08] = grn; usb_buf[0x09] = blu; + + if(device_pid == 0x18CD) + { + usb_buf[0x0A] = 0; + usb_buf[0x0B] = 0; + usb_buf[0x0D] = 0; + usb_buf[0x0D] = dir; + usb_buf[0x0E] = random; + usb_buf[0x0F] = (speed == 0) ? 0 : 256 - speed; + } + else + { + usb_buf[0x0A] = dir; + usb_buf[0x0B] = random; + usb_buf[0x0C] = (speed == 0) ? 0 : 256 - speed; + } /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ hid_write(dev, usb_buf, 65); + + if(save) + { + unsigned char usb_save_buf[65]; + memset(usb_save_buf, 0x00, sizeof(usb_save_buf)); + usb_save_buf[0x00] = 0x00; + usb_save_buf[0x01] = 0x50; + usb_save_buf[0x02] = 0x03; + hid_write(dev, usb_save_buf, 65); + } } diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseController.h b/Controllers/AsusAuraUSBController/AsusAuraMouseController.h index 25674237..5cbfa8b6 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseController.h @@ -11,6 +11,7 @@ #include #include +#include #include #pragma once @@ -23,18 +24,10 @@ enum AURA_MOUSE_ZONE_ALL = 3, }; -enum -{ - AURA_MOUSE_MODE_STATIC = 0, - AURA_MOUSE_MODE_BREATHING = 1, - AURA_MOUSE_MODE_COLOR_CYCLE = 2, - AURA_MOUSE_MODE_REACTIVE = 3, -}; - class AuraMouseController { public: - AuraMouseController(hid_device* dev_handle, const char* path); + AuraMouseController(hid_device* dev_handle, const char* path, uint16_t pid); virtual ~AuraMouseController(); std::string GetDeviceLocation(); @@ -46,9 +39,15 @@ public: unsigned char mode, unsigned char red, unsigned char grn, - unsigned char blu + unsigned char blu, + unsigned char dir, + bool random, + unsigned char speed, + bool save ); + uint16_t device_pid; + private: hid_device* dev; std::string location; diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 5947e11b..3bf22f3f 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -29,6 +29,15 @@ #define AURA_ROG_GLADIUS_II_ORIGIN_PID 0x1877 #define AURA_ROG_GLADIUS_II_ORIGIN_PNK_LTD_PID 0x18CD #define AURA_ROG_GLADIUS_II_WIRELESS_PID 0x18A0 +#define AURA_ROG_PUGIO_PID 0x1846 +#define AURA_ROG_GLADIUS_II_ORIGIN_COD_PID 0x18B1 +#define AURA_ROG_GLADIUS_II_WIRELESS_1_PID 0x189E +#define AURA_ROG_GLADIUS_II_WIRELESS_2_PID 0x18A0 +#define AURA_ROG_PUGIO_II_WIRED_PID 0x1906 +#define AURA_ROG_PUGIO_II_WIRELESS_PID 0x1908 +#define AURA_TUF_M3_PID 0x1910 +#define AURA_TUF_M5_PID 0x1910 +#define AURA_ROG_STRIX_IMPACT_II_PID 0x18E1 #define AURA_ROG_STRIX_FLARE_PID 0x1875 #define AURA_ROG_STRIX_FLARE_PNK_LTD_PID 0x18CF #define AURA_ROG_STRIX_SCOPE_PID 0x18F8 @@ -133,7 +142,7 @@ void DetectAsusAuraUSBMice(hid_device_info* info, const std::string& name) hid_device* dev = hid_open_path(info->path); if(dev) { - AuraMouseController* controller = new AuraMouseController(dev, info->path); + AuraMouseController* controller = new AuraMouseController(dev, info->path, info->product_id); RGBController_AuraMouse* rgb_controller = new RGBController_AuraMouse(controller); rgb_controller->name = name; ResourceManager::get()->RegisterRGBController(rgb_controller); @@ -177,9 +186,18 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II", DetectAsusAuraUS REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Origin", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_ORIGIN_PID, 2, 0xFF01); REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Origin PNK LTD", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_ORIGIN_PNK_LTD_PID, 2, 0xFF01); REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Wireless", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_WIRELESS_PID, 2, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Origin COD", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_ORIGIN_COD_PID, 1, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Wireless", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_WIRELESS_1_PID, 1, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Gladius II Wireless", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_GLADIUS_II_WIRELESS_2_PID, 1, 0xFF01); REGISTER_HID_DETECTOR_IP("ASUS ROG Chakram (Wireless)", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_CHAKRAM_WIRELESS_PID, 0, 0xFF01); REGISTER_HID_DETECTOR_IP("Asus ROG Chakram (Wired)", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_CHAKRAM_WIRED_1_PID, 0, 0xFF01); REGISTER_HID_DETECTOR_IP("Asus ROG Chakram (Wired)", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_CHAKRAM_WIRED_2_PID, 0, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Pugio", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_PUGIO_PID, 2, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Pugio II (Wired)", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_PUGIO_II_WIRED_PID, 1, 0xFF01); +REGISTER_HID_DETECTOR_IP("ASUS ROG Pugio II (Wireless)", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_PUGIO_II_WIRELESS_PID, 1, 0xFF13); +REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Impact II", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_STRIX_IMPACT_II_PID, 1, 0xFF01); +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, 1, 0xFF01); REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare PNK LTD", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PNK_LTD_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_PID, 1, 0xFF00); diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp index 90296afb..8f53c8c3 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp @@ -8,45 +8,127 @@ \*-----------------------------------------*/ #include "RGBController_AsusAuraMouse.h" +#include + +typedef struct +{ + std::vector zone_names; + std::vector mode_names; +} mouse_type; + +std::map DEVICES = +{ + { 0x18DD, {{ "Logo", "Scroll Wheel" }, { "Static", "Breathing", "Color Cycle", "Reactive" }}}, // ROG Gladius II Core + { 0x1845, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet" }}}, // ROG Gladius II + { 0x1877, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet" }}}, // ROG Gladius II Origin + { 0x18B1, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet" }}}, // ROG Gladius II COD + { 0x18CD, {{ "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet" }}}, // ROG Gladius II PNK LTD + { 0x189E, {{ "Logo", "Scroll Wheel" }, { "Static", "Breathing", "Color Cycle", "", "Reactive", "", "Battery Mode" }}}, // ROG Gladius II Wireless + { 0x18A0, {{ "Logo", "Scroll Wheel" }, { "Static", "Breathing", "Color Cycle", "", "Reactive", "", "Battery Mode" }}}, // ROG Gladius II Wireless + { 0x18E5, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet", "Battery Mode" }}}, // ROG Chakram Wireless + { 0x18E3, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet", "Battery Mode" }}}, // ROG Chakram Wired 1 + { 0x1958, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet", "Battery Mode" }}}, // ROG Chakram Wired 2 + { 0x1846, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet" }}}, // ROG Pugio + { 0x1906, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet", "Battery Mode" }}}, // ROG Pugio II Wired + { 0x1908, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Wave", "Reactive", "Comet", "Battery Mode" }}}, // ROG Pugio II Wireless + { 0x18E1, {{ "Logo", "Scroll Wheel", "Underglow" }, { "Static", "Breathing", "Color Cycle", "Reactive" }}}, // ROG Strix Impact II + { 0x1910, {{ "Logo" }, { "Static", "Breathing", "Color Cycle", "Reactive" }}}, // TUF M3 + { 0x1898, {{ "Logo" }, { "Static", "Breathing", "Color Cycle", "Reactive" }}}, // TUF M5 + +}; RGBController_AuraMouse::RGBController_AuraMouse(AuraMouseController* aura_ptr) { - aura = aura_ptr; + aura = aura_ptr; - name = "ASUS Aura Mouse"; - vendor = "ASUS"; - type = DEVICE_TYPE_MOUSE; - description = "ASUS Aura Mouse Device"; - location = aura->GetDeviceLocation(); - serial = aura->GetSerialString(); + name = "ASUS Aura Mouse"; + vendor = "ASUS"; + type = DEVICE_TYPE_MOUSE; + description = "ASUS Aura Mouse Device"; + location = aura->GetDeviceLocation(); + serial = aura->GetSerialString(); - mode Direct; - Direct.name = "Direct"; - Direct.value = AURA_MOUSE_MODE_STATIC; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Direct); + uint16_t pid = aura->device_pid; - mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = AURA_MOUSE_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Breathing.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Breathing); + for(unsigned int i = 0; i < DEVICES[pid].mode_names.size(); i++) + { + if(DEVICES[pid].mode_names[i].size() == 0) + { + continue; + } - mode SpectrumCycle; - SpectrumCycle.name = "Spectrum Cycle"; - SpectrumCycle.value = AURA_MOUSE_MODE_COLOR_CYCLE; - SpectrumCycle.flags = 0; - SpectrumCycle.color_mode = MODE_COLORS_NONE; - modes.push_back(SpectrumCycle); - - mode Reactive; - Reactive.name = "Reactive"; - Reactive.value = AURA_MOUSE_MODE_REACTIVE; - Reactive.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Reactive.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Reactive); + if(DEVICES[pid].mode_names[i] == "Static") + { + mode Direct; + Direct.name = "Direct"; + Direct.value = i; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Direct.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Direct); + } + else if(DEVICES[pid].mode_names[i] == "Breathing") + { + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = i; + Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Breathing.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Breathing); + } + else if(DEVICES[pid].mode_names[i] == "Color Cycle") + { + mode ColorCycle; + ColorCycle.name = "Color Cycle"; + ColorCycle.value = i; + ColorCycle.flags = 0; + ColorCycle.color_mode = MODE_COLORS_NONE; + modes.push_back(ColorCycle); + } + else if(DEVICES[pid].mode_names[i] == "Wave") + { + mode Wave; + Wave.name = "Wave"; + Wave.value = i; + Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; + Wave.direction = 0; + Wave.speed_min = 1; + Wave.speed_max = 255; + Wave.speed = 128; + Wave.color_mode = MODE_COLORS_NONE; + modes.push_back(Wave); + } + else if(DEVICES[pid].mode_names[i] == "Reactive") + { + mode Reactive; + Reactive.name = "Reactive"; + Reactive.value = i; + Reactive.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Reactive.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Reactive); + } + else if(DEVICES[pid].mode_names[i] == "Comet") + { + mode Comet; + Comet.name = "Comet"; + Comet.value = i; + Comet.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_DIRECTION_LR; + Comet.color_mode = MODE_COLORS_MODE_SPECIFIC; + Comet.direction = 0; + Comet.colors_min = 1; + Comet.colors_max = 1; + Comet.colors.resize(1); + modes.push_back(Comet); + } + else if(DEVICES[pid].mode_names[i] == "Battery Mode") + { + mode BatteryMode; + BatteryMode.name = "Battery Mode"; + BatteryMode.value = i; + BatteryMode.flags = 0; + BatteryMode.color_mode = MODE_COLORS_NONE; + modes.push_back(BatteryMode); + } + } SetupZones(); } @@ -58,56 +140,27 @@ RGBController_AuraMouse::~RGBController_AuraMouse() void RGBController_AuraMouse::SetupZones() { - zone logo_zone; + uint16_t pid = aura->device_pid; - logo_zone.name = "Logo"; - logo_zone.type = ZONE_TYPE_SINGLE; - logo_zone.leds_min = 1; - logo_zone.leds_max = 1; - logo_zone.leds_count = 1; - logo_zone.matrix_map = NULL; + for(unsigned long long i = 0; i < DEVICES[pid].zone_names.size(); i++) + { + zone mouse_zone; - zones.push_back(logo_zone); + mouse_zone.name = DEVICES[pid].zone_names[i]; + 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; - led logo_led; + zones.push_back(mouse_zone); - logo_led.name = "Logo"; + led mouse_led; - leds.push_back(logo_led); + mouse_led.name = DEVICES[pid].zone_names[i]; - zone scroll_zone; - - scroll_zone.name = "Scroll Wheel"; - scroll_zone.type = ZONE_TYPE_SINGLE; - scroll_zone.leds_min = 1; - scroll_zone.leds_max = 1; - scroll_zone.leds_count = 1; - scroll_zone.matrix_map = NULL; - - zones.push_back(scroll_zone); - - led scroll_led; - - scroll_led.name = "Scroll Wheel"; - - leds.push_back(scroll_led); - - zone underglow_zone; - - underglow_zone.name = "Underglow"; - underglow_zone.type = ZONE_TYPE_SINGLE; - underglow_zone.leds_min = 1; - underglow_zone.leds_max = 1; - underglow_zone.leds_count = 1; - underglow_zone.matrix_map = NULL; - - zones.push_back(underglow_zone); - - led underglow_led; - - underglow_led.name = "Underglow"; - - leds.push_back(underglow_led); + leds.push_back(mouse_led); + } SetupColors(); } @@ -135,21 +188,21 @@ void RGBController_AuraMouse::UpdateSingleLED(int led) if(modes[active_mode].color_mode == MODE_COLORS_PER_LED) { - if(led == 0) + if(leds[led].name == "Logo") { red = RGBGetRValue(colors[led]); grn = RGBGetGValue(colors[led]); blu = RGBGetBValue(colors[led]); - aura->SendUpdate(AURA_MOUSE_ZONE_LOGO, modes[active_mode].value, red, grn, blu); + aura->SendUpdate(AURA_MOUSE_ZONE_LOGO, modes[active_mode].value, red, grn, blu, 0, false, 0, false); } - else if(led == 1) + else if(leds[led].name == "Scroll Wheel") { red = RGBGetRValue(colors[led]); grn = RGBGetGValue(colors[led]); blu = RGBGetBValue(colors[led]); - aura->SendUpdate(AURA_MOUSE_ZONE_SCROLL, modes[active_mode].value, red, grn, blu); + aura->SendUpdate(AURA_MOUSE_ZONE_SCROLL, modes[active_mode]. value, red, grn, blu, 0, false, 0, false); } else { @@ -157,12 +210,12 @@ void RGBController_AuraMouse::UpdateSingleLED(int led) grn = RGBGetGValue(colors[led]); blu = RGBGetBValue(colors[led]); - aura->SendUpdate(AURA_MOUSE_ZONE_UNDERGLOW, modes[active_mode].value, red, grn, blu); + aura->SendUpdate(AURA_MOUSE_ZONE_UNDERGLOW, modes[active_mode].value, red, grn, blu, 0, false, 0, false); } } else { - aura->SendUpdate(AURA_MOUSE_ZONE_ALL, modes[active_mode].value, red, grn, blu); + aura->SendUpdate(AURA_MOUSE_ZONE_ALL, modes[active_mode].value, red, grn, blu, 0, false, 0, false); } } @@ -179,26 +232,33 @@ void RGBController_AuraMouse::DeviceUpdateMode() if(modes[active_mode].color_mode == MODE_COLORS_PER_LED) { + bool save = false; red = RGBGetRValue(colors[0]); grn = RGBGetGValue(colors[0]); blu = RGBGetBValue(colors[0]); - aura->SendUpdate(AURA_MOUSE_ZONE_LOGO, modes[active_mode].value, red, grn, blu); + aura->SendUpdate(AURA_MOUSE_ZONE_LOGO, modes[active_mode].value, red, grn, blu, 0, false, 0, save); red = RGBGetRValue(colors[1]); grn = RGBGetGValue(colors[1]); blu = RGBGetBValue(colors[1]); - aura->SendUpdate(AURA_MOUSE_ZONE_SCROLL, modes[active_mode].value, red, grn, blu); + aura->SendUpdate(AURA_MOUSE_ZONE_SCROLL, modes[active_mode].value, red, grn, blu, 0, false, 0, save); red = RGBGetRValue(colors[2]); grn = RGBGetGValue(colors[2]); blu = RGBGetBValue(colors[2]); - aura->SendUpdate(AURA_MOUSE_ZONE_UNDERGLOW, modes[active_mode].value, red, grn, blu); + aura->SendUpdate(AURA_MOUSE_ZONE_UNDERGLOW, modes[active_mode].value, red, grn, blu, 0, false, 0, save); } else { - aura->SendUpdate(AURA_MOUSE_ZONE_ALL, modes[active_mode].value, red, grn, blu); + if(modes[active_mode].value == 5) + { + red = RGBGetRValue(modes[active_mode].colors[0]); + grn = RGBGetGValue(modes[active_mode].colors[0]); + blu = RGBGetBValue(modes[active_mode].colors[0]); + } + aura->SendUpdate(AURA_MOUSE_ZONE_ALL, modes[active_mode].value, red, grn, blu, modes[active_mode].direction, modes[active_mode].color_mode == MODE_COLORS_RANDOM, modes[active_mode].speed, true); } }