Skip to content

Commit fcb617e

Browse files
Mola19CalcProgrammer1
authored andcommitted
Add support for ASUS ROG Throne Qi headset stand
Commits squashed and amended for code style by Adam Honse <[email protected]>
1 parent ce74787 commit fcb617e

File tree

6 files changed

+428
-1
lines changed

6 files changed

+428
-1
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
/*-----------------------------------------*\
2+
| AsusAuraHeadsetStandController.cpp |
3+
| |
4+
| Driver for ASUS Aura RGB USB |
5+
| lighting controller |
6+
| |
7+
| Mola19 06/04/2021 |
8+
\*-----------------------------------------*/
9+
10+
#include "AsusAuraHeadsetStandController.h"
11+
12+
#include <cstring>
13+
14+
AuraHeadsetStandController::AuraHeadsetStandController(hid_device* dev_handle, const char* path)
15+
{
16+
dev = dev_handle;
17+
location = path;
18+
}
19+
20+
AuraHeadsetStandController::~AuraHeadsetStandController()
21+
{
22+
hid_close(dev);
23+
}
24+
25+
std::string AuraHeadsetStandController::GetDeviceLocation()
26+
{
27+
return("HID: " + location);
28+
}
29+
30+
std::string AuraHeadsetStandController::GetSerialString()
31+
{
32+
wchar_t serial_string[128];
33+
int ret = hid_get_serial_number_string(dev, serial_string, 128);
34+
35+
if(ret != 0)
36+
{
37+
return("");
38+
}
39+
40+
std::wstring return_wstring = serial_string;
41+
std::string return_string(return_wstring.begin(), return_wstring.end());
42+
43+
return(return_string);
44+
}
45+
46+
void AuraHeadsetStandController::UpdateLeds
47+
(
48+
std::vector<RGBColor> colors
49+
)
50+
{
51+
unsigned char usb_buf_0[365];
52+
53+
memset(usb_buf_0, 0x00, sizeof(usb_buf_0));
54+
55+
usb_buf_0[0x00] = 0x00;
56+
usb_buf_0[0x01] = 0xC0;
57+
usb_buf_0[0x02] = 0x81;
58+
usb_buf_0[0x03] = 0x00;
59+
usb_buf_0[0x04] = 0x00;
60+
61+
for(unsigned int i = 0; i < 60; i += 4)
62+
{
63+
usb_buf_0[5 + i] = 0x00;
64+
usb_buf_0[6 + i] = RGBGetRValue(colors[i / 4]);
65+
usb_buf_0[7 + i] = RGBGetGValue(colors[i / 4]);
66+
usb_buf_0[8 + i] = RGBGetBValue(colors[i / 4]);
67+
}
68+
69+
hid_write(dev, usb_buf_0, 65);
70+
71+
unsigned char usb_buf_1[65];
72+
73+
memset(usb_buf_1, 0x00, sizeof(usb_buf_1));
74+
75+
usb_buf_1[0x00] = 0x00;
76+
usb_buf_1[0x01] = 0xC0;
77+
usb_buf_1[0x02] = 0x81;
78+
usb_buf_1[0x03] = 0x01;
79+
usb_buf_1[0x04] = 0x00;
80+
81+
for(unsigned int i = 0; i < 12; i += 4)
82+
{
83+
usb_buf_1[5 + i] = 0x00;
84+
usb_buf_1[6 + i] = RGBGetRValue(colors[(i / 4) + 15]);
85+
usb_buf_1[7 + i] = RGBGetGValue(colors[(i / 4) + 15]);
86+
usb_buf_1[8 + i] = RGBGetBValue(colors[(i / 4) + 15]);
87+
}
88+
89+
hid_write(dev, usb_buf_1, 65);
90+
}
91+
92+
void AuraHeadsetStandController::UpdateDevice
93+
(
94+
unsigned char mode,
95+
unsigned char red,
96+
unsigned char grn,
97+
unsigned char blu,
98+
unsigned char speed,
99+
bool save
100+
)
101+
{
102+
unsigned char usb_buf[65];
103+
104+
memset(usb_buf, 0x00, sizeof(usb_buf));
105+
106+
usb_buf[0x00] = 0x00;
107+
usb_buf[0x01] = 0x51;
108+
usb_buf[0x02] = 0x28;
109+
usb_buf[0x03] = 0x00;
110+
usb_buf[0x04] = 0x00;
111+
usb_buf[0x05] = mode;
112+
usb_buf[0x06] = speed;
113+
usb_buf[0x07] = 0x04;
114+
usb_buf[0x08] = 0x00;
115+
usb_buf[0x09] = 0x00;
116+
usb_buf[0x0a] = red;
117+
usb_buf[0x0b] = grn;
118+
usb_buf[0x0c] = blu;
119+
hid_write(dev, usb_buf, 65);
120+
121+
if(save)
122+
{
123+
unsigned char usb_save_buf[65];
124+
125+
memset(usb_save_buf, 0x00, sizeof(usb_save_buf));
126+
127+
usb_save_buf[0x00] = 0x00;
128+
usb_save_buf[0x01] = 0x50;
129+
usb_save_buf[0x02] = 0x55;
130+
131+
hid_write(dev, usb_save_buf, 65);
132+
}
133+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*-----------------------------------------*\
2+
| AsusAuraHeadsetStandController.h |
3+
| |
4+
| Definitions and types for ASUS Aura |
5+
| USB RGB lighting controller |
6+
| |
7+
| Mola19 06/04/2021 |
8+
\*-----------------------------------------*/
9+
10+
#include "RGBController.h"
11+
12+
#include <hidapi/hidapi.h>
13+
14+
#pragma once
15+
16+
enum
17+
{
18+
AURA_HEADSET_STAND_ZONE_UNDERGLOW = 0,
19+
AURA_HEADSET_STAND_ZONE_LOGO = 1
20+
};
21+
22+
enum
23+
{
24+
AURA_HEADSET_STAND_MODE_DIRECT = 0,
25+
AURA_HEADSET_STAND_MODE_STATIC = 1,
26+
AURA_HEADSET_STAND_MODE_BREATHING = 2,
27+
AURA_HEADSET_STAND_MODE_STROBING = 3,
28+
AURA_HEADSET_STAND_MODE_COLOR_CYCLE = 4,
29+
AURA_HEADSET_STAND_MODE_RAINBOW = 5
30+
};
31+
32+
class AuraHeadsetStandController
33+
{
34+
public:
35+
AuraHeadsetStandController(hid_device* dev_handle, const char* path);
36+
virtual ~AuraHeadsetStandController();
37+
38+
std::string GetDeviceLocation();
39+
std::string GetSerialString();
40+
41+
void UpdateLeds
42+
(
43+
std::vector<RGBColor> colors
44+
);
45+
46+
void UpdateDevice
47+
(
48+
unsigned char mode,
49+
unsigned char red,
50+
unsigned char grn,
51+
unsigned char blu,
52+
unsigned char speed,
53+
bool save
54+
);
55+
56+
private:
57+
hid_device* dev;
58+
std::string location;
59+
};

Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
#include "Detector.h"
22
#include "AsusAuraAddressableController.h"
3+
#include "AsusAuraHeadsetStandController.h"
34
#include "AsusAuraKeyboardController.h"
45
#include "AsusAuraMainboardController.h"
56
#include "AsusAuraMouseController.h"
67
#include "RGBController.h"
78
#include "RGBController_AsusAuraUSB.h"
9+
#include "RGBController_AsusAuraHeadsetStand.h"
810
#include "RGBController_AsusAuraKeyboard.h"
911
#include "RGBController_AsusAuraMouse.h"
1012
#include <stdexcept>
@@ -30,6 +32,7 @@
3032
#define AURA_ROG_CHAKRAM_WIRELESS_PID 0x18E5
3133
#define AURA_ROG_CHAKRAM_WIRED_1_PID 0x18E3
3234
#define AURA_ROG_CHAKRAM_WIRED_2_PID 0x1958
35+
#define AURA_ROG_THRONE_QI_PID 0x18C5
3336

3437
void DetectAsusAuraUSBTerminal(hid_device_info* info, const std::string& name)
3538
{
@@ -102,6 +105,18 @@ void DetectAsusAuraUSBMice(hid_device_info* info, const std::string& name)
102105
}
103106
}
104107

108+
void DetectAsusAuraUSBHeadsetStand(hid_device_info* info, const std::string& name)
109+
{
110+
hid_device* dev = hid_open_path(info->path);
111+
if(dev)
112+
{
113+
AuraHeadsetStandController* controller = new AuraHeadsetStandController(dev, info->path);
114+
RGBController_AuraHeadsetStand* rgb_controller = new RGBController_AuraHeadsetStand(controller);
115+
rgb_controller->name = name;
116+
ResourceManager::get()->RegisterRGBController(rgb_controller);
117+
}
118+
}
119+
105120
REGISTER_HID_DETECTOR ("ASUS ROG AURA Terminal", DetectAsusAuraUSBTerminal, AURA_USB_VID, AURA_TERMINAL_PID);
106121
REGISTER_HID_DETECTOR ("ASUS Aura Addressable", DetectAsusAuraUSBAddressable, AURA_USB_VID, AURA_ADDRESSABLE_1_PID);
107122
REGISTER_HID_DETECTOR ("ASUS Aura Addressable", DetectAsusAuraUSBAddressable, AURA_USB_VID, AURA_ADDRESSABLE_2_PID);
@@ -119,4 +134,5 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Chakram (Wireless)", DetectAsusAuraUS
119134
REGISTER_HID_DETECTOR_IP("Asus ROG Chakram (Wired)", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_CHAKRAM_WIRED_1_PID, 0, 0xFF01);
120135
REGISTER_HID_DETECTOR_IP("Asus ROG Chakram (Wired)", DetectAsusAuraUSBMice, AURA_USB_VID, AURA_ROG_CHAKRAM_WIRED_2_PID, 0, 0xFF01);
121136
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PID, 1, 0xFF00);
122-
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare PNK LTD", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PNK_LTD_PID, 1, 0xFF00);
137+
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare PNK LTD", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PNK_LTD_PID, 1, 0xFF00);
138+
REGISTER_HID_DETECTOR_I ("ASUS ROG Throne QI", DetectAsusAuraUSBHeadsetStand, AURA_USB_VID, AURA_ROG_THRONE_QI_PID, 0);

0 commit comments

Comments
 (0)