summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorPete Johanson <peter@peterjohanson.com>2020-06-24 10:06:35 -0400
committerPete Johanson <peter@peterjohanson.com>2020-06-24 10:14:27 -0400
commitd35a95c7afc9e5ef6f087034dbf4cbb03048f9cd (patch)
treecc5b179646d8a293f4656947c463fd58e41499e2 /app
parent23931aa4fede2d81437a01e5d69329157219c2a5 (diff)
Initial working Clueboard California Macropad w/ proton-c fixes
* Basic Clueboard Californai Macropad shield definition. * New "direct" KSCAN driver that supports non-matrix direct wiring for switches, needed for macropad that doesn't have a matrix at all. * Some renames for existing KSCAN GPIO driver to make the implied "matrix" part explicit.
Diffstat (limited to 'app')
-rw-r--r--app/boards/arm/planck/planck_rev6.dts2
-rw-r--r--app/boards/arm/proton_c/board.cmake5
-rw-r--r--app/boards/shields/clueboard_california/Kconfig.defconfig14
-rw-r--r--app/boards/shields/clueboard_california/Kconfig.shield5
-rw-r--r--app/boards/shields/clueboard_california/clueboard_california.conf0
-rw-r--r--app/boards/shields/clueboard_california/clueboard_california.overlay34
-rw-r--r--app/boards/shields/clueboard_california/keymap/keymap.overlay24
-rw-r--r--app/boards/shields/clueboard_california/readme.md24
-rw-r--r--app/boards/shields/kyria/kyria.overlay4
-rw-r--r--app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay4
-rw-r--r--app/boards/shields/petejohanson_proton_handwire/petejohanson_proton_handwire.overlay2
-rw-r--r--app/drivers/zephyr/CMakeLists.txt3
-rw-r--r--app/drivers/zephyr/Kconfig8
-rw-r--r--app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-matrix.yaml (renamed from app/drivers/zephyr/dts/bindings/gpio-kscan.yaml)2
-rw-r--r--app/drivers/zephyr/kscan_gpio_matrix.c (renamed from app/drivers/zephyr/kscan_gpio.c)6
-rw-r--r--app/include/zmk/matrix.h3
16 files changed, 129 insertions, 11 deletions
diff --git a/app/boards/arm/planck/planck_rev6.dts b/app/boards/arm/planck/planck_rev6.dts
index ef23bfd..ae002cd 100644
--- a/app/boards/arm/planck/planck_rev6.dts
+++ b/app/boards/arm/planck/planck_rev6.dts
@@ -55,7 +55,7 @@
};
kscan {
- compatible = "gpio-kscan";
+ compatible = "zmk,kscan-gpio-matrix";
label = "Keyscan Matrix";
row-gpios = <&gpioa 10 GPIO_ACTIVE_HIGH>,
<&gpioa 9 GPIO_ACTIVE_HIGH>,
diff --git a/app/boards/arm/proton_c/board.cmake b/app/boards/arm/proton_c/board.cmake
index 4843c41..9da8ea9 100644
--- a/app/boards/arm/proton_c/board.cmake
+++ b/app/boards/arm/proton_c/board.cmake
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: MIT
-board_runner_args(jlink "--device=STM32F303VC" "--speed=4000")
+board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
+board_runner_args(jlink "--device=STM32F303CC" "--speed=4000")
-include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
+include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
diff --git a/app/boards/shields/clueboard_california/Kconfig.defconfig b/app/boards/shields/clueboard_california/Kconfig.defconfig
new file mode 100644
index 0000000..2408f9f
--- /dev/null
+++ b/app/boards/shields/clueboard_california/Kconfig.defconfig
@@ -0,0 +1,14 @@
+
+if SHIELD_CLUEBOARD_CALIFORNIA
+
+config ZMK_KEYBOARD_NAME
+ default "Clueboard California Macropad"
+
+# Unable to use interrupts as the same pin number is used
+# across A & B controllers, and STM32F303CCT6 can't enable
+# interrutps for multiple controllers for the same "line"
+# for the external interrupts.
+config ZMK_KSCAN_GPIO_POLLING
+ default y
+
+endif
diff --git a/app/boards/shields/clueboard_california/Kconfig.shield b/app/boards/shields/clueboard_california/Kconfig.shield
new file mode 100644
index 0000000..eca025d
--- /dev/null
+++ b/app/boards/shields/clueboard_california/Kconfig.shield
@@ -0,0 +1,5 @@
+# Copyright (c) 2020 Pete Johanson
+# SPDX-License-Identifier: MIT
+
+config SHIELD_CLUEBOARD_CALIFORNIA
+ def_bool $(shields_list_contains,clueboard_california)
diff --git a/app/boards/shields/clueboard_california/clueboard_california.conf b/app/boards/shields/clueboard_california/clueboard_california.conf
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/app/boards/shields/clueboard_california/clueboard_california.conf
diff --git a/app/boards/shields/clueboard_california/clueboard_california.overlay b/app/boards/shields/clueboard_california/clueboard_california.overlay
new file mode 100644
index 0000000..9f52d0d
--- /dev/null
+++ b/app/boards/shields/clueboard_california/clueboard_california.overlay
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 Pete Johanson
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+/ {
+ chosen {
+ zmk,kscan = &kscan0;
+ };
+
+ kscan0: kscan_0 {
+ compatible = "zmk,kscan-gpio-direct";
+
+ label = "KSCAN";
+
+ input-gpios
+ = <&gpioa 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpioa 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpioa 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpiob 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpiob 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpiob 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpioa 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpioa 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpiob 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ , <&gpiob 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
+ ;
+
+ };
+
+ // TODO: Per-key LED node(s)
+};
+
diff --git a/app/boards/shields/clueboard_california/keymap/keymap.overlay b/app/boards/shields/clueboard_california/keymap/keymap.overlay
new file mode 100644
index 0000000..f2f49ea
--- /dev/null
+++ b/app/boards/shields/clueboard_california/keymap/keymap.overlay
@@ -0,0 +1,24 @@
+#include <dt-bindings/zmk/keys.h>
+#include <dt-bindings/zmk/matrix-transform.h>
+#include <keymap.h>
+
+/ {
+ chosen {
+ zmk,keymap = &keymap0;
+ };
+
+ keymap0: keymap {
+ compatible = "zmk,keymap";
+ label ="Default Kyria Keymap";
+ layers = <&default>;
+ };
+
+ layers {
+ compatible = "zmk,layers";
+
+ default: layer_0 {
+ label = "DEFAULT";
+ keys = <KC_9 KC_8 KC_7 KC_6 KC_5 KC_4 KC_3 KC_2 KC_1 KC_0>;
+ };
+ };
+};
diff --git a/app/boards/shields/clueboard_california/readme.md b/app/boards/shields/clueboard_california/readme.md
new file mode 100644
index 0000000..17855e1
--- /dev/null
+++ b/app/boards/shields/clueboard_california/readme.md
@@ -0,0 +1,24 @@
+# Clueboard California Macropad
+
+A small 10-key macropad in the shape of the US state of California,
+
+## Features
+
+* Per key LED.
+* Proton-C compatible, including space for the piezo speaker.
+* Direct GPIO wiring, no GPIO matrix at all.
+
+Will need to set them to be PULL HIGH, and ACTIVE LOW
+
+| Switch | Switch Pin | LED Pin |
+| ------------ | ---------- | ------- |
+| shasta1 | a10 | a2 |
+| modoc1 | a9 | b5 |
+| mendocino1 | a0 | a1 |
+| lassen1 | b8 | b4 |
+| eldorado1 | b11 | b12 |
+| big_sur1 | b9 | b10 |
+| sierra1 | a8 | a15 |
+| los_padres1 | a7 | a6 |
+| mojave1 | b1 | b0 |
+| joshua_tree1 | b2 | b3 |
diff --git a/app/boards/shields/kyria/kyria.overlay b/app/boards/shields/kyria/kyria.overlay
index af4e591..e9074f6 100644
--- a/app/boards/shields/kyria/kyria.overlay
+++ b/app/boards/shields/kyria/kyria.overlay
@@ -29,7 +29,7 @@
};
kscan_left: kscan_left {
- compatible = "gpio-kscan";
+ compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_LEFT";
diode-direction = "row2col";
@@ -49,7 +49,7 @@
};
kscan_right: kscan_right {
- compatible = "gpio-kscan";
+ compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_RIGHT";
diode-direction = "row2col";
diff --git a/app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay b/app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay
index d65b3b1..95b0835 100644
--- a/app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay
+++ b/app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay
@@ -21,7 +21,7 @@
};
left_hand: kscan_1 {
- compatible = "gpio-kscan";
+ compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_LEFT";
diode-direction = "row2col";
@@ -32,7 +32,7 @@
};
right_hand: kscan_2 {
- compatible = "gpio-kscan";
+ compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_RIGHT";
diode-direction = "row2col";
diff --git a/app/boards/shields/petejohanson_proton_handwire/petejohanson_proton_handwire.overlay b/app/boards/shields/petejohanson_proton_handwire/petejohanson_proton_handwire.overlay
index 5deaa42..65753fd 100644
--- a/app/boards/shields/petejohanson_proton_handwire/petejohanson_proton_handwire.overlay
+++ b/app/boards/shields/petejohanson_proton_handwire/petejohanson_proton_handwire.overlay
@@ -5,7 +5,7 @@
};
kscan0: kscan {
- compatible = "gpio-kscan";
+ compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN";
diode-direction = "row2col";
diff --git a/app/drivers/zephyr/CMakeLists.txt b/app/drivers/zephyr/CMakeLists.txt
index 03a97c6..b40498f 100644
--- a/app/drivers/zephyr/CMakeLists.txt
+++ b/app/drivers/zephyr/CMakeLists.txt
@@ -4,6 +4,7 @@ if(CONFIG_ZMK_KSCAN_GPIO_DRIVER)
zephyr_library()
zephyr_library_sources(
- kscan_gpio.c
+ kscan_gpio_matrix.c
+ kscan_gpio_direct.c
)
endif()
diff --git a/app/drivers/zephyr/Kconfig b/app/drivers/zephyr/Kconfig
index 2dcb3a8..cd526e8 100644
--- a/app/drivers/zephyr/Kconfig
+++ b/app/drivers/zephyr/Kconfig
@@ -3,6 +3,14 @@ config ZMK_KSCAN_GPIO_DRIVER
default y
select GPIO
+if ZMK_KSCAN_GPIO_DRIVER
+
+config ZMK_KSCAN_GPIO_POLLING
+ bool "Poll for key event triggers instead of using interrupts"
+ default n
+
+endif
+
config ZMK_KSCAN_INIT_PRIORITY
int "Keyboard scan driver init priority"
default 40
diff --git a/app/drivers/zephyr/dts/bindings/gpio-kscan.yaml b/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-matrix.yaml
index 748d3fa..5ebcbdd 100644
--- a/app/drivers/zephyr/dts/bindings/gpio-kscan.yaml
+++ b/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-matrix.yaml
@@ -3,7 +3,7 @@
description: GPIO keyboard matrix controller
-compatible: "gpio-kscan"
+compatible: "zmk,kscan-gpio-matrix"
include: kscan.yaml
diff --git a/app/drivers/zephyr/kscan_gpio.c b/app/drivers/zephyr/kscan_gpio_matrix.c
index 76606d8..22217ef 100644
--- a/app/drivers/zephyr/kscan_gpio.c
+++ b/app/drivers/zephyr/kscan_gpio_matrix.c
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: MIT
*/
-#define DT_DRV_COMPAT gpio_kscan
+#define DT_DRV_COMPAT zmk_kscan_gpio_matrix
#include <device.h>
#include <drivers/kscan.h>
@@ -13,6 +13,8 @@
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
+#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT)
+
struct kscan_gpio_item_config
{
char *label;
@@ -254,3 +256,5 @@ static int kscan_gpio_config_interrupts(struct device **devices,
&gpio_driver_api_##n);
DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT)
+
+#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */
diff --git a/app/include/zmk/matrix.h b/app/include/zmk/matrix.h
index 783c98e..5397cfb 100644
--- a/app/include/zmk/matrix.h
+++ b/app/include/zmk/matrix.h
@@ -5,6 +5,9 @@
#if DT_NODE_HAS_PROP(ZMK_MATRIX_NODE_ID,row_gpios)
#define ZMK_MATRIX_ROWS DT_PROP_LEN(ZMK_MATRIX_NODE_ID,row_gpios)
#define ZMK_MATRIX_COLS DT_PROP_LEN(ZMK_MATRIX_NODE_ID,col_gpios)
+#elif DT_NODE_HAS_PROP(ZMK_MATRIX_NODE_ID,input_gpios)
+#define ZMK_MATRIX_ROWS 1
+#define ZMK_MATRIX_COLS DT_PROP_LEN(ZMK_MATRIX_NODE_ID,input_gpios)
#else
#define ZMK_MATRIX_ROWS DT_PROP(ZMK_MATRIX_NODE_ID,rows)
#define ZMK_MATRIX_COLS DT_PROP(ZMK_MATRIX_NODE_ID,columns)