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.
This commit is contained in:
parent
23931aa4fe
commit
d35a95c7af
16 changed files with 129 additions and 11 deletions
|
@ -55,7 +55,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
kscan {
|
kscan {
|
||||||
compatible = "gpio-kscan";
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
label = "Keyscan Matrix";
|
label = "Keyscan Matrix";
|
||||||
row-gpios = <&gpioa 10 GPIO_ACTIVE_HIGH>,
|
row-gpios = <&gpioa 10 GPIO_ACTIVE_HIGH>,
|
||||||
<&gpioa 9 GPIO_ACTIVE_HIGH>,
|
<&gpioa 9 GPIO_ACTIVE_HIGH>,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# 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)
|
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
|
||||||
|
|
14
app/boards/shields/clueboard_california/Kconfig.defconfig
Normal file
14
app/boards/shields/clueboard_california/Kconfig.defconfig
Normal file
|
@ -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
|
5
app/boards/shields/clueboard_california/Kconfig.shield
Normal file
5
app/boards/shields/clueboard_california/Kconfig.shield
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (c) 2020 Pete Johanson
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config SHIELD_CLUEBOARD_CALIFORNIA
|
||||||
|
def_bool $(shields_list_contains,clueboard_california)
|
|
@ -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)
|
||||||
|
};
|
||||||
|
|
|
@ -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>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
24
app/boards/shields/clueboard_california/readme.md
Normal file
24
app/boards/shields/clueboard_california/readme.md
Normal file
|
@ -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 |
|
|
@ -29,7 +29,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
kscan_left: kscan_left {
|
kscan_left: kscan_left {
|
||||||
compatible = "gpio-kscan";
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
label = "KSCAN_LEFT";
|
label = "KSCAN_LEFT";
|
||||||
|
|
||||||
diode-direction = "row2col";
|
diode-direction = "row2col";
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
kscan_right: kscan_right {
|
kscan_right: kscan_right {
|
||||||
compatible = "gpio-kscan";
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
label = "KSCAN_RIGHT";
|
label = "KSCAN_RIGHT";
|
||||||
|
|
||||||
diode-direction = "row2col";
|
diode-direction = "row2col";
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
left_hand: kscan_1 {
|
left_hand: kscan_1 {
|
||||||
compatible = "gpio-kscan";
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
label = "KSCAN_LEFT";
|
label = "KSCAN_LEFT";
|
||||||
|
|
||||||
diode-direction = "row2col";
|
diode-direction = "row2col";
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
right_hand: kscan_2 {
|
right_hand: kscan_2 {
|
||||||
compatible = "gpio-kscan";
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
label = "KSCAN_RIGHT";
|
label = "KSCAN_RIGHT";
|
||||||
|
|
||||||
diode-direction = "row2col";
|
diode-direction = "row2col";
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
kscan0: kscan {
|
kscan0: kscan {
|
||||||
compatible = "gpio-kscan";
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
label = "KSCAN";
|
label = "KSCAN";
|
||||||
|
|
||||||
diode-direction = "row2col";
|
diode-direction = "row2col";
|
||||||
|
|
|
@ -4,6 +4,7 @@ if(CONFIG_ZMK_KSCAN_GPIO_DRIVER)
|
||||||
|
|
||||||
zephyr_library()
|
zephyr_library()
|
||||||
zephyr_library_sources(
|
zephyr_library_sources(
|
||||||
kscan_gpio.c
|
kscan_gpio_matrix.c
|
||||||
|
kscan_gpio_direct.c
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -3,6 +3,14 @@ config ZMK_KSCAN_GPIO_DRIVER
|
||||||
default y
|
default y
|
||||||
select GPIO
|
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
|
config ZMK_KSCAN_INIT_PRIORITY
|
||||||
int "Keyboard scan driver init priority"
|
int "Keyboard scan driver init priority"
|
||||||
default 40
|
default 40
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
description: GPIO keyboard matrix controller
|
description: GPIO keyboard matrix controller
|
||||||
|
|
||||||
compatible: "gpio-kscan"
|
compatible: "zmk,kscan-gpio-matrix"
|
||||||
|
|
||||||
include: kscan.yaml
|
include: kscan.yaml
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DT_DRV_COMPAT gpio_kscan
|
#define DT_DRV_COMPAT zmk_kscan_gpio_matrix
|
||||||
|
|
||||||
#include <device.h>
|
#include <device.h>
|
||||||
#include <drivers/kscan.h>
|
#include <drivers/kscan.h>
|
||||||
|
@ -13,6 +13,8 @@
|
||||||
|
|
||||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
|
|
||||||
|
#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT)
|
||||||
|
|
||||||
struct kscan_gpio_item_config
|
struct kscan_gpio_item_config
|
||||||
{
|
{
|
||||||
char *label;
|
char *label;
|
||||||
|
@ -254,3 +256,5 @@ static int kscan_gpio_config_interrupts(struct device **devices,
|
||||||
&gpio_driver_api_##n);
|
&gpio_driver_api_##n);
|
||||||
|
|
||||||
DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT)
|
DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT)
|
||||||
|
|
||||||
|
#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */
|
|
@ -5,6 +5,9 @@
|
||||||
#if DT_NODE_HAS_PROP(ZMK_MATRIX_NODE_ID,row_gpios)
|
#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_ROWS DT_PROP_LEN(ZMK_MATRIX_NODE_ID,row_gpios)
|
||||||
#define ZMK_MATRIX_COLS DT_PROP_LEN(ZMK_MATRIX_NODE_ID,col_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
|
#else
|
||||||
#define ZMK_MATRIX_ROWS DT_PROP(ZMK_MATRIX_NODE_ID,rows)
|
#define ZMK_MATRIX_ROWS DT_PROP(ZMK_MATRIX_NODE_ID,rows)
|
||||||
#define ZMK_MATRIX_COLS DT_PROP(ZMK_MATRIX_NODE_ID,columns)
|
#define ZMK_MATRIX_COLS DT_PROP(ZMK_MATRIX_NODE_ID,columns)
|
||||||
|
|
Loading…
Reference in a new issue