diff --git a/Controllers/AOCMouseController/AOCMouseController.cpp b/Controllers/AOCMouseController/AOCMouseController.cpp index d2094a64..4d5f5c11 100644 --- a/Controllers/AOCMouseController/AOCMouseController.cpp +++ b/Controllers/AOCMouseController/AOCMouseController.cpp @@ -50,6 +50,22 @@ void AOCMouseController::SendDirect ( RGBColor* color_data ) +{ + SendPacket(AOC_MOUSE_MODE_STATIC_SINGLE_COLOR, + AOC_MOUSE_BRIGHTNESS_HIGH, + AOC_MOUSE_SPEED_MEDIUM, + AOC_MOUSE_DIRECTION_CLOCKWISE, + color_data); +} + +void AOCMouseController::SendPacket + ( + unsigned char mode, + unsigned char brightness, + unsigned char speed, + unsigned char direction, + RGBColor* color_data + ) { unsigned char buf[60]; @@ -64,9 +80,10 @@ void AOCMouseController::SendDirect buf[0x00] = 0x20; buf[0x01] = 0x03; buf[0x02] = 0x01; - buf[0x04] = 0x02; - buf[0x05] = 0x02; - buf[0x06] = 0x01; + buf[0x03] = mode; + buf[0x04] = speed; + buf[0x05] = brightness; + buf[0x06] = direction; buf[0x07] = 0x01; buf[0x08] = 0x02; buf[0x09] = 0xFF; diff --git a/Controllers/AOCMouseController/AOCMouseController.h b/Controllers/AOCMouseController/AOCMouseController.h index c2ac01ea..2683ea07 100644 --- a/Controllers/AOCMouseController/AOCMouseController.h +++ b/Controllers/AOCMouseController/AOCMouseController.h @@ -13,6 +13,44 @@ #pragma once +/*-----------------------------------------*\ +| AOC Mousemat Modes | +| Note: The 0x80 bit is the random flag | +\*-----------------------------------------*/ +enum +{ + AOC_MOUSE_MODE_STATIC_SINGLE_COLOR = 0x00, /* Static single color mode */ + AOC_MOUSE_MODE_STATIC_RANDOM = 0x80, /* Static random color mode */ + AOC_MOUSE_MODE_BREATHING_SINGLE_COLOR = 0x01, /* Breathing single color mode */ + AOC_MOUSE_MODE_BREATHING_RANDOM = 0x81, /* Breathing random color mode */ + AOC_MOUSE_MODE_BLINK_SINGLE_COLOR = 0x02, /* Blink single color mode */ + AOC_MOUSE_MODE_BLINK_RANDOM = 0x82, /* Blink random color mode */ + AOC_MOUSE_MODE_WAVE_SINGLE_COLOR = 0x03, /* Wave single color mode */ + AOC_MOUSE_MODE_WAVE_RANDOM = 0x83, /* Wave random color mode */ + AOC_MOUSE_MODE_DPI = 0x04, /* DPI mode */ +}; + +enum +{ + AOC_MOUSE_SPEED_SLOW = 0x03, /* Slowest speed */ + AOC_MOUSE_SPEED_MEDIUM = 0x02, /* Medium speed */ + AOC_MOUSE_SPEED_FAST = 0x01, /* Fastest speed */ +}; + +enum +{ + AOC_MOUSE_BRIGHTNESS_OFF = 0x00, /* Lowest brightness (off) */ + AOC_MOUSE_BRIGHTNESS_LOW = 0x01, /* Low brightness */ + AOC_MOUSE_BRIGHTNESS_MEDIUM = 0x02, /* Medium brightness */ + AOC_MOUSE_BRIGHTNESS_HIGH = 0x03, /* Highest brightness */ +}; + +enum +{ + AOC_MOUSE_DIRECTION_CLOCKWISE = 0x00, /* Clockwise direction */ + AOC_MOUSE_DIRECTION_COUNTERCLOCKWISE = 0x01, /* Counter-clockwise direction */ +}; + class AOCMouseController { public: @@ -27,6 +65,15 @@ public: RGBColor* color_data ); + void SendPacket + ( + unsigned char mode, + unsigned char brightness, + unsigned char speed, + unsigned char direction, + RGBColor* color_data + ); + private: hid_device* dev; std::string location; diff --git a/Controllers/AOCMouseController/RGBController_AOCMouse.cpp b/Controllers/AOCMouseController/RGBController_AOCMouse.cpp index fb74360e..d15cddb0 100644 --- a/Controllers/AOCMouseController/RGBController_AOCMouse.cpp +++ b/Controllers/AOCMouseController/RGBController_AOCMouse.cpp @@ -14,7 +14,7 @@ @type USB @save :x: @direct :white_check_mark: - @effects :x: + @effects :white_check_mark: @detectors DetectAOCMouseControllers @comment \*-------------------------------------------------------------------*/ @@ -31,12 +31,90 @@ RGBController_AOCMouse::RGBController_AOCMouse(AOCMouseController* controller_pt serial = controller->GetSerialString(); mode Direct; - Direct.name = "Direct"; - Direct.value = 0xFFFF; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; + Direct.name = "Direct"; + Direct.value = AOC_MOUSE_MODE_STATIC_SINGLE_COLOR; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Direct.color_mode = MODE_COLORS_PER_LED; + Direct.brightness_min = AOC_MOUSE_BRIGHTNESS_OFF; + Direct.brightness_max = AOC_MOUSE_BRIGHTNESS_HIGH; + Direct.brightness = AOC_MOUSE_BRIGHTNESS_HIGH; modes.push_back(Direct); + mode SpectrumCycle; + SpectrumCycle.name = "Spectrum Cycle"; + SpectrumCycle.value = AOC_MOUSE_MODE_STATIC_RANDOM; + SpectrumCycle.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED; + SpectrumCycle.color_mode = MODE_COLORS_RANDOM; + SpectrumCycle.brightness_min = AOC_MOUSE_BRIGHTNESS_OFF; + SpectrumCycle.brightness_max = AOC_MOUSE_BRIGHTNESS_HIGH; + SpectrumCycle.brightness = AOC_MOUSE_BRIGHTNESS_HIGH; + SpectrumCycle.speed_min = AOC_MOUSE_SPEED_SLOW; + SpectrumCycle.speed_max = AOC_MOUSE_SPEED_FAST; + SpectrumCycle.speed = AOC_MOUSE_SPEED_MEDIUM; + modes.push_back(SpectrumCycle); + + mode Breathing; + Breathing.name = "Breathing"; + Breathing.value = AOC_MOUSE_MODE_BREATHING_SINGLE_COLOR; + Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED; + Breathing.color_mode = MODE_COLORS_PER_LED; + Breathing.brightness_min = AOC_MOUSE_BRIGHTNESS_OFF; + Breathing.brightness_max = AOC_MOUSE_BRIGHTNESS_HIGH; + Breathing.brightness = AOC_MOUSE_BRIGHTNESS_HIGH; + Breathing.speed_min = AOC_MOUSE_SPEED_SLOW; + Breathing.speed_max = AOC_MOUSE_SPEED_FAST; + Breathing.speed = AOC_MOUSE_SPEED_MEDIUM; + modes.push_back(Breathing); + + mode Blink; + Blink.name = "Flashing"; + Blink.value = AOC_MOUSE_MODE_BLINK_SINGLE_COLOR; + Blink.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED; + Blink.color_mode = MODE_COLORS_PER_LED; + Blink.brightness_min = AOC_MOUSE_BRIGHTNESS_OFF; + Blink.brightness_max = AOC_MOUSE_BRIGHTNESS_HIGH; + Blink.brightness = AOC_MOUSE_BRIGHTNESS_HIGH; + Blink.speed_min = AOC_MOUSE_SPEED_SLOW; + Blink.speed_max = AOC_MOUSE_SPEED_FAST; + Blink.speed = AOC_MOUSE_SPEED_MEDIUM; + modes.push_back(Blink); + + mode Wave; + Wave.name = "Wave"; + Wave.value = AOC_MOUSE_MODE_WAVE_SINGLE_COLOR; + Wave.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; + Wave.color_mode = MODE_COLORS_PER_LED; + Wave.brightness_min = AOC_MOUSE_BRIGHTNESS_OFF; + Wave.brightness_max = AOC_MOUSE_BRIGHTNESS_HIGH; + Wave.brightness = AOC_MOUSE_BRIGHTNESS_HIGH; + Wave.speed_min = AOC_MOUSE_SPEED_SLOW; + Wave.speed_max = AOC_MOUSE_SPEED_FAST; + Wave.speed = AOC_MOUSE_SPEED_MEDIUM; + modes.push_back(Wave); + + mode RainbowWave; + RainbowWave.name = "Rainbow Wave"; + RainbowWave.value = AOC_MOUSE_MODE_WAVE_RANDOM; + RainbowWave.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR; + RainbowWave.color_mode = MODE_COLORS_RANDOM; + RainbowWave.brightness_min = AOC_MOUSE_BRIGHTNESS_OFF; + RainbowWave.brightness_max = AOC_MOUSE_BRIGHTNESS_HIGH; + RainbowWave.brightness = AOC_MOUSE_BRIGHTNESS_HIGH; + RainbowWave.speed_min = AOC_MOUSE_SPEED_SLOW; + RainbowWave.speed_max = AOC_MOUSE_SPEED_FAST; + RainbowWave.speed = AOC_MOUSE_SPEED_MEDIUM; + modes.push_back(RainbowWave); + + mode DPI; + DPI.name = "DPI"; + DPI.value = AOC_MOUSE_MODE_DPI; + DPI.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + DPI.color_mode = MODE_COLORS_RANDOM; + DPI.brightness_min = AOC_MOUSE_BRIGHTNESS_OFF; + DPI.brightness_max = AOC_MOUSE_BRIGHTNESS_HIGH; + DPI.brightness = AOC_MOUSE_BRIGHTNESS_HIGH; + modes.push_back(DPI); + SetupZones(); }; @@ -85,7 +163,7 @@ void RGBController_AOCMouse::ResizeZone(int /*zone*/, int /*new_size*/) void RGBController_AOCMouse::DeviceUpdateLEDs() { - controller->SendDirect(&colors[0]); + DeviceUpdateMode(); } void RGBController_AOCMouse::UpdateZoneLEDs(int /*zone*/) @@ -100,5 +178,38 @@ void RGBController_AOCMouse::UpdateSingleLED(int /*led*/) void RGBController_AOCMouse::DeviceUpdateMode() { - DeviceUpdateLEDs(); + if(modes[active_mode].value == AOC_MOUSE_MODE_STATIC_SINGLE_COLOR) + { + controller->SendDirect(&colors[0]); + } + else + { + unsigned char aoc_direction = AOC_MOUSE_DIRECTION_CLOCKWISE; + unsigned int aoc_mode = modes[active_mode].value; + + if(modes[active_mode].direction == MODE_DIRECTION_LEFT) + { + aoc_direction = AOC_MOUSE_DIRECTION_COUNTERCLOCKWISE; + } + + if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) + { + switch(modes[active_mode].value) + { + case AOC_MOUSE_MODE_BREATHING_SINGLE_COLOR: + aoc_mode = AOC_MOUSE_MODE_BREATHING_RANDOM; + break; + + case AOC_MOUSE_MODE_BLINK_SINGLE_COLOR: + aoc_mode = AOC_MOUSE_MODE_BLINK_RANDOM; + break; + } + } + + controller->SendPacket(aoc_mode, + modes[active_mode].brightness, + modes[active_mode].speed, + aoc_direction, + &colors[0]); + } }