From dc88b1a75218764f4ea2317237cf5da51518e97c Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 14 Apr 2020 18:46:54 -0500 Subject: [PATCH] Add Aura Terminal PID to addressable controller and implement firmware string retrieval --- .../AuraAddressableController.cpp | 45 +++++++++++++++++-- .../AuraAddressableController.h | 8 +++- .../AuraAddressableControllerDetect.cpp | 5 ++- .../RGBController_AuraAddressable.cpp | 3 +- 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/Controllers/AuraAddressableController/AuraAddressableController.cpp b/Controllers/AuraAddressableController/AuraAddressableController.cpp index 7ad887e67..54eb77012 100644 --- a/Controllers/AuraAddressableController/AuraAddressableController.cpp +++ b/Controllers/AuraAddressableController/AuraAddressableController.cpp @@ -24,6 +24,8 @@ static void Sleep(unsigned int milliseconds) AuraAddressableController::AuraAddressableController(hid_device* dev_handle) { dev = dev_handle; + + GetFirmwareVersion(); } AuraAddressableController::~AuraAddressableController() @@ -31,6 +33,11 @@ AuraAddressableController::~AuraAddressableController() } +std::string AuraAddressableController::GetDeviceName() +{ + return(device_name); +} + void AuraAddressableController::SetLEDsDirect(std::vector colors) { unsigned char led_data[60]; @@ -85,6 +92,36 @@ void AuraAddressableController::SetMode ); } +void AuraAddressableController::GetFirmwareVersion() +{ + unsigned char usb_buf[65]; + + /*-----------------------------------------------------*\ + | Zero out buffer | + \*-----------------------------------------------------*/ + memset(usb_buf, 0x00, sizeof(usb_buf)); + + /*-----------------------------------------------------*\ + | Set up firmware version request packet | + \*-----------------------------------------------------*/ + usb_buf[0x00] = 0xEC; + usb_buf[0x01] = AURA_REQUEST_FIRMWARE_VERSION; + + /*-----------------------------------------------------*\ + | Send packet | + \*-----------------------------------------------------*/ + hid_write(dev, usb_buf, 65); + hid_read(dev, usb_buf, 65); + + /*-----------------------------------------------------*\ + | Copy the firmware string if the reply ID is correct | + \*-----------------------------------------------------*/ + if(usb_buf[1] == 0x02) + { + memcpy(device_name, &usb_buf[2], 16); + } +} + void AuraAddressableController::SendEffect ( unsigned char mode, @@ -119,7 +156,7 @@ void AuraAddressableController::SendEffect /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_send_feature_report(dev, usb_buf, 64); + hid_write(dev, usb_buf, 65); } void AuraAddressableController::SendDirect @@ -154,7 +191,7 @@ void AuraAddressableController::SendDirect /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_send_feature_report(dev, usb_buf, 64); + hid_write(dev, usb_buf, 65); } void AuraAddressableController::SendDirectBegin() @@ -176,7 +213,7 @@ void AuraAddressableController::SendDirectBegin() /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_send_feature_report(dev, usb_buf, 64); + hid_write(dev, usb_buf, 65); } void AuraAddressableController::SendDirectApply() @@ -198,5 +235,5 @@ void AuraAddressableController::SendDirectApply() /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_send_feature_report(dev, usb_buf, 64); + hid_write(dev, usb_buf, 65); } diff --git a/Controllers/AuraAddressableController/AuraAddressableController.h b/Controllers/AuraAddressableController/AuraAddressableController.h index 52bbf80a1..1e9a9a3fd 100644 --- a/Controllers/AuraAddressableController/AuraAddressableController.h +++ b/Controllers/AuraAddressableController/AuraAddressableController.h @@ -37,6 +37,8 @@ enum { AURA_CONTROL_MODE_EFFECT = 0x3B, /* Effect control mode */ AURA_CONTROL_MODE_DIRECT = 0x40, /* Direct control mode */ + AURA_REQUEST_FIRMWARE_VERSION = 0x82, /* Request firmware string */ + AURA_REQUEST_CONFIG_TABLE = 0xB0, /* Request configuration table */ }; class AuraAddressableController @@ -45,6 +47,8 @@ public: AuraAddressableController(hid_device* dev_handle); ~AuraAddressableController(); + std::string GetDeviceName(); + void SetLEDsDirect(std::vector colors); void SetMode @@ -56,10 +60,12 @@ public: ); private: - char device_name[32]; + char device_name[16]; hid_device* dev; unsigned int led_count; + void GetFirmwareVersion(); + void SendEffect ( unsigned char mode, diff --git a/Controllers/AuraAddressableController/AuraAddressableControllerDetect.cpp b/Controllers/AuraAddressableController/AuraAddressableControllerDetect.cpp index b224a794a..e562f88d5 100644 --- a/Controllers/AuraAddressableController/AuraAddressableControllerDetect.cpp +++ b/Controllers/AuraAddressableController/AuraAddressableControllerDetect.cpp @@ -6,11 +6,12 @@ #define AURA_ADDRESSABLE_VID 0x0B05 -#define NUM_PIDS 2 +#define NUM_PIDS 3 static const unsigned short pid_table[] = { 0x1867, - 0x1872 + 0x1872, + 0x1889 }; /******************************************************************************************\ diff --git a/RGBController/RGBController_AuraAddressable.cpp b/RGBController/RGBController_AuraAddressable.cpp index 1b124a503..7725af00e 100644 --- a/RGBController/RGBController_AuraAddressable.cpp +++ b/RGBController/RGBController_AuraAddressable.cpp @@ -14,6 +14,7 @@ RGBController_AuraAddressable::RGBController_AuraAddressable(AuraAddressableCont aura = aura_ptr; name = "ASUS Aura Addressable"; + version = aura->GetDeviceName(); type = DEVICE_TYPE_MOTHERBOARD; description = "ASUS Aura Addressable Device"; @@ -211,4 +212,4 @@ void RGBController_AuraAddressable::UpdateMode() { aura->SetMode(modes[active_mode].value, red, grn, blu); } -} \ No newline at end of file +}