From fdf8d0a0932c6fe4ddb2cdc037357598d2ee2564 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Fri, 29 Jan 2021 22:10:16 -0600 Subject: [PATCH] Add Razer Charging Pad Chroma support, direct mode only for now --- .../RazerController/RazerController.cpp | 23 +++++++++++ Controllers/RazerController/RazerController.h | 1 + .../RazerController/RazerControllerDetect.cpp | 1 + Controllers/RazerController/RazerDevices.h | 40 ++++++++++++++++++- 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/Controllers/RazerController/RazerController.cpp b/Controllers/RazerController/RazerController.cpp index bbe1ad77..0ecf0a23 100644 --- a/Controllers/RazerController/RazerController.cpp +++ b/Controllers/RazerController/RazerController.cpp @@ -62,6 +62,14 @@ RazerController::RazerController(hid_device* dev_handle, const char* path, unsig dev_transaction_id = 0x1F; break; + case RAZER_CHARGING_PAD_CHROMA_PID: + { + razer_report report = razer_create_device_mode_report(0x03, 0x00); + razer_usb_send(&report); + dev_transaction_id = 0x1F; + } + break; + case RAZER_GOLIATHUS_CHROMA_PID: case RAZER_GOLIATHUS_CHROMA_EXTENDED_PID: default: @@ -372,6 +380,16 @@ razer_report RazerController::razer_create_custom_frame_standard_matrix_report(u return report; } +razer_report RazerController::razer_create_device_mode_report(unsigned char mode, unsigned char param) +{ + razer_report report = razer_create_report(0x00, 0x04, 0x02); + + report.arguments[0] = mode; + report.arguments[1] = param; + + return report; +} + razer_report RazerController::razer_create_mode_custom_extended_matrix_report() { struct razer_report report = razer_create_report(0x0F, 0x02, 0x0C); @@ -647,6 +665,10 @@ void RazerController::razer_set_custom_frame(unsigned char row_index, unsigned c report = razer_create_custom_frame_extended_matrix_report(row_index, start_col, stop_col, rgb_data); break; + case RAZER_CHARGING_PAD_CHROMA_PID: + report = razer_create_custom_frame_extended_matrix_report(row_index, start_col, stop_col, rgb_data); + break; + /*-------------------------------------------------*\ | These devices use a linear report | \*-------------------------------------------------*/ @@ -793,6 +815,7 @@ void RazerController::razer_set_mode_custom() case RAZER_KRAKEN_KITTY_EDITION_PID: case RAZER_MOUSE_BUNGEE_V3_CHROMA_PID: case RAZER_BASE_STATION_V2_CHROMA_PID: + case RAZER_CHARGING_PAD_CHROMA_PID: report = razer_create_mode_custom_extended_matrix_report(); break; diff --git a/Controllers/RazerController/RazerController.h b/Controllers/RazerController/RazerController.h index 2514117f..07a77e4d 100644 --- a/Controllers/RazerController/RazerController.h +++ b/Controllers/RazerController/RazerController.h @@ -176,6 +176,7 @@ private: razer_report razer_create_custom_frame_linear_report(unsigned char start_col, unsigned char stop_col, unsigned char* rgb_data); razer_report razer_create_custom_frame_extended_matrix_report(unsigned char row_index, unsigned char start_col, unsigned char stop_col, unsigned char* rgb_data); razer_report razer_create_custom_frame_standard_matrix_report(unsigned char row_index, unsigned char start_col, unsigned char stop_col, unsigned char* rgb_data); + razer_report razer_create_device_mode_report(unsigned char mode, unsigned char param); razer_report razer_create_mode_custom_extended_matrix_report(); razer_report razer_create_mode_custom_standard_matrix_report(unsigned char variable_storage); razer_report razer_create_mode_none_extended_matrix_report(unsigned char variable_storage, unsigned char led_id); diff --git a/Controllers/RazerController/RazerControllerDetect.cpp b/Controllers/RazerController/RazerControllerDetect.cpp index 48c6dea3..aff62df8 100644 --- a/Controllers/RazerController/RazerControllerDetect.cpp +++ b/Controllers/RazerController/RazerControllerDetect.cpp @@ -121,6 +121,7 @@ REGISTER_HID_DETECTOR_PU("Razer Naga Epic Chroma", Dete \*-----------------------------------------------------------------------------------------------------*/ REGISTER_HID_DETECTOR_PU("Razer Base Station Chroma", DetectRazerControllers, RAZER_VID, RAZER_CHROMA_BASE_PID, 1, 2); REGISTER_HID_DETECTOR_PU("Razer Base Station V2 Chroma", DetectRazerControllers, RAZER_VID, RAZER_BASE_STATION_V2_CHROMA_PID, 1, 2); +REGISTER_HID_DETECTOR( "Razer Charging Pad Chroma", DetectRazerControllers, RAZER_VID, RAZER_CHARGING_PAD_CHROMA_PID); REGISTER_HID_DETECTOR_PU("Razer Chroma HDK", DetectRazerControllers, RAZER_VID, RAZER_CHROMA_HDK_PID, 1, 2); REGISTER_HID_DETECTOR_PU("Razer Chroma Mug Holder", DetectRazerControllers, RAZER_VID, RAZER_CHROMA_MUG_PID, 1, 2); REGISTER_HID_DETECTOR_PU("Razer Core", DetectRazerControllers, RAZER_VID, RAZER_CORE_PID, 1, 2); diff --git a/Controllers/RazerController/RazerDevices.h b/Controllers/RazerController/RazerDevices.h index 2f455d18..553852f0 100644 --- a/Controllers/RazerController/RazerDevices.h +++ b/Controllers/RazerController/RazerDevices.h @@ -148,6 +148,7 @@ #define RAZER_CHROMA_HDK_PID 0x0F09 #define RAZER_MOUSE_BUNGEE_V3_CHROMA_PID 0x0F1D #define RAZER_BASE_STATION_V2_CHROMA_PID 0x0F20 +#define RAZER_CHARGING_PAD_CHROMA_PID 0x0F26 typedef struct { @@ -4790,6 +4791,42 @@ static const razer_device nommo_chroma_device = 0 }; +/*-------------------------------------------------------------*\ +| Razer Charging Pad Chroma | +| | +| Zone "LED Strip" | +| Linear | +| 10 LEDs | +| | +\*-------------------------------------------------------------*/ +static const razer_zone charging_pad_chroma_zone = +{ + "LED Strip", + ZONE_TYPE_LINEAR, + 1, + 10 +}; + +static const razer_device charging_pad_chroma_device = +{ + "Razer Charging Pad Chroma", + RAZER_CHARGING_PAD_CHROMA_PID, + DEVICE_TYPE_UNKNOWN, + true, + 1, + 10, + { + &charging_pad_chroma_zone, + NULL, + NULL, + NULL, + NULL, + NULL + }, + NULL, + 0 +}; + /*-------------------------------------------------------------------------*\ | DEVICE MASTER LIST | \*-------------------------------------------------------------------------*/ @@ -4900,5 +4937,6 @@ static const razer_device* device_list[] = &chromahdk_device, &base_station_device, &nommo_pro_device, - &nommo_chroma_device + &nommo_chroma_device, + &charging_pad_chroma_device, };