diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp b/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp index a90209fe..c5483a1c 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseController.cpp @@ -210,3 +210,48 @@ void AuraMouseController::SendUpdate unsigned char usb_buf_out[ASUS_AURA_MOUSE_PACKET_SIZE]; hid_read_timeout(dev, usb_buf_out, ASUS_AURA_MOUSE_PACKET_SIZE, 10); } + +void AuraMouseController::SendDirect + ( + std::vector zone_colors + ) +{ + std::vector colors = {}; + colors.resize(aura_mouse_led_maps[device_pid].led_amount); + + for(unsigned char zone = 0; zone < zone_colors.size(); zone++) + { + std::vector zone_map = aura_mouse_led_maps[device_pid].map[zone]; + for(unsigned char led = 0; led < zone_map.size(); led++) + { + colors[zone_map[led]] = zone_colors[zone]; + } + } + + /*-----------------------------------------------------*\ + | Only 5 colors can be sent in each packet | + \*-----------------------------------------------------*/ + for(unsigned char led = 0; led < aura_mouse_led_maps[device_pid].led_amount; led += 5) + { + unsigned char usb_buf[ASUS_AURA_MOUSE_PACKET_SIZE]; + memset(usb_buf, 0x00, ASUS_AURA_MOUSE_PACKET_SIZE); + + unsigned char colors_in_packet = (aura_mouse_led_maps[device_pid].led_amount >= led + 5) ? 5 : aura_mouse_led_maps[device_pid].led_amount - led; + + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x51; + usb_buf[0x02] = 0x29; + usb_buf[0x03] = colors_in_packet; // colors in this packet + usb_buf[0x04] = 0x00; + usb_buf[0x05] = led; // offset + + for(unsigned char color = 0; color < colors_in_packet; color++) + { + usb_buf[0x06 + color * 3] = RGBGetRValue(colors[led + color]); + usb_buf[0x07 + color * 3] = RGBGetGValue(colors[led + color]); + usb_buf[0x08 + color * 3] = RGBGetBValue(colors[led + color]); + } + + hid_write(dev, usb_buf, ASUS_AURA_MOUSE_PACKET_SIZE); + } +}; diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseController.h b/Controllers/AsusAuraUSBController/AsusAuraMouseController.h index 2f6c1fa7..77dcba74 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseController.h @@ -42,6 +42,10 @@ public: unsigned char speed, unsigned char brightness ); + void SendDirect + ( + std::vector zone_colors + ); uint16_t device_pid; diff --git a/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h b/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h index 4af92801..808dcbf4 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h +++ b/Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h @@ -70,6 +70,7 @@ enum AURA_MOUSE_MODE_REACTIVE = 4, AURA_MOUSE_MODE_COMET = 5, AURA_MOUSE_MODE_BATTERY = 6, + AURA_MOUSE_MODE_DIRECT = 254, AURA_MOUSE_MODE_NONE = 255, }; @@ -81,6 +82,7 @@ typedef struct uint8_t brightness_max; bool wireless; int version_protocol; + bool direct; std::vector mouse_zones; std::vector mouse_modes; } mouse_type; @@ -104,6 +106,7 @@ static std::map aura_mouse_devices = 4, // Brightness Max false, // is wireless? (important for fetching the version) 1, // version protocol + false, // direct - defines whether the mouse has a native direct mode or just uses static as direct (only present on newer devices) { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -117,6 +120,7 @@ static std::map aura_mouse_devices = 4, false, 0, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -130,6 +134,7 @@ static std::map aura_mouse_devices = 4, false, 0, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -143,6 +148,7 @@ static std::map aura_mouse_devices = 4, false, 0, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -156,6 +162,7 @@ static std::map aura_mouse_devices = 4, false, 0, + false, { AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -169,6 +176,7 @@ static std::map aura_mouse_devices = 4, true, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -182,6 +190,7 @@ static std::map aura_mouse_devices = 4, true, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -195,6 +204,7 @@ static std::map aura_mouse_devices = 100, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -208,6 +218,7 @@ static std::map aura_mouse_devices = 100, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -221,6 +232,7 @@ static std::map aura_mouse_devices = 100, true, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -234,6 +246,7 @@ static std::map aura_mouse_devices = 100, true, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -247,6 +260,7 @@ static std::map aura_mouse_devices = 100, false, 2, + true, { AURA_MOUSE_ZONE_LOGO }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -260,6 +274,7 @@ static std::map aura_mouse_devices = 100, true, 2, + true, { AURA_MOUSE_ZONE_LOGO }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -273,6 +288,7 @@ static std::map aura_mouse_devices = 4, true, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -286,6 +302,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -299,6 +316,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -312,6 +330,7 @@ static std::map aura_mouse_devices = 100, false, 2, + true, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -325,6 +344,7 @@ static std::map aura_mouse_devices = 100, true, 2, + true, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -338,6 +358,7 @@ static std::map aura_mouse_devices = 100, false, 1, + true, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -351,6 +372,7 @@ static std::map aura_mouse_devices = 100, true, 1, + true, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -364,6 +386,7 @@ static std::map aura_mouse_devices = 4, false, 0, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET } } @@ -377,6 +400,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -390,6 +414,7 @@ static std::map aura_mouse_devices = 4, true, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_WAVE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_COMET, AURA_MOUSE_MODE_BATTERY } } @@ -403,6 +428,7 @@ static std::map aura_mouse_devices = 4, false, 4, + false, { AURA_MOUSE_ZONE_LOGO }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE } } @@ -416,6 +442,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -429,6 +456,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -442,6 +470,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -455,6 +484,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL, AURA_MOUSE_ZONE_UNDERGLOW }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -468,6 +498,7 @@ static std::map aura_mouse_devices = 4, false, 1, // not tested, but likely same as ROG Strix Impact II non wireless + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -481,6 +512,7 @@ static std::map aura_mouse_devices = 4, true, 1, // not tested, but likely same as ROG Strix Impact II non wireless + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -494,6 +526,7 @@ static std::map aura_mouse_devices = 4, false, 1, // might be the wrong protocol for version + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -507,6 +540,7 @@ static std::map aura_mouse_devices = 4, true, 1, // might be the wrong protocol for version + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -520,6 +554,7 @@ static std::map aura_mouse_devices = 4, true, 1, // might be the wrong protocol for version + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -533,6 +568,7 @@ static std::map aura_mouse_devices = 4, true, 1, // might be the wrong protocol for version + false, { AURA_MOUSE_ZONE_LOGO, AURA_MOUSE_ZONE_SCROLL }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } @@ -546,6 +582,7 @@ static std::map aura_mouse_devices = 4, false, 1, + false, { AURA_MOUSE_ZONE_LOGO }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -559,6 +596,7 @@ static std::map aura_mouse_devices = 4, false, 3, + false, { AURA_MOUSE_ZONE_LOGO }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_REACTIVE } } @@ -572,8 +610,90 @@ static std::map aura_mouse_devices = 100, false, 1, + false, { AURA_MOUSE_ZONE_DOCK }, { AURA_MOUSE_MODE_STATIC, AURA_MOUSE_MODE_BREATHING, AURA_MOUSE_MODE_SPECTRUM, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_REACTIVE, AURA_MOUSE_MODE_NONE, AURA_MOUSE_MODE_BATTERY } } }, }; + +typedef struct +{ + unsigned char led_amount; + std::map< unsigned char, std::vector> map; +} led_map; + +/*-----------------------------------------------------------------*\ +| LED MAP | +| | +| This maps the LEDs to the correct zone. | +| This is necessary, because openrgb doesn't support per-zone | +| lighting. To allow for per-zone color of modes like breathing, | +| the leds defined need to be the zones, which means the actual | +| LEDs can't be implemented. | +\*-----------------------------------------------------------------*/ +static std::map aura_mouse_led_maps = +{ + { + AURA_ROG_GLADIUS_III_WIRELESS_AIMPOINT_USB_PID, + { + 1, + { + { AURA_MOUSE_ZONE_LOGO, { 0 } }, + } + } + }, + { + AURA_ROG_GLADIUS_III_WIRELESS_AIMPOINT_2_4_PID, + { + 1, + { + { AURA_MOUSE_ZONE_LOGO, { 0 } }, + } + } + }, + { + AURA_ROG_SPATHA_X_2_4_PID, + { + 5, + { + { AURA_MOUSE_ZONE_LOGO, { 0 } }, + { AURA_MOUSE_ZONE_SCROLL, { 1 } }, + { AURA_MOUSE_ZONE_UNDERGLOW, { 2, 3, 4 } }, + } + } + }, + { + AURA_ROG_SPATHA_X_USB_PID, + { + 5, + { + { AURA_MOUSE_ZONE_LOGO, { 0 } }, + { AURA_MOUSE_ZONE_SCROLL, { 1 } }, + { AURA_MOUSE_ZONE_UNDERGLOW, { 2, 3, 4 } }, + } + } + }, + { + AURA_ROG_CHAKRAM_X_USB_PID, + { + 9, + { + { AURA_MOUSE_ZONE_LOGO, { 7 } }, + { AURA_MOUSE_ZONE_SCROLL, { 8 } }, + { AURA_MOUSE_ZONE_UNDERGLOW, { 0, 1, 2, 3, 4, 5, 6 } }, + } + } + }, + { + AURA_ROG_CHAKRAM_X_2_4_PID, + { + 9, + { + { AURA_MOUSE_ZONE_LOGO, { 7 } }, + { AURA_MOUSE_ZONE_SCROLL, { 8 } }, + { AURA_MOUSE_ZONE_UNDERGLOW, { 0, 1, 2, 3, 4, 5, 6 } }, + } + } + } +}; diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp index a6a0a8ce..7bdc2c0d 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.cpp @@ -45,6 +45,16 @@ RGBController_AuraMouse::RGBController_AuraMouse(AuraMouseController* controller std::vector mm = aura_mouse_devices[pid].mouse_modes; + if(aura_mouse_devices[pid].direct) + { + mode Direct; + Direct.name = "Direct"; + Direct.value = 254; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; + Direct.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Direct); + } + int mode_value = 0; for(std::vector::iterator it = mm.begin(); it != mm.end(); it++) @@ -52,16 +62,24 @@ RGBController_AuraMouse::RGBController_AuraMouse(AuraMouseController* controller switch(*it) { case AURA_MOUSE_MODE_STATIC: + /*-----------------------------------------------------------------*\ + | If there is no direct mode, this mode can be used as direct | + | (Asus does it the same way). | + | The acutal direct mode is only found on new devices and on | + | these devices static can't be used as direct anymore as it is | + | too slow. The Spatha X's dock can't be controlled, because | + | static is too slow and it can't be adressed in direct | + \*-----------------------------------------------------------------*/ { - mode Direct; - Direct.name = "Direct"; - Direct.value = mode_value; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; - Direct.brightness_min = aura_mouse_devices[pid].brightness_min; - Direct.brightness_max = aura_mouse_devices[pid].brightness_max; - Direct.brightness = aura_mouse_devices[pid].brightness_max; - Direct.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Direct); + mode Static; + Static.name = (aura_mouse_devices[pid].direct || pid == AURA_ROG_SPATHA_X_DOCK_FAKE_PID)? "Static" : "Direct"; + Static.value = mode_value; + Static.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Static.brightness_min = aura_mouse_devices[pid].brightness_min; + Static.brightness_max = aura_mouse_devices[pid].brightness_max; + Static.brightness = aura_mouse_devices[pid].brightness_max; + Static.color_mode = MODE_COLORS_PER_LED; + modes.push_back(Static); } break; @@ -201,9 +219,16 @@ void RGBController_AuraMouse::ResizeZone(int /*zone*/, int /*new_size*/) void RGBController_AuraMouse::DeviceUpdateLEDs() { - for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + if(modes[active_mode].value == AURA_MOUSE_MODE_DIRECT) { - UpdateSingleLED(zone_index); + controller->SendDirect(colors); + } + else + { + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + UpdateSingleLED(zone_index); + } } } @@ -214,6 +239,12 @@ void RGBController_AuraMouse::UpdateZoneLEDs(int /*zone*/) void RGBController_AuraMouse::UpdateSingleLED(int led) { + if(modes[active_mode].value == AURA_MOUSE_MODE_DIRECT) + { + DeviceUpdateLEDs(); + return; + } + uint8_t red = RGBGetRValue(colors[led]); uint8_t grn = RGBGetGValue(colors[led]); uint8_t blu = RGBGetBValue(colors[led]); @@ -223,6 +254,11 @@ void RGBController_AuraMouse::UpdateSingleLED(int led) void RGBController_AuraMouse::DeviceUpdateMode() { + if(modes[active_mode].value == AURA_MOUSE_MODE_DIRECT) + { + return; + } + if(modes[active_mode].color_mode == MODE_COLORS_PER_LED) { DeviceUpdateLEDs();