diff options
| author | John <[email protected]> | 2021-12-14 14:59:00 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-12-14 19:59:00 +0000 |
| commit | 5d8e4806e32590b207d2046abb6e70af7c1ba8c7 (patch) | |
| tree | e1b5b47217c8204e448483927d540ab3be3d1f93 /src | |
| parent | be120d25bd96bfcd459e711d73cb0c65b9169e3e (diff) | |
| download | librazermacos-5d8e4806e32590b207d2046abb6e70af7c1ba8c7.tar.xz librazermacos-5d8e4806e32590b207d2046abb6e70af7c1ba8c7.zip | |
Add support for Thunderbolt 4 Dock Chroma (#17)
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/razeraccessory_driver.h | 5 | ||||
| -rw-r--r-- | src/lib/razeraccessory_driver.c | 37 | ||||
| -rwxr-xr-x | src/lib/razerdevice.c | 1 |
3 files changed, 42 insertions, 1 deletions
diff --git a/src/include/razeraccessory_driver.h b/src/include/razeraccessory_driver.h index 95f721b..2b3913e 100644 --- a/src/include/razeraccessory_driver.h +++ b/src/include/razeraccessory_driver.h @@ -15,6 +15,7 @@ #ifndef __HID_RAZER_ACCESSORY_H #define __HID_RAZER_ACCESSORY_H +#define USB_DEVICE_ID_RAZER_MOUSE_DOCK 0x007E #define USB_DEVICE_ID_RAZER_NOMMO_CHROMA 0x0517 #define USB_DEVICE_ID_RAZER_NOMMO_PRO 0x0518 #define USB_DEVICE_ID_RAZER_CHROMA_MUG 0x0F07 @@ -22,10 +23,14 @@ #define USB_DEVICE_ID_RAZER_CHROMA_HDK 0x0F09 #define USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA 0x0F1D #define USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA 0x0F20 +#define USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA 0x0F21 #define RAZER_ACCESSORY_WAIT_MIN_US 600 #define RAZER_ACCESSORY_WAIT_MAX_US 1000 +#define RAZER_NEW_DEVICE_WAIT_MIN_US 31000 +#define RAZER_NEW_DEVICE_WAIT_MAX_US 31100 + ssize_t razer_accessory_attr_write_mode_none(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count); ssize_t razer_accessory_attr_write_mode_spectrum(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count); ssize_t razer_accessory_attr_write_mode_wave(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count, int speed); diff --git a/src/lib/razeraccessory_driver.c b/src/lib/razeraccessory_driver.c index 7a429a5..a2b9f1f 100644 --- a/src/lib/razeraccessory_driver.c +++ b/src/lib/razeraccessory_driver.c @@ -32,7 +32,18 @@ */ static int razer_get_report(IOUSBDeviceInterface **usb_dev, struct razer_report *request_report, struct razer_report *response_report) { - return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_ACCESSORY_WAIT_MIN_US); + UInt16 product = -1; + (*usb_dev)->GetDeviceProduct(usb_dev, &product); + + switch (product) { + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: + return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_NEW_DEVICE_WAIT_MIN_US); + break; + + default: + return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_ACCESSORY_WAIT_MIN_US); + } } /** @@ -90,12 +101,14 @@ ssize_t razer_accessory_attr_write_mode_spectrum(IOUSBDeviceInterface **usb_dev, case USB_DEVICE_ID_RAZER_CHROMA_BASE: case USB_DEVICE_ID_RAZER_NOMMO_PRO: case USB_DEVICE_ID_RAZER_NOMMO_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, ZERO_LED); report.transaction_id.id = 0x3F; break; case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, ZERO_LED); report.transaction_id.id = 0x1F; break; @@ -131,12 +144,14 @@ ssize_t razer_accessory_attr_write_mode_none(IOUSBDeviceInterface **usb_dev, con case USB_DEVICE_ID_RAZER_CHROMA_BASE: case USB_DEVICE_ID_RAZER_NOMMO_PRO: case USB_DEVICE_ID_RAZER_NOMMO_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: report = razer_chroma_extended_matrix_effect_none(VARSTORE, ZERO_LED); report.transaction_id.id = 0x3F; break; case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: report = razer_chroma_extended_matrix_effect_none(VARSTORE, ZERO_LED); report.transaction_id.id = 0x1F; break; @@ -198,11 +213,13 @@ ssize_t razer_accessory_attr_write_mode_custom(IOUSBDeviceInterface **usb_dev, c case USB_DEVICE_ID_RAZER_CHROMA_BASE: case USB_DEVICE_ID_RAZER_NOMMO_PRO: case USB_DEVICE_ID_RAZER_NOMMO_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: report = razer_chroma_extended_matrix_effect_custom_frame(); break; case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: report = razer_chroma_extended_matrix_effect_custom_frame(); report.transaction_id.id = 0x1F; break; @@ -239,12 +256,14 @@ ssize_t razer_accessory_attr_write_mode_static(IOUSBDeviceInterface **usb_dev, c case USB_DEVICE_ID_RAZER_CHROMA_BASE: case USB_DEVICE_ID_RAZER_NOMMO_PRO: case USB_DEVICE_ID_RAZER_NOMMO_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: report = razer_chroma_extended_matrix_effect_static(VARSTORE, ZERO_LED, (struct razer_rgb*) & buf[0]); report.transaction_id.id = 0x3F; break; case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: report = razer_chroma_extended_matrix_effect_static(VARSTORE, ZERO_LED, (struct razer_rgb*) & buf[0]); report.transaction_id.id = 0x1F; break; @@ -286,6 +305,7 @@ ssize_t razer_accessory_attr_write_mode_wave(IOUSBDeviceInterface **usb_dev, con case USB_DEVICE_ID_RAZER_CHROMA_BASE: case USB_DEVICE_ID_RAZER_NOMMO_PRO: case USB_DEVICE_ID_RAZER_NOMMO_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: report = razer_chroma_extended_matrix_effect_wave(VARSTORE, ZERO_LED, direction, speed); report.transaction_id.id = 0x3F; break; @@ -295,6 +315,13 @@ ssize_t razer_accessory_attr_write_mode_wave(IOUSBDeviceInterface **usb_dev, con report = razer_chroma_extended_matrix_effect_wave(VARSTORE, ZERO_LED, direction, speed); report.transaction_id.id = 0x1F; break; + /* Fall through */ + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: + // Direction values are flipped compared to other devices + direction ^= ((1<<0) | (1<<1)); + report = razer_chroma_extended_matrix_effect_wave(VARSTORE, ZERO_LED, direction, speed); + report.transaction_id.id = 0x1F; + break; default: printf("razeraccessory: Unknown device\n"); @@ -322,6 +349,7 @@ ssize_t razer_accessory_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, c case USB_DEVICE_ID_RAZER_CHROMA_BASE: case USB_DEVICE_ID_RAZER_NOMMO_PRO: case USB_DEVICE_ID_RAZER_NOMMO_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: switch(count) { case 3: // Single colour mode report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, ZERO_LED, (struct razer_rgb *)&buf[0]); @@ -342,6 +370,7 @@ ssize_t razer_accessory_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, c case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: switch(count) { case 3: // Single colour mode report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, ZERO_LED, (struct razer_rgb *)&buf[0]); @@ -407,6 +436,7 @@ ssize_t razer_accessory_attr_write_device_mode(IOUSBDeviceInterface **usb_dev, c switch(product) { case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: report.transaction_id.id = 0x1F; break; } @@ -442,6 +472,7 @@ ssize_t razer_accessory_attr_read_device_mode(IOUSBDeviceInterface **usb_dev, ch switch(product) { case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: report.transaction_id.id = 0x1F; break; } @@ -465,6 +496,7 @@ ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev switch (product) { case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: report = razer_chroma_extended_matrix_brightness(VARSTORE, ZERO_LED, brightness); report.transaction_id.id = 0x1F; break; @@ -477,6 +509,7 @@ ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev case USB_DEVICE_ID_RAZER_CHROMA_BASE: case USB_DEVICE_ID_RAZER_NOMMO_PRO: case USB_DEVICE_ID_RAZER_NOMMO_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: // In openrazer this is bundled with saving brightness to usb_dev for MOUSE_DOCK report = razer_chroma_extended_matrix_brightness(VARSTORE, ZERO_LED, brightness); break; @@ -506,6 +539,8 @@ ushort razer_accessory_attr_read_set_brightness(IOUSBDeviceInterface **usb_dev) switch (product) { case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK: break; default: diff --git a/src/lib/razerdevice.c b/src/lib/razerdevice.c index cd1cc48..ceef5c5 100755 --- a/src/lib/razerdevice.c +++ b/src/lib/razerdevice.c @@ -219,6 +219,7 @@ bool is_accessory(IOUSBDeviceInterface **usb_dev) case USB_DEVICE_ID_RAZER_CHROMA_HDK: case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA: case USB_DEVICE_ID_RAZER_BASE_STATION_V2_CHROMA: + case USB_DEVICE_ID_RAZER_THUNDERBOLT_4_DOCK_CHROMA: return true; } |
