Add more ASUS Mice, make ASUS mouse controller more flexible

Commits squashed and amended for code style by Adam Honse <calcprogrammer1@gmail.com>
This commit is contained in:
Mola19 2021-06-01 15:13:11 +02:00 committed by Adam Honse
parent f735adf956
commit 926f62f512
4 changed files with 207 additions and 99 deletions

View file

@ -11,10 +11,11 @@
#include <cstring>
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);
}
}

View file

@ -11,6 +11,7 @@
#include <string>
#include <vector>
#include <map>
#include <hidapi/hidapi.h>
#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;

View file

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

View file

@ -8,45 +8,127 @@
\*-----------------------------------------*/
#include "RGBController_AsusAuraMouse.h"
#include <vector>
typedef struct
{
std::vector<std::string> zone_names;
std::vector<std::string> mode_names;
} mouse_type;
std::map<int,mouse_type> 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);
}
}