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 0000000..ad37991 Binary files /dev/null and b/sample_cli_dock differ 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..05abda7 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); } @@ -150,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; @@ -214,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; @@ -346,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; @@ -414,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]); @@ -433,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; @@ -495,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; @@ -535,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; @@ -575,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; @@ -662,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; @@ -734,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; @@ -832,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; @@ -907,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; @@ -998,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; @@ -1059,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; @@ -1154,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]); @@ -1173,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; @@ -1244,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]); @@ -1263,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; @@ -1348,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; @@ -1413,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; @@ -1713,6 +1736,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; } @@ -1740,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: @@ -1814,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; } @@ -1907,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; } @@ -1948,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; @@ -2000,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; @@ -2045,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; @@ -2097,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; @@ -2146,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; @@ -2208,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; @@ -2270,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; @@ -2309,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 7545a54..5d6127d 100644 --- a/src/lib/razermousedock_driver.c +++ b/src/lib/razermousedock_driver.c @@ -39,6 +39,10 @@ static int razer_get_report(IOUSBDeviceInterface **usb_dev, struct razer_report 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_PRO_WAIT_MIN_US); + break; + default: return -1; } @@ -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; @@ -173,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; } @@ -192,6 +220,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]); @@ -208,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; @@ -216,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 */ @@ -229,6 +264,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; +}