From 7e659851c80bf2819554d93ad9971f56aa5b225b Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 20 Jun 2020 17:54:52 -0400 Subject: Refactor matrix transform, positions pervasively * Do mapping to positions right in kscan handler, and then surface positions throughout the API. --- app/src/matrix_transform.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/src/matrix_transform.c (limited to 'app/src/matrix_transform.c') 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 +#include +#include +#include + +#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 */ +}; -- cgit v1.2.3