buffybox/layouts.c

153 lines
6.4 KiB
C
Raw Normal View History

#include "layouts.h"
/**
* English (US)
**/
#define NAME_ENGLISH_US "English (US)"
/* Lowercase layer */
#define KEYS_LOWER_ENGLISH_US { \
"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", LV_SYMBOL_BACKSPACE, "\n", \
"ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", LV_SYMBOL_NEW_LINE, "\n", \
"_", "-", "z", "x", "c", "v", "b", "n", "m", ".", ",", ":", "\n", \
LV_SYMBOL_KEYBOARD, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, "" \
}
#define ATTRIBUTES_LOWER_ENGLISH_US { \
LV_KEYBOARD_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, LV_BTNMATRIX_CTRL_CHECKED | 7, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, LV_BTNMATRIX_CTRL_CHECKED | 7, \
LV_BTNMATRIX_CTRL_CHECKED | 1, LV_BTNMATRIX_CTRL_CHECKED | 1, 1, 1, 1, 1, 1, 1, 1, LV_BTNMATRIX_CTRL_CHECKED | 1, LV_BTNMATRIX_CTRL_CHECKED | 1, LV_BTNMATRIX_CTRL_CHECKED | 1, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 6, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2 \
}
/* Uppercase layer */
#define KEYS_UPPER_ENGLISH_US { \
"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", LV_SYMBOL_BACKSPACE, "\n", \
"abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", LV_SYMBOL_NEW_LINE, "\n", \
"_", "-", "Z", "X", "C", "V", "B", "N", "M", ".", ",", ":", "\n", \
LV_SYMBOL_KEYBOARD, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, "" \
}
#define ATTRIBUTES_UPPER_ENGLISH_US { \
LV_KEYBOARD_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, LV_BTNMATRIX_CTRL_CHECKED | 7, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, LV_BTNMATRIX_CTRL_CHECKED | 7, \
LV_BTNMATRIX_CTRL_CHECKED | 1, LV_BTNMATRIX_CTRL_CHECKED | 1, 1, 1, 1, 1, 1, 1, 1, LV_BTNMATRIX_CTRL_CHECKED | 1, LV_BTNMATRIX_CTRL_CHECKED | 1, LV_BTNMATRIX_CTRL_CHECKED | 1, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 6, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2 \
}
/* Symbol layer */
#define KEYS_SYMBOL_ENGLISH_US { \
"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", LV_SYMBOL_BACKSPACE, "\n", \
"abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n", \
"\\", "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n", \
LV_SYMBOL_KEYBOARD, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, "" \
}
#define ATTRIBUTES_SYMBOL_ENGLISH_US { \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_BTNMATRIX_CTRL_CHECKED | 2, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 6, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2 \
}
/**
* German
**/
#define NAME_GERMAN "German"
/* Lowercase layer */
#define KEYS_LOWER_GERMAN { \
"q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", "\n", \
"a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä", "\n", \
"ABC", "_", "y", "x", "c", "v", "b", "n", "m", "_", LV_SYMBOL_BACKSPACE, "\n", \
"1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, "" \
}
#define ATTRIBUTES_LOWER_GERMAN { \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_BTNMATRIX_CTRL_HIDDEN | 1, 2, 2, 2, 2, 2, 2, 2, LV_BTNMATRIX_CTRL_HIDDEN | 1, LV_BTNMATRIX_CTRL_CHECKED | 3, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 7, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2 \
}
/* Uppercase layer */
#define KEYS_UPPER_GERMAN { \
"Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "Ü", "\n", \
"A", "S", "D", "F", "G", "H", "J", "K", "L", "Ö", "Ä", "\n", \
"abc", "_", "Y", "X", "C", "V", "B", "N", "M", "_", LV_SYMBOL_BACKSPACE, "\n", \
"1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, "" \
}
#define ATTRIBUTES_UPPER_GERMAN { \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_BTNMATRIX_CTRL_HIDDEN | 1, 2, 2, 2, 2, 2, 2, 2, LV_BTNMATRIX_CTRL_HIDDEN | 1, LV_BTNMATRIX_CTRL_CHECKED | 3, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 7, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2 \
}
/* Symbol layer */
#define KEYS_SYMBOL_GERMAN { \
"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", LV_SYMBOL_BACKSPACE, "\n", \
"abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n", \
"\\", "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n", \
LV_SYMBOL_KEYBOARD, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, "" \
}
#define ATTRIBUTES_SYMBOL_GERMAN { \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_BTNMATRIX_CTRL_CHECKED | 2, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 6, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2 \
}
/**
* All layouts
**/
static const char * const names =
LV_SYMBOL_KEYBOARD " " NAME_ENGLISH_US "\n"
LV_SYMBOL_KEYBOARD " " NAME_GERMAN;
static const char ** const keys_lower[] = {
(const char * const [])KEYS_LOWER_ENGLISH_US,
(const char * const [])KEYS_LOWER_GERMAN
};
static const lv_btnmatrix_ctrl_t * const attributes_lower[] = {
(lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_ENGLISH_US,
(lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_GERMAN
};
static const char ** const keys_upper[] = {
(const char * const [])KEYS_UPPER_ENGLISH_US,
(const char * const [])KEYS_UPPER_GERMAN
};
static const lv_btnmatrix_ctrl_t *attributes_upper[] = {
(lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_ENGLISH_US,
(lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_GERMAN
};
static const char ** const keys_symbol[] = {
(const char * const [])KEYS_SYMBOL_ENGLISH_US,
(const char * const [])KEYS_SYMBOL_GERMAN
};
static const lv_btnmatrix_ctrl_t *attributes_symbol[] = {
(lv_btnmatrix_ctrl_t[])ATTRIBUTES_SYMBOL_ENGLISH_US,
(lv_btnmatrix_ctrl_t[])ATTRIBUTES_SYMBOL_GERMAN
};
/**
* Functions
**/
char *get_layout_names(void) {
return names;
}
void apply_layout(lv_obj_t *keyboard, layout_t layout) {
if (layout < 0 || layout >= NUM_LAYOUTS) {
return;
}
lv_keyboard_set_map(keyboard, LV_KEYBOARD_MODE_TEXT_LOWER, keys_lower[layout], attributes_lower[layout]);
lv_keyboard_set_map(keyboard, LV_KEYBOARD_MODE_TEXT_UPPER, keys_upper[layout], attributes_upper[layout]);
lv_keyboard_set_map(keyboard, LV_KEYBOARD_MODE_SPECIAL, keys_symbol[layout], attributes_symbol[layout]);
}