Skip to content

Commit d561685

Browse files
authoredNov 12, 2024··
Merge branch 'master' into release/v3.1.x
2 parents 1ecbbae + e99f1fd commit d561685

28 files changed

+1857
-164
lines changed
 

‎.github/scripts/sketch_utils.sh

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
8686
shift
8787
log_compilation=$1
8888
;;
89+
-d )
90+
shift
91+
debug_level="DebugLevel=$1"
92+
;;
8993
* )
9094
break
9195
;;
@@ -140,14 +144,16 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
140144
fi
141145

142146
# Default FQBN options if none were passed in the command line.
143-
144-
esp32_opts="PSRAM=enabled${fqbn_append:+,$fqbn_append}"
145-
esp32s2_opts="PSRAM=enabled${fqbn_append:+,$fqbn_append}"
146-
esp32s3_opts="PSRAM=opi,USBMode=default${fqbn_append:+,$fqbn_append}"
147-
esp32c3_opts="$fqbn_append"
148-
esp32c6_opts="$fqbn_append"
149-
esp32h2_opts="$fqbn_append"
150-
esp32p4_opts="USBMode=default${fqbn_append:+,$fqbn_append}"
147+
# Replace any double commas with a single one and strip leading and
148+
# trailing commas.
149+
150+
esp32_opts=$(echo "PSRAM=enabled,$debug_level,$fqbn_append" | sed 's/^,*//;s/,*$//;s/,\{2,\}/,/g')
151+
esp32s2_opts=$(echo "PSRAM=enabled,$debug_level,$fqbn_append" | sed 's/^,*//;s/,*$//;s/,\{2,\}/,/g')
152+
esp32s3_opts=$(echo "PSRAM=opi,USBMode=default,$debug_level,$fqbn_append" | sed 's/^,*//;s/,*$//;s/,\{2,\}/,/g')
153+
esp32c3_opts=$(echo "$debug_level,$fqbn_append" | sed 's/^,*//;s/,*$//;s/,\{2,\}/,/g')
154+
esp32c6_opts=$(echo "$debug_level,$fqbn_append" | sed 's/^,*//;s/,*$//;s/,\{2,\}/,/g')
155+
esp32h2_opts=$(echo "$debug_level,$fqbn_append" | sed 's/^,*//;s/,*$//;s/,\{2,\}/,/g')
156+
esp32p4_opts=$(echo "PSRAM=enabled,USBMode=default,$debug_level,$fqbn_append" | sed 's/^,*//;s/,*$//;s/,\{2,\}/,/g')
151157

152158
# Select the common part of the FQBN based on the target. The rest will be
153159
# appended depending on the passed options.

‎.github/scripts/tests_run.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,14 @@ function run_test() {
109109
rm $sketchdir/diagram.json 2>/dev/null || true
110110

111111
result=0
112-
printf "\033[95mpytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args\033[0m\n"
113-
bash -c "set +e; pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args; exit \$?" || result=$?
112+
printf "\033[95mpytest $sketchdir/test_$sketchname.py --build-dir $build_dir --junit-xml=$report_file $extra_args\033[0m\n"
113+
bash -c "set +e; pytest $sketchdir/test_$sketchname.py --build-dir $build_dir --junit-xml=$report_file $extra_args; exit \$?" || result=$?
114114
printf "\n"
115115
if [ $result -ne 0 ]; then
116116
result=0
117117
printf "\033[95mRetrying test: $sketchname -- Config: $i\033[0m\n"
118-
printf "\033[95mpytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args\033[0m\n"
119-
bash -c "set +e; pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args; exit \$?" || result=$?
118+
printf "\033[95mpytest $sketchdir/test_$sketchname.py --build-dir $build_dir --junit-xml=$report_file $extra_args\033[0m\n"
119+
bash -c "set +e; pytest $sketchdir/test_$sketchname.py --build-dir $build_dir --junit-xml=$report_file $extra_args; exit \$?" || result=$?
120120
printf "\n"
121121
if [ $result -ne 0 ]; then
122122
printf "\033[91mFailed test: $sketchname -- Config: $i\033[0m\n\n"

‎CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,16 @@ set(ARDUINO_LIBRARY_USB_SRCS
213213
libraries/USB/src/USBMIDI.cpp
214214
libraries/USB/src/USBHIDMouse.cpp
215215
libraries/USB/src/USBHIDKeyboard.cpp
216+
libraries/USB/src/keyboardLayout/KeyboardLayout_da_DK.cpp
217+
libraries/USB/src/keyboardLayout/KeyboardLayout_de_DE.cpp
218+
libraries/USB/src/keyboardLayout/KeyboardLayout_en_US.cpp
219+
libraries/USB/src/keyboardLayout/KeyboardLayout_es_ES.cpp
220+
libraries/USB/src/keyboardLayout/KeyboardLayout_fr_FR.cpp
221+
libraries/USB/src/keyboardLayout/KeyboardLayout_hu_HU.cpp
222+
libraries/USB/src/keyboardLayout/KeyboardLayout_it_IT.cpp
223+
libraries/USB/src/keyboardLayout/KeyboardLayout_pt_BR.cpp
224+
libraries/USB/src/keyboardLayout/KeyboardLayout_pt_PT.cpp
225+
libraries/USB/src/keyboardLayout/KeyboardLayout_sv_SE.cpp
216226
libraries/USB/src/USBHIDGamepad.cpp
217227
libraries/USB/src/USBHIDConsumerControl.cpp
218228
libraries/USB/src/USBHIDSystemControl.cpp

‎docs/en/tutorials/cdc_dfu_flash.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ Go to the Tools menu in the Arduino IDE and set the following options:
6666

6767
* USB DFU On Boot -> Enabled
6868

69-
Setp 3 - Flash
70-
^^^^^^^^^^^^^^
69+
3. Flash
70+
^^^^^^^^
7171

7272
Now you can upload your sketch to the device. After flashing, you need to manually reset the device.
7373

‎libraries/USB/src/USBHIDKeyboard.cpp

Lines changed: 25 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@
2424
#if CONFIG_TINYUSB_HID_ENABLED
2525

2626
#include "USBHIDKeyboard.h"
27+
#include "keyboardLayout/KeyboardLayout.h"
2728

2829
ESP_EVENT_DEFINE_BASE(ARDUINO_USB_HID_KEYBOARD_EVENTS);
2930
esp_err_t arduino_usb_event_post(esp_event_base_t event_base, int32_t event_id, void *event_data, size_t event_data_size, TickType_t ticks_to_wait);
3031
esp_err_t arduino_usb_event_handler_register_with(esp_event_base_t event_base, int32_t event_id, esp_event_handler_t event_handler, void *event_handler_arg);
3132

3233
static const uint8_t report_descriptor[] = {TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(HID_REPORT_ID_KEYBOARD))};
3334

34-
USBHIDKeyboard::USBHIDKeyboard() : hid(HID_ITF_PROTOCOL_KEYBOARD), shiftKeyReports(true) {
35+
USBHIDKeyboard::USBHIDKeyboard() : hid(HID_ITF_PROTOCOL_KEYBOARD), _asciimap(KeyboardLayout_en_US), shiftKeyReports(false) {
3536
static bool initialized = false;
3637
if (!initialized) {
3738
initialized = true;
@@ -45,7 +46,8 @@ uint16_t USBHIDKeyboard::_onGetDescriptor(uint8_t *dst) {
4546
return sizeof(report_descriptor);
4647
}
4748

48-
void USBHIDKeyboard::begin() {
49+
void USBHIDKeyboard::begin(const uint8_t *layout) {
50+
_asciimap = layout;
4951
hid.begin();
5052
}
5153

@@ -80,139 +82,6 @@ void USBHIDKeyboard::setShiftKeyReports(bool set) {
8082
shiftKeyReports = set;
8183
}
8284

83-
#define SHIFT 0x80
84-
const uint8_t _asciimap[128] = {
85-
0x00, // NUL
86-
0x00, // SOH
87-
0x00, // STX
88-
0x00, // ETX
89-
0x00, // EOT
90-
0x00, // ENQ
91-
0x00, // ACK
92-
0x00, // BEL
93-
0x2a, // BS Backspace
94-
0x2b, // TAB Tab
95-
0x28, // LF Enter
96-
0x00, // VT
97-
0x00, // FF
98-
0x00, // CR
99-
0x00, // SO
100-
0x00, // SI
101-
0x00, // DEL
102-
0x00, // DC1
103-
0x00, // DC2
104-
0x00, // DC3
105-
0x00, // DC4
106-
0x00, // NAK
107-
0x00, // SYN
108-
0x00, // ETB
109-
0x00, // CAN
110-
0x00, // EM
111-
0x00, // SUB
112-
0x00, // ESC
113-
0x00, // FS
114-
0x00, // GS
115-
0x00, // RS
116-
0x00, // US
117-
118-
0x2c, // ' '
119-
0x1e | SHIFT, // !
120-
0x34 | SHIFT, // "
121-
0x20 | SHIFT, // #
122-
0x21 | SHIFT, // $
123-
0x22 | SHIFT, // %
124-
0x24 | SHIFT, // &
125-
0x34, // '
126-
0x26 | SHIFT, // (
127-
0x27 | SHIFT, // )
128-
0x25 | SHIFT, // *
129-
0x2e | SHIFT, // +
130-
0x36, // ,
131-
0x2d, // -
132-
0x37, // .
133-
0x38, // /
134-
0x27, // 0
135-
0x1e, // 1
136-
0x1f, // 2
137-
0x20, // 3
138-
0x21, // 4
139-
0x22, // 5
140-
0x23, // 6
141-
0x24, // 7
142-
0x25, // 8
143-
0x26, // 9
144-
0x33 | SHIFT, // :
145-
0x33, // ;
146-
0x36 | SHIFT, // <
147-
0x2e, // =
148-
0x37 | SHIFT, // >
149-
0x38 | SHIFT, // ?
150-
0x1f | SHIFT, // @
151-
0x04 | SHIFT, // A
152-
0x05 | SHIFT, // B
153-
0x06 | SHIFT, // C
154-
0x07 | SHIFT, // D
155-
0x08 | SHIFT, // E
156-
0x09 | SHIFT, // F
157-
0x0a | SHIFT, // G
158-
0x0b | SHIFT, // H
159-
0x0c | SHIFT, // I
160-
0x0d | SHIFT, // J
161-
0x0e | SHIFT, // K
162-
0x0f | SHIFT, // L
163-
0x10 | SHIFT, // M
164-
0x11 | SHIFT, // N
165-
0x12 | SHIFT, // O
166-
0x13 | SHIFT, // P
167-
0x14 | SHIFT, // Q
168-
0x15 | SHIFT, // R
169-
0x16 | SHIFT, // S
170-
0x17 | SHIFT, // T
171-
0x18 | SHIFT, // U
172-
0x19 | SHIFT, // V
173-
0x1a | SHIFT, // W
174-
0x1b | SHIFT, // X
175-
0x1c | SHIFT, // Y
176-
0x1d | SHIFT, // Z
177-
0x2f, // [
178-
0x31, // bslash
179-
0x30, // ]
180-
0x23 | SHIFT, // ^
181-
0x2d | SHIFT, // _
182-
0x35, // `
183-
0x04, // a
184-
0x05, // b
185-
0x06, // c
186-
0x07, // d
187-
0x08, // e
188-
0x09, // f
189-
0x0a, // g
190-
0x0b, // h
191-
0x0c, // i
192-
0x0d, // j
193-
0x0e, // k
194-
0x0f, // l
195-
0x10, // m
196-
0x11, // n
197-
0x12, // o
198-
0x13, // p
199-
0x14, // q
200-
0x15, // r
201-
0x16, // s
202-
0x17, // t
203-
0x18, // u
204-
0x19, // v
205-
0x1a, // w
206-
0x1b, // x
207-
0x1c, // y
208-
0x1d, // z
209-
0x2f | SHIFT, // {
210-
0x31 | SHIFT, // |
211-
0x30 | SHIFT, // }
212-
0x35 | SHIFT, // ~
213-
0 // DEL
214-
};
215-
21685
size_t USBHIDKeyboard::pressRaw(uint8_t k) {
21786
uint8_t i;
21887
if (k >= 0xE0 && k < 0xE8) {
@@ -234,7 +103,7 @@ size_t USBHIDKeyboard::pressRaw(uint8_t k) {
234103
return 0;
235104
}
236105
}
237-
} else {
106+
} else if (_keyReport.modifiers == 0) {
238107
//not a modifier and not a key
239108
return 0;
240109
}
@@ -255,11 +124,8 @@ size_t USBHIDKeyboard::releaseRaw(uint8_t k) {
255124
_keyReport.keys[i] = 0x00;
256125
}
257126
}
258-
} else {
259-
//not a modifier and not a key
260-
return 0;
261127
}
262-
128+
// Allowing for the release of a modifier key without a corresponding press
263129
sendReport(&_keyReport);
264130
return 1;
265131
}
@@ -274,19 +140,26 @@ size_t USBHIDKeyboard::press(uint8_t k) {
274140
} else if (k >= 0x80) { // it's a modifier key
275141
_keyReport.modifiers |= (1 << (k - 0x80));
276142
k = 0;
277-
} else { // it's a printing key
143+
} else { // it's a printing key (k is a ASCII 0..127)
278144
k = _asciimap[k];
279145
if (!k) {
280146
return 0;
281147
}
282-
if (k & 0x80) { // it's a capital letter or other character reached with shift
148+
if ((k & SHIFT) == SHIFT) { // it's a capital letter or other character reached with shift
283149
// At boot, some PCs need a separate report with the shift key down like a real keyboard.
284150
if (shiftKeyReports) {
285151
pressRaw(HID_KEY_SHIFT_LEFT);
286152
} else {
287153
_keyReport.modifiers |= 0x02; // the left shift modifier
288154
}
289-
k &= 0x7F;
155+
k &= ~SHIFT;
156+
}
157+
if ((k & ALT_GR) == ALT_GR) {
158+
_keyReport.modifiers |= 0x40; // AltGr = right Alt
159+
k &= ~ALT_GR;
160+
}
161+
if (k == ISO_REPLACEMENT) {
162+
k = ISO_KEY;
290163
}
291164
}
292165
return pressRaw(k);
@@ -306,15 +179,22 @@ size_t USBHIDKeyboard::release(uint8_t k) {
306179
if (!k) {
307180
return 0;
308181
}
309-
if (k & 0x80) { // it's a capital letter or other character reached with shift
182+
if ((k & SHIFT) == SHIFT) { // it's a capital letter or other character reached with shift
310183
if (shiftKeyReports) {
311184
releaseRaw(k & 0x7F); // Release key without shift modifier
312185
k = HID_KEY_SHIFT_LEFT; // Below, release shift modifier
313186
} else {
314187
_keyReport.modifiers &= ~(0x02); // the left shift modifier
315-
k &= 0x7F;
188+
k &= ~SHIFT;
316189
}
317190
}
191+
if ((k & ALT_GR) == ALT_GR) {
192+
_keyReport.modifiers &= ~(0x40); // AltGr = right Alt
193+
k &= ~ALT_GR;
194+
}
195+
if (k == ISO_REPLACEMENT) {
196+
k = ISO_KEY;
197+
}
318198
}
319199
return releaseRaw(k);
320200
}

‎libraries/USB/src/USBHIDKeyboard.h

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,32 @@ typedef union {
5050
uint8_t leds;
5151
} arduino_usb_hid_keyboard_event_data_t;
5252

53+
// Supported keyboard layouts
54+
extern const uint8_t KeyboardLayout_de_DE[];
55+
extern const uint8_t KeyboardLayout_en_US[];
56+
extern const uint8_t KeyboardLayout_es_ES[];
57+
extern const uint8_t KeyboardLayout_fr_FR[];
58+
extern const uint8_t KeyboardLayout_it_IT[];
59+
extern const uint8_t KeyboardLayout_pt_PT[];
60+
extern const uint8_t KeyboardLayout_sv_SE[];
61+
extern const uint8_t KeyboardLayout_da_DK[];
62+
extern const uint8_t KeyboardLayout_hu_HU[];
63+
extern const uint8_t KeyboardLayout_pt_BR[];
64+
5365
#define KEY_LEFT_CTRL 0x80
5466
#define KEY_LEFT_SHIFT 0x81
5567
#define KEY_LEFT_ALT 0x82
5668
#define KEY_LEFT_GUI 0x83
5769
#define KEY_RIGHT_CTRL 0x84
5870
#define KEY_RIGHT_SHIFT 0x85
59-
#define KEY_RIGHT_ALT 0x86
71+
#define KEY_RIGHT_ALT 0x86 // AltGr (Right Alt) Key
6072
#define KEY_RIGHT_GUI 0x87
6173

6274
#define KEY_UP_ARROW 0xDA
6375
#define KEY_DOWN_ARROW 0xD9
6476
#define KEY_LEFT_ARROW 0xD8
6577
#define KEY_RIGHT_ARROW 0xD7
66-
#define KEY_MENU 0xFE
78+
#define KEY_MENU 0xED // "Keyboard Application" in USB standard
6779
#define KEY_SPACE 0x20
6880
#define KEY_BACKSPACE 0xB2
6981
#define KEY_TAB 0xB3
@@ -111,6 +123,24 @@ typedef union {
111123
#define LED_COMPOSE 0x08
112124
#define LED_KANA 0x10
113125

126+
// Numeric keypad
127+
#define KEY_KP_SLASH 0xDC
128+
#define KEY_KP_ASTERISK 0xDD
129+
#define KEY_KP_MINUS 0xDE
130+
#define KEY_KP_PLUS 0xDF
131+
#define KEY_KP_ENTER 0xE0
132+
#define KEY_KP_1 0xE1
133+
#define KEY_KP_2 0xE2
134+
#define KEY_KP_3 0xE3
135+
#define KEY_KP_4 0xE4
136+
#define KEY_KP_5 0xE5
137+
#define KEY_KP_6 0xE6
138+
#define KEY_KP_7 0xE7
139+
#define KEY_KP_8 0xE8
140+
#define KEY_KP_9 0xE9
141+
#define KEY_KP_0 0xEA
142+
#define KEY_KP_DOT 0xEB
143+
114144
// Low level key report: up to 6 keys and shift, ctrl etc at once
115145
typedef struct {
116146
uint8_t modifiers;
@@ -122,11 +152,12 @@ class USBHIDKeyboard : public USBHIDDevice, public Print {
122152
private:
123153
USBHID hid;
124154
KeyReport _keyReport;
155+
const uint8_t *_asciimap;
125156
bool shiftKeyReports;
126157

127158
public:
128159
USBHIDKeyboard(void);
129-
void begin(void);
160+
void begin(const uint8_t *layout = KeyboardLayout_en_US);
130161
void end(void);
131162
size_t write(uint8_t k);
132163
size_t write(const uint8_t *buffer, size_t size);
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
KeyboardLayout.h
3+
4+
This file is not part of the public API. It is meant to be included
5+
only in Keyboard.cpp and the keyboard layout files. Layout files map
6+
ASCII character codes to keyboard scan codes (technically, to USB HID
7+
Usage codes), possibly altered by the SHIFT or ALT_GR modifiers.
8+
Non-ACSII characters (anything outside the 7-bit range NUL..DEL) are
9+
not supported.
10+
11+
== Creating your own layout ==
12+
13+
In order to create your own layout file, copy an existing layout that
14+
is similar to yours, then modify it to use the correct keys. The
15+
layout is an array in ASCII order. Each entry contains a scan code,
16+
possibly modified by "|SHIFT" or "|ALT_GR", as in this excerpt from
17+
the Italian layout:
18+
19+
0x35, // bslash
20+
0x30|ALT_GR, // ]
21+
0x2e|SHIFT, // ^
22+
23+
Do not change the control characters (those before scan code 0x2c,
24+
corresponding to space). Do not attempt to grow the table past DEL. Do
25+
not use both SHIFT and ALT_GR on the same character: this is not
26+
supported. Unsupported characters should have 0x00 as scan code.
27+
28+
For a keyboard with an ISO physical layout, use the scan codes below:
29+
30+
+---+---+---+---+---+---+---+---+---+---+---+---+---+-------+
31+
|35 |1e |1f |20 |21 |22 |23 |24 |25 |26 |27 |2d |2e |BackSp |
32+
+---+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-----+
33+
| Tab |14 |1a |08 |15 |17 |1c |18 |0c |12 |13 |2f |30 | Ret |
34+
+-----++--++--++--++--++--++--++--++--++--++--++--++--++ |
35+
|CapsL |04 |16 |07 |09 |0a |0b |0d |0e |0f |33 |34 |31 | |
36+
+----+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---+----+
37+
|Shi.|32 |1d |1b |06 |19 |05 |11 |10 |36 |37 |38 | Shift |
38+
+----+---++--+-+-+---+---+---+---+---+--++---+---++----+----+
39+
|Ctrl|Win |Alt | |AlGr|Win |Menu|Ctrl|
40+
+----+----+----+------------------------+----+----+----+----+
41+
42+
The ANSI layout is identical except that key 0x31 is above (rather
43+
than next to) Return, and there is not key 0x32.
44+
45+
Give a unique name to the layout array, then declare it in Keyboard.h
46+
with a line of the form:
47+
48+
extern const uint8_t KeyboardLayout_xx_YY[];
49+
50+
== Encoding details ==
51+
52+
All scan codes are less than 0x80, which makes bit 7 available to
53+
signal that a modifier (Shift or AltGr) is needed to generate the
54+
character. With only one exception, keys that are used with modifiers
55+
have scan codes that are less than 0x40. This makes bit 6 available
56+
to signal whether the modifier is Shift or AltGr. The exception is
57+
0x64, the key next next to Left Shift on the ISO layout (and absent
58+
from the ANSI layout). We handle it by replacing its value by 0x32 in
59+
the layout arrays.
60+
*/
61+
62+
#include <Arduino.h>
63+
64+
// Modifier keys for _asciimap[] table (not to be used directly)
65+
#define SHIFT 0x80
66+
#define ALT_GR 0x40
67+
#define ISO_KEY 0x64
68+
#define ISO_REPLACEMENT 0x32
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* Danish keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_da_DK[128] = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x1e | SHIFT, // !
43+
0x1f | SHIFT, // "
44+
0x20 | SHIFT, // #
45+
0x21 | ALT_GR, // $
46+
0x22 | SHIFT, // %
47+
0x23 | SHIFT, // &
48+
0x31, // '
49+
0x25 | SHIFT, // (
50+
0x26 | SHIFT, // )
51+
0x31 | SHIFT, // *
52+
0x2d, // +
53+
0x36, // ,
54+
0x38, // -
55+
0x37, // .
56+
0x24 | SHIFT, // /
57+
0x27, // 0
58+
0x1e, // 1
59+
0x1f, // 2
60+
0x20, // 3
61+
0x21, // 4
62+
0x22, // 5
63+
0x23, // 6
64+
0x24, // 7
65+
0x25, // 8
66+
0x26, // 9
67+
0x37 | SHIFT, // :
68+
0x36 | SHIFT, // ;
69+
0x32, // <
70+
0x27 | SHIFT, // =
71+
0x32 | SHIFT, // >
72+
0x2d | SHIFT, // ?
73+
0x1f | ALT_GR, // @
74+
0x04 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x10 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x14 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1a | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1c | SHIFT, // Y
99+
0x1d | SHIFT, // Z
100+
0x25 | ALT_GR, // [
101+
0x32 | ALT_GR, // bslash
102+
0x26 | ALT_GR, // ]
103+
0x00, // ^ not supported (requires dead key + space)
104+
0x38 | SHIFT, // _
105+
0x00, // ` not supported (requires dead key + space)
106+
0x04, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x10, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x14, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1a, // w
129+
0x1b, // x
130+
0x1c, // y
131+
0x1d, // z
132+
0x24 | ALT_GR, // {
133+
0x2e | ALT_GR, // |
134+
0x27 | ALT_GR, // }
135+
0x00, // ~ not supported (requires dead key + space)
136+
0x00 // DEL
137+
};
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* German keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_de_DE[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x1e | SHIFT, // !
43+
0x1f | SHIFT, // "
44+
0x31, // #
45+
0x21 | SHIFT, // $
46+
0x22 | SHIFT, // %
47+
0x23 | SHIFT, // &
48+
0x31 | SHIFT, // '
49+
0x25 | SHIFT, // (
50+
0x26 | SHIFT, // )
51+
0x30 | SHIFT, // *
52+
0x30, // +
53+
0x36, // ,
54+
0x38, // -
55+
0x37, // .
56+
0x24 | SHIFT, // /
57+
0x27, // 0
58+
0x1e, // 1
59+
0x1f, // 2
60+
0x20, // 3
61+
0x21, // 4
62+
0x22, // 5
63+
0x23, // 6
64+
0x24, // 7
65+
0x25, // 8
66+
0x26, // 9
67+
0x37 | SHIFT, // :
68+
0x36 | SHIFT, // ;
69+
0x32, // <
70+
0x27 | SHIFT, // =
71+
0x32 | SHIFT, // >
72+
0x2d | SHIFT, // ?
73+
0x14 | ALT_GR, // @
74+
0x04 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x10 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x14 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1a | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1d | SHIFT, // Y
99+
0x1c | SHIFT, // Z
100+
0x25 | ALT_GR, // [
101+
0x2d | ALT_GR, // bslash
102+
0x26 | ALT_GR, // ]
103+
0x00, // ^ not supported (requires dead key + space)
104+
0x38 | SHIFT, // _
105+
0x00, // ` not supported (requires dead key + space)
106+
0x04, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x10, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x14, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1a, // w
129+
0x1b, // x
130+
0x1d, // y
131+
0x1c, // z
132+
0x24 | ALT_GR, // {
133+
0x32 | ALT_GR, // |
134+
0x27 | ALT_GR, // }
135+
0x30 | ALT_GR, // ~
136+
0x00 // DEL
137+
};
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* Standard US keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_en_US[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x1e | SHIFT, // !
43+
0x34 | SHIFT, // "
44+
0x20 | SHIFT, // #
45+
0x21 | SHIFT, // $
46+
0x22 | SHIFT, // %
47+
0x24 | SHIFT, // &
48+
0x34, // '
49+
0x26 | SHIFT, // (
50+
0x27 | SHIFT, // )
51+
0x25 | SHIFT, // *
52+
0x2e | SHIFT, // +
53+
0x36, // ,
54+
0x2d, // -
55+
0x37, // .
56+
0x38, // /
57+
0x27, // 0
58+
0x1e, // 1
59+
0x1f, // 2
60+
0x20, // 3
61+
0x21, // 4
62+
0x22, // 5
63+
0x23, // 6
64+
0x24, // 7
65+
0x25, // 8
66+
0x26, // 9
67+
0x33 | SHIFT, // :
68+
0x33, // ;
69+
0x36 | SHIFT, // <
70+
0x2e, // =
71+
0x37 | SHIFT, // >
72+
0x38 | SHIFT, // ?
73+
0x1f | SHIFT, // @
74+
0x04 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x10 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x14 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1a | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1c | SHIFT, // Y
99+
0x1d | SHIFT, // Z
100+
0x2f, // [
101+
0x31, // bslash
102+
0x30, // ]
103+
0x23 | SHIFT, // ^
104+
0x2d | SHIFT, // _
105+
0x35, // `
106+
0x04, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x10, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x14, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1a, // w
129+
0x1b, // x
130+
0x1c, // y
131+
0x1d, // z
132+
0x2f | SHIFT, // {
133+
0x31 | SHIFT, // |
134+
0x30 | SHIFT, // }
135+
0x35 | SHIFT, // ~
136+
0x00 // DEL
137+
};
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* Spanish keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_es_ES[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x1e | SHIFT, // !
43+
0x1f | SHIFT, // "
44+
0x20 | ALT_GR, // #
45+
0x21 | SHIFT, // $
46+
0x22 | SHIFT, // %
47+
0x23 | SHIFT, // &
48+
0x2d, // '
49+
0x25 | SHIFT, // (
50+
0x26 | SHIFT, // )
51+
0x30 | SHIFT, // *
52+
0x30, // +
53+
0x36, // ,
54+
0x38, // -
55+
0x37, // .
56+
0x24 | SHIFT, // /
57+
0x27, // 0
58+
0x1e, // 1
59+
0x1f, // 2
60+
0x20, // 3
61+
0x21, // 4
62+
0x22, // 5
63+
0x23, // 6
64+
0x24, // 7
65+
0x25, // 8
66+
0x26, // 9
67+
0x37 | SHIFT, // :
68+
0x36 | SHIFT, // ;
69+
0x32, // <
70+
0x27 | SHIFT, // =
71+
0x32 | SHIFT, // >
72+
0x2d | SHIFT, // ?
73+
0x1f | ALT_GR, // @
74+
0x04 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x10 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x14 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1a | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1c | SHIFT, // Y
99+
0x1d | SHIFT, // Z
100+
0x2f | ALT_GR, // [
101+
0x35 | ALT_GR, // bslash
102+
0x30 | ALT_GR, // ]
103+
0x00, // ^ not supported (requires dead key + space)
104+
0x38 | SHIFT, // _
105+
0x00, // ` not supported (requires dead key + space)
106+
0x04, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x10, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x14, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1a, // w
129+
0x1b, // x
130+
0x1c, // y
131+
0x1d, // z
132+
0x34 | ALT_GR, // {
133+
0x1e | ALT_GR, // |
134+
0x31 | ALT_GR, // }
135+
0x00, // ~ not supported (requires dead key + space)
136+
0x00 // DEL
137+
};
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* Traditional (not AFNOR) French keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_fr_FR[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x38, // !
43+
0x20, // "
44+
0x20 | ALT_GR, // #
45+
0x30, // $
46+
0x34 | SHIFT, // %
47+
0x1E, // &
48+
0x21, // '
49+
0x22, // (
50+
0x2d, // )
51+
0x31, // *
52+
0x2e | SHIFT, // +
53+
0x10, // ,
54+
0x23, // -
55+
0x36 | SHIFT, // .
56+
0x37 | SHIFT, // /
57+
0x27 | SHIFT, // 0
58+
0x1e | SHIFT, // 1
59+
0x1f | SHIFT, // 2
60+
0x20 | SHIFT, // 3
61+
0x21 | SHIFT, // 4
62+
0x22 | SHIFT, // 5
63+
0x23 | SHIFT, // 6
64+
0x24 | SHIFT, // 7
65+
0x25 | SHIFT, // 8
66+
0x26 | SHIFT, // 9
67+
0x37, // :
68+
0x36, // ;
69+
0x32, // <
70+
0x2e, // =
71+
0x32 | SHIFT, // >
72+
0x10 | SHIFT, // ?
73+
0x27 | ALT_GR, // @
74+
0x14 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x33 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x04 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1d | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1c | SHIFT, // Y
99+
0x1a | SHIFT, // Z
100+
0x22 | ALT_GR, // [
101+
0x25 | ALT_GR, // bslash
102+
0x2d | ALT_GR, // ]
103+
0x26 | ALT_GR, // ^
104+
0x25, // _
105+
0x24 | ALT_GR, // `
106+
0x14, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x33, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x04, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1d, // w
129+
0x1b, // x
130+
0x1c, // y
131+
0x1a, // z
132+
0x21 | ALT_GR, // {
133+
0x23 | ALT_GR, // |
134+
0x2e | ALT_GR, // }
135+
0x1f | ALT_GR, // ~
136+
0x00 // DEL
137+
};
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
/*
2+
* Standard HU keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_hu_HU[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x21 | SHIFT, // !
43+
0x1f | SHIFT, // "
44+
0x1b | ALT_GR, // #
45+
0x33 | ALT_GR, // $
46+
0x22 | SHIFT, // %
47+
0x06 | ALT_GR, // &
48+
0x1e | SHIFT, // '
49+
0x25 | SHIFT, // (
50+
0x26 | SHIFT, // )
51+
0x38 | ALT_GR, // *
52+
0x20 | SHIFT, // +
53+
0x36, // ,
54+
0x38, // -
55+
0x37, // .
56+
0x23 | SHIFT, // /
57+
58+
0x35, // 0
59+
0x1e, // 1
60+
0x1f, // 2
61+
0x20, // 3
62+
0x21, // 4
63+
0x22, // 5
64+
0x23, // 6
65+
0x24, // 7
66+
0x25, // 8
67+
0x26, // 9
68+
69+
0x37 | SHIFT, // :
70+
0x36 | ALT_GR, // ;
71+
0x32 | ALT_GR, // <
72+
0x24 | SHIFT, // =
73+
0x1d | ALT_GR, // >
74+
0x36 | SHIFT, // ?
75+
0x19 | ALT_GR, // @
76+
77+
0x04 | SHIFT, // A
78+
0x05 | SHIFT, // B
79+
0x06 | SHIFT, // C
80+
0x07 | SHIFT, // D
81+
0x08 | SHIFT, // E
82+
0x09 | SHIFT, // F
83+
0x0a | SHIFT, // G
84+
0x0b | SHIFT, // H
85+
0x0c | SHIFT, // I
86+
0x0d | SHIFT, // J
87+
0x0e | SHIFT, // K
88+
0x0f | SHIFT, // L
89+
0x10 | SHIFT, // M
90+
0x11 | SHIFT, // N
91+
0x12 | SHIFT, // O
92+
0x13 | SHIFT, // P
93+
0x14 | SHIFT, // Q
94+
0x15 | SHIFT, // R
95+
0x16 | SHIFT, // S
96+
0x17 | SHIFT, // T
97+
0x18 | SHIFT, // U
98+
0x19 | SHIFT, // V
99+
0x1a | SHIFT, // W
100+
0x1b | SHIFT, // X
101+
0x1d | SHIFT, // Y
102+
0x1c | SHIFT, // Z
103+
104+
0x09 | ALT_GR, // [
105+
0x14 | ALT_GR, // bslash
106+
0x0a | ALT_GR, // ]
107+
0x20 | ALT_GR, // ^
108+
0x38 | SHIFT, // _
109+
0x24 | ALT_GR, // `
110+
111+
0x04, // a
112+
0x05, // b
113+
0x06, // c
114+
0x07, // d
115+
0x08, // e
116+
0x09, // f
117+
0x0a, // g
118+
0x0b, // h
119+
0x0c, // i
120+
0x0d, // j
121+
0x0e, // k
122+
0x0f, // l
123+
0x10, // m
124+
0x11, // n
125+
0x12, // o
126+
0x13, // p
127+
0x14, // q
128+
0x15, // r
129+
0x16, // s
130+
0x17, // t
131+
0x18, // u
132+
0x19, // v
133+
0x1a, // w
134+
0x1b, // x
135+
0x1d, // y
136+
0x1c, // z
137+
138+
0x05 | ALT_GR, // {
139+
0x1a | ALT_GR, // |
140+
0x11 | ALT_GR, // }
141+
0x1e | ALT_GR, // ~
142+
0x00 // DEL
143+
};
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* Italian keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_it_IT[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x1e | SHIFT, // !
43+
0x1f | SHIFT, // "
44+
0x34 | ALT_GR, // #
45+
0x21 | SHIFT, // $
46+
0x22 | SHIFT, // %
47+
0x23 | SHIFT, // &
48+
0x2d, // '
49+
0x25 | SHIFT, // (
50+
0x26 | SHIFT, // )
51+
0x30 | SHIFT, // *
52+
0x30, // +
53+
0x36, // ,
54+
0x38, // -
55+
0x37, // .
56+
0x24 | SHIFT, // /
57+
0x27, // 0
58+
0x1e, // 1
59+
0x1f, // 2
60+
0x20, // 3
61+
0x21, // 4
62+
0x22, // 5
63+
0x23, // 6
64+
0x24, // 7
65+
0x25, // 8
66+
0x26, // 9
67+
0x37 | SHIFT, // :
68+
0x36 | SHIFT, // ;
69+
0x32, // <
70+
0x27 | SHIFT, // =
71+
0x32 | SHIFT, // >
72+
0x2d | SHIFT, // ?
73+
0x33 | ALT_GR, // @
74+
0x04 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x10 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x14 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1a | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1c | SHIFT, // Y
99+
0x1d | SHIFT, // Z
100+
0x2f | ALT_GR, // [
101+
0x35, // bslash
102+
0x30 | ALT_GR, // ]
103+
0x2e | SHIFT, // ^
104+
0x38 | SHIFT, // _
105+
0x00, // ` not in this layout
106+
0x04, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x10, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x14, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1a, // w
129+
0x1b, // x
130+
0x1c, // y
131+
0x1d, // z
132+
0x00, // { not supported (requires AltGr+Shift)
133+
0x35 | SHIFT, // |
134+
0x00, // } not supported (requires AltGr+Shift)
135+
0x00, // ~ not in this layout
136+
0x00 // DEL
137+
};
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
3+
* SPDX-License-Identifier: Apache-2.0
4+
*
5+
* Keyboard_pt_BR.h
6+
* Portuguese Brazilian keyboard layout.
7+
*/
8+
9+
#include "KeyboardLayout.h"
10+
11+
extern const uint8_t KeyboardLayout_pt_BR[128] PROGMEM = {
12+
0x00, // NUL
13+
0x00, // SOH
14+
0x00, // STX
15+
0x00, // ETX
16+
0x00, // EOT
17+
0x00, // ENQ
18+
0x00, // ACK
19+
0x00, // BEL
20+
0x2a, // BS Backspace
21+
0x2b, // TAB Tab
22+
0x28, // LF Enter
23+
0x00, // VT
24+
0x00, // FF
25+
0x00, // CR
26+
0x00, // SO
27+
0x00, // SI
28+
0x00, // DEL
29+
0x00, // DC1
30+
0x00, // DC2
31+
0x00, // DC3
32+
0x00, // DC4
33+
0x00, // NAK
34+
0x00, // SYN
35+
0x00, // ETB
36+
0x00, // CAN
37+
0x00, // EM
38+
0x00, // SUB
39+
0x00, // ESC
40+
0x00, // FS
41+
0x00, // GS
42+
0x00, // RS
43+
0x00, // US
44+
45+
0x2c, // ' '
46+
0x1e | SHIFT, // !
47+
0x35 | SHIFT, // "
48+
0x20 | SHIFT, // #
49+
0x21 | SHIFT, // $
50+
0x22 | SHIFT, // %
51+
0x24 | SHIFT, // &
52+
0x35, // '
53+
0x26 | SHIFT, // (
54+
0x27 | SHIFT, // )
55+
0x25 | SHIFT, // *
56+
0x2e | SHIFT, // +
57+
0x36, // ,
58+
0x2d, // -
59+
0x37, // .
60+
0x14 | ALT_GR, // / R_ALT + q
61+
0x27, // 0
62+
0x1e, // 1
63+
0x1f, // 2
64+
0x20, // 3
65+
0x21, // 4
66+
0x22, // 5
67+
0x23, // 6
68+
0x24, // 7
69+
0x25, // 8
70+
0x26, // 9
71+
0x38 | SHIFT, // :
72+
0x38, // ;
73+
0x36 | SHIFT, // <
74+
0x2e, // =
75+
0x37 | SHIFT, // >
76+
0x1a | ALT_GR, // ? R_ALT + w
77+
0x1f | SHIFT, // @
78+
0x04 | SHIFT, // A
79+
0x05 | SHIFT, // B
80+
0x06 | SHIFT, // C
81+
0x07 | SHIFT, // D
82+
0x08 | SHIFT, // E
83+
0x09 | SHIFT, // F
84+
0x0a | SHIFT, // G
85+
0x0b | SHIFT, // H
86+
0x0c | SHIFT, // I
87+
0x0d | SHIFT, // J
88+
0x0e | SHIFT, // K
89+
0x0f | SHIFT, // L
90+
0x10 | SHIFT, // M
91+
0x11 | SHIFT, // N
92+
0x12 | SHIFT, // O
93+
0x13 | SHIFT, // P
94+
0x14 | SHIFT, // Q
95+
0x15 | SHIFT, // R
96+
0x16 | SHIFT, // S
97+
0x17 | SHIFT, // T
98+
0x18 | SHIFT, // U
99+
0x19 | SHIFT, // V
100+
0x1a | SHIFT, // W
101+
0x1b | SHIFT, // X
102+
0x1c | SHIFT, // Y
103+
0x1d | SHIFT, // Z
104+
0x30, // [
105+
0x32, // bslash -->ISO Key
106+
0x31, // ]
107+
0x34 | SHIFT, // ^
108+
0x2d | SHIFT, // _
109+
0x2f | SHIFT, // `
110+
0x04, // a
111+
0x05, // b
112+
0x06, // c
113+
0x07, // d
114+
0x08, // e
115+
0x09, // f
116+
0x0a, // g
117+
0x0b, // h
118+
0x0c, // i
119+
0x0d, // j
120+
0x0e, // k
121+
0x0f, // l
122+
0x10, // m
123+
0x11, // n
124+
0x12, // o
125+
0x13, // p
126+
0x14, // q
127+
0x15, // r
128+
0x16, // s
129+
0x17, // t
130+
0x18, // u
131+
0x19, // v
132+
0x1a, // w
133+
0x1b, // x
134+
0x1c, // y
135+
0x1d, // z
136+
0x30 | SHIFT, // {
137+
0x32 | SHIFT, // | -->ISO Key
138+
0x31 | SHIFT, // }
139+
0x34, // ~
140+
0x4c // DEL
141+
};
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* Portuguese keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_pt_PT[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x1e | SHIFT, // !
43+
0x1f | SHIFT, // "
44+
0x20 | SHIFT, // #
45+
0x21 | SHIFT, // $
46+
0x22 | SHIFT, // %
47+
0x23 | SHIFT, // &
48+
0x2d, // '
49+
0x25 | SHIFT, // (
50+
0x26 | SHIFT, // )
51+
0x2f | SHIFT, // *
52+
0x2f, // +
53+
0x36, // ,
54+
0x38, // -
55+
0x37, // .
56+
0x24 | SHIFT, // /
57+
0x27, // 0
58+
0x1e, // 1
59+
0x1f, // 2
60+
0x20, // 3
61+
0x21, // 4
62+
0x22, // 5
63+
0x23, // 6
64+
0x24, // 7
65+
0x25, // 8
66+
0x26, // 9
67+
0x37 | SHIFT, // :
68+
0x36 | SHIFT, // ;
69+
0x32, // <
70+
0x27 | SHIFT, // =
71+
0x32 | SHIFT, // >
72+
0x2d | SHIFT, // ?
73+
0x1f | ALT_GR, // @
74+
0x04 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x10 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x14 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1a | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1c | SHIFT, // Y
99+
0x1d | SHIFT, // Z
100+
0x25 | ALT_GR, // [
101+
0x35, // bslash
102+
0x26 | ALT_GR, // ]
103+
0x00, // ^ not supported (requires dead key + space)
104+
0x38 | SHIFT, // _
105+
0x00, // ` not supported (requires dead key + space)
106+
0x04, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x10, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x14, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1a, // w
129+
0x1b, // x
130+
0x1c, // y
131+
0x1d, // z
132+
0x24 | ALT_GR, // {
133+
0x35 | SHIFT, // |
134+
0x27 | ALT_GR, // }
135+
0x00, // ~ not supported (requires dead key + space)
136+
0x00 // DEL
137+
};
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
* Swedish keyboard layout.
3+
*/
4+
5+
#include "KeyboardLayout.h"
6+
7+
extern const uint8_t KeyboardLayout_sv_SE[128] PROGMEM = {
8+
0x00, // NUL
9+
0x00, // SOH
10+
0x00, // STX
11+
0x00, // ETX
12+
0x00, // EOT
13+
0x00, // ENQ
14+
0x00, // ACK
15+
0x00, // BEL
16+
0x2a, // BS Backspace
17+
0x2b, // TAB Tab
18+
0x28, // LF Enter
19+
0x00, // VT
20+
0x00, // FF
21+
0x00, // CR
22+
0x00, // SO
23+
0x00, // SI
24+
0x00, // DEL
25+
0x00, // DC1
26+
0x00, // DC2
27+
0x00, // DC3
28+
0x00, // DC4
29+
0x00, // NAK
30+
0x00, // SYN
31+
0x00, // ETB
32+
0x00, // CAN
33+
0x00, // EM
34+
0x00, // SUB
35+
0x00, // ESC
36+
0x00, // FS
37+
0x00, // GS
38+
0x00, // RS
39+
0x00, // US
40+
41+
0x2c, // ' '
42+
0x1e | SHIFT, // !
43+
0x1f | SHIFT, // "
44+
0x20 | SHIFT, // #
45+
0x21 | ALT_GR, // $
46+
0x22 | SHIFT, // %
47+
0x23 | SHIFT, // &
48+
0x31, // '
49+
0x25 | SHIFT, // (
50+
0x26 | SHIFT, // )
51+
0x31 | SHIFT, // *
52+
0x2d, // +
53+
0x36, // ,
54+
0x38, // -
55+
0x37, // .
56+
0x24 | SHIFT, // /
57+
0x27, // 0
58+
0x1e, // 1
59+
0x1f, // 2
60+
0x20, // 3
61+
0x21, // 4
62+
0x22, // 5
63+
0x23, // 6
64+
0x24, // 7
65+
0x25, // 8
66+
0x26, // 9
67+
0x37 | SHIFT, // :
68+
0x36 | SHIFT, // ;
69+
0x32, // <
70+
0x27 | SHIFT, // =
71+
0x32 | SHIFT, // >
72+
0x2d | SHIFT, // ?
73+
0x1f | ALT_GR, // @
74+
0x04 | SHIFT, // A
75+
0x05 | SHIFT, // B
76+
0x06 | SHIFT, // C
77+
0x07 | SHIFT, // D
78+
0x08 | SHIFT, // E
79+
0x09 | SHIFT, // F
80+
0x0a | SHIFT, // G
81+
0x0b | SHIFT, // H
82+
0x0c | SHIFT, // I
83+
0x0d | SHIFT, // J
84+
0x0e | SHIFT, // K
85+
0x0f | SHIFT, // L
86+
0x10 | SHIFT, // M
87+
0x11 | SHIFT, // N
88+
0x12 | SHIFT, // O
89+
0x13 | SHIFT, // P
90+
0x14 | SHIFT, // Q
91+
0x15 | SHIFT, // R
92+
0x16 | SHIFT, // S
93+
0x17 | SHIFT, // T
94+
0x18 | SHIFT, // U
95+
0x19 | SHIFT, // V
96+
0x1a | SHIFT, // W
97+
0x1b | SHIFT, // X
98+
0x1c | SHIFT, // Y
99+
0x1d | SHIFT, // Z
100+
0x25 | ALT_GR, // [
101+
0x2d | ALT_GR, // bslash
102+
0x26 | ALT_GR, // ]
103+
0x00, // ^ not supported (requires dead key + space)
104+
0x38 | SHIFT, // _
105+
0x00, // ` not supported (requires dead key + space)
106+
0x04, // a
107+
0x05, // b
108+
0x06, // c
109+
0x07, // d
110+
0x08, // e
111+
0x09, // f
112+
0x0a, // g
113+
0x0b, // h
114+
0x0c, // i
115+
0x0d, // j
116+
0x0e, // k
117+
0x0f, // l
118+
0x10, // m
119+
0x11, // n
120+
0x12, // o
121+
0x13, // p
122+
0x14, // q
123+
0x15, // r
124+
0x16, // s
125+
0x17, // t
126+
0x18, // u
127+
0x19, // v
128+
0x1a, // w
129+
0x1b, // x
130+
0x1c, // y
131+
0x1d, // z
132+
0x24 | ALT_GR, // {
133+
0x32 | ALT_GR, // |
134+
0x27 | ALT_GR, // }
135+
0x00, // ~ not supported (requires dead key + space)
136+
0x00 // DEL
137+
};
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
Keyboard_da_DK.h
3+
4+
Copyright (c) 2021, Peter John
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_DA_DK_h
22+
#define KEYBOARD_DA_DK_h
23+
24+
//================================================================================
25+
//================================================================================
26+
// Keyboard
27+
28+
// DA_DK keys
29+
#define KEY_A_RING (0x88 + 0x2f)
30+
#define KEY_SLASHED_O (0x88 + 0x34)
31+
#define KEY_ASH (0x88 + 0x33)
32+
#define KEY_UMLAUT (0x88 + 0x30)
33+
#define KEY_ACUTE_ACC (0x88 + 0x2e)
34+
35+
#endif
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
Keyboard_de_DE.h
3+
4+
Copyright (c) 2022, Edgar Bonet
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_DE_DE_h
22+
#define KEYBOARD_DE_DE_h
23+
24+
//================================================================================
25+
//================================================================================
26+
// Keyboard
27+
28+
// de_DE keys
29+
#define KEY_CIRCUMFLEX (0x88 + 0x35)
30+
#define KEY_ESZETT (0x88 + 0x2d)
31+
#define KEY_ACUTE (0x88 + 0x2e)
32+
#define KEY_U_UMLAUT (0x88 + 0x2f)
33+
#define KEY_O_UMLAUT (0x88 + 0x33)
34+
#define KEY_A_UMLAUT (0x88 + 0x34)
35+
36+
#endif
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
Keyboard_es_ES.h
3+
4+
Copyright (c) 2022, Edgar Bonet
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_ES_ES_h
22+
#define KEYBOARD_ES_ES_h
23+
24+
#include "class/hid/hid.h"
25+
//================================================================================
26+
//================================================================================
27+
// Keyboard
28+
29+
// es_ES keys
30+
#define KEY_MASCULINE_ORDINAL (0x88 + 0x35)
31+
#define KEY_INVERTED_EXCLAMATION (0x88 + 0x2e)
32+
#define KEY_GRAVE (0x88 + 0x2f)
33+
#define KEY_N_TILDE (0x88 + 0x33)
34+
#define KEY_ACUTE (0x88 + 0x34)
35+
#define KEY_C_CEDILLA (0x88 + 0x31)
36+
37+
#endif
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
Keyboard_fr_FR.h
3+
4+
Copyright (c) 2022, Edgar Bonet
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_FR_FR_h
22+
#define KEYBOARD_FR_FR_h
23+
24+
//================================================================================
25+
//================================================================================
26+
// Keyboard
27+
28+
// fr_FR keys
29+
#define KEY_SUPERSCRIPT_TWO (0x88 + 0x35)
30+
#define KEY_E_ACUTE (0x88 + 0x1f)
31+
#define KEY_E_GRAVE (0x88 + 0x24)
32+
#define KEY_C_CEDILLA (0x88 + 0x26)
33+
#define KEY_A_GRAVE (0x88 + 0x27)
34+
#define KEY_CIRCUMFLEX (0x88 + 0x2f)
35+
#define KEY_U_GRAVE (0x88 + 0x34)
36+
37+
#endif
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
Keyboard_hu_HU.h
3+
4+
Copyright (c) 2023, Barab(0x34)si Rich(0x34)rd
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_HU_HU_h
22+
#define KEYBOARD_HU_HU_h
23+
24+
//================================================================================
25+
//================================================================================
26+
// Keyboard
27+
28+
// hu_HU keys
29+
#define KEY_O_ACUTE (0x88 + 0x2e)
30+
#define KEY_O_UMLAUT (0x88 + 0x27)
31+
#define KEY_O_DOUBLE_ACUTE (0x88 + 0x2f)
32+
33+
#define KEY_U_ACUTE (0x88 + 0x30)
34+
#define KEY_U_UMLAUT (0x88 + 0x2d)
35+
#define KEY_U_DOUBLE_ACUTE (0x88 + 0x31)
36+
37+
#define KEY_A_ACUTE (0x88 + 0x34)
38+
39+
#define KEY_E_ACUTE (0x88 + 0x33)
40+
41+
#define KEY_I_ACUTE (0x88 + 0x32)
42+
43+
#endif
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
Keyboard_it_IT.h
3+
4+
Copyright (c) 2022, Edgar Bonet
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_IT_IT_h
22+
#define KEYBOARD_IT_IT_h
23+
24+
//================================================================================
25+
//================================================================================
26+
// Keyboard
27+
28+
// it_IT keys
29+
#define KEY_I_GRAVE (0x88 + 0x2e)
30+
#define KEY_E_GRAVE (0x88 + 0x2f)
31+
#define KEY_O_GRAVE (0x88 + 0x33)
32+
#define KEY_A_GRAVE (0x88 + 0x34)
33+
#define KEY_U_GRAVE (0x88 + 0x31)
34+
35+
#endif
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
3+
* SPDX-License-Identifier: Apache-2.0
4+
*
5+
* Keyboard_pt_BR.h
6+
* Portuguese Brazilian keyboard layout.
7+
*/
8+
9+
#ifndef KEYBOARD_PT_BR_h
10+
#define KEYBOARD_PT_BR_h
11+
12+
//================================================================================
13+
//================================================================================
14+
// Keyboard
15+
16+
// pt_BR keys
17+
#define KEY_C_CEDILLA (0x88 + 0x33)
18+
#define KEY_ACUTE (0x88 + 0x2f)
19+
// use the pressRaw() to press the modification key and then press the key you want to modify
20+
#define KEY_MASCULINE_ORDINAL (0x88 + 0x32) // first pressRaw(HID_KEY_ALT_RIGHT), then press(KEY_MASCULINE_ORDINAL)
21+
#define KEY_FEMININE_ORDINAL (0x88 + 0x30) // first pressRaw(HID_KEY_ALT_RIGHT), then press(KEY_FEMININE_ORDINAL)
22+
#define KEY_PARAGRAPH (0x88 + 0x2e) // first pressRaw(HID_KEY_ALT_RIGHT), then press(KEY_PARAGRAPH)
23+
#define KEY_UMLAUT (0x88 + 0x23) // first pressRaw(HID_KEY_SHIFT_RIGHT), then press(KEY_UMLAUT)
24+
25+
#endif
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
Keyboard_pt_PT.h
3+
4+
Copyright (c) 2022, Edgar Bonet
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_PT_PT_h
22+
#define KEYBOARD_PT_PT_h
23+
24+
//================================================================================
25+
//================================================================================
26+
// Keyboard
27+
28+
// pt_PT keys
29+
#define KEY_LEFT_GUILLEMET (0x88 + 0x2e)
30+
#define KEY_ACUTE (0x88 + 0x30)
31+
#define KEY_C_CEDILLA (0x88 + 0x33)
32+
#define KEY_MASCULINE_ORDINAL (0x88 + 0x34)
33+
#define KEY_TILDE (0x88 + 0x31)
34+
35+
#endif
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
Keyboard_sv_SE.h
3+
4+
Copyright (c) 2021, Peter John
5+
6+
This library is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU Lesser General Public
8+
License as published by the Free Software Foundation; either
9+
version 2.1 of the License, or (at your option) any later version.
10+
11+
This library is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
Lesser General Public License for more details.
15+
16+
You should have received a copy of the GNU Lesser General Public
17+
License along with this library; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*/
20+
21+
#ifndef KEYBOARD_SV_SE_h
22+
#define KEYBOARD_SV_SE_h
23+
24+
//================================================================================
25+
//================================================================================
26+
// Keyboard
27+
28+
// SV_SE keys
29+
#define KEY_A_RING (0x88 + 0x2f)
30+
#define KEY_A_UMLAUT (0x88 + 0x34)
31+
#define KEY_O_UMLAUT (0x88 + 0x33)
32+
#define KEY_UMLAUT (0x88 + 0x30)
33+
#define KEY_ACUTE_ACC (0x88 + 0x2e)
34+
35+
#endif

‎libraries/WiFi/src/WiFiSTA.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ bool WiFiSTAClass::bandwidth(wifi_bandwidth_t bandwidth) {
215215
* @return true if STA is connected to an AP
216216
*/
217217
bool WiFiSTAClass::isConnected() {
218-
return STA.connected();
218+
return STA.connected() && STA.hasIP();
219219
}
220220

221221
/**

‎libraries/Zigbee/examples/Zigbee_Temp_Hum_Sensor_Sleepy/Zigbee_Temp_Hum_Sensor_Sleepy.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void meausureAndSleep() {
4545
// Measure temperature sensor value
4646
float temperature = temperatureRead();
4747

48-
// Use temparture value as humidity value to demonstrate both temperature and humidity
48+
// Use temperature value as humidity value to demonstrate both temperature and humidity
4949
float humidity = temperature;
5050

5151
// Update temperature and humidity values in Temperature sensor EP

0 commit comments

Comments
 (0)
Please sign in to comment.