Test
This commit is contained in:
parent
aad030e0d4
commit
f7a4f6f97b
9 changed files with 255 additions and 4 deletions
|
@ -25,4 +25,7 @@ config ZMK_BLE
|
|||
config ZMK_USB
|
||||
default y
|
||||
|
||||
config IS31FL3733
|
||||
default y
|
||||
|
||||
endif # BOARD_NRF52840_M2
|
||||
|
|
|
@ -16,7 +16,11 @@
|
|||
zephyr,sram = &sram0;
|
||||
zephyr,flash = &flash0;
|
||||
};
|
||||
|
||||
ext-power {
|
||||
compatible = "zmk,ext-power-generic";
|
||||
label = "EXT_POWER";
|
||||
control-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
red_led: led_0 {
|
||||
|
@ -32,9 +36,19 @@
|
|||
label = "Blue LED";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
compatible = "nordic,nrf-twi";
|
||||
status = "okay";
|
||||
sda-pin = <36>;
|
||||
scl-pin = <37>;
|
||||
clock-frequency = < I2C_BITRATE_STANDARD >;
|
||||
is31fl3733a: is31fl3733@50 {
|
||||
compatible = "issi,is31fl3733";
|
||||
label = "IS31FL3733A";
|
||||
reg = <0x50>;
|
||||
};
|
||||
};
|
||||
&adc {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -19,3 +19,28 @@ CONFIG_SETTINGS_NVS=y
|
|||
CONFIG_FLASH=y
|
||||
CONFIG_FLASH_PAGE_LAYOUT=y
|
||||
CONFIG_FLASH_MAP=y
|
||||
CONFIG_SENSOR=y
|
||||
CONFIG_IS31FL3733=y
|
||||
# Turn on logging.
|
||||
CONFIG_LOG=y
|
||||
CONFIG_ZMK_LOG_LEVEL_DBG=y
|
||||
CONFIG_LOG_STRDUP_BUF_COUNT=16
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_LOG_BACKEND_SHOW_COLOR=y
|
||||
|
||||
# Log via USB.
|
||||
CONFIG_USB_DEVICE_STACK=y
|
||||
CONFIG_USB_CDC_ACM=y
|
||||
CONFIG_USB_CDC_ACM_RINGBUF_SIZE=8192
|
||||
CONFIG_USB_CDC_ACM_DEVICE_NAME="CDC_ACM"
|
||||
CONFIG_USB_CDC_ACM_DEVICE_COUNT=1
|
||||
CONFIG_CONSOLE=y
|
||||
CONFIG_UART_INTERRUPT_DRIVEN=y
|
||||
CONFIG_UART_LINE_CTRL=y
|
||||
CONFIG_UART_CONSOLE=y
|
||||
CONFIG_USB_UART_CONSOLE=y
|
||||
CONFIG_UART_CONSOLE_ON_DEV_NAME="CDC_ACM_0"
|
||||
CONFIG_ZMK_EXT_POWER=y
|
||||
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=60000
|
||||
CONFIG_DEVICE_POWER_MANAGEMENT=y
|
||||
CONFIG_ZMK_SLEEP=y
|
29
app/boards/arm/retic1337_tkl/Kconfig.defconfig
Normal file
29
app/boards/arm/retic1337_tkl/Kconfig.defconfig
Normal file
|
@ -0,0 +1,29 @@
|
|||
# retic1337_tkl board configuration
|
||||
|
||||
if BOARD_RETIC1337_TKL
|
||||
|
||||
config ZMK_KEYBOARD_NAME
|
||||
default "Test_Keyboard"
|
||||
|
||||
config I2C
|
||||
default y
|
||||
|
||||
config USB_NRFX
|
||||
default y
|
||||
|
||||
config USB_DEVICE_STACK
|
||||
default y
|
||||
|
||||
config BT_CTLR
|
||||
default BT
|
||||
|
||||
config ZMK_BLE
|
||||
default y
|
||||
|
||||
config ZMK_USB
|
||||
default y
|
||||
|
||||
config IS31FL3733
|
||||
default y
|
||||
|
||||
endif # BOARD_RETIC1337_TKL
|
39
app/boards/arm/retic1337_tkl/retic1337_tkl_defconfig
Normal file
39
app/boards/arm/retic1337_tkl/retic1337_tkl_defconfig
Normal file
|
@ -0,0 +1,39 @@
|
|||
CONFIG_SOC_SERIES_NRF52X=y
|
||||
CONFIG_SOC_NRF52840_QIAA=y
|
||||
|
||||
# Enable MPU
|
||||
CONFIG_ARM_MPU=y
|
||||
|
||||
# enable GPIO
|
||||
CONFIG_GPIO=y
|
||||
|
||||
# Turn on logging, and set ZMK logging to debug output
|
||||
CONFIG_LOG=y
|
||||
CONFIG_ZMK_LOG_LEVEL_DBG=y
|
||||
|
||||
# Enable serial console
|
||||
CONFIG_SERIAL=y
|
||||
CONFIG_CONSOLE=y
|
||||
CONFIG_UART_INTERRUPT_DRIVEN=y
|
||||
CONFIG_UART_LINE_CTRL=y
|
||||
|
||||
# Enable USB UART, and set the console device
|
||||
CONFIG_UART_CONSOLE=y
|
||||
|
||||
# additional board options
|
||||
CONFIG_GPIO_AS_PINRESET=y
|
||||
|
||||
#I2C
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_NRFX=y
|
||||
CONFIG_I2C_0=y
|
||||
CONFIG_I2C_INIT_PRIORITY=60
|
||||
CONFIG_IS31FL3733=y
|
||||
CONFIG_SENSOR=y
|
||||
CONFIG_BQ274XX=y
|
||||
CONFIG_EC11=y
|
||||
CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y
|
||||
CONFIG_ZMK_EXT_POWER=y
|
||||
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=60000
|
||||
CONFIG_DEVICE_POWER_MANAGEMENT=y
|
||||
CONFIG_ZMK_SLEEP=y
|
|
@ -11,7 +11,6 @@
|
|||
zmk,kscan = &kscan0;
|
||||
zmk,matrix_transform = &default_transform;
|
||||
};
|
||||
|
||||
kscan0: kscan {
|
||||
compatible = "zmk,kscan-gpio-matrix";
|
||||
label = "KSCAN";
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
# Copyright (c) 2020 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
#zephyr_library()
|
||||
|
||||
#zephyr_library_sources(led.c)
|
||||
>>>>>>> Stashed changes
|
||||
add_subdirectory_ifdef(CONFIG_IS31FL3733 is31fl3733)
|
||||
|
|
|
@ -169,6 +169,7 @@ static int is31fl3733_led_reset(const struct device *dev) {
|
|||
static int is31fl3733_led_init(const struct device *dev) {
|
||||
const struct is31fl3733_config *dev_cfg = dev->config;
|
||||
struct is31fl3733_data *dev_data = dev->data;
|
||||
k_busy_wait(1000);
|
||||
dev_data->i2c = device_get_binding(dev_cfg->bus_name);
|
||||
if (dev_data->i2c == NULL) {
|
||||
LOG_DBG("Failed to get I2C device");
|
||||
|
|
135
app/src/led_perkey.c
Normal file
135
app/src/led_perkey.c
Normal file
|
@ -0,0 +1,135 @@
|
|||
|
||||
#include <init.h>
|
||||
#include <zephyr.h>
|
||||
#include <device.h>
|
||||
#include <devicetree.h>
|
||||
#include <sys/__assert.h>
|
||||
#include <drivers/kscan.h>
|
||||
#include <zmk/matrix_transform.h>
|
||||
#include <zmk/event_manager.h>
|
||||
#include <zmk/events/position_state_changed.h>
|
||||
#include <drivers/led.h>
|
||||
#include <logging/log.h>
|
||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||
#define ZMK_KSCAN_EVENT_STATE_PRESSED 0
|
||||
#define ZMK_KSCAN_EVENT_STATE_RELEASED 1
|
||||
#define BASE_RED 255
|
||||
#define BASE_GREEN 0
|
||||
#define BASE_BLUE 255
|
||||
uint8_t led_base_color[3] = {BASE_RED, BASE_GREEN, BASE_BLUE};
|
||||
#define PRESSED_RED 250
|
||||
#define PRESSED_GREEN 0
|
||||
#define PRESSED_BLUE 0
|
||||
uint8_t pressed_color[3] = {PRESSED_RED, PRESSED_GREEN, PRESSED_BLUE};
|
||||
struct zmk_kscan_event {
|
||||
uint32_t row;
|
||||
uint32_t column;
|
||||
uint32_t state;
|
||||
};
|
||||
K_MSGQ_DEFINE(zmk_kscan_msgxq, sizeof(struct zmk_kscan_event), CONFIG_ZMK_KSCAN_EVENT_QUEUE_SIZE, 4);
|
||||
struct zmk_kscan_msg_processor {
|
||||
struct k_work work;
|
||||
} led_processor;
|
||||
|
||||
static void zmk_kscan_callback_led(const struct device *dev, uint32_t row, uint32_t column,
|
||||
bool pressed) {
|
||||
struct zmk_kscan_event evx = {
|
||||
.row = row,
|
||||
.column = column,
|
||||
.state = (pressed ? ZMK_KSCAN_EVENT_STATE_PRESSED : ZMK_KSCAN_EVENT_STATE_RELEASED)};
|
||||
|
||||
k_msgq_put(&zmk_kscan_msgxq, &evx, K_NO_WAIT);
|
||||
k_work_submit(&led_processor.work);
|
||||
}
|
||||
|
||||
uint8_t led_lookup_matrix[108] = { 1, 0, 3, 5, 7, 9, 11, 13, 15, 65, 0, 67, 69, 71, 73, 75, 77, 79,
|
||||
17, 20, 22, 24, 26, 28, 30, 80, 81, 82, 83, 84, 85, 0, 86, 87, 88, 90,
|
||||
19, 21, 23, 25, 27, 29, 31, 96, 98, 100, 102, 104, 106, 0, 108, 109, 110, 92,
|
||||
34, 36, 38, 40, 42, 44, 46, 97, 99, 101, 103, 105, 0, 0, 107, 0, 0, 0,
|
||||
35, 0, 37, 39, 41, 43, 45, 47, 112, 113, 114, 115, 0, 0, 119, 0, 111, 0,
|
||||
49, 51, 53, 0, 0, 0, 0, 57, 0, 0, 0, 62, 116, 118, 121, 123, 125, 127};
|
||||
|
||||
void set_led_rgb(uint8_t led, uint8_t *rgb){
|
||||
struct device *dev = NULL;
|
||||
if (led < 64){
|
||||
dev = device_get_binding("IS31FL3733A");
|
||||
}
|
||||
else{
|
||||
dev = device_get_binding("IS31FL3733B");
|
||||
led = led - 64;
|
||||
}
|
||||
LOG_INF("Setting LED: %d to %d, %d, %d, on Device: %s\n", led, rgb[0], rgb[1], rgb[2], dev->name);
|
||||
if (dev == NULL) {
|
||||
LOG_ERR("Failed to get device binding\n");
|
||||
return;
|
||||
}
|
||||
led_set_color(dev, led, 3, rgb);
|
||||
}
|
||||
void zmk_kscan_process_msgxq(struct k_work *item) {
|
||||
struct zmk_kscan_event evx;
|
||||
|
||||
while (k_msgq_get(&zmk_kscan_msgxq, &evx, K_NO_WAIT) == 0) {
|
||||
bool pressed = (evx.state == ZMK_KSCAN_EVENT_STATE_PRESSED);
|
||||
uint32_t position = zmk_matrix_transform_row_column_to_position(evx.row, evx.column);
|
||||
struct position_state_changed *pos_evx;
|
||||
LOG_INF("Row: %d, col: %d, position: %d, pressed: %s, turning LED: %d %s\n", evx.row, evx.column, position,
|
||||
(pressed ? "true" : "false"), led_lookup_matrix[position], (pressed ? "ON" : "OFF") );
|
||||
if (pressed){
|
||||
set_led_rgb(led_lookup_matrix[position], pressed_color);
|
||||
}
|
||||
else{
|
||||
set_led_rgb(led_lookup_matrix[position], led_base_color);
|
||||
}
|
||||
pos_evx = new_position_state_changed();
|
||||
pos_evx->state = pressed;
|
||||
pos_evx->position = position;
|
||||
pos_evx->timestamp = k_uptime_get();
|
||||
ZMK_EVENT_RAISE(pos_evx);
|
||||
}
|
||||
}
|
||||
void set_all_on(const struct device *dev){
|
||||
for (uint8_t led = 0; led < 192; led++) {
|
||||
led_on(dev, led);
|
||||
}
|
||||
}
|
||||
void set_all_rgb(const struct device *dev, uint8_t *rgb){
|
||||
for (uint8_t led = 0; led < 64; led++) {
|
||||
led_set_color(dev, led, 3, rgb);
|
||||
}
|
||||
}
|
||||
int led_perkey_init(char *name) {
|
||||
LOG_INF("ZMK_PER_KEY_LED INIT\n");
|
||||
const struct device *dev_a = device_get_binding("IS31FL3733A");
|
||||
if (!dev_a) {
|
||||
LOG_ERR("I2C: Device driver not found.\n");
|
||||
return 0;
|
||||
}
|
||||
const struct device *dev_b = device_get_binding("IS31FL3733B");
|
||||
if (!dev_b) {
|
||||
LOG_ERR("I2C: Device driver not found.\n");
|
||||
return 0;
|
||||
}
|
||||
if (dev_a == NULL) {
|
||||
LOG_ERR("Failed to get device binding\n");
|
||||
return 0;
|
||||
}
|
||||
LOG_INF("device is %p, name is %s\n", dev_a, dev_a->name);
|
||||
if (dev_b == NULL) {
|
||||
LOG_ERR("Failed to get device binding\n");
|
||||
return 0;
|
||||
}
|
||||
LOG_INF("device is %p, name is %s\n", dev_b, dev_b->name);
|
||||
set_all_on(dev_a);
|
||||
set_all_on(dev_b);
|
||||
set_all_rgb(dev_a, led_base_color);
|
||||
set_all_rgb(dev_b, led_base_color);
|
||||
const struct device *kscan_dev = device_get_binding(name);
|
||||
if (kscan_dev == NULL) {
|
||||
LOG_ERR("Failed to get the KSCAN device");
|
||||
return -EINVAL;
|
||||
}
|
||||
k_work_init(&led_processor.work, zmk_kscan_process_msgxq);
|
||||
kscan_config(kscan_dev, zmk_kscan_callback_led);
|
||||
kscan_enable_callback(kscan_dev);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue