Initial commit for Razer Blade 14 2022 to resolve #3067

+ Adding entry for the Blade 14 2022 PID
+ Registered detectors
+ Added metadata to RazerDevices.h
+ Added capabilities to RazerController.cpp
+ Adding QWERTZ layout to Blade 12 2022 mapping
+ Adding missing DE key names to RGBControllerKeyNames and
DeviceView.cpp
This commit is contained in:
Chris 2023-01-23 21:10:21 +11:00 committed by Chris M
parent 7825734f07
commit 847b10bda9
9 changed files with 174 additions and 6 deletions

View file

@ -240,9 +240,10 @@ void RGBController_Razer::SetupZones()
for(unsigned int i = 0; i < device_list[device_index]->keymap_size; i++)
{
if(zone_id == device_list[device_index]->keymap[i].zone &&
row_id == device_list[device_index]->keymap[i].row &&
col_id == device_list[device_index]->keymap[i].col)
if(zone_id == device_list[device_index]->keymap[i].zone &&
row_id == device_list[device_index]->keymap[i].row &&
col_id == device_list[device_index]->keymap[i].col &&
layout_type & device_list[device_index]->keymap[i].layout)
{
new_led->name = device_list[device_index]->keymap[i].name;
not_found = false;

View file

@ -55,6 +55,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha
case RAZER_BLACKWIDOW_2019_PID:
case RAZER_BLACKWIDOW_V3_MINI_WIRED_PID:
case RAZER_BLADE_2021_BASE_V2_PID:
case RAZER_BLADE_14_2022_PID:
case RAZER_CYNOSA_V2_PID:
case RAZER_ORNATA_CHROMA_V2_PID:
case RAZER_ORNATA_V3_PID:
@ -133,6 +134,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha
case RAZER_BASILISK_V3_PRO_BLUETOOTH_PID:
case RAZER_BASE_STATION_CHROMA_PID:
case RAZER_BASE_STATION_V2_CHROMA_PID:
case RAZER_BLADE_14_2022_PID:
case RAZER_CHARGING_PAD_CHROMA_PID:
case RAZER_CHROMA_HDK_PID:
case RAZER_CORE_X_PID:
@ -213,6 +215,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha
case RAZER_BLADE_2021_BASE_PID:
case RAZER_BLADE_2021_BASE_V2_PID:
case RAZER_BLADE_14_2021_PID:
case RAZER_BLADE_14_2022_PID:
case RAZER_BLADE_PRO_2016_PID:
case RAZER_BLADE_PRO_2017_PID:
case RAZER_BLADE_PRO_2017_FULLHD_PID:
@ -583,6 +586,7 @@ bool RazerController::SupportsWave()
case RAZER_BLADE_2021_BASE_PID:
case RAZER_BLADE_2021_BASE_V2_PID:
case RAZER_BLADE_14_2021_PID:
case RAZER_BLADE_14_2022_PID:
case RAZER_BLADE_PRO_2016_PID:
case RAZER_BLADE_PRO_2017_PID:
case RAZER_BLADE_PRO_2017_FULLHD_PID:
@ -1221,7 +1225,6 @@ unsigned char RazerController::GetKeyboardLayoutType()
return RAZER_LAYOUT_TYPE_ANSI;
case RAZER_KEYBOARD_LAYOUT_GREEK: // Unconfirmed
case RAZER_KEYBOARD_LAYOUT_GERMAN: // Unconfirmed
case RAZER_KEYBOARD_LAYOUT_FRENCH:
case RAZER_KEYBOARD_LAYOUT_UK:
case RAZER_KEYBOARD_LAYOUT_NORDIC:
@ -1238,6 +1241,9 @@ unsigned char RazerController::GetKeyboardLayoutType()
case RAZER_KEYBOARD_LAYOUT_JAPAN: // Unconfirmed
return RAZER_LAYOUT_TYPE_JIS;
case RAZER_KEYBOARD_LAYOUT_GERMAN:
return RAZER_LAYOUT_TYPE_QWERTZ;
default:
return RAZER_LAYOUT_TYPE_ALL;
}
@ -1253,7 +1259,7 @@ std::string RazerController::GetKeyboardLayoutName()
switch(layout)
{
case RAZER_KEYBOARD_LAYOUT_US: return "US (ANSI)";
case RAZER_KEYBOARD_LAYOUT_GERMAN: return "German (ISO)"; // Unconfirmed
case RAZER_KEYBOARD_LAYOUT_GERMAN: return "German (QWERTZ)";
case RAZER_KEYBOARD_LAYOUT_GREEK: return "Greek (ISO)"; // Unconfirmed
case RAZER_KEYBOARD_LAYOUT_FRENCH: return "French (ISO)";
case RAZER_KEYBOARD_LAYOUT_RUSSIAN: return "Russian (ANSI)"; // Unconfirmed

View file

@ -137,8 +137,10 @@ enum
RAZER_LAYOUT_TYPE_ANSI = 0x01,
RAZER_LAYOUT_TYPE_ISO = 0x02,
RAZER_LAYOUT_TYPE_JIS = 0x04,
RAZER_LAYOUT_TYPE_QWERTZ = 0x08,
RAZER_LAYOUT_TYPE_ALL = RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS
RAZER_LAYOUT_TYPE_ALL = RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO
| RAZER_LAYOUT_TYPE_JIS | RAZER_LAYOUT_TYPE_QWERTZ
};
/*---------------------------------------------------------*\

View file

@ -277,6 +277,7 @@ REGISTER_HID_DETECTOR_IPU("Razer Ornata V3 X", Det
REGISTER_HID_DETECTOR_IPU("Razer Blade (2016)", DetectRazerControllers, RAZER_VID, RAZER_BLADE_2016_PID, 0x02, 0x01, 0x02);
REGISTER_HID_DETECTOR_IPU("Razer Blade (Late 2016)", DetectRazerControllers, RAZER_VID, RAZER_BLADE_LATE_2016_PID, 0x02, 0x01, 0x02);
REGISTER_HID_DETECTOR_IPU("Razer Blade 14 (2021)", DetectRazerControllers, RAZER_VID, RAZER_BLADE_14_2021_PID, 0x02, 0x01, 0x02);
REGISTER_HID_DETECTOR_IPU("Razer Blade 14 (2022)", DetectRazerControllers, RAZER_VID, RAZER_BLADE_14_2022_PID, 0x02, 0x01, 0x02);
REGISTER_HID_DETECTOR_IPU("Razer Blade 15 (2018 Advanced)", DetectRazerControllers, RAZER_VID, RAZER_BLADE_2018_ADVANCED_PID, 0x02, 0x01, 0x02);
REGISTER_HID_DETECTOR_IPU("Razer Blade 15 (2018 Base)", DetectRazerControllers, RAZER_VID, RAZER_BLADE_2018_BASE_PID, 0x02, 0x01, 0x02);
REGISTER_HID_DETECTOR_IPU("Razer Blade 15 (2018 Mercury)", DetectRazerControllers, RAZER_VID, RAZER_BLADE_2018_MERCURY_PID, 0x02, 0x01, 0x02);

View file

@ -579,6 +579,107 @@ static const razer_key blade_14_2021_keymap[] =
{ 0, 5, 15, KEY_EN_DOWN_ARROW, RAZER_LAYOUT_TYPE_ALL },
};
#define BLADE_14_2022_KEYMAP_SIZE (sizeof(blade_14_2022_keymap) / sizeof(blade_14_2022_keymap[0]))
static const razer_key blade_14_2022_keymap[] =
{
/*-------------------------------------------------------------------------------------------------------------*\
| Zone, Row, Column, Key Layout Type |
\*-------------------------------------------------------------------------------------------------------------*/
{ 0, 0, 1, KEY_EN_ESCAPE, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 2, KEY_EN_F1, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 3, KEY_EN_F2, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 4, KEY_EN_F3, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 5, KEY_EN_F4, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 6, KEY_EN_F5, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 7, KEY_EN_F6, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 8, KEY_EN_F7, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 9, KEY_EN_F8, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 10, KEY_EN_F9, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 11, KEY_EN_F10, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 12, KEY_EN_F11, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 13, KEY_EN_F12, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 14, KEY_EN_DELETE, RAZER_LAYOUT_TYPE_ALL },
{ 0, 0, 15, KEY_EN_POWER, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 1, KEY_EN_BACK_TICK, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 1, 1, KEY_JP_CHEVRON, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 1, 2, KEY_EN_1, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 3, KEY_EN_2, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 4, KEY_EN_3, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 5, KEY_EN_4, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 6, KEY_EN_5, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 7, KEY_EN_6, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 8, KEY_EN_7, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 9, KEY_EN_8, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 10, KEY_EN_9, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 11, KEY_EN_0, RAZER_LAYOUT_TYPE_ALL },
{ 0, 1, 12, KEY_EN_MINUS, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 1, 12, KEY_DE_ESZETT, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 1, 13, KEY_EN_EQUALS, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 1, 13, KEY_EN_BACK_TICK, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 1, 15, KEY_EN_BACKSPACE, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 1, KEY_EN_TAB, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 2, KEY_EN_Q, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 3, KEY_EN_W, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 4, KEY_EN_E, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 5, KEY_EN_R, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 6, KEY_EN_T, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 7, KEY_EN_Y, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 2, 7, KEY_EN_Z, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 2, 8, KEY_EN_U, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 9, KEY_EN_I, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 10, KEY_EN_O, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 11, KEY_EN_P, RAZER_LAYOUT_TYPE_ALL },
{ 0, 2, 12, KEY_EN_LEFT_BRACKET, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 2, 12, KEY_DE_DIAERESIS_U, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 2, 13, KEY_EN_RIGHT_BRACKET, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 2, 13, KEY_EN_PLUS, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 2, 15, KEY_EN_ANSI_BACK_SLASH, RAZER_LAYOUT_TYPE_ANSI },
{ 0, 3, 1, KEY_EN_CAPS_LOCK, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 2, KEY_EN_A, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 3, KEY_EN_S, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 4, KEY_EN_D, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 5, KEY_EN_F, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 6, KEY_EN_G, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 7, KEY_EN_H, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 8, KEY_EN_J, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 9, KEY_EN_K, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 10, KEY_EN_L, RAZER_LAYOUT_TYPE_ALL },
{ 0, 3, 11, KEY_EN_SEMICOLON, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 3, 11, KEY_DE_DIAERESIS_O, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 3, 12, KEY_EN_QUOTE, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 3, 12, KEY_DE_DIAERESIS_A, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 3, 13, KEY_EN_POUND, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 3, 15, KEY_EN_ANSI_ENTER, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 1, KEY_EN_LEFT_SHIFT, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 2, KEY_EN_ISO_BACK_SLASH, RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 4, 2, KEY_NORD_ANGLE_BRACKET, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 4, 3, KEY_EN_Z, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 4, 3, KEY_EN_Y, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 4, 4, KEY_EN_X, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 5, KEY_EN_C, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 6, KEY_EN_V, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 7, KEY_EN_B, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 8, KEY_EN_N, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 9, KEY_EN_M, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 10, KEY_EN_COMMA, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 11, KEY_EN_PERIOD, RAZER_LAYOUT_TYPE_ALL },
{ 0, 4, 12, KEY_EN_FORWARD_SLASH, RAZER_LAYOUT_TYPE_ANSI | RAZER_LAYOUT_TYPE_ISO | RAZER_LAYOUT_TYPE_JIS },
{ 0, 4, 12, KEY_EN_MINUS, RAZER_LAYOUT_TYPE_QWERTZ },
{ 0, 4, 15, KEY_EN_RIGHT_SHIFT, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 1, KEY_EN_LEFT_CONTROL, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 2, KEY_EN_LEFT_FUNCTION, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 3, KEY_EN_LEFT_WINDOWS, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 5, KEY_EN_LEFT_ALT, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 7, KEY_EN_SPACE, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 9, KEY_EN_RIGHT_ALT, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 11, KEY_EN_RIGHT_CONTROL, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 12, KEY_EN_LEFT_ARROW, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 13, KEY_EN_UP_ARROW, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 14, KEY_EN_RIGHT_ARROW, RAZER_LAYOUT_TYPE_ALL },
{ 0, 5, 15, KEY_EN_DOWN_ARROW, RAZER_LAYOUT_TYPE_ALL },
};
#define BLADE_17_PRO_2021_KEYMAP_SIZE (sizeof(blade_17_pro_2021_keymap) / sizeof(blade_17_pro_2021_keymap[0]))
static const razer_key blade_17_pro_2021_keymap[] =
@ -4088,6 +4189,41 @@ static const razer_device blade_14_2021_device =
BLADE_14_2021_KEYMAP_SIZE
};
/*-------------------------------------------------------------*\
| Razer Blade 14 (2022) 1532:028C |
| |
| Zone "Keyboard" |
| Matrix |
| 6 Rows, 16 Columns |
\*-------------------------------------------------------------*/
static const razer_zone blade_14_2022_zone =
{
ZONE_EN_KEYBOARD,
ZONE_TYPE_MATRIX,
6,
16
};
static const razer_device blade_14_2022_device =
{
"Razer Blade 14 (2022)",
RAZER_BLADE_14_2022_PID,
DEVICE_TYPE_KEYBOARD,
true,
6,
16,
{
&blade_14_2022_zone,
NULL,
NULL,
NULL,
NULL,
NULL
},
blade_14_2022_keymap,
BLADE_14_2022_KEYMAP_SIZE
};
/*-------------------------------------------------------------*\
| Razer Book 13 (2020) |
| |
@ -8464,6 +8600,7 @@ const razer_device* razer_device_list[] =
&blade_15_2021_base_device,
&blade_15_2021_base_v2_device,
&blade_14_2021_device,
&blade_14_2022_device,
&book_13_2020_device,
&blade_pro_2016_device,
&blade_pro_2017_device,

View file

@ -63,6 +63,7 @@
#define RAZER_BLADE_2021_BASE_V2_PID 0x027A
#define RAZER_BLADE_14_2021_PID 0x0270
#define RAZER_BLADE_14_2022_PID 0x028C
#define RAZER_BLADE_PRO_2016_PID 0x0210
#define RAZER_BLADE_PRO_2017_PID 0x0225

View file

@ -30,6 +30,7 @@ const char* KEY_EN_F12 = "Key: F12";
const char* KEY_EN_PRINT_SCREEN = "Key: Print Screen";
const char* KEY_EN_SCROLL_LOCK = "Key: Scroll Lock";
const char* KEY_EN_PAUSE_BREAK = "Key: Pause/Break";
const char* KEY_EN_POWER = "Key: Power";
const char* KEY_EN_BACK_TICK = "Key: `";
const char* KEY_EN_1 = "Key: 1";
@ -43,6 +44,7 @@ const char* KEY_EN_8 = "Key: 8";
const char* KEY_EN_9 = "Key: 9";
const char* KEY_EN_0 = "Key: 0";
const char* KEY_EN_MINUS = "Key: -";
const char* KEY_EN_PLUS = "Key: +";
const char* KEY_EN_EQUALS = "Key: =";
const char* KEY_EN_BACKSPACE = "Key: Backspace";
const char* KEY_EN_INSERT = "Key: Insert";
@ -162,3 +164,8 @@ const char* KEY_NORD_BACKSLASH = "Key: \\/`/´";
const char* KEY_NORD_CHEVRON = "Key: ^/~";
const char* KEY_NORD_QUOTE = "Key: '/*";
const char* KEY_NORD_ANGLE_BRACKET = "Key: </>";
const char* KEY_DE_ESZETT = "Key: ß";
const char* KEY_DE_DIAERESIS_A = "Key: Ä";
const char* KEY_DE_DIAERESIS_O = "Key: Ö";
const char* KEY_DE_DIAERESIS_U = "Key: Ü";

View file

@ -30,6 +30,7 @@ extern const char* KEY_EN_F12;
extern const char* KEY_EN_PRINT_SCREEN;
extern const char* KEY_EN_SCROLL_LOCK;
extern const char* KEY_EN_PAUSE_BREAK;
extern const char* KEY_EN_POWER;
extern const char* KEY_EN_BACK_TICK;
extern const char* KEY_EN_1;
@ -43,6 +44,7 @@ extern const char* KEY_EN_8;
extern const char* KEY_EN_9;
extern const char* KEY_EN_0;
extern const char* KEY_EN_MINUS;
extern const char* KEY_EN_PLUS;
extern const char* KEY_EN_EQUALS;
extern const char* KEY_EN_BACKSPACE;
extern const char* KEY_EN_INSERT;
@ -162,3 +164,8 @@ extern const char* KEY_NORD_BACKSLASH;
extern const char* KEY_NORD_CHEVRON;
extern const char* KEY_NORD_QUOTE;
extern const char* KEY_NORD_ANGLE_BRACKET;
extern const char* KEY_DE_ESZETT;
extern const char* KEY_DE_DIAERESIS_A;
extern const char* KEY_DE_DIAERESIS_O;
extern const char* KEY_DE_DIAERESIS_U;

View file

@ -99,6 +99,7 @@ static const std::map<std::string, led_label> led_label_lookup =
{ KEY_EN_F12, { "F12" , "F12", }},
{ KEY_EN_BACK_TICK, { "`" , "`", }},
{ KEY_EN_MINUS, { "-" , "-", }},
{ KEY_EN_PLUS, { "+" , "+", }},
{ KEY_EN_EQUALS, { "=" , "=", }},
{ KEY_EN_LEFT_BRACKET, { "[" , "[", }},
{ KEY_EN_RIGHT_BRACKET, { "]" , "]", }},
@ -165,6 +166,7 @@ static const std::map<std::string, led_label> led_label_lookup =
{ KEY_EN_MEDIA_MUTE, { "Mte" , "\xF0\x9F\x94\x87", }}, // 🔇
{ KEY_EN_MEDIA_VOLUME_DOWN, { "Vl-" , "\xF0\x9F\x94\x88", }}, // 🔉
{ KEY_EN_MEDIA_VOLUME_UP, { "Vl+" , "\xF0\x9F\x94\x89", }}, // 🔊
{ KEY_EN_POWER, { "Pwr" , "\xE2\x8F\xBB", }}, // ⏻
{ KEY_JP_RO, { "_" , "_", }},
{ KEY_JP_EJ, { "E/J" , "E/J", }},
{ KEY_JP_ZENKAKU, { "Zen" , "\xE5\x8D\x8A\xE8"
@ -199,6 +201,10 @@ static const std::map<std::string, led_label> led_label_lookup =
{ KEY_NORD_CHEVRON, { "^/~" , "^/~", }},
{ KEY_NORD_QUOTE, { "'/*" , "'/*", }},
{ KEY_NORD_ANGLE_BRACKET, { "</>" , "</>" }},
{ KEY_DE_ESZETT, { "ß" , "\xc3\x9F", }},
{ KEY_DE_DIAERESIS_A, { "Ä" , "\xC3\x84", }},
{ KEY_DE_DIAERESIS_O, { "Ö" , "\xC3\x96", }},
{ KEY_DE_DIAERESIS_U, { "Ü" , "\xC3\x9C" }},
};
void DeviceView::setController(RGBController * controller_ptr)