diff options
author | Pete Johanson <peter@peterjohanson.com> | 2020-06-20 17:54:52 -0400 |
---|---|---|
committer | Pete Johanson <peter@peterjohanson.com> | 2020-06-20 17:54:52 -0400 |
commit | 7e659851c80bf2819554d93ad9971f56aa5b225b (patch) | |
tree | b0d2ee4784741cbcd3e109b71230502d87691e1b /app/src/matrix_transform.c | |
parent | d65629b9a0b79b6e294419fe9a4118fb09491c91 (diff) |
Refactor matrix transform, positions pervasively
* Do mapping to positions right in kscan handler, and then
surface positions throughout the API.
Diffstat (limited to 'app/src/matrix_transform.c')
-rw-r--r-- | app/src/matrix_transform.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/app/src/matrix_transform.c b/app/src/matrix_transform.c new file mode 100644 index 0000000..7e8b481 --- /dev/null +++ b/app/src/matrix_transform.c @@ -0,0 +1,30 @@ + +#include <zephyr.h> +#include <zmk/matrix_transform.h> +#include <zmk/matrix.h> +#include <dt-bindings/zmk/matrix-transform.h> + +#define HAS_TRANSFORM DT_HAS_CHOSEN(zmk_matrix_transform) + +#if HAS_TRANSFORM +#define ZMK_KEYMAP_TRANSFORM_NODE DT_CHOSEN(zmk_matrix_transform) +#define ZMK_KEYMAP_LEN DT_PROP_LEN(ZMK_KEYMAP_TRANSFORM_NODE, map) + +#define _TRANSFORM_ENTRY(i, _) \ + [(KT_ROW(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i)) * ZMK_MATRIX_COLS) + KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i, + +static u32_t transform[] = + { UTIL_LISTIFY(ZMK_KEYMAP_LEN, _TRANSFORM_ENTRY, 0) }; + +#endif + +u32_t zmk_matrix_transform_row_column_to_position(u32_t row, u32_t column) +{ + u32_t matrix_index = (row * ZMK_MATRIX_COLS) + column; + +#if HAS_TRANSFORM + return transform[matrix_index]; +#else + return matrix_index; +#endif /* HAS_TRANSFORM */ +}; |