Renamed main file
This commit is contained in:
parent
43007a57b6
commit
12b5526e47
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
firmware/compile_commands.json
|
||||
firmware/.cache/clangd/index
|
||||
firmware/.ccls-cache
|
||||
|
||||
@ -15,6 +15,11 @@
|
||||
* --- ----- --------------------- ---------------------------------------------
|
||||
* -------------------------------------------------------------------------------------------------------
|
||||
* =======================================================================================================
|
||||
*
|
||||
* Date: 2023-09-02
|
||||
* Author: Christoffer Martinsson
|
||||
* Email: cm@cmtec.se
|
||||
* License: Please refer to end of this file for license information
|
||||
*/
|
||||
|
||||
#include "IndicatorLed.h"
|
||||
@ -26,11 +31,9 @@ const uint8_t USB_LED_CAPS_LOCK = 1;
|
||||
const uint8_t USB_LED_SCROLL_LOCK = 2;
|
||||
|
||||
const uint16_t KEY_OFFSET = 0xAA00; // Offset to apply for not interfere with already defined keyboard keys
|
||||
const uint16_t KEY_FN = 1 + KEY_OFFSET; // Function layer 1 button
|
||||
const uint16_t KEY_WIN_LATCH = 2 + KEY_OFFSET; // Function layer 2 button
|
||||
|
||||
const uint16_t KEY_FN = 10 + KEY_OFFSET; // Function layer 1 button
|
||||
const uint16_t KEY_WIN_LATCH = 11 + KEY_OFFSET; // Function layer 2 button
|
||||
|
||||
const uint8_t TAP_TIMEOUT = 150; // Key tap timeout (ms)
|
||||
const uint8_t NBR_OF_BUTTONS = 42; // Number of buttons used (42 in this case)
|
||||
|
||||
struct Button
|
||||
@ -49,14 +52,16 @@ const byte KP_COLS = 12;
|
||||
byte kp_rowPins[KP_ROWS] = {0, 1, 2, 3};
|
||||
byte kp_colPins[KP_COLS] = {9, 8, 7, 6, 5, 4, 19, 18, 17, 16, 15, 14};
|
||||
|
||||
const char kp_keys[KP_ROWS][KP_COLS] = {
|
||||
const uint8_t MAX_PRESSED_KEYS = LIST_MAX;
|
||||
|
||||
const char kp_keys_id[KP_ROWS][KP_COLS] = {
|
||||
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12},
|
||||
{13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24},
|
||||
{25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36},
|
||||
{0, 0, 0, 37, 38, 39, 40, 41, 42, 0, 0, 0},
|
||||
};
|
||||
|
||||
Keypad kp_keypad = Keypad(makeKeymap(kp_keys), kp_rowPins, kp_colPins, KP_ROWS, KP_COLS);
|
||||
Keypad kp_keypad = Keypad(makeKeymap(kp_keys_id), kp_rowPins, kp_colPins, KP_ROWS, KP_COLS);
|
||||
|
||||
/*
|
||||
|
||||
@ -71,24 +76,40 @@ Keypad kp_keypad = Keypad(makeKeymap(kp_keys), kp_rowPins, kp_colPins, KP_ROWS,
|
||||
* "Fn1 key" is the layer 1 key to use. Don NOT add KEY_FN1 or KEY_FN2 to this layer.
|
||||
* "Fn2 key" is the layer 2 key to use. Don NOT add KEY_FN1 or KEY_FN2 to this layer.
|
||||
|
||||
Swedish keymap (ISO) special characters (not matching the key definition):
|
||||
|
||||
* KEY_TILE = §
|
||||
* KEY_SEMICOLON = ö
|
||||
* KEY_QUOTE = ä
|
||||
* KEY_LEFT_BRACE = å
|
||||
* KEY_SLASH = -
|
||||
* KEY_NON_US_100 = <
|
||||
* KEY_EQUAL = ´
|
||||
* KEY_BACKSLASH = '
|
||||
* KEY_RIGHT_BRACE = ^
|
||||
* KEY_MINUS = +
|
||||
* KEY_LEFT_ALT = Alt
|
||||
* KEY_RIGHT_ALT = AltGr
|
||||
|
||||
*/
|
||||
|
||||
/* Keymap config ----------------------------------------------------------------------------------------------------------------------------------- */
|
||||
// clang-format off
|
||||
|
||||
Button buttons[NBR_OF_BUTTONS] =
|
||||
{
|
||||
/* Fn0 key Fn1 key Fn2 key */
|
||||
{
|
||||
/* KeyId Fn0 key Fn1 key Fn2 key */
|
||||
/* 1 */ {KEY_TAB, KEY_ESC, KEY_F11, IDLE, NO_KEY, false},
|
||||
/* 2 */ {KEY_Q, KEY_F1, KEY_F12, IDLE, NO_KEY, false},
|
||||
/* 3 */ {KEY_W, KEY_F2, KEY_F13, IDLE, NO_KEY, false},
|
||||
/* 4 */ {KEY_E, KEY_F3, KEY_F14, IDLE, NO_KEY, false},
|
||||
/* 5 */ {KEY_R, KEY_F4, KEY_F15, IDLE, NO_KEY, false},
|
||||
/* 6 */ {KEY_T, KEY_F5, KEY_F16, IDLE, NO_KEY, false},
|
||||
/* 7 */ {KEY_Y, KEY_F6, '§', IDLE, NO_KEY, false},
|
||||
/* 7 */ {KEY_Y, KEY_F6, KEY_TILDE, IDLE, NO_KEY, false},
|
||||
/* 8 */ {KEY_U, KEY_F7, KEY_WIN_LATCH, IDLE, NO_KEY, false},
|
||||
/* 9 */ {KEY_I, KEY_F8, KEY_LEFT_GUI, IDLE, NO_KEY, false},
|
||||
/* 10 */ {KEY_O, KEY_F9, NO_KEY, IDLE, NO_KEY, false},
|
||||
/* 11 */ {KEY_P, KEY_F10, KEY_CAPS_LOCK, IDLE, NO_KEY, false},
|
||||
/* 12 */ {'å', KEY_BACKSPACE, KEY_BACKSPACE, IDLE, NO_KEY, false},
|
||||
/* 12 */ {KEY_LEFT_BRACE, KEY_BACKSPACE, KEY_BACKSPACE, IDLE, NO_KEY, false},
|
||||
/* 13 */ {KEY_LEFT_CTRL, KEY_LEFT_CTRL, KEY_LEFT_CTRL, IDLE, NO_KEY, false},
|
||||
/* 14 */ {KEY_A, KEY_1, KEY_MEDIA_PLAY_PAUSE, IDLE, NO_KEY, false},
|
||||
/* 15 */ {KEY_S, KEY_2, KEY_MEDIA_NEXT_TRACK, IDLE, NO_KEY, false},
|
||||
@ -99,15 +120,15 @@ Button buttons[NBR_OF_BUTTONS] =
|
||||
/* 20 */ {KEY_J, KEY_7, KEY_DOWN_ARROW, IDLE, NO_KEY, false},
|
||||
/* 21 */ {KEY_K, KEY_8, KEY_UP_ARROW, IDLE, NO_KEY, false},
|
||||
/* 22 */ {KEY_L, KEY_9, KEY_RIGHT_ARROW, IDLE, NO_KEY, false},
|
||||
/* 23 */ {'ö', KEY_0, KEY_DELETE, IDLE, NO_KEY, false},
|
||||
/* 24 */ {'ä', KEY_ENTER, KEY_ENTER, IDLE, NO_KEY, false},
|
||||
/* 23 */ {KEY_SEMICOLON, KEY_0, KEY_DELETE, IDLE, NO_KEY, false},
|
||||
/* 24 */ {KEY_QUOTE, KEY_ENTER, KEY_ENTER, IDLE, NO_KEY, false},
|
||||
/* 25 */ {KEY_LEFT_SHIFT, KEY_LEFT_SHIFT, KEY_LEFT_SHIFT, IDLE, NO_KEY, false},
|
||||
/* 26 */ {KEY_Z, KEY_6, KEY_F20, IDLE, NO_KEY, false},
|
||||
/* 27 */ {KEY_X, KEY_7, KEY_F21, IDLE, NO_KEY, false},
|
||||
/* 28 */ {KEY_C, KEY_8, KEY_F22, IDLE, NO_KEY, false},
|
||||
/* 29 */ {KEY_V, KEY_9, KEY_F23, IDLE, NO_KEY, false},
|
||||
/* 30 */ {KEY_B, KEY_0, KEY_F24, IDLE, NO_KEY, false},
|
||||
/* 31 */ {KEY_N, '<', KEY_HOME, IDLE, NO_KEY, false},
|
||||
/* 31 */ {KEY_N, KEY_NON_US_100, KEY_HOME, IDLE, NO_KEY, false},
|
||||
/* 32 */ {KEY_M, KEY_EQUAL, KEY_PAGE_DOWN, IDLE, NO_KEY, false},
|
||||
/* 33 */ {KEY_COMMA, KEY_BACKSLASH, KEY_PAGE_UP, IDLE, NO_KEY, false},
|
||||
/* 34 */ {KEY_PERIOD, KEY_RIGHT_BRACE, KEY_END, IDLE, NO_KEY, false},
|
||||
@ -133,7 +154,7 @@ bool key_pressed = false;
|
||||
bool win_latched = false;
|
||||
|
||||
/**
|
||||
Perform key action.
|
||||
set_key.
|
||||
|
||||
@param keycode code to apply action.
|
||||
@param kstate PRESSED or RELEASED.
|
||||
@ -141,11 +162,7 @@ bool win_latched = false;
|
||||
*/
|
||||
uint8_t set_key(uint16_t keycode, uint8_t kstate)
|
||||
{
|
||||
/* Abort if keycode is invalid */
|
||||
if (keycode == NO_KEY || keycode == KEY_FN)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (keycode == NO_KEY || keycode == KEY_FN) return 0;
|
||||
|
||||
if (keycode == KEY_WIN_LATCH)
|
||||
{
|
||||
@ -184,22 +201,18 @@ uint8_t set_key(uint16_t keycode, uint8_t kstate)
|
||||
/**
|
||||
* find_and_set_button
|
||||
*
|
||||
* @param key_id key character
|
||||
* @param key_id
|
||||
* @param state_changed true if state changed
|
||||
* @param key_state PRESSED or RELEASED
|
||||
* @return 1 if button found and set, 0 if not
|
||||
*/
|
||||
uint8_t update_button_status(uint8_t key_id, bool state_changed, uint8_t key_state)
|
||||
{
|
||||
if (key_id == 0) return 0;
|
||||
if (key_id == 0 || key_id > NBR_OF_BUTTONS || state_changed == false) return 0;
|
||||
|
||||
if (state_changed == true)
|
||||
{
|
||||
buttons[key_id - 1].run_keycode = true;
|
||||
buttons[key_id - 1].kstate = key_state;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -210,16 +223,10 @@ uint8_t update_button_status(uint8_t key_id, bool state_changed, uint8_t key_sta
|
||||
*/
|
||||
uint8_t check_if_button_is_fn(char key_id)
|
||||
{
|
||||
uint8_t fn_key_found = 0;
|
||||
if (key_id == 0 || key_id > NBR_OF_BUTTONS) return 0;
|
||||
|
||||
if (key_id == 0) return 0;
|
||||
|
||||
/* Check if FN1 key are defined to this button (Layer 0 and first position in combo array)*/
|
||||
if (buttons[key_id - 1].keycode == KEY_FN)
|
||||
{
|
||||
fn_key_found = 1;
|
||||
}
|
||||
return fn_key_found;
|
||||
if (buttons[key_id - 1].keycode == KEY_FN) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -227,11 +234,11 @@ uint8_t check_if_button_is_fn(char key_id)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
void check_bootloader_mode()
|
||||
void check_if_to_enter_bootloader()
|
||||
{
|
||||
/* Enter bootloader if all four corner-buttons is pressed together */
|
||||
int reboot = 0;
|
||||
for (int i = 0; i < LIST_MAX; i++)
|
||||
for (int i = 0; i < MAX_PRESSED_KEYS; i++)
|
||||
{
|
||||
if ((kp_keypad.key[i].kchar == 1) && (kp_keypad.key[i].kstate == PRESSED || kp_keypad.key[i].kstate == HOLD))
|
||||
{
|
||||
@ -252,7 +259,7 @@ void check_bootloader_mode()
|
||||
}
|
||||
if (reboot == 4)
|
||||
{
|
||||
_reboot_Teensyduino_();
|
||||
_reboot_Teensyduino_(); // reboot to bootloader
|
||||
}
|
||||
}
|
||||
|
||||
@ -265,7 +272,7 @@ uint8_t get_fn_mode()
|
||||
{
|
||||
/* Check for Fn1 mode */
|
||||
int fn_mode = 0;
|
||||
for (int i = 0; i < LIST_MAX; i++)
|
||||
for (int i = 0; i < MAX_PRESSED_KEYS; i++)
|
||||
{
|
||||
if (kp_keypad.key[i].kstate != PRESSED && kp_keypad.key[i].kstate != HOLD) continue;
|
||||
fn_mode += check_if_button_is_fn(kp_keypad.key[i].kchar);
|
||||
@ -281,7 +288,7 @@ uint8_t get_fn_mode()
|
||||
void process_keypad(uint8_t fn_mode)
|
||||
{
|
||||
/* Process key press/release */
|
||||
for (int i = 0; i < LIST_MAX; i++)
|
||||
for (int i = 0; i < MAX_PRESSED_KEYS; i++)
|
||||
{
|
||||
if (kp_keypad.key[i].kstate == PRESSED)
|
||||
{
|
||||
@ -289,7 +296,7 @@ void process_keypad(uint8_t fn_mode)
|
||||
}
|
||||
else if (kp_keypad.key[i].kstate == RELEASED)
|
||||
{
|
||||
update_button_status(uint8_t(kp_keypad.key[i].kchar), kp_keypad.key[i].stateChanged, RELEASED);
|
||||
update_button_status(kp_keypad.key[i].kchar, kp_keypad.key[i].stateChanged, RELEASED);
|
||||
}
|
||||
}
|
||||
|
||||
@ -350,7 +357,7 @@ void loop()
|
||||
/* Scan keypad */
|
||||
if (kp_keypad.getKeys())
|
||||
{
|
||||
check_bootloader_mode();
|
||||
check_if_to_enter_bootloader();
|
||||
process_keypad(get_fn_mode());
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user