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 {
|
||||
compatible = "gpio-kscan";
|
||||
compatible = "zmk,kscan-gpio-matrix";
|
||||
label = "Keyscan Matrix";
|
||||
row-gpios = <&gpioa 10 GPIO_ACTIVE_HIGH>,
|
||||
<&gpioa 9 GPIO_ACTIVE_HIGH>,
|
||||
|
|
|
@ -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)
|
||||
|
|
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 {
|
||||
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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
};
|
||||
|
||||
kscan0: kscan {
|
||||
compatible = "gpio-kscan";
|
||||
compatible = "zmk,kscan-gpio-matrix";
|
||||
label = "KSCAN";
|
||||
|
||||
diode-direction = "row2col";
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
description: GPIO keyboard matrix controller
|
||||
|
||||
compatible: "gpio-kscan"
|
||||
compatible: "zmk,kscan-gpio-matrix"
|
||||
|
||||
include: kscan.yaml
|
||||
|
|
@ -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) */
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue