From 8f55c90fe5904e823f2ca0cd0c29a50a5709df5c Mon Sep 17 00:00:00 2001 From: Mola19 Date: Sat, 30 Oct 2021 16:45:09 +0200 Subject: [PATCH] Add version to Asus mice Commit amended for code style by Adam Honse --- .../AsusAuraMouseController.cpp | 43 +++++++++++++++++++ .../AsusAuraMouseController.h | 3 +- .../AsusAuraMouseDevices.h | 34 +++++++++++++++ .../RGBController_AsusAuraMouse.cpp | 14 +++--- 4 files changed, 87 insertions(+), 7 deletions(-) diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp b/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp index 69f819806..aba443cfa 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp @@ -44,6 +44,49 @@ std::string AuraMouseController::GetSerialString() return(return_string); } +std::string AuraMouseController::GetVersion(bool wireless, int protocol) +{ + unsigned char usb_buf[65]; + memset(usb_buf, 0x00, sizeof(usb_buf)); + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x12; + hid_write(dev, usb_buf, 65); + + unsigned char usb_buf_out[65]; + hid_read(dev, usb_buf_out, 65); + + std::string str; + + switch(protocol) + { + case 0: + { + unsigned char* offset = usb_buf_out + (wireless ? 13 : 4); + str = std::string(offset, offset + 4); + } + break; + + case 1: + { + char version[9]; + int offset = (wireless ? 13 : 4); + snprintf(version, 9, "%2X.%02X.%02X", usb_buf_out[offset + 2], usb_buf_out[offset + 1], usb_buf_out[offset]); + str = std::string(version); + } + break; + + case 2: + { + unsigned char* offset = usb_buf_out + (wireless ? 13 : 4); + str = std::string(offset, offset + 4); + str = "0." + str.substr(0, 2) + "." + str.substr(2, 2); + } + break; + } + + return str; +} + void AuraMouseController::SaveMode() { unsigned char usb_save_buf[ASUS_AURA_MOUSE_PACKET_SIZE] = { 0x00, 0x50, 0x03 }; diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseController.h b/Controllers/AsusAuraUSBController/AsusAuraMouseController.h index 0c137a5fd..9b29e8d1f 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseController.h @@ -26,6 +26,7 @@ public: std::string GetDeviceLocation(); std::string GetSerialString(); + std::string GetVersion(bool wireless, int protocol); void SaveMode(); void SendUpdate @@ -39,7 +40,7 @@ public: bool random, unsigned char speed, unsigned char brightness - ); + ); uint16_t device_pid; diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h b/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h index c738cb103..03b083996 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h @@ -52,6 +52,8 @@ typedef struct { uint8_t speed_min; uint8_t speed_max; + bool wireless; + int version_protocol; std::vector mouse_zones; std::vector mouse_modes; } mouse_type; @@ -71,6 +73,8 @@ static std::map aura_mouse_devices = { 0, //Speed Min - The Asus Mouse protocol defines larger numbers as slow 0, //Speed Max + false, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -80,6 +84,8 @@ static std::map aura_mouse_devices = { 255, 1, + false, + 0, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -89,6 +95,8 @@ static std::map aura_mouse_devices = { 255, 1, + false, + 0, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -98,6 +106,8 @@ static std::map aura_mouse_devices = { 255, 1, + false, + 0, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -107,6 +117,8 @@ static std::map aura_mouse_devices = { 255, 1, + false, + 0, { AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -116,6 +128,8 @@ static std::map aura_mouse_devices = { 0, 0, + true, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -125,6 +139,8 @@ static std::map aura_mouse_devices = { 0, 0, + true, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -134,6 +150,8 @@ static std::map aura_mouse_devices = { 15, 1, + true, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -143,6 +161,8 @@ static std::map aura_mouse_devices = { 15, 1, + false, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -152,6 +172,8 @@ static std::map aura_mouse_devices = { 15, 1, + false, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -161,6 +183,8 @@ static std::map aura_mouse_devices = { 255, 1, + false, + 0, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -170,6 +194,8 @@ static std::map aura_mouse_devices = { 15, 1, + false, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -179,6 +205,8 @@ static std::map aura_mouse_devices = { 15, 1, + true, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -188,6 +216,8 @@ static std::map aura_mouse_devices = { 0, 0, + false, + 1, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -197,6 +227,8 @@ static std::map aura_mouse_devices = { 0, 0, + false, + 1, { AURA_MOUSE_ZONE_LOGO }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -206,6 +238,8 @@ static std::map aura_mouse_devices = { 0, 0, + false, + 2, { AURA_MOUSE_ZONE_LOGO }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp index 424367449..8992fd6b7 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp @@ -20,14 +20,16 @@ RGBController_AuraMouse::RGBController_AuraMouse(AuraMouseController* aura_ptr) { aura = aura_ptr; + uint16_t pid = aura->device_pid; + name = "ASUS Aura Mouse"; vendor = "ASUS"; type = DEVICE_TYPE_MOUSE; description = "ASUS Aura Mouse Device"; + version = aura->GetVersion(aura_mouse_devices[pid].wireless, aura_mouse_devices[pid].version_protocol); location = aura->GetDeviceLocation(); serial = aura->GetSerialString(); - uint16_t pid = aura->device_pid; std::vector mm = aura_mouse_devices[pid].mouse_modes; int mode_value = 0; @@ -81,7 +83,7 @@ RGBController_AuraMouse::RGBController_AuraMouse(AuraMouseController* aura_ptr) case AURA_MOUSE_MODE_WAVE: { mode Wave; - Wave.name = "Wave"; + Wave.name = "Rainbow Wave"; Wave.value = mode_value; Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; Wave.direction = 0; @@ -133,11 +135,11 @@ RGBController_AuraMouse::RGBController_AuraMouse(AuraMouseController* aura_ptr) mode BatteryMode; BatteryMode.name = "Battery"; BatteryMode.value = mode_value; - BatteryMode.flags = 0; + BatteryMode.flags = MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; BatteryMode.brightness_min = AURA_MOUSE_BRIGHTNESS_MIN; BatteryMode.brightness_max = AURA_MOUSE_BRIGHTNESS_MAX; BatteryMode.brightness = AURA_MOUSE_BRIGHTNESS_DEFAULT; - BatteryMode.color_mode = MODE_COLORS_NONE | MODE_FLAG_MANUAL_SAVE; + BatteryMode.color_mode = MODE_COLORS_NONE; modes.push_back(BatteryMode); } break; @@ -206,7 +208,7 @@ void RGBController_AuraMouse::UpdateSingleLED(int led) uint8_t grn = RGBGetGValue(colors[led]); uint8_t blu = RGBGetBValue(colors[led]); - aura->SendUpdate(leds[led].value, active_mode, red, grn, blu, 0, false, 0, modes[active_mode].brightness); + aura->SendUpdate(leds[led].value, modes[active_mode].value, red, grn, blu, 0, false, 0, modes[active_mode].brightness); } void RGBController_AuraMouse::SetCustomMode() @@ -233,7 +235,7 @@ void RGBController_AuraMouse::DeviceUpdateMode() blu = RGBGetBValue(modes[active_mode].colors[0]); } - aura->SendUpdate(AURA_MOUSE_ZONE_ALL, active_mode, red, grn, blu, modes[active_mode].direction, modes[active_mode].color_mode == MODE_COLORS_RANDOM, modes[active_mode].speed, modes[active_mode].brightness); + 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, modes[active_mode].brightness); } }