Skip to content
3 changes: 2 additions & 1 deletion src/include/razeraccessory_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#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 USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA 0x0F26

#define RAZER_ACCESSORY_WAIT_MIN_US 600
#define RAZER_ACCESSORY_WAIT_MAX_US 1000
Expand All @@ -37,7 +38,7 @@ ssize_t razer_accessory_attr_write_mode_wave(IOUSBDeviceInterface **usb_dev, con
ssize_t razer_accessory_attr_write_mode_static(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count);
ssize_t razer_accessory_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count);
ushort razer_accessory_attr_read_set_brightness(IOUSBDeviceInterface **usb_dev);
ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev, ushort brightness, size_t count);
ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev, ushort brightness, int count);


#endif
2 changes: 2 additions & 0 deletions src/include/razermousemat_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
#define USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX 0x0068
#define USB_DEVICE_ID_RAZER_FIREFLY 0x0C00
#define USB_DEVICE_ID_RAZER_FIREFLY_V2 0x0c04
#define USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO 0x0c08
#define USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA 0x0C01
#define USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL 0x0C06
#define USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED 0x0C02

#define RAZER_MOUSEMAT_WAIT_MIN_US 900
Expand Down
39 changes: 31 additions & 8 deletions src/lib/razeraccessory_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ ssize_t razer_accessory_attr_write_mode_spectrum(IOUSBDeviceInterface **usb_dev,
case USB_DEVICE_ID_RAZER_NOMMO_PRO:
case USB_DEVICE_ID_RAZER_NOMMO_CHROMA:
case USB_DEVICE_ID_RAZER_MOUSE_DOCK:
case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, ZERO_LED);
report.transaction_id.id = 0x3F;
break;
Expand Down Expand Up @@ -145,6 +146,7 @@ ssize_t razer_accessory_attr_write_mode_none(IOUSBDeviceInterface **usb_dev, con
case USB_DEVICE_ID_RAZER_NOMMO_PRO:
case USB_DEVICE_ID_RAZER_NOMMO_CHROMA:
case USB_DEVICE_ID_RAZER_MOUSE_DOCK:
case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
report = razer_chroma_extended_matrix_effect_none(VARSTORE, ZERO_LED);
report.transaction_id.id = 0x3F;
break;
Expand Down Expand Up @@ -214,6 +216,7 @@ ssize_t razer_accessory_attr_write_mode_custom(IOUSBDeviceInterface **usb_dev, c
case USB_DEVICE_ID_RAZER_NOMMO_PRO:
case USB_DEVICE_ID_RAZER_NOMMO_CHROMA:
case USB_DEVICE_ID_RAZER_MOUSE_DOCK:
case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
report = razer_chroma_extended_matrix_effect_custom_frame();
break;

Expand Down Expand Up @@ -261,6 +264,10 @@ ssize_t razer_accessory_attr_write_mode_static(IOUSBDeviceInterface **usb_dev, c
report.transaction_id.id = 0x3F;
break;

case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
report = razer_chroma_extended_matrix_effect_static(NOSTORE, ZERO_LED, (struct razer_rgb *)&buf[0]);
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:
Expand Down Expand Up @@ -306,6 +313,7 @@ ssize_t razer_accessory_attr_write_mode_wave(IOUSBDeviceInterface **usb_dev, con
case USB_DEVICE_ID_RAZER_NOMMO_PRO:
case USB_DEVICE_ID_RAZER_NOMMO_CHROMA:
case USB_DEVICE_ID_RAZER_MOUSE_DOCK:
case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
report = razer_chroma_extended_matrix_effect_wave(VARSTORE, ZERO_LED, direction, speed);
report.transaction_id.id = 0x3F;
break;
Expand Down Expand Up @@ -350,6 +358,7 @@ ssize_t razer_accessory_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, c
case USB_DEVICE_ID_RAZER_NOMMO_PRO:
case USB_DEVICE_ID_RAZER_NOMMO_CHROMA:
case USB_DEVICE_ID_RAZER_MOUSE_DOCK:
case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
switch(count) {
case 3: // Single colour mode
report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, ZERO_LED, (struct razer_rgb *)&buf[0]);
Expand Down Expand Up @@ -487,11 +496,12 @@ ssize_t razer_accessory_attr_read_device_mode(IOUSBDeviceInterface **usb_dev, ch
*
* Sets the brightness to the ASCII number written to this file.
*/
ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev, ushort brightness, size_t count)
ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev, ushort brightness, int count)
{

struct razer_report report = {0};
UInt16 product = -1;
(*usb_dev)->GetDeviceProduct(usb_dev, &product);
struct razer_report report = {0};

switch (product) {
case USB_DEVICE_ID_RAZER_MOUSE_BUNGEE_V3_CHROMA:
Expand All @@ -510,6 +520,7 @@ ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev
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
case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
report = razer_chroma_extended_matrix_brightness(VARSTORE, ZERO_LED, brightness);
break;

Expand All @@ -530,24 +541,36 @@ ssize_t razer_accessory_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev
*/
ushort razer_accessory_attr_read_set_brightness(IOUSBDeviceInterface **usb_dev)
{
bool is_matrix_brightness = false;
unsigned char brightness = 0;
struct razer_report report = {0};
struct razer_report response = {0};

UInt16 product = -1;
(*usb_dev)->GetDeviceProduct(usb_dev, &product);
struct razer_report report = razer_chroma_standard_get_led_brightness(VARSTORE, BACKLIGHT_LED);
struct razer_report response = {0};
unsigned char brightness = 0;

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;
case USB_DEVICE_ID_RAZER_CHARGING_PAD_CHROMA:
report = razer_chroma_extended_matrix_get_brightness(VARSTORE, ZERO_LED);
report.transaction_id.id = 0x1F;
is_matrix_brightness = true;
break;

default:
response = razer_send_payload(usb_dev, &report);
brightness = response.arguments[2];
report = razer_chroma_standard_get_led_brightness(VARSTORE, BACKLIGHT_LED);
break;
}

response = razer_send_payload(usb_dev, &report);
brightness = response.arguments[2];

if(is_matrix_brightness) {
brightness = round(brightness / 2.55);
}

return brightness;
}
7 changes: 5 additions & 2 deletions src/lib/razerdevice.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,10 @@ bool is_mouse_mat(IOUSBDeviceInterface **usb_dev)
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_FIREFLY:
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
return true;
}

Expand All @@ -202,12 +204,12 @@ bool is_egpu(IOUSBDeviceInterface **usb_dev)
}


bool is_headphone(IOUSBDeviceInterface **usb_dev)
bool is_headphone(IOUSBDeviceInterface **usb_dev)
{
UInt16 product = -1;
(*usb_dev)->GetDeviceProduct(usb_dev, &product);

switch (product)
switch (product)
{
case USB_DEVICE_ID_RAZER_KRAKEN_KITTY_EDITION:
case USB_DEVICE_ID_RAZER_KRAKEN_V2:
Expand All @@ -233,6 +235,7 @@ bool is_accessory(IOUSBDeviceInterface **usb_dev)
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_CHARGING_PAD_CHROMA:
return true;
}

Expand Down
25 changes: 20 additions & 5 deletions src/lib/razermousemat_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,10 @@ ssize_t razer_mouse_mat_attr_write_mode_none(IOUSBDeviceInterface **usb_dev, con
switch(product) {
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
report = razer_chroma_extended_matrix_effect_none(VARSTORE, ZERO_LED);
break;

Expand All @@ -112,12 +114,13 @@ ssize_t razer_mouse_mat_attr_write_mode_wave(IOUSBDeviceInterface **usb_dev, con
{
unsigned char direction = (unsigned char)strtol(buf, NULL, 10);
struct razer_report report = {0};

UInt16 product = -1;
(*usb_dev)->GetDeviceProduct(usb_dev, &product);

switch(product) {
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
report = razer_chroma_extended_matrix_effect_wave(VARSTORE, ZERO_LED, direction, 0x28);
break;
Expand All @@ -143,9 +146,11 @@ ssize_t razer_mouse_mat_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, c

switch(product) {
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
switch(count) {
case 3: // Single colour mode
report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, ZERO_LED, (struct razer_rgb *)&buf[0]);
Expand Down Expand Up @@ -191,16 +196,18 @@ ssize_t razer_mouse_mat_attr_write_mode_breath(IOUSBDeviceInterface **usb_dev, c
ssize_t razer_mouse_mat_attr_write_mode_static(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count)
{
struct razer_report report = {0};

UInt16 product = -1;
(*usb_dev)->GetDeviceProduct(usb_dev, &product);

if(count == 3) {
switch(product) {
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
report = razer_chroma_extended_matrix_effect_static(VARSTORE, ZERO_LED, (struct razer_rgb *)&buf[0]);
break;

Expand All @@ -221,22 +228,24 @@ ssize_t razer_mouse_mat_attr_write_mode_static(IOUSBDeviceInterface **usb_dev, c
* Write device file "mode_static"
*
* ** NOSTORE version for efficiency in custom lighting configurations
*
*
* Set the mousemat to static mode when 3 RGB bytes are written
*/
ssize_t razer_mouse_mat_attr_write_mode_static_no_store(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count)
{
struct razer_report report = {0};

UInt16 product = -1;
(*usb_dev)->GetDeviceProduct(usb_dev, &product);

if(count == 3) {
switch(product) {
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
report = razer_chroma_extended_matrix_effect_static(NOSTORE, ZERO_LED, (struct razer_rgb *)&buf[0]);
break;

Expand All @@ -262,8 +271,10 @@ ssize_t razer_mouse_mat_attr_write_set_brightness(IOUSBDeviceInterface **usb_dev
switch (product) {
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
report = razer_chroma_extended_matrix_brightness(VARSTORE, ZERO_LED, brightness);
break;

Expand All @@ -289,8 +300,10 @@ ushort razer_mouse_mat_attr_read_set_brightness(IOUSBDeviceInterface **usb_dev)
switch (product) {
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
brightness = 0xff; // Unfortunately, we can't read the brightness from the device directly. return dummy value.
break;

Expand All @@ -311,15 +324,17 @@ ushort razer_mouse_mat_attr_read_set_brightness(IOUSBDeviceInterface **usb_dev)
ssize_t razer_mouse_mat_attr_write_mode_spectrum(IOUSBDeviceInterface **usb_dev, const char *buf, size_t count)
{
struct razer_report report = {0};

UInt16 product = -1;
(*usb_dev)->GetDeviceProduct(usb_dev, &product);

switch(product) {
case USB_DEVICE_ID_RAZER_FIREFLY_V2:
case USB_DEVICE_ID_RAZER_FIREFLY_V2_PRO:
case USB_DEVICE_ID_RAZER_FIREFLY_HYPERFLUX:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_EXTENDED:
case USB_DEVICE_ID_RAZER_GOLIATHUS_CHROMA_3XL:
report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, ZERO_LED);
break;

Expand Down