mirror of
https://github.com/osiweb/unified_retro_keyboard.git
synced 2025-01-17 21:31:09 +00:00
Added functions to change keymaps
- asdf_keymaps_select_keymap() function to select a keymap - asdf_keymaps_select_n_{set|clear} functions to set a bit in keymap number, to support dip switches.
This commit is contained in:
parent
97cda49e31
commit
16dc913f74
@ -80,7 +80,7 @@ void asdf_put_code(asdf_keycode_t code)
|
|||||||
asdf_buffer_put(asdf_keycode_buffer, code);
|
asdf_buffer_put(asdf_keycode_buffer, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROCEDURE: asdf_get_code
|
// PROCEDURE: asdf_next_code
|
||||||
// INPUTS: none
|
// INPUTS: none
|
||||||
// OUTPUTS: (asdf_keycode_t) returns next value in buffer.
|
// OUTPUTS: (asdf_keycode_t) returns next value in buffer.
|
||||||
//
|
//
|
||||||
@ -94,7 +94,7 @@ void asdf_put_code(asdf_keycode_t code)
|
|||||||
//
|
//
|
||||||
// COMPLEXITY: 1
|
// COMPLEXITY: 1
|
||||||
//
|
//
|
||||||
asdf_keycode_t asdf_get_code(void)
|
asdf_keycode_t asdf_next_code(void)
|
||||||
{
|
{
|
||||||
return asdf_buffer_get(asdf_keycode_buffer);
|
return asdf_buffer_get(asdf_keycode_buffer);
|
||||||
}
|
}
|
||||||
@ -164,6 +164,22 @@ static void asdf_activate_action(action_t keycode)
|
|||||||
asdf_send_reset();
|
asdf_send_reset();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ACTION_MAPSEL_0: {
|
||||||
|
asdf_keymaps_map_select_0_set();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACTION_MAPSEL_1: {
|
||||||
|
asdf_keymaps_map_select_1_set();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACTION_MAPSEL_2: {
|
||||||
|
asdf_keymaps_map_select_2_set();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACTION_MAPSEL_3: {
|
||||||
|
asdf_keymaps_map_select_3_set();
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ACTION_NOTHING:
|
case ACTION_NOTHING:
|
||||||
case ACTION_LOCAL:
|
case ACTION_LOCAL:
|
||||||
case ACTION_BREAK:
|
case ACTION_BREAK:
|
||||||
@ -218,6 +234,23 @@ static void asdf_deactivate_action(action_t keycode)
|
|||||||
}
|
}
|
||||||
case ACTION_REPEAT: {
|
case ACTION_REPEAT: {
|
||||||
asdf_repeat_deactivate();
|
asdf_repeat_deactivate();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACTION_MAPSEL_0: {
|
||||||
|
asdf_keymaps_map_select_0_clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACTION_MAPSEL_1: {
|
||||||
|
asdf_keymaps_map_select_1_clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACTION_MAPSEL_2: {
|
||||||
|
asdf_keymaps_map_select_2_clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACTION_MAPSEL_3: {
|
||||||
|
asdf_keymaps_map_select_3_clear();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case ACTION_NOTHING:
|
case ACTION_NOTHING:
|
||||||
case ACTION_LOCAL:
|
case ACTION_LOCAL:
|
||||||
|
@ -50,6 +50,10 @@ typedef enum {
|
|||||||
ACTION_HERE_IS,
|
ACTION_HERE_IS,
|
||||||
ACTION_CLEAR,
|
ACTION_CLEAR,
|
||||||
ACTION_RESET,
|
ACTION_RESET,
|
||||||
|
ACTION_MAPSEL_0,
|
||||||
|
ACTION_MAPSEL_1,
|
||||||
|
ACTION_MAPSEL_2,
|
||||||
|
ACTION_MAPSEL_3,
|
||||||
ACTION_FN_1,
|
ACTION_FN_1,
|
||||||
ACTION_FN_2,
|
ACTION_FN_2,
|
||||||
ACTION_FN_3,
|
ACTION_FN_3,
|
||||||
@ -59,7 +63,23 @@ typedef enum {
|
|||||||
ACTION_FN_7,
|
ACTION_FN_7,
|
||||||
ACTION_FN_8,
|
ACTION_FN_8,
|
||||||
ACTION_FN_9,
|
ACTION_FN_9,
|
||||||
ACTION_FN_10
|
ACTION_FN_10,
|
||||||
|
RESERVED_1,
|
||||||
|
RESERVED_2,
|
||||||
|
RESERVED_3,
|
||||||
|
RESERVED_4,
|
||||||
|
RESERVED_5,
|
||||||
|
RESERVED_6,
|
||||||
|
RESERVED_7,
|
||||||
|
RESERVED_8,
|
||||||
|
RESERVED_9,
|
||||||
|
RESERVED_10,
|
||||||
|
RESERVED_11,
|
||||||
|
RESERVED_12,
|
||||||
|
RESERVED_13,
|
||||||
|
RESERVED_14,
|
||||||
|
RESERVED_15,
|
||||||
|
RESERVED_16
|
||||||
} action_t;
|
} action_t;
|
||||||
|
|
||||||
|
|
||||||
@ -85,11 +105,11 @@ void asdf_keyscan(void);
|
|||||||
// NOTES: If buffer is full, silently drop the code.
|
// NOTES: If buffer is full, silently drop the code.
|
||||||
void asdf_put_code(asdf_keycode_t code);
|
void asdf_put_code(asdf_keycode_t code);
|
||||||
|
|
||||||
// PROCEDURE: asdf_get_code
|
// PROCEDURE: asdf_next_code
|
||||||
// INPUTS: none
|
// INPUTS: none
|
||||||
// OUTPUTS: (asdf_keycode_t) returns next value in buffer.
|
// OUTPUTS: (asdf_keycode_t) returns next value in buffer.
|
||||||
// DESCRIPTION: Takes a keycode argument and buffers for output.
|
// DESCRIPTION: Takes a keycode argument and buffers for output.
|
||||||
asdf_keycode_t asdf_get_code(void);
|
asdf_keycode_t asdf_next_code(void);
|
||||||
|
|
||||||
#endif // !defined (ASDF_H)
|
#endif // !defined (ASDF_H)
|
||||||
|
|
||||||
|
@ -80,6 +80,167 @@ void asdf_keymaps_select_keymap(uint8_t index)
|
|||||||
//
|
//
|
||||||
void asdf_keymaps_init(void)
|
void asdf_keymaps_init(void)
|
||||||
{
|
{
|
||||||
|
asdf_keymaps_select_keymap(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_0_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 0 switch is open. Clears the 0 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_0_clear(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index & (~ASDF_KEYMAP_BIT_0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_0_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 0 switch is closed. Sets the 0 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_0_set(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index | ASDF_KEYMAP_BIT_0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_1_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 1 switch is open. Clears the 1 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_1_clear(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index & (~ASDF_KEYMAP_BIT_1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_1_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 1 switch is closed. Sets the 1 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_1_set(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index | ASDF_KEYMAP_BIT_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_2_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 2 switch is open. Clears the 2 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_2_clear(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index & (~ASDF_KEYMAP_BIT_2));
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_2_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 2 switch is closed. Sets the 2 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_2_set(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index | ASDF_KEYMAP_BIT_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_3_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 3 switch is open. Clears the 3 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_3_clear(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index & (~ASDF_KEYMAP_BIT_3));
|
||||||
|
}
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_3_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
//
|
||||||
|
// DESCRIPTION: called when map select 3 switch is closed. Sets the 3 bit in the
|
||||||
|
// keymap index.
|
||||||
|
//
|
||||||
|
// SIDE EFFECTS: changes selected keymap
|
||||||
|
//
|
||||||
|
// NOTES:
|
||||||
|
//
|
||||||
|
// SCOPE: public
|
||||||
|
//
|
||||||
|
// COMPLEXITY: 1
|
||||||
|
//
|
||||||
|
void asdf_keymaps_map_select_3_set(void)
|
||||||
|
{
|
||||||
|
asdf_keymaps_select_keymap(keymap_index | ASDF_KEYMAP_BIT_3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROCEDURE: asdf_keymaps_get_code
|
// PROCEDURE: asdf_keymaps_get_code
|
||||||
@ -94,12 +255,15 @@ void asdf_keymaps_init(void)
|
|||||||
//
|
//
|
||||||
// SCOPE: public
|
// SCOPE: public
|
||||||
//
|
//
|
||||||
|
// NOTES: Since the first value in each row is the physical row number, we add 1
|
||||||
|
// to the column number to read the code for a given row and column number.
|
||||||
|
//
|
||||||
// COMPLEXITY: 1
|
// COMPLEXITY: 1
|
||||||
//
|
//
|
||||||
asdf_keycode_t asdf_keymaps_get_code(const uint8_t row, const uint8_t col,
|
asdf_keycode_t asdf_keymaps_get_code(const uint8_t row, const uint8_t col,
|
||||||
const uint8_t modifier_index)
|
const uint8_t modifier_index)
|
||||||
{
|
{
|
||||||
const keycode_matrix_t *matrix = modifier_matrix[modifier_index];
|
const keycode_matrix_t *matrix = keymap_matrix[keymap_index][modifier_index];
|
||||||
|
|
||||||
return FLASH_READ_MATRIX_ELEMENT(*matrix, row, col);
|
return FLASH_READ_MATRIX_ELEMENT(*matrix, row, col);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,78 @@
|
|||||||
#if !defined(ASDF_KEYMAPS_H)
|
#if !defined(ASDF_KEYMAPS_H)
|
||||||
#define ASDF_KEYMAPS_H
|
#define ASDF_KEYMAPS_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define ASDF_KEYMAP_BIT_0 1
|
||||||
|
#define ASDF_KEYMAP_BIT_1 2
|
||||||
|
#define ASDF_KEYMAP_BIT_2 4
|
||||||
|
#define ASDF_KEYMAP_BIT_3 8
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_select_keymap
|
||||||
|
// INPUTS: (uint8_t) index - index of the keymap number to select
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: accepts a index value. If the requested keymap index is valid,
|
||||||
|
// then assign the value to the global (to the module) keymap_index variable. If
|
||||||
|
// requested index is not valid then do nothing.
|
||||||
|
void asdf_keymaps_select_keymap(uint8_t index);
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_0_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 0 switch is open. Clears the 0 bit in the
|
||||||
|
// keymap index.
|
||||||
|
void asdf_keymaps_map_select_0_clear(void);
|
||||||
|
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_0_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 0 switch is closed. Sets the 0 bit in the
|
||||||
|
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
|
||||||
|
void asdf_keymaps_map_select_0_set(void);
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_1_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 1 switch is open. Clears the 1 bit in the
|
||||||
|
// keymap index.
|
||||||
|
void asdf_keymaps_map_select_1_clear(void);
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_1_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 1 switch is closed. Sets the 0 bit in the
|
||||||
|
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
|
||||||
|
void asdf_keymaps_map_select_1_set(void);
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_2_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 2 switch is open. Clears the 2 bit in the
|
||||||
|
// keymap index.
|
||||||
|
void asdf_keymaps_map_select_2_clear(void);
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_2_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 2 switch is closed. Sets the 0 bit in the
|
||||||
|
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
|
||||||
|
void asdf_keymaps_map_select_2_set(void);
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_3_clear
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 3 switch is open. Clears the 3 bit in the
|
||||||
|
// keymap index.
|
||||||
|
void asdf_keymaps_map_select_3_clear(void);
|
||||||
|
|
||||||
|
// PROCEDURE: asdf_keymaps_map_select_3_set
|
||||||
|
// INPUTS: none
|
||||||
|
// OUTPUTS: none
|
||||||
|
// DESCRIPTION: called when map select 3 switch is closed. Sets the 0 bit in the
|
||||||
|
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
|
||||||
|
void asdf_keymaps_map_select_3_set(void);
|
||||||
|
|
||||||
// PROCEDURE: asdf_keymaps_init
|
// PROCEDURE: asdf_keymaps_init
|
||||||
// INPUTS: none
|
// INPUTS: none
|
||||||
// OUTPUTS: none
|
// OUTPUTS: none
|
||||||
@ -34,7 +106,7 @@
|
|||||||
// index, to avoid hard-coding constant index values.
|
// index, to avoid hard-coding constant index values.
|
||||||
void asdf_keymaps_init(void);
|
void asdf_keymaps_init(void);
|
||||||
|
|
||||||
// PROCEDURE: asdf_keymaps_get_code
|
// PROCEDURE: asdf_keymaps_get_`code
|
||||||
// INPUTS: row, col: row and column of key that has been pressed
|
// INPUTS: row, col: row and column of key that has been pressed
|
||||||
// modifiers_index: index into the keymap array, based on modifier state
|
// modifiers_index: index into the keymap array, based on modifier state
|
||||||
// OUTPUTS: returns a key code.
|
// OUTPUTS: returns a key code.
|
||||||
|
@ -68,7 +68,7 @@ int main(void)
|
|||||||
while (1) {
|
while (1) {
|
||||||
|
|
||||||
if (asdf_arch_tick()) {
|
if (asdf_arch_tick()) {
|
||||||
asdf_keycode_t code = asdf_get_code();
|
asdf_keycode_t code = asdf_next_code();
|
||||||
|
|
||||||
if (code != ASDF_INVALID_CODE) {
|
if (code != ASDF_INVALID_CODE) {
|
||||||
asdf_arch_send_code(code);
|
asdf_arch_send_code(code);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user