Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial working Clueboard California Macropad w/ proton-c fixes #39

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/boards/arm/planck/planck_rev6.dts
Original file line number Diff line number Diff line change
Expand Up @@ -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>,
Expand Down
5 changes: 3 additions & 2 deletions app/boards/arm/proton_c/board.cmake
Original file line number Diff line number Diff line change
@@ -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 changes: 14 additions & 0 deletions app/boards/shields/clueboard_california/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -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 changes: 5 additions & 0 deletions app/boards/shields/clueboard_california/Kconfig.shield
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Copyright (c) 2020 Pete Johanson
# SPDX-License-Identifier: MIT

config SHIELD_CLUEBOARD_CALIFORNIA
def_bool $(shields_list_contains,clueboard_california)
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* 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: Encoder node(s)
// TODO: OLED node
// TODO: RGB node(s)
};

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

#include <dt-bindings/zmk/keys.h>

#define CC_RAIS ZC_CSTM(1)
#define CC_LOWR ZC_CSTM(2)
34 changes: 34 additions & 0 deletions app/boards/shields/clueboard_california/keymap/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@

#include <zmk/keys.h>
#include <zmk/keymap.h>
#include <keymap.h>

bool zmk_handle_key_user(struct zmk_key_event *key_event)
{
switch (key_event->key)
{
case CC_LOWR:
if (key_event->pressed)
{
zmk_keymap_layer_activate(1);
}
else
{
zmk_keymap_layer_deactivate(1);
}

return false;
case CC_RAIS:
if (key_event->pressed)
{
zmk_keymap_layer_activate(2);
}
else
{
zmk_keymap_layer_deactivate(2);
}
return false;
}

return true;
};
24 changes: 24 additions & 0 deletions app/boards/shields/clueboard_california/keymap/keymap.overlay
Original file line number Diff line number Diff line change
@@ -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 changes: 24 additions & 0 deletions app/boards/shields/clueboard_california/readme.md
Original file line number Diff line number Diff line change
@@ -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 |
4 changes: 2 additions & 2 deletions app/boards/shields/kyria/kyria.overlay
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
};

kscan_left: kscan_left {
compatible = "gpio-kscan";
compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_LEFT";

diode-direction = "row2col";
Expand All @@ -49,7 +49,7 @@
};

kscan_right: kscan_right {
compatible = "gpio-kscan";
compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_RIGHT";

diode-direction = "row2col";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
};

left_hand: kscan_1 {
compatible = "gpio-kscan";
compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_LEFT";

diode-direction = "row2col";
Expand All @@ -32,7 +32,7 @@
};

right_hand: kscan_2 {
compatible = "gpio-kscan";
compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN_RIGHT";

diode-direction = "row2col";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
};

kscan0: kscan {
compatible = "gpio-kscan";
compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN";

diode-direction = "row2col";
Expand Down
3 changes: 2 additions & 1 deletion app/drivers/zephyr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
8 changes: 8 additions & 0 deletions app/drivers/zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

description: GPIO keyboard matrix controller

compatible: "gpio-kscan"
compatible: "zmk,kscan-gpio-matrix"

include: kscan.yaml

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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;
Expand Down Expand Up @@ -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) */
3 changes: 3 additions & 0 deletions app/include/zmk/matrix.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down