Add effect modes to AOC Mouse controller
This commit is contained in:
parent
2680a24bbd
commit
5ad75b5d95
3 changed files with 185 additions and 10 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue