Add support for Evision V2 based Endorfy Omnis

This commit is contained in:
Adam Słaboń 2024-03-16 15:29:04 +01:00 committed by Adam Honse
parent 6e93a25930
commit 5586206f46
5 changed files with 275 additions and 13 deletions

View file

@ -22,7 +22,7 @@
using namespace std::chrono_literals;
static uint8_t keyvalue_map[EVISION_V2_MATRIX_WIDTH * EVISION_V2_MATRIX_HEIGHT] =
static uint8_t evisionv2_map[EVISION_V2_MATRIX_WIDTH * EVISION_V2_MATRIX_HEIGHT] =
{
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 19 20 */
0, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96,
@ -33,11 +33,23 @@ static uint8_t keyvalue_map[EVISION_V2_MATRIX_WIDTH * EVISION_V2_MATRIX_HEIGHT]
5, 11, 17, 41, 65, 71, 77, 83, 89, 95, 101, 113, 119,
};
EVisionV2KeyboardController::EVisionV2KeyboardController(hid_device* dev_handle, const char* path)
static uint8_t endorfy_map[EVISION_V2_MATRIX_WIDTH * EVISION_V2_MATRIX_HEIGHT] =
{
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 19 20 */
0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, 80, 81, 82,
84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99, 101, 102, 103, 104,
105, 106, 107, 111, 115, 116, 117, 118, 119, 120, 121, 123, 124,
};
EVisionV2KeyboardController::EVisionV2KeyboardController(hid_device* dev_handle, const char* path, EVisionV2KeyboardLayout layout_)
{
const uint8_t sz = HID_MAX_STR;
wchar_t tmp[sz];
layout = layout_;
dev = dev_handle;
location = path;
@ -61,6 +73,18 @@ EVisionV2KeyboardController::EVisionV2KeyboardController(hid_device* dev_handle,
map_size = buffer[5];
macros_size = buffer[6] * 0x80;
switch(layout)
{
case EVISION_V2_KEYBOARD_LAYOUT:
keyvalue_map = evisionv2_map;
led_count = 106;
break;
case ENDORFY_KEYBOARD_LAYOUT:
keyvalue_map = endorfy_map;
led_count = 104;
break;
}
}
EVisionV2KeyboardController::~EVisionV2KeyboardController()
@ -234,6 +258,7 @@ int EVisionV2KeyboardController::GetMode(EVisionV2KeyboardPart part, EvisionV2Mo
size = sizeof(buffer);
break;
case EVISION_V2_KEYBOARD_PART_LOGO:
case ENDORFY_KEYBOARD_PART_EDGE:
offset += EVISION_V2_PARAMETER_LOGO;
size = EVISION_V2_PARAMETER_LOGO_ON_OFF - EVISION_V2_PARAMETER_LOGO + 1;
break;
@ -268,7 +293,7 @@ int EVisionV2KeyboardController::GetMode(EVisionV2KeyboardPart part, EvisionV2Mo
}
}
}
else if(part == EVISION_V2_KEYBOARD_PART_LOGO)
else if(part == EVISION_V2_KEYBOARD_PART_LOGO || part == ENDORFY_KEYBOARD_PART_EDGE)
{
// Use ledmode for logo on/off
config.ledmode = buffer[EVISION_V2_PARAMETER_LOGO_ON_OFF - EVISION_V2_PARAMETER_LOGO];
@ -298,7 +323,7 @@ void EVisionV2KeyboardController::SetMode(EVisionV2KeyboardPart part, const Evis
buffer[EVISION_V2_PARAMETER_LED_MODE_COLOR] = config.ledmode;
}
}
else if(part == EVISION_V2_KEYBOARD_PART_LOGO)
else if(part == EVISION_V2_KEYBOARD_PART_LOGO || part == ENDORFY_KEYBOARD_PART_EDGE)
{
// Use ledmode for logo on/off
buffer[EVISION_V2_PARAMETER_LOGO_ON_OFF - EVISION_V2_PARAMETER_LOGO] = config.ledmode;
@ -329,6 +354,7 @@ void EVisionV2KeyboardController::SetMode(EVisionV2KeyboardPart part, const Evis
size = sizeof(buffer);
break;
case EVISION_V2_KEYBOARD_PART_LOGO:
case ENDORFY_KEYBOARD_PART_EDGE:
offset += EVISION_V2_PARAMETER_LOGO;
size = EVISION_V2_PARAMETER_LOGO_ON_OFF - EVISION_V2_PARAMETER_LOGO + 1;
break;
@ -348,7 +374,7 @@ void EVisionV2KeyboardController::SetMode(EVisionV2KeyboardPart part, const Evis
void EVisionV2KeyboardController::SetLedsDirect(const std::vector<RGBColor>& colours)
{
const size_t colours_num = std::min(colours.size(), sizeof(keyvalue_map) / sizeof(keyvalue_map[0]));
const size_t colours_num = std::min(colours.size(), led_count);
uint8_t* buffer = new uint8_t[3 * map_size];
memset(buffer, 0, 3 * map_size);
@ -394,7 +420,7 @@ int EVisionV2KeyboardController::GetLedsCustom(uint8_t colorset, std::vector<RGB
return -256;
}
const size_t colours_num = std::min(colours.size(), sizeof(keyvalue_map) / sizeof(keyvalue_map[0]));
const size_t colours_num = std::min(colours.size(), led_count);
uint8_t* buffer = new uint8_t[3 * map_size];
memset(buffer, 0, 3 * map_size);
@ -422,7 +448,7 @@ void EVisionV2KeyboardController::SetLedsCustom(uint8_t colorset, const std::vec
return;
}
const size_t colours_num = std::min(colours.size(), sizeof(keyvalue_map) / sizeof(keyvalue_map[0]));
const size_t colours_num = std::min(colours.size(), led_count);
uint8_t* buffer = new uint8_t[3 * map_size];
memset(buffer, 0, 3 * map_size);