mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-01-12 00:57:50 -05:00
491 lines
30 KiB
C++
491 lines
30 KiB
C++
/*---------------------------------------------------------*\
|
|
| RGBController_MountainKeyboard.cpp |
|
|
| |
|
|
| RGBController for Mountain keyboard |
|
|
| |
|
|
| Soufian Batta Jan 2023 |
|
|
| |
|
|
| This file is part of the OpenRGB project |
|
|
| SPDX-License-Identifier: GPL-2.0-only |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#include "RGBController_Mountain60Keyboard.h"
|
|
#include "RGBControllerKeyNames.h"
|
|
#include "KeyboardLayoutManager.h"
|
|
|
|
using namespace std::chrono_literals;
|
|
|
|
/*-------------------------------*\
|
|
| TODO: Detect detached keypad |
|
|
\*-------------------------------*/
|
|
|
|
std::vector<unsigned int> mountain60_keyboard_key_id_values =
|
|
{
|
|
/* ESC 1 2 3 4 5 6 7 8 9 0 - = BSPC */
|
|
0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
|
|
/* TAB Q W E R T Y U I O P [ ] \ */
|
|
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
|
|
/* CPLK A S D F G H J K L ; " ENTR */
|
|
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76,
|
|
/* LSFT Z X C V B N M , . / RSFT ARWU DEL */
|
|
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 97, 94, 56,
|
|
/* LCTL LWIN LALT SPC RALT RFNC FNC ARWL ARWD ARWR */
|
|
105, 106, 107, 110, 113, 115, 119, 120, 121,
|
|
};
|
|
|
|
layout_values mountain60_layout =
|
|
{
|
|
mountain60_keyboard_key_id_values,
|
|
{
|
|
/*------------------------------------------*\
|
|
| No regional layout fix for the moment |
|
|
\*------------------------------------------*/
|
|
},
|
|
};
|
|
|
|
keyboard_keymap_overlay_values mountain60_keyboard_overlay_no_numpad =
|
|
{
|
|
KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY,
|
|
mountain60_layout,
|
|
{
|
|
/*-------------------------------------------------------------------------------------------------------------*\
|
|
| Edit Keys |
|
|
| Zone, Row, Column, Value, Key, OpCode, |
|
|
\*-------------------------------------------------------------------------------------------------------------*/
|
|
{ 0, 4, 13, 120, KEY_EN_DOWN_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 4, 12, 119, KEY_EN_LEFT_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 4, 14, 121, KEY_EN_RIGHT_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 4, 14, 121, KEY_EN_RIGHT_ARROW, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 3, 13, 99, KEY_EN_UP_ARROW, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 12, 97, KEY_EN_RIGHT_SHIFT, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 2, 85, KEY_EN_Z, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 3, 86, KEY_EN_X, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 4, 87, KEY_EN_C, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 5, 88, KEY_EN_B, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 6, 89, KEY_EN_V, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 7, 90, KEY_EN_N, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 8, 91, KEY_EN_M, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 9, 92, KEY_EN_COMMA, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 10, 93, KEY_EN_PERIOD, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 14, 56, KEY_EN_DELETE, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 2, 13, 76, KEY_EN_ANSI_ENTER, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 0, 84, KEY_EN_LEFT_SHIFT, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
//upper edge
|
|
{ 0, 0, 0, 126, "Edge 1", KEYBOARD_OPCODE_INSERT_ROW, },
|
|
{ 0, 0, 1, 127, "Edge 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 2, 128, "Edge 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 3, 129, "Edge 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 4, 130, "Edge 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 5, 131, "Edge 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 6, 132, "Edge 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 7, 133, "Edge 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 8, 134, "Edge 9", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 9, 135, "Edge 10", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 10, 136, "Edge 11", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 11, 137, "Edge 12", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 12, 138, "Edge 13", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 13, 139, "Edge 14", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 14, 140, "Edge 15", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 15, 141, "Edge 16", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
//left edge
|
|
{ 0, 0, 0, 169, "Edge 44", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 1, 0, 168, "Edge 43", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 2, 0, 167, "Edge 42", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 3, 0, 166, "Edge 41", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 4, 0, 165, "Edge 40", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 5, 0, 164, "Edge 39", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
//down edge
|
|
{ 0, 6, 0, 1, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_ROW, },
|
|
{ 0, 6, 0, 163, "Edge 38", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 1, 162, "Edge 37", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 2, 161, "Edge 36", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 3, 160, "Edge 35", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 4, 159, "Edge 34", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 5, 158, "Edge 33", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 6, 157, "Edge 32", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 7, 156, "Edge 31", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 8, 155, "Edge 30", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 9, 154, "Edge 29", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 10, 153, "Edge 28", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 11, 152, "Edge 27", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 12, 151, "Edge 26", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 13, 150, "Edge 25", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 14, 149, "Edge 24", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 15, 148, "Edge 23", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
//right edge
|
|
{ 0, 1, 16, 142, "Edge 17", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 2, 16, 143, "Edge 18", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 3, 16, 144, "Edge 19", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 4, 16, 145, "Edge 20", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 5, 16, 146, "Edge 21", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 16, 147, "Edge 22", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 16, 147, "Edge 22", KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
//numpad left edge
|
|
{ 0, 0, 17, 191, "Numpad Edge 22", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 1, 17, 190, "Numpad Edge 21", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 2, 17, 189, "Numpad Edge 20", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 3, 17, 188, "Numpad Edge 19", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 4, 17, 187, "Numpad Edge 18", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 5, 17, 186, "Numpad Edge 17", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
//numpad upper edge
|
|
{ 0, 0, 18, 170, "Numpad Edge 1", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 19, 171, "Numpad Edge 2", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 20, 172, "Numpad Edge 3", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 21, 173, "Numpad Edge 4", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 0, 22, 174, "Numpad Edge 5", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
//numpad down edge
|
|
{ 0, 6, 17, 185, "Numpad Edge 12", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT },
|
|
{ 0, 6, 18, 184, "Numpad Edge 13", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 19, 183, "Numpad Edge 14", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 20, 182, "Numpad Edge 15", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 21, 181, "Numpad Edge 16", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
//numpad right edge
|
|
{ 0, 1, 22, 175, "Numpad Edge 6", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 2, 22, 176, "Numpad Edge 7", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 3, 22, 177, "Numpad Edge 8", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 4, 22, 178, "Numpad Edge 9", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 5, 22, 179, "Numpad Edge 10", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 22, 180, "Numpad Edge 11", KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, },
|
|
{ 0, 6, 22, 180, "Numpad Edge 11", KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
//numpad keys
|
|
{ 0, 1, 18, 38, KEY_EN_NUMPAD_LOCK, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 1, 19, 39, KEY_EN_NUMPAD_DIVIDE, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 1, 20, 40, KEY_EN_NUMPAD_TIMES, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 1, 21, 41, KEY_EN_NUMPAD_MINUS, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 2, 18, 59, KEY_EN_NUMPAD_7, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 2, 19, 60, KEY_EN_NUMPAD_8, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 2, 20, 61, KEY_EN_NUMPAD_9, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 2, 21, 62, KEY_EN_NUMPAD_PLUS, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 18, 80, KEY_EN_NUMPAD_4, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 19, 81, KEY_EN_NUMPAD_5, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 3, 20, 82, KEY_EN_NUMPAD_6, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 4, 18, 101, KEY_EN_NUMPAD_1, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 4, 19, 102, KEY_EN_NUMPAD_2, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 4, 20, 103, KEY_EN_NUMPAD_3, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 5, 18, 122, KEY_EN_NUMPAD_0, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 5, 20, 124, KEY_EN_NUMPAD_PERIOD, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
{ 0, 5, 21, 125, KEY_EN_NUMPAD_ENTER, KEYBOARD_OPCODE_SWAP_ONLY, },
|
|
}
|
|
};
|
|
|
|
/**------------------------------------------------------------------*\
|
|
@name Mountain Keyboard
|
|
@category Keyboard
|
|
@type USB
|
|
@save :white_check_mark:
|
|
@direct :white_check_mark:
|
|
@effects :white_check_mark:
|
|
@detectors DetectMountainKeyboardControllers
|
|
@comment
|
|
\*-------------------------------------------------------------------*/
|
|
|
|
RGBController_Mountain60Keyboard::RGBController_Mountain60Keyboard(Mountain60KeyboardController* controller_ptr)
|
|
{
|
|
controller = controller_ptr;
|
|
name = "Mountain Everest 60 Keyboard";
|
|
vendor = "Mountain";
|
|
type = DEVICE_TYPE_KEYBOARD;
|
|
description = "Mountain Everest Keyboard 60%";
|
|
location = controller->GetDeviceLocation();
|
|
serial = controller->GetSerialString();
|
|
|
|
mode Direct;
|
|
Direct.name = "Direct";
|
|
Direct.value = MOUNTAIN60_KEYBOARD_MODE_CUSTOM;
|
|
Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Direct.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
Direct.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Direct.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Direct.color_mode = MODE_COLORS_PER_LED;
|
|
modes.push_back(Direct);
|
|
|
|
mode Off;
|
|
Off.name = "Off";
|
|
Off.value = MOUNTAIN60_KEYBOARD_MODE_OFF;
|
|
Off.flags = MODE_FLAG_MANUAL_SAVE;
|
|
Off.color_mode = MODE_COLORS_NONE;
|
|
modes.push_back(Off);
|
|
|
|
mode Static;
|
|
Static.name = "Static";
|
|
Static.value = MOUNTAIN60_KEYBOARD_MODE_STATIC;
|
|
Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
|
Static.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
Static.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Static.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Static.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
Static.colors_min = 1;
|
|
Static.colors_max = 1;
|
|
Static.colors.resize(1);
|
|
modes.push_back(Static);
|
|
|
|
mode ColorWaveRainbow;
|
|
ColorWaveRainbow.name = "Rainbow Wave";
|
|
ColorWaveRainbow.value = MOUNTAIN60_KEYBOARD_MODE_COLOR_WAVE;
|
|
ColorWaveRainbow.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_MANUAL_SAVE;
|
|
ColorWaveRainbow.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
ColorWaveRainbow.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
ColorWaveRainbow.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
ColorWaveRainbow.speed_min = MOUNTAIN60_KEYBOARD_SPEED_MIN;
|
|
ColorWaveRainbow.speed = MOUNTAIN60_KEYBOARD_SPEED_DEFAULT;
|
|
ColorWaveRainbow.speed_max = MOUNTAIN60_KEYBOARD_SPEED_MAX;
|
|
ColorWaveRainbow.color_mode = MODE_COLORS_RANDOM;
|
|
|
|
modes.push_back(ColorWaveRainbow);
|
|
|
|
mode ColorWave;
|
|
ColorWave.name = "ColorWave";
|
|
ColorWave.value = MOUNTAIN60_KEYBOARD_MODE_COLOR_WAVE;
|
|
ColorWave.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_MANUAL_SAVE;
|
|
ColorWave.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
ColorWave.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
ColorWave.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
ColorWave.speed_min = MOUNTAIN60_KEYBOARD_SPEED_MIN;
|
|
ColorWave.speed = MOUNTAIN60_KEYBOARD_SPEED_DEFAULT;
|
|
ColorWave.speed_max = MOUNTAIN60_KEYBOARD_SPEED_MAX;
|
|
ColorWave.colors_min = 1;
|
|
ColorWave.colors_max = 2;
|
|
ColorWave.colors.resize(2);
|
|
ColorWave.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(ColorWave);
|
|
|
|
mode Tornado;
|
|
Tornado.name = "Tornado";
|
|
Tornado.value = MOUNTAIN60_KEYBOARD_MODE_TORNADO;
|
|
Tornado.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_MANUAL_SAVE;
|
|
Tornado.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
Tornado.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Tornado.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Tornado.speed_min = MOUNTAIN60_KEYBOARD_SPEED_MIN;
|
|
Tornado.speed = MOUNTAIN60_KEYBOARD_SPEED_DEFAULT;
|
|
Tornado.speed_max = MOUNTAIN60_KEYBOARD_SPEED_MAX;
|
|
Tornado.colors_min = 1;
|
|
Tornado.colors_max = 1;
|
|
Tornado.colors.resize(1);
|
|
Tornado.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Tornado);
|
|
|
|
mode Breathing;
|
|
Breathing.name = "Breathing";
|
|
Breathing.value = MOUNTAIN60_KEYBOARD_MODE_BREATHING;
|
|
Breathing.flags = MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE;
|
|
Breathing.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
Breathing.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Breathing.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Breathing.speed_min = MOUNTAIN60_KEYBOARD_SPEED_MIN;
|
|
Breathing.speed = MOUNTAIN60_KEYBOARD_SPEED_DEFAULT;
|
|
Breathing.speed_max = MOUNTAIN60_KEYBOARD_SPEED_MAX;
|
|
Breathing.colors_min = 1;
|
|
Breathing.colors_max = 2;
|
|
Breathing.colors.resize(2);
|
|
Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
modes.push_back(Breathing);
|
|
|
|
mode Reactive;
|
|
Reactive.name = "Reactive";
|
|
Reactive.value = MOUNTAIN60_KEYBOARD_MODE_REACTIVE;
|
|
Reactive.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE;
|
|
Reactive.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
Reactive.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Reactive.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Reactive.speed_min = MOUNTAIN60_KEYBOARD_SPEED_MIN;
|
|
Reactive.speed = MOUNTAIN60_KEYBOARD_SPEED_DEFAULT;
|
|
Reactive.speed_max = MOUNTAIN60_KEYBOARD_SPEED_MAX;
|
|
Reactive.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
Reactive.colors_min = 1;
|
|
Reactive.colors_max = 2;
|
|
Reactive.colors.resize(2);
|
|
modes.push_back(Reactive);
|
|
|
|
mode Matrix;
|
|
Matrix.name = "Matrix";
|
|
Matrix.value = MOUNTAIN60_KEYBOARD_MODE_MATRIX;
|
|
Matrix.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE;
|
|
Matrix.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
Matrix.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Matrix.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Matrix.speed_min = MOUNTAIN60_KEYBOARD_SPEED_MIN;
|
|
Matrix.speed = MOUNTAIN60_KEYBOARD_SPEED_DEFAULT;
|
|
Matrix.speed_max = MOUNTAIN60_KEYBOARD_SPEED_MAX;
|
|
Matrix.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
Matrix.colors_min = 1;
|
|
Matrix.colors_max = 2;
|
|
Matrix.colors.resize(2);
|
|
modes.push_back(Matrix);
|
|
|
|
mode Yeti;
|
|
Yeti.name = "Yeti";
|
|
Yeti.value = MOUNTAIN60_KEYBOARD_MODE_YETI;
|
|
Yeti.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE;
|
|
Yeti.brightness_min = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MIN;
|
|
Yeti.brightness = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Yeti.brightness_max = MOUNTAIN60_KEYBOARD_BRIGHTNESS_MAX;
|
|
Yeti.speed_min = MOUNTAIN60_KEYBOARD_SPEED_MIN;
|
|
Yeti.speed = MOUNTAIN60_KEYBOARD_SPEED_DEFAULT;
|
|
Yeti.speed_max = MOUNTAIN60_KEYBOARD_SPEED_MAX;
|
|
Yeti.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
|
Yeti.colors_min = 1;
|
|
Yeti.colors_max = 2;
|
|
Yeti.colors.resize(2);
|
|
modes.push_back(Yeti);
|
|
|
|
SetupZones();
|
|
|
|
/*-----------------------------------------------------*\
|
|
| The Mountain Everest 60 keyboard need to send a |
|
|
| specific packet frequently so that leds get updated |
|
|
\*-----------------------------------------------------*/
|
|
mountain_thread = new std::thread(&RGBController_Mountain60Keyboard::UpdateMountain, this);
|
|
mountaint_thread_running = true;
|
|
update_device = true;
|
|
found_device = true;
|
|
}
|
|
|
|
RGBController_Mountain60Keyboard::~RGBController_Mountain60Keyboard()
|
|
{
|
|
update_device = false;
|
|
mountaint_thread_running = false;
|
|
mountain_thread->join();
|
|
delete mountain_thread;
|
|
|
|
/*---------------------------------------------------------*\
|
|
| Delete the matrix map |
|
|
\*---------------------------------------------------------*/
|
|
for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++)
|
|
{
|
|
if(zones[zone_index].type == ZONE_TYPE_MATRIX)
|
|
{
|
|
delete zones[zone_index].matrix_map;
|
|
}
|
|
}
|
|
|
|
delete controller;
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::SetupZones()
|
|
{
|
|
KeyboardLayoutManager new_kb(KEYBOARD_LAYOUT_ANSI_QWERTY, KEYBOARD_SIZE_SIXTY, mountain60_layout);
|
|
new_kb.ChangeKeys(mountain60_keyboard_overlay_no_numpad);
|
|
|
|
zone new_zone;
|
|
matrix_map_type * new_map = new matrix_map_type;
|
|
|
|
new_zone.name = "Mountain Everest 60";
|
|
new_zone.type = ZONE_TYPE_MATRIX;
|
|
new_zone.matrix_map = new_map;
|
|
new_zone.matrix_map->height = new_kb.GetRowCount();
|
|
new_zone.matrix_map->width = new_kb.GetColumnCount();
|
|
new_zone.matrix_map->map = new unsigned int[new_map->height * new_map->width];
|
|
new_zone.leds_count = new_kb.GetKeyCount();
|
|
new_zone.leds_min = new_zone.leds_count;
|
|
new_zone.leds_max = new_zone.leds_count;
|
|
|
|
new_kb.GetKeyMap(new_map->map, KEYBOARD_MAP_FILL_TYPE_COUNT);
|
|
|
|
for(unsigned int led_idx = 0; led_idx < new_zone.leds_count; led_idx++)
|
|
{
|
|
led new_led;
|
|
new_led.name = new_kb.GetKeyNameAt(led_idx);
|
|
new_led.value = new_kb.GetKeyValueAt(led_idx);
|
|
leds.push_back(new_led);
|
|
}
|
|
|
|
zones.push_back(new_zone);
|
|
SetupColors();
|
|
DeviceUpdateMode();
|
|
update_device = true;
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::ResizeZone(int /*zone*/, int /*new_size*/)
|
|
{
|
|
/*---------------------------------------------------------*\
|
|
| This device does not support resizing zones |
|
|
\*---------------------------------------------------------*/
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::DeviceUpdateLEDs()
|
|
{
|
|
if (update_device.load())
|
|
{
|
|
unsigned char* color_data = new unsigned char[(leds.size()*4)];
|
|
|
|
/*---------------------------------------------------------*\
|
|
| Filling the color_data vector with progressive index |
|
|
| leaving space for RGB data |
|
|
\*---------------------------------------------------------*/
|
|
for(unsigned int led_idx = 0; led_idx < leds.size(); led_idx++)
|
|
{
|
|
const unsigned int idx = led_idx * 4;
|
|
color_data[idx] = leds[led_idx].value;
|
|
color_data[idx + 1] = RGBGetRValue(colors[led_idx]);
|
|
color_data[idx + 2] = RGBGetGValue(colors[led_idx]);
|
|
color_data[idx + 3] = RGBGetBValue(colors[led_idx]);
|
|
}
|
|
|
|
controller->SendDirect(modes[active_mode].brightness, color_data, (leds.size()*4));
|
|
delete[] color_data;
|
|
}
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::UpdateZoneLEDs(int /*zone*/)
|
|
{
|
|
DeviceUpdateLEDs();
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::UpdateSingleLED(int /*led*/)
|
|
{
|
|
DeviceUpdateLEDs();
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::DeviceUpdateMode()
|
|
{
|
|
static mode current_mode;
|
|
|
|
if(modes[active_mode].value != current_mode.value && found_device.load())
|
|
{
|
|
current_mode = modes[active_mode];
|
|
controller->SelectMode(modes[active_mode].value);
|
|
}
|
|
|
|
if(current_mode.color_mode != MODE_FLAG_HAS_PER_LED_COLOR && update_device.load())
|
|
{
|
|
controller->SendModeDetails(&modes[active_mode]);
|
|
}
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::DeviceSaveMode()
|
|
{
|
|
controller->SaveData(modes[active_mode].value);
|
|
}
|
|
|
|
void RGBController_Mountain60Keyboard::UpdateMountain()
|
|
{
|
|
while (mountaint_thread_running.load())
|
|
{
|
|
std::this_thread::sleep_for(MOUNTAIN60_KEEP_LIVE_PERIOD);
|
|
|
|
controller->UpdateData();
|
|
|
|
const char* Path = controller->GetPath();
|
|
hid_device * rescan_device = hid_open_path(Path);
|
|
|
|
if (rescan_device)
|
|
{
|
|
if (!found_device.load())
|
|
{
|
|
controller->SetDevice(rescan_device);
|
|
found_device = true;
|
|
update_device = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (found_device.load())
|
|
{
|
|
update_device = false;
|
|
found_device = false;
|
|
}
|
|
}
|
|
}
|
|
}
|