From 852fd716b8a05844aac25f330808f84fff617af7 Mon Sep 17 00:00:00 2001 From: Felipe Coury Date: Sun, 26 Mar 2023 00:02:50 -0300 Subject: [PATCH 1/2] Adds support for Balistik V3 Pro (Wired and Wireless) and Mouse Dock Pro --- Makefile | 7 +++++-- sample_cli_dock | Bin 0 -> 115852 bytes src/include/razermouse_driver.h | 5 ++++- src/include/razermousedock_driver.h | 7 +++++-- src/lib/razerdevice.c | 3 +++ src/lib/razermouse_driver.c | 8 ++++++-- src/lib/razermousedock_driver.c | 27 +++++++++++++++++++++++++- src/sample_cli_dock.c | 29 ++++++++++++++++++++++++++++ 8 files changed, 78 insertions(+), 8 deletions(-) create mode 100755 sample_cli_dock create mode 100644 src/sample_cli_dock.c diff --git a/Makefile b/Makefile index 3884f7e..3463e66 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ CC=gcc # Flags and Header ARCHFLAGS=-arch arm64 -arch x86_64 OSFLAGS=-mmacosx-version-min=10.5 -CFLAGS=-Wall -Wextra -framework CoreFoundation -framework IOKit +CFLAGS=-Wall -Wextra -framework CoreFoundation -framework IOKit all: sample_cli @@ -39,11 +39,14 @@ sample_cli: $(LIB_TARGET_NAME) $(CLI_OBJECTS) @$(CC) $(ARCHFLAGS) $(OSFLAGS) $(CFLAGS) -L. -I$(SRC)/$(INCLUDE) -o sample_cli $(SRC)/sample_cli.c -l$(NAME) @printf "$(GREEN) ✓ Building sample_cli\n" +sample_cli_dock: $(LIB_TARGET_NAME) $(CLI_OBJECTS) + @$(CC) $(ARCHFLAGS) $(OSFLAGS) $(CFLAGS) -L. -I$(SRC)/$(INCLUDE) -o sample_cli_dock $(SRC)/sample_cli_dock.c -l$(NAME) + @printf "$(GREEN) ✓ Building sample_cli_dock\n" $(LIB_TARGET_NAME): $(LIB_OBJECTS) @$(CC) $(ARCHFLAGS) $(OSFLAGS) $(CFLAGS) -fPIC -o $@ $^ -shared @printf "$(GREEN) ✓ Building $(LIB_TARGET_NAME)\n" - + $(OBJ)/%.o: $(SRC)/$(LIB)/%.c | $(OBJ) @$(CC) $(ARCHFLAGS) $(OSFLAGS) -I$(SRC)/$(INCLUDE) -c $< -o $@ @printf "$(GREEN) ✓ Building $@\n" diff --git a/sample_cli_dock b/sample_cli_dock new file mode 100755 index 0000000000000000000000000000000000000000..ad37991fd11f4112c58949a65da0ce085e0699a8 GIT binary patch literal 115852 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 literal 0 HcmV?d00001 diff --git a/src/include/razermouse_driver.h b/src/include/razermouse_driver.h index a94b02b..62e1ae3 100644 --- a/src/include/razermouse_driver.h +++ b/src/include/razermouse_driver.h @@ -8,7 +8,7 @@ * Software Foundation; either version 2 of the License, or (at your option) * any later version. */ - + #include #include @@ -79,6 +79,9 @@ #define USB_DEVICE_ID_RAZER_OROCHI_V2_RECEIVER 0x0094 #define USB_DEVICE_ID_RAZER_OROCHI_V2 0x0095 #define USB_DEVICE_ID_RAZER_OROCHI_V2_BLUETOOTH 0x0095 +#define USB_DEVICE_ID_RAZER_BASILISK_V3_PRO_WIRED 0x00AA +#define USB_DEVICE_ID_RAZER_BASILISK_V3_PRO_WIRELESS 0x00AB +#define USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO 0x00A4 /* Each keyboard report has 90 bytes*/ #define RAZER_REPORT_LEN 0x5A diff --git a/src/include/razermousedock_driver.h b/src/include/razermousedock_driver.h index 9b4a4d8..bade97d 100644 --- a/src/include/razermousedock_driver.h +++ b/src/include/razermousedock_driver.h @@ -8,7 +8,7 @@ * Software Foundation; either version 2 of the License, or (at your option) * any later version. */ - + #include #include @@ -16,6 +16,7 @@ #define __HID_RAZER_MOUSE_DOCK_H #define USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK 0x007E +#define USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO 0x00A4 /* Each report has 90 bytes*/ #define RAZER_REPORT_LEN 0x5A @@ -23,6 +24,8 @@ #define RAZER_MOUSE_DOCK_WAIT_MIN_US 600 #define RAZER_MOUSE_DOCK_WAIT_MAX_US 800 +#define RAZER_MOUSE_DOCK_PRO_WAIT_MIN_US 59900 +#define RAZER_MOUSE_DOCK_PRO_WAIT_MAX_US 60000 ssize_t razer_mouse_dock_attr_write_mode_static(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count); ssize_t razer_mouse_dock_attr_write_mode_static_no_store(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count); @@ -30,4 +33,4 @@ ssize_t razer_mouse_dock_attr_write_mode_spectrum(IOUSBDeviceInterface **usb_dev ssize_t razer_mouse_dock_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count); ssize_t razer_mouse_dock_attr_write_mode_none(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count); -#endif \ No newline at end of file +#endif diff --git a/src/lib/razerdevice.c b/src/lib/razerdevice.c index 8a3c3ce..65bb95e 100755 --- a/src/lib/razerdevice.c +++ b/src/lib/razerdevice.c @@ -113,6 +113,8 @@ bool is_mouse(IOUSBDeviceInterface **usb_dev) case USB_DEVICE_ID_RAZER_BASILISK: case USB_DEVICE_ID_RAZER_BASILISK_ULTIMATE: case USB_DEVICE_ID_RAZER_BASILISK_ULTIMATE_RECEIVER: + case USB_DEVICE_ID_RAZER_BASILISK_V3_PRO_WIRELESS: + case USB_DEVICE_ID_RAZER_BASILISK_V3_PRO_WIRED: case USB_DEVICE_ID_RAZER_NAGA_TRINITY: case USB_DEVICE_ID_RAZER_NAGA_PRO_WIRELESS: case USB_DEVICE_ID_RAZER_NAGA_PRO_WIRED: @@ -156,6 +158,7 @@ bool is_mouse_dock(IOUSBDeviceInterface **usb_dev) switch (product) { case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: return true; } diff --git a/src/lib/razermouse_driver.c b/src/lib/razermouse_driver.c index 8f2e4c3..9d65ac8 100644 --- a/src/lib/razermouse_driver.c +++ b/src/lib/razermouse_driver.c @@ -73,14 +73,17 @@ static int razer_get_report(IOUSBDeviceInterface **usb_dev, struct razer_report case USB_DEVICE_ID_RAZER_NAGA_TRINITY: case USB_DEVICE_ID_RAZER_DEATHADDER_V2_PRO_WIRELESS: case USB_DEVICE_ID_RAZER_DEATHADDER_V2_PRO_WIRED: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: + case USB_DEVICE_ID_RAZER_BASILISK_V3_PRO_WIRED: + case USB_DEVICE_ID_RAZER_BASILISK_V3_PRO_WIRELESS: return razer_get_usb_response(usb_dev, index, request_report, index, response_report, RAZER_VIPER_MOUSE_RECEIVER_WAIT_MIN_US); break; - + case USB_DEVICE_ID_RAZER_BASILISK_V3: index = 0x03; return razer_get_usb_response(usb_dev, index, request_report, index, response_report, RAZER_NEW_MOUSE_RECEIVER_WAIT_MIN_US); break; - + default: return razer_get_usb_response(usb_dev, index, request_report, index, response_report, RAZER_MOUSE_WAIT_MIN_US); } @@ -1713,6 +1716,7 @@ ssize_t razer_attr_read_get_battery(IOUSBDeviceInterface **usb_dev, char *buf) case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRELESS_WIRED: case USB_DEVICE_ID_RAZER_OROCHI_V2_RECEIVER: case USB_DEVICE_ID_RAZER_OROCHI_V2_BLUETOOTH: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report.transaction_id.id = 0x1f; break; } diff --git a/src/lib/razermousedock_driver.c b/src/lib/razermousedock_driver.c index 7545a54..edbe37a 100644 --- a/src/lib/razermousedock_driver.c +++ b/src/lib/razermousedock_driver.c @@ -36,6 +36,10 @@ static int razer_get_report(IOUSBDeviceInterface **usb_dev, struct razer_report switch (product) { // These devices require longer waits to read their firmware, serial, and other setting values case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: + return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_MOUSE_DOCK_PRO_WAIT_MIN_US); + break; + + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_MOUSE_DOCK_WAIT_MIN_US); break; @@ -94,6 +98,7 @@ ssize_t razer_mouse_dock_attr_write_mode_static(IOUSBDeviceInterface **usb_dev, if(count == 3) { switch (product) { case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_static(VARSTORE, ZERO_LED, (struct razer_rgb*) & buf[0]); break; @@ -131,6 +136,7 @@ ssize_t razer_mouse_dock_attr_write_mode_static_no_store(IOUSBDeviceInterface ** if(count == 3) { switch (product) { case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_static(NOSTORE, ZERO_LED, (struct razer_rgb*) & buf[0]); break; @@ -142,7 +148,7 @@ ssize_t razer_mouse_dock_attr_write_mode_static_no_store(IOUSBDeviceInterface ** report.transaction_id.id = 0x3F; razer_send_payload(usb_dev, &report); - + } else { printf("razerdock: Static mode only accepts RGB (3byte)\n"); } @@ -150,6 +156,22 @@ ssize_t razer_mouse_dock_attr_write_mode_static_no_store(IOUSBDeviceInterface ** return count; } +ssize_t razer_dock_attr_read_get_battery(IOUSBDeviceInterface **usb_dev, char *buf) +{ + struct razer_report report = razer_chroma_misc_get_battery_level(); + struct razer_report response_report = {0}; + UInt16 product = -1; + (*usb_dev)->GetDeviceProduct(usb_dev, &product); + + switch (product) + { + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: + report.transaction_id.id = 0x1f; + break; + } + response_report = razer_send_payload(usb_dev, &report); + return sprintf(buf, "%d\n", response_report.arguments[1]); +} /** * Write device file "logo_mode_spectrum" (for extended mouse matrix effects) @@ -165,6 +187,7 @@ ssize_t razer_mouse_dock_attr_write_mode_spectrum(IOUSBDeviceInterface **usb_dev switch(product) { case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, ZERO_LED); break; @@ -192,6 +215,7 @@ ssize_t razer_mouse_dock_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, switch(product) { case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: switch(count) { case 3: // Single colour mode report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, ZERO_LED, (struct razer_rgb*)&buf[0]); @@ -229,6 +253,7 @@ ssize_t razer_mouse_dock_attr_write_mode_none(IOUSBDeviceInterface **usb_dev, co switch(product) { case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_none(VARSTORE, ZERO_LED); break; diff --git a/src/sample_cli_dock.c b/src/sample_cli_dock.c new file mode 100644 index 0000000..7512b30 --- /dev/null +++ b/src/sample_cli_dock.c @@ -0,0 +1,29 @@ +#include +#include +#include "razerdevice.h" +#include "razermouse_driver.h" + +int main(int argc, const char *argv[]) +{ + RazerDevices allDevices = getAllRazerDevices(); + RazerDevice *razerDevices = allDevices.devices; + + printf("%d Razer device(s) found:\n", allDevices.size); + + for (int i = 0; i < allDevices.size; i++) + { + RazerDevice device = razerDevices[i]; + printf("%#06x\n", device.productId); + + if (device.productId == 0x00a4) + { + char buf2[256]; + ssize_t result2 = razer_attr_read_get_battery(device.usbDevice, buf2); + printf("battery: %s\n", buf2); + printf("Done!\n"); + } + } + + closeAllRazerDevices(allDevices); + return 0; +} From a3271cc923231b8329c438d87ca07f2ecd6aeeb2 Mon Sep 17 00:00:00 2001 From: Felipe Coury Date: Sun, 26 Mar 2023 12:08:35 -0300 Subject: [PATCH 2/2] Adds Mouse Dock Pro mouse led commands --- src/lib/razermouse_driver.c | 34 +++++++++++++++++++++++++++++++-- src/lib/razermousedock_driver.c | 19 ++++++++++++++---- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/src/lib/razermouse_driver.c b/src/lib/razermouse_driver.c index 9d65ac8..05abda7 100644 --- a/src/lib/razermouse_driver.c +++ b/src/lib/razermouse_driver.c @@ -153,6 +153,7 @@ ssize_t razer_attr_write_side_mode_wave(IOUSBDeviceInterface **usb_dev, const ch report.transaction_id.id = 0x1f; break; case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_wave(VARSTORE, BASILISK_V3_BASE_LED, direction, 0x28); report.transaction_id.id = 0x1f; break; @@ -217,7 +218,8 @@ ssize_t razer_attr_write_side_mode_static(IOUSBDeviceInterface **usb_dev, const break; case USB_DEVICE_ID_RAZER_BASILISK_V3: - report = razer_chroma_extended_matrix_effect_static(VARSTORE, BASILISK_V3_BASE_LED, (struct razer_rgb*)&buf[0]); + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: + report = razer_chroma_extended_matrix_effect_static(VARSTORE, BASILISK_V3_BASE_LED, (struct razer_rgb *)&buf[0]); report.transaction_id.id = 0x1f; break; @@ -349,6 +351,7 @@ ssize_t razer_attr_write_side_mode_spectrum(IOUSBDeviceInterface **usb_dev, cons break; case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, BASILISK_V3_BASE_LED); report.transaction_id.id = 0x1f; break; @@ -417,6 +420,7 @@ ssize_t razer_attr_write_side_mode_breath(IOUSBDeviceInterface **usb_dev, const case USB_DEVICE_ID_RAZER_BASILISK_ULTIMATE_RECEIVER: case USB_DEVICE_ID_RAZER_DEATHADDER_V2: case USB_DEVICE_ID_RAZER_DEATHADDER_V2_MINI: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: switch(count) { case 3: // Single colour mode report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, side, (struct razer_rgb*)&buf[0]); @@ -436,6 +440,7 @@ ssize_t razer_attr_write_side_mode_breath(IOUSBDeviceInterface **usb_dev, const switch(product) { case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report.transaction_id.id = 0x1f; break; @@ -498,6 +503,7 @@ ssize_t razer_attr_write_side_mode_none(IOUSBDeviceInterface **usb_dev, const ch report.transaction_id.id = 0x1f; break; case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_none(VARSTORE, BASILISK_V3_BASE_LED); report.transaction_id.id = 0x1f; break; @@ -538,6 +544,7 @@ ssize_t razer_attr_write_logo_mode_wave(IOUSBDeviceInterface **usb_dev, const ch case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_wave(VARSTORE, LOGO_LED, direction, 0x28); report.transaction_id.id = 0x1f; break; @@ -578,6 +585,7 @@ ssize_t razer_attr_write_scroll_mode_wave(IOUSBDeviceInterface **usb_dev, const case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_wave(VARSTORE, SCROLL_WHEEL_LED, direction, 0x28); report.transaction_id.id = 0x1f; break; @@ -665,6 +673,7 @@ ssize_t razer_attr_write_logo_mode_static(IOUSBDeviceInterface **usb_dev, const case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_static(VARSTORE, LOGO_LED, (struct razer_rgb*)&buf[0]); report.transaction_id.id = 0x1f; break; @@ -737,6 +746,7 @@ ssize_t razer_attr_write_scroll_mode_static(IOUSBDeviceInterface **usb_dev, cons case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_static(VARSTORE, SCROLL_WHEEL_LED, (struct razer_rgb*)&buf[0]); report.transaction_id.id = 0x1f; break; @@ -835,6 +845,7 @@ ssize_t razer_attr_write_logo_mode_static_no_store(IOUSBDeviceInterface **usb_de case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_static(NOSTORE, LOGO_LED, (struct razer_rgb*)&buf[0]); report.transaction_id.id = 0x1f; break; @@ -910,6 +921,7 @@ ssize_t razer_attr_write_scroll_mode_static_no_store(IOUSBDeviceInterface **usb_ case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_static(NOSTORE, SCROLL_WHEEL_LED, (struct razer_rgb*)&buf[0]); report.transaction_id.id = 0x1f; break; @@ -1001,6 +1013,7 @@ ssize_t razer_attr_write_logo_mode_spectrum(IOUSBDeviceInterface **usb_dev, cons case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, LOGO_LED); report.transaction_id.id = 0x1f; break; @@ -1062,6 +1075,7 @@ ssize_t razer_attr_write_scroll_mode_spectrum(IOUSBDeviceInterface **usb_dev, co case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, SCROLL_WHEEL_LED); report.transaction_id.id = 0x1f; break; @@ -1157,6 +1171,7 @@ ssize_t razer_attr_write_logo_mode_breath(IOUSBDeviceInterface **usb_dev, const case USB_DEVICE_ID_RAZER_BASILISK_ULTIMATE_RECEIVER: case USB_DEVICE_ID_RAZER_DEATHADDER_V2: case USB_DEVICE_ID_RAZER_DEATHADDER_V2_MINI: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: switch(count) { case 3: // Single colour mode report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, LOGO_LED, (struct razer_rgb*)&buf[0]); @@ -1176,6 +1191,7 @@ ssize_t razer_attr_write_logo_mode_breath(IOUSBDeviceInterface **usb_dev, const switch(product) { case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report.transaction_id.id = 0x1f; break; @@ -1247,6 +1263,7 @@ ssize_t razer_attr_write_scroll_mode_breath(IOUSBDeviceInterface **usb_dev, cons case USB_DEVICE_ID_RAZER_BASILISK_ULTIMATE: case USB_DEVICE_ID_RAZER_BASILISK_ULTIMATE_RECEIVER: case USB_DEVICE_ID_RAZER_DEATHADDER_V2: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: switch(count) { case 3: // Single colour mode report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, SCROLL_WHEEL_LED, (struct razer_rgb*)&buf[0]); @@ -1266,6 +1283,7 @@ ssize_t razer_attr_write_scroll_mode_breath(IOUSBDeviceInterface **usb_dev, cons switch(product) { case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report.transaction_id.id = 0x1f; break; @@ -1351,6 +1369,7 @@ ssize_t razer_attr_write_logo_mode_none(IOUSBDeviceInterface **usb_dev, const ch case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_none(VARSTORE, LOGO_LED); report.transaction_id.id = 0x1f; break; @@ -1416,6 +1435,7 @@ ssize_t razer_attr_write_scroll_mode_none(IOUSBDeviceInterface **usb_dev, const case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_effect_none(VARSTORE, SCROLL_WHEEL_LED); report.transaction_id.id = 0x1f; break; @@ -1744,7 +1764,7 @@ ssize_t razer_attr_read_is_charging(IOUSBDeviceInterface **usb_dev, char *buf) case USB_DEVICE_ID_RAZER_OROCHI_V2_BLUETOOTH: return sprintf(buf, "0\n"); break; - + case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRED: case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRELESS: case USB_DEVICE_ID_RAZER_MAMBA_WIRELESS_RECEIVER: @@ -1818,6 +1838,7 @@ ushort razer_attr_read_poll_rate(IOUSBDeviceInterface **usb_dev) case USB_DEVICE_ID_RAZER_BASILISK_V3: case USB_DEVICE_ID_RAZER_OROCHI_V2_RECEIVER: case USB_DEVICE_ID_RAZER_OROCHI_V2_BLUETOOTH: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report.transaction_id.id = 0x1f; break; } @@ -1911,6 +1932,7 @@ void razer_attr_write_poll_rate(IOUSBDeviceInterface **usb_dev, ushort polling_r case USB_DEVICE_ID_RAZER_BASILISK_V3: case USB_DEVICE_ID_RAZER_OROCHI_V2_RECEIVER: case USB_DEVICE_ID_RAZER_OROCHI_V2_BLUETOOTH: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report.transaction_id.id = 0x1f; break; } @@ -1952,6 +1974,7 @@ void razer_attr_write_matrix_brightness(IOUSBDeviceInterface **usb_dev, unsigned case USB_DEVICE_ID_RAZER_NAGA_PRO_WIRED: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_brightness(VARSTORE, 0x00, brightness); report.transaction_id.id = 0x1F; break; @@ -2004,6 +2027,7 @@ ushort razer_attr_read_matrix_brightness(IOUSBDeviceInterface **usb_dev) case USB_DEVICE_ID_RAZER_NAGA_PRO_WIRED: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, 0x00); report.transaction_id.id = 0x1F; break; @@ -2049,6 +2073,7 @@ ushort razer_attr_read_scroll_led_brightness(IOUSBDeviceInterface **usb_dev) case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, SCROLL_WHEEL_LED); report.transaction_id.id = 0x1f; break; @@ -2101,6 +2126,7 @@ void razer_attr_write_scroll_led_brightness(IOUSBDeviceInterface **usb_dev, unsi case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_brightness(VARSTORE, SCROLL_WHEEL_LED, brightness); report.transaction_id.id = 0x1f; break; @@ -2150,6 +2176,7 @@ ushort razer_attr_read_logo_led_brightness(IOUSBDeviceInterface **usb_dev) case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, LOGO_LED); report.transaction_id.id = 0x1f; break; @@ -2212,6 +2239,7 @@ void razer_attr_write_logo_led_brightness(IOUSBDeviceInterface **usb_dev, unsign case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_BASILISK_V2: case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_brightness(VARSTORE, LOGO_LED, brightness); report.transaction_id.id = 0x1f; break; @@ -2274,6 +2302,7 @@ ushort razer_attr_read_side_led_brightness(IOUSBDeviceInterface **usb_dev, int s break; case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, BASILISK_V3_BASE_LED); report.transaction_id.id = 0x1f; break; @@ -2313,6 +2342,7 @@ void razer_attr_write_side_led_brightness(IOUSBDeviceInterface **usb_dev, unsign break; case USB_DEVICE_ID_RAZER_BASILISK_V3: + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: report = razer_chroma_extended_matrix_brightness(VARSTORE, BASILISK_V3_BASE_LED, brightness); report.transaction_id.id = 0x1f; break; diff --git a/src/lib/razermousedock_driver.c b/src/lib/razermousedock_driver.c index edbe37a..5d6127d 100644 --- a/src/lib/razermousedock_driver.c +++ b/src/lib/razermousedock_driver.c @@ -36,11 +36,11 @@ static int razer_get_report(IOUSBDeviceInterface **usb_dev, struct razer_report switch (product) { // These devices require longer waits to read their firmware, serial, and other setting values case USB_DEVICE_ID_RAZER_MOUSE_CHARGING_DOCK: - return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_MOUSE_DOCK_PRO_WAIT_MIN_US); + return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_MOUSE_DOCK_WAIT_MIN_US); break; case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: - return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_MOUSE_DOCK_WAIT_MIN_US); + return razer_get_usb_response(usb_dev, 0x00, request_report, 0x00, response_report, RAZER_MOUSE_DOCK_PRO_WAIT_MIN_US); break; default: @@ -196,6 +196,11 @@ ssize_t razer_mouse_dock_attr_write_mode_spectrum(IOUSBDeviceInterface **usb_dev return count; } + switch (product) { + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: + report.transaction_id.id = 0x1f; + break; + } razer_send_payload(usb_dev, &report); return count; } @@ -232,7 +237,13 @@ ssize_t razer_mouse_dock_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, break; } - report.transaction_id.id = 0x3f; + switch(product) { + case USB_DEVICE_ID_RAZER_MOUSE_DOCK_PRO: + report.transaction_id.id = 0x1f; + + default: + report.transaction_id.id = 0x3f; + } razer_send_payload(usb_dev, &report); return count; @@ -240,7 +251,7 @@ ssize_t razer_mouse_dock_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, /** - * Write device file "logo_mode_none" (for extended mouse matrix effects) + * Write device file "mode_none" (for extended mouse matrix effects) * * No effect is activated whenever this file is written to */