Skip to content

Commit af88948

Browse files
committed
Adding keyboard ABNT model.
1 parent fb8f859 commit af88948

File tree

5 files changed

+278
-3
lines changed

5 files changed

+278
-3
lines changed

atmega_duck/duckparser.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ namespace duckparser {
198198
keyboard::setLocale(&locale_be);
199199
} else if (compare(w->str, w->len, "PT", CASE_INSENSETIVE)) {
200200
keyboard::setLocale(&locale_pt);
201+
} else if (compare(w->str, w->len, "BR", CASE_INSENSETIVE)) {
202+
keyboard::setLocale(&locale_br);
201203
} else if (compare(w->str, w->len, "IT", CASE_INSENSETIVE)) {
202204
keyboard::setLocale(&locale_it);
203205
} else if (compare(w->str, w->len, "SK", CASE_INSENSETIVE)) {

atmega_duck/locale_br.h

+264
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
/*
2+
This software is licensed under the MIT License. See the license file for details.
3+
Source: https://github.com/spacehuhntech/WiFiDuck
4+
*/
5+
6+
#pragma once
7+
8+
#include "usb_hid_keys.h"
9+
10+
// Modifier(s), Key
11+
const uint8_t ascii_br[] PROGMEM = {
12+
KEY_NONE, KEY_NONE, // NUL
13+
KEY_NONE, KEY_NONE, // SOH
14+
KEY_NONE, KEY_NONE, // STX
15+
KEY_NONE, KEY_NONE, // ETX
16+
KEY_NONE, KEY_NONE, // EOT
17+
KEY_NONE, KEY_NONE, // ENQ
18+
KEY_NONE, KEY_NONE, // ACK
19+
KEY_NONE, KEY_NONE, // BEL
20+
21+
// 8, 0x08
22+
KEY_NONE, KEY_BACKSPACE, // BS Backspace
23+
KEY_NONE, KEY_TAB, // TAB Tab
24+
KEY_NONE, KEY_ENTER, // LF Enter
25+
26+
KEY_NONE, KEY_NONE, // VT
27+
KEY_NONE, KEY_NONE, // FF
28+
KEY_NONE, KEY_NONE, // CR
29+
KEY_NONE, KEY_NONE, // SO
30+
KEY_NONE, KEY_NONE, // SI
31+
KEY_NONE, KEY_NONE, // DEL
32+
KEY_NONE, KEY_NONE, // DC1
33+
KEY_NONE, KEY_NONE, // DC2
34+
KEY_NONE, KEY_NONE, // DC3
35+
KEY_NONE, KEY_NONE, // DC4
36+
KEY_NONE, KEY_NONE, // NAK
37+
KEY_NONE, KEY_NONE, // SYN
38+
KEY_NONE, KEY_NONE, // ETB
39+
KEY_NONE, KEY_NONE, // CAN
40+
KEY_NONE, KEY_NONE, // EM
41+
KEY_NONE, KEY_NONE, // SUB
42+
KEY_NONE, KEY_NONE, // ESC
43+
KEY_NONE, KEY_NONE, // FS
44+
KEY_NONE, KEY_NONE, // GS
45+
KEY_NONE, KEY_NONE, // RS
46+
KEY_NONE, KEY_NONE, // US
47+
48+
// 32, 0x20
49+
KEY_NONE, KEY_SPACE, // ' ' =
50+
KEY_MOD_LSHIFT, KEY_1, // ! =
51+
KEY_MOD_LSHIFT, KEY_GRAVE, // " #
52+
KEY_MOD_LSHIFT, KEY_3, // #
53+
54+
// 36, 0x24
55+
KEY_MOD_LSHIFT, KEY_4, // $ =
56+
KEY_MOD_LSHIFT, KEY_5, // % =
57+
KEY_MOD_LSHIFT, KEY_7, // & #
58+
KEY_NONE, KEY_GRAVE, // ' #
59+
60+
// 40, 0x28
61+
KEY_MOD_LSHIFT, KEY_9, // ( #
62+
KEY_MOD_LSHIFT, KEY_0, // ) #
63+
KEY_MOD_LSHIFT, KEY_8, // * #
64+
KEY_MOD_LSHIFT, KEY_EQUAL, // + #
65+
66+
// 44, 0x2c
67+
KEY_NONE, KEY_COMMA, // , #
68+
KEY_NONE, KEY_MINUS, // - #
69+
KEY_NONE, KEY_DOT, // . #
70+
KEY_NONE, KEY_KPSLASH, // / #
71+
72+
// 48, 0x30
73+
KEY_NONE, KEY_0, // 0 =
74+
KEY_NONE, KEY_1, // 1 =
75+
KEY_NONE, KEY_2, // 2 =
76+
KEY_NONE, KEY_3, // 3 =
77+
78+
// 52, 0x34
79+
KEY_NONE, KEY_4, // 4 =
80+
KEY_NONE, KEY_5, // 5 =
81+
KEY_NONE, KEY_6, // 6 =
82+
KEY_NONE, KEY_7, // 7 =
83+
84+
// 56, 0x38
85+
KEY_NONE, KEY_8, // 8 =
86+
KEY_NONE, KEY_9, // 9 =
87+
KEY_MOD_LSHIFT, KEY_SLASH, // : #
88+
KEY_NONE, KEY_SLASH, // ; #
89+
90+
// 60, 0x3c
91+
KEY_MOD_LSHIFT, KEY_COMMA, // < #
92+
KEY_NONE, KEY_EQUAL, // = #
93+
KEY_MOD_LSHIFT, KEY_DOT, // > #
94+
KEY_MOD_RALT, KEY_W, // ? !
95+
96+
// 64, 0x40
97+
KEY_MOD_LSHIFT, KEY_2, // @ #
98+
KEY_MOD_LSHIFT, KEY_A, // A =
99+
KEY_MOD_LSHIFT, KEY_B, // B =
100+
KEY_MOD_LSHIFT, KEY_C, // C =
101+
102+
// 68, 0x44
103+
KEY_MOD_LSHIFT, KEY_D, // D =
104+
KEY_MOD_LSHIFT, KEY_E, // E =
105+
KEY_MOD_LSHIFT, KEY_F, // F =
106+
KEY_MOD_LSHIFT, KEY_G, // G =
107+
108+
// 72, 0x48
109+
KEY_MOD_LSHIFT, KEY_H, // H =
110+
KEY_MOD_LSHIFT, KEY_I, // I =
111+
KEY_MOD_LSHIFT, KEY_J, // J =
112+
KEY_MOD_LSHIFT, KEY_K, // K =
113+
114+
// 76, 0x4c
115+
KEY_MOD_LSHIFT, KEY_L, // L =
116+
KEY_MOD_LSHIFT, KEY_M, // M =
117+
KEY_MOD_LSHIFT, KEY_N, // N =
118+
KEY_MOD_LSHIFT, KEY_O, // O =
119+
120+
// 80, 0x50
121+
KEY_MOD_LSHIFT, KEY_P, // P =
122+
KEY_MOD_LSHIFT, KEY_Q, // Q =
123+
KEY_MOD_LSHIFT, KEY_R, // R =
124+
KEY_MOD_LSHIFT, KEY_S, // S =
125+
126+
// 84, 0x54
127+
KEY_MOD_LSHIFT, KEY_T, // T =
128+
KEY_MOD_LSHIFT, KEY_U, // U =
129+
KEY_MOD_LSHIFT, KEY_V, // V =
130+
KEY_MOD_LSHIFT, KEY_W, // W =
131+
132+
// 88, 0x58
133+
KEY_MOD_LSHIFT, KEY_X, // X =
134+
KEY_MOD_LSHIFT, KEY_Y, // Y =
135+
KEY_MOD_LSHIFT, KEY_Z, // Z =
136+
KEY_NONE, KEY_RIGHTBRACE, // [ #
137+
138+
// 92, 0x5c
139+
KEY_NONE, KEY_102ND, // bslash #
140+
KEY_NONE, KEY_BACKSLASH, // ] #
141+
KEY_MOD_LSHIFT, KEY_APOSTROPHE, // ^ #
142+
KEY_MOD_LSHIFT, KEY_MINUS, // _ #
143+
144+
// 96, 0x60
145+
KEY_MOD_LSHIFT, KEY_LEFTBRACE, // ` !
146+
KEY_NONE, KEY_A, // a =
147+
KEY_NONE, KEY_B, // b =
148+
KEY_NONE, KEY_C, // c =
149+
150+
// 100, 0x64
151+
KEY_NONE, KEY_D, // d =
152+
KEY_NONE, KEY_E, // e =
153+
KEY_NONE, KEY_F, // f =
154+
KEY_NONE, KEY_G, // g =
155+
156+
// 104, 0x68
157+
KEY_NONE, KEY_H, // h =
158+
KEY_NONE, KEY_I, // i =
159+
KEY_NONE, KEY_J, // j =
160+
KEY_NONE, KEY_K, // k =
161+
162+
// 108, 0x6c
163+
KEY_NONE, KEY_L, // l =
164+
KEY_NONE, KEY_M, // m =
165+
KEY_NONE, KEY_N, // n =
166+
KEY_NONE, KEY_O, // o =
167+
168+
// 112, 0x70
169+
KEY_NONE, KEY_P, // p =
170+
KEY_NONE, KEY_Q, // q =
171+
KEY_NONE, KEY_R, // r =
172+
KEY_NONE, KEY_S, // s =
173+
174+
// 116, 0x74
175+
KEY_NONE, KEY_T, // t =
176+
KEY_NONE, KEY_U, // u =
177+
KEY_NONE, KEY_V, // v =
178+
KEY_NONE, KEY_W, // w =
179+
180+
// 120, 0x78
181+
KEY_NONE, KEY_X, // x =
182+
KEY_NONE, KEY_Y, // y =
183+
KEY_NONE, KEY_Z, // z =
184+
KEY_MOD_LSHIFT, KEY_RIGHTBRACE, // { #
185+
186+
// 124, 0x7c
187+
KEY_MOD_LSHIFT, KEY_102ND, // | #
188+
KEY_MOD_LSHIFT, KEY_BACKSLASH, // } #
189+
KEY_NONE, KEY_APOSTROPHE, // ~ #
190+
KEY_NONE, KEY_DELETE // DEL
191+
};
192+
193+
const uint8_t utf8_br[] PROGMEM = {
194+
0xC2, 0xA3, 0x00, 0x00, KEY_MOD_RALT, KEY_4, // £ !
195+
0xC2, 0xA7, 0x00, 0x00, KEY_MOD_RALT, KEY_4, // § x
196+
0xC2, 0xAA, 0x00, 0x00, KEY_MOD_RALT, KEY_RIGHTBRACE, // ª !
197+
0xC2, 0xAB, 0x00, 0x00, KEY_NONE, KEY_EQUAL, // « x
198+
0xC2, 0xBA, 0x00, 0x00, KEY_MOD_RALT, KEY_BACKSLASH, // º !
199+
0xC2, 0xBB, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_EQUAL, // » x
200+
0xC3, 0x87, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_SEMICOLON, // Ç =
201+
0xC3, 0xA7, 0x00, 0x00, KEY_NONE, KEY_SEMICOLON, // ç =
202+
0xE2, 0x82, 0xAC, 0x00, KEY_MOD_RALT, KEY_5, // € x
203+
};
204+
205+
const uint8_t combinations_br[] PROGMEM = {
206+
0x60, 0x00, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_NONE, KEY_SPACE, // ` #
207+
0xC2, 0xA8, 0x00, 0x00, KEY_MOD_RALT, KEY_LEFTBRACE, KEY_NONE, KEY_SPACE, // ¨ x
208+
0xC2, 0xB4, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_NONE, KEY_SPACE, // ´ #
209+
0xC3, 0x80, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_A, // À #
210+
0xC3, 0x81, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_A, // Á #
211+
0xC3, 0x82, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_A, // Â !
212+
0xC3, 0x83, 0x00, 0x00, KEY_NONE, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_A, // Ã !
213+
0xC3, 0x84, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_MOD_LSHIFT, KEY_A, // Ä !
214+
0xC3, 0x88, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_E, // È !
215+
0xC3, 0x89, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_E, // É !
216+
0xC3, 0x8A, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_E, // Ê !
217+
0xC3, 0x8B, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_MOD_LSHIFT, KEY_E, // Ë !
218+
0xC3, 0x8C, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_I, // Ì #
219+
0xC3, 0x8D, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_I, // Í #
220+
0xC3, 0x8E, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_I, // Î !
221+
0xC3, 0x8F, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_MOD_LSHIFT, KEY_I, // Ï !
222+
0xC3, 0x91, 0x00, 0x00, KEY_NONE, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_N, // Ñ !
223+
0xC3, 0x92, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_O, // Ò !
224+
0xC3, 0x93, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_O, // Ó !
225+
0xC3, 0x94, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_O, // Ô !
226+
0xC3, 0x95, 0x00, 0x00, KEY_NONE, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_O, // Õ !
227+
0xC3, 0x96, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_MOD_LSHIFT, KEY_O, // Ö !
228+
0xC3, 0x99, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_U, // Ù !
229+
0xC3, 0x9A, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_U, // Ú !
230+
0xC3, 0x9B, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_MOD_LSHIFT, KEY_U, // Û !
231+
0xC3, 0x9C, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_MOD_LSHIFT, KEY_U, // Ü !
232+
0xC3, 0x9D, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_MOD_LSHIFT, KEY_Y, // Ý !
233+
0xC3, 0xA0, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_NONE, KEY_A, // à #
234+
0xC3, 0xA1, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_NONE, KEY_A, // á #
235+
0xC3, 0xA2, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_NONE, KEY_A, // â !
236+
0xC3, 0xA3, 0x00, 0x00, KEY_NONE, KEY_APOSTROPHE, KEY_NONE, KEY_A, // ã !
237+
0xC3, 0xA4, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_NONE, KEY_A, // ä !
238+
0xC3, 0xA8, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_NONE, KEY_E, // è #
239+
0xC3, 0xA9, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_NONE, KEY_E, // é #
240+
0xC3, 0xAA, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_NONE, KEY_E, // ê !
241+
0xC3, 0xAB, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_NONE, KEY_E, // ë !
242+
0xC3, 0xAC, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_NONE, KEY_I, // ì #
243+
0xC3, 0xAD, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_NONE, KEY_I, // í #
244+
0xC3, 0xAE, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_NONE, KEY_I, // î !
245+
0xC3, 0xAF, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_NONE, KEY_I, // ï !
246+
0xC3, 0xB1, 0x00, 0x00, KEY_NONE, KEY_APOSTROPHE, KEY_NONE, KEY_N, // ñ !
247+
0xC3, 0xB2, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_NONE, KEY_O, // ò #
248+
0xC3, 0xB3, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_NONE, KEY_O, // ó #
249+
0xC3, 0xB4, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_NONE, KEY_O, // ô !
250+
0xC3, 0xB5, 0x00, 0x00, KEY_NONE, KEY_APOSTROPHE, KEY_NONE, KEY_O, // õ !
251+
0xC3, 0xB6, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_NONE, KEY_O, // ö !
252+
0xC3, 0xB9, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_LEFTBRACE, KEY_NONE, KEY_U, // ù #
253+
0xC3, 0xBA, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_NONE, KEY_U, // ú #
254+
0xC3, 0xBB, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_APOSTROPHE, KEY_NONE, KEY_U, // û !
255+
0xC3, 0xBC, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_NONE, KEY_U, // ü !
256+
0xC3, 0xBD, 0x00, 0x00, KEY_NONE, KEY_LEFTBRACE, KEY_NONE, KEY_Y, // ý #
257+
0xC3, 0xBF, 0x00, 0x00, KEY_MOD_LSHIFT, KEY_6, KEY_NONE, KEY_Y, // ÿ !
258+
};
259+
260+
static hid_locale_t locale_br {
261+
(uint8_t*)ascii_br, 128,
262+
(uint8_t*)utf8_br, sizeof(utf8_br) / 6,
263+
(uint8_t*)combinations_br, sizeof(combinations_br) / 8,
264+
};

atmega_duck/locales.h

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "locale_dk.h"
1919
#include "locale_be.h"
2020
#include "locale_pt.h"
21+
#include "locale_br.h"
2122
#include "locale_it.h"
2223
#include "locale_sk.h"
2324
#include "locale_cz.h"

atmega_duck/usb_hid_keys.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@
2828
#define KEY_MOD_RMETA 0x80
2929

3030
/**
31+
HID_MOD_KEY_LEFT_CONTROL = 0x01
32+
HID_MOD_KEY_LEFT_SHIFT = 0x02
33+
HID_MOD_KEY_LEFT_ALT = 0x04
34+
HID_MOD_KEY_LEFT_GUI = 0x08
35+
HID_MOD_KEY_RIGHT_CONTROL = 0x10
36+
HID_MOD_KEY_RIGHT_SHIFT = 0x20
37+
HID_MOD_KEY_RIGHT_ALT = 0x40
38+
HID_MOD_KEY_RIGHT_GUI = 0x80
3139
* Scan codes - last N slots in the HID report (usually 6).
3240
* 0x00 if no key pressed.
3341
*
@@ -217,7 +225,7 @@
217225
// 0xb5 Currency Sub-unit
218226
#define KEY_KPLEFTPAREN 0xb6 // Keypad (
219227
#define KEY_KPRIGHTPAREN 0xb7 // Keypad )
220-
// 0xb8 Keypad {
228+
#define KEY_B8 0xb8 // 0xb8 Keypad {
221229
// 0xb9 Keypad }
222230
// 0xba Keypad Tab
223231
// 0xbb Keypad Backspace

esp_duck/esp_duck.ino

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
#include "config.h"
7-
#include "debug.h"
7+
#include "debug.h"
88

99
#include "com.h"
1010
#include "duckscript.h"
@@ -50,4 +50,4 @@ void loop() {
5050
webserver::update();
5151

5252
debug_update();
53-
}
53+
}

0 commit comments

Comments
 (0)