summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle McCreery <mccreery.kyle@gmail.com>2021-12-13 15:41:35 -0500
committerGitHub <noreply@github.com>2021-12-13 14:41:35 -0600
commit569a2ee2cc9016b6bd7b65c557b5762f1679f278 (patch)
tree4175563d5506e3670ac0d5a40176599380129123
parentdf1ae494c7f01587dc56f856fd238a7748477d75 (diff)
[New Shield] Murphpad (#806)
* initial commit * initial commit * Encode, OLED, and RGB Nice Nano support added as well as refining default keymap. * tweaking keymap * Prepared murphpad for PR. Includes adding support for second encoder, OLED, and underglow RGB * Enabled OLED by default. * removed naked60 config files * Per PR feedback from ZMK maintainers, added hardware metadata file and renamed Pro Micro pins. * removed tabs from keymap and replaced with normal spaces * Update app/boards/shields/murphpad/murphpad.keymap Co-authored-by: Nick Winans <nick@winans.codes> * Update app/boards/shields/murphpad/murphpad.zmk.yml Co-authored-by: Nick Winans <nick@winans.codes> * Update app/boards/shields/murphpad/murphpad.zmk.yml Co-authored-by: Nick Winans <nick@winans.codes> Co-authored-by: honorless <86894501+lesshonor@users.noreply.github.com> Co-authored-by: Nick Winans <nick@winans.codes>
-rw-r--r--app/boards/shields/murphpad/Kconfig.defconfig45
-rw-r--r--app/boards/shields/murphpad/Kconfig.shield5
-rw-r--r--app/boards/shields/murphpad/boards/nice_nano.conf3
-rw-r--r--app/boards/shields/murphpad/boards/nice_nano.overlay34
-rw-r--r--app/boards/shields/murphpad/murphpad.conf9
-rw-r--r--app/boards/shields/murphpad/murphpad.keymap85
-rw-r--r--app/boards/shields/murphpad/murphpad.overlay74
-rw-r--r--app/boards/shields/murphpad/murphpad.zmk.yml12
8 files changed, 267 insertions, 0 deletions
diff --git a/app/boards/shields/murphpad/Kconfig.defconfig b/app/boards/shields/murphpad/Kconfig.defconfig
new file mode 100644
index 0000000..6ec7e09
--- /dev/null
+++ b/app/boards/shields/murphpad/Kconfig.defconfig
@@ -0,0 +1,45 @@
+# Copyright (c) 2021 The ZMK Contributors
+# SPDX-License-Identifier: MIT
+
+if SHIELD_MURPHPAD
+
+config ZMK_KEYBOARD_NAME
+ default "MurphPad"
+
+endif
+
+if ZMK_DISPLAY
+
+config I2C
+ default y
+
+config SSD1306
+ default y
+
+config SSD1306_REVERSE_MODE
+ default y
+
+endif # ZMK_DISPLAY
+
+if LVGL
+
+config LVGL_HOR_RES_MAX
+ default 128
+
+config LVGL_VER_RES_MAX
+ default 32
+
+config LVGL_VDB_SIZE
+ default 64
+
+config LVGL_DPI
+ default 148
+
+config LVGL_BITS_PER_PIXEL
+ default 1
+
+choice LVGL_COLOR_DEPTH
+ default LVGL_COLOR_DEPTH_1
+endchoice
+
+endif # LVGL
diff --git a/app/boards/shields/murphpad/Kconfig.shield b/app/boards/shields/murphpad/Kconfig.shield
new file mode 100644
index 0000000..389caa2
--- /dev/null
+++ b/app/boards/shields/murphpad/Kconfig.shield
@@ -0,0 +1,5 @@
+# Copyright (c) 2021 The ZMK Contributors
+# SPDX-License-Identifier: MIT
+
+config SHIELD_MURPHPAD
+ def_bool $(shields_list_contains,murphpad) \ No newline at end of file
diff --git a/app/boards/shields/murphpad/boards/nice_nano.conf b/app/boards/shields/murphpad/boards/nice_nano.conf
new file mode 100644
index 0000000..dda71c1
--- /dev/null
+++ b/app/boards/shields/murphpad/boards/nice_nano.conf
@@ -0,0 +1,3 @@
+# Uncomment both to enable underglow
+CONFIG_ZMK_RGB_UNDERGLOW=y
+CONFIG_WS2812_STRIP=y
diff --git a/app/boards/shields/murphpad/boards/nice_nano.overlay b/app/boards/shields/murphpad/boards/nice_nano.overlay
new file mode 100644
index 0000000..b247334
--- /dev/null
+++ b/app/boards/shields/murphpad/boards/nice_nano.overlay
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2021 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+&spi1 {
+ compatible = "nordic,nrf-spim";
+ status = "okay";
+ mosi-pin = <31>;
+ // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
+ sck-pin = <5>;
+ miso-pin = <7>;
+
+ led_strip: ws2812@0 {
+ compatible = "worldsemi,ws2812-spi";
+ label = "WS2812";
+
+ /* SPI */
+ reg = <0>; /* ignored, but necessary for SPI bindings */
+ spi-max-frequency = <4000000>;
+
+ /* WS2812 */
+ chain-length = <8>; /* number of LEDs */
+ spi-one-frame = <0x70>;
+ spi-zero-frame = <0x40>;
+ };
+};
+
+/ {
+ chosen {
+ zmk,underglow = &led_strip;
+ };
+}; \ No newline at end of file
diff --git a/app/boards/shields/murphpad/murphpad.conf b/app/boards/shields/murphpad/murphpad.conf
new file mode 100644
index 0000000..bdcd425
--- /dev/null
+++ b/app/boards/shields/murphpad/murphpad.conf
@@ -0,0 +1,9 @@
+# Uncomment to turn on logging, and set ZMK logging to debug output
+# CONFIG_ZMK_USB_LOGGING=y
+
+# Uncomment both to enable encoder
+CONFIG_EC11=y
+CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y
+
+# Uncomment to enable OLED
+CONFIG_ZMK_DISPLAY=y \ No newline at end of file
diff --git a/app/boards/shields/murphpad/murphpad.keymap b/app/boards/shields/murphpad/murphpad.keymap
new file mode 100644
index 0000000..aec5887
--- /dev/null
+++ b/app/boards/shields/murphpad/murphpad.keymap
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2021 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <behaviors.dtsi>
+#include <dt-bindings/zmk/keys.h>
+#include <dt-bindings/zmk/bt.h>
+#include <dt-bindings/zmk/rgb.h>
+
+
+#define TIMEOUT 300
+
+&encoder_1 {
+ status = "okay";
+};
+
+&encoder_2 {
+ status = "okay";
+};
+
+/ {
+ combos {
+ compatible = "zmk,combos";
+ combo_btclr {
+ timeout-ms = <TIMEOUT>;
+ key-positions = <1 6>;
+ bindings = <&bt BT_CLR>;
+ };
+ combo_reset {
+ timeout-ms = <TIMEOUT>;
+ key-positions = <1 3>;
+ bindings = <&reset>;
+ };
+ combo_bootloader {
+ timeout-ms = <TIMEOUT>;
+ key-positions = <1 2>;
+ bindings = <&bootloader>;
+ };
+ combo_bt_nxt {
+ timeout-ms = <TIMEOUT>;
+ key-positions = <1 4>;
+ bindings = <&bt BT_NXT>;
+ };
+ };
+
+ sensors {
+ compatible = "zmk,keymap-sensors";
+ sensors = <&encoder_1 &encoder_2>;
+ };
+
+
+ keymap0: keymap {
+ compatible = "zmk,keymap";
+
+ default_layer {
+ label = "default layer";
+ bindings = <
+ &bt BT_CLR &kp TAB &kp F5 &kp LC(LA(C)) &kp LG(D)
+ &rgb_ug RGB_TOG &kp ESC &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS
+ &rgb_ug RGB_EFF &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS
+ &kp C_MUTE &kp KP_N4 &kp KP_N5 &kp KP_N6 &trans
+ &mo 1 &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER
+ &kp BSPC &kp KP_N0 &trans &kp KP_DOT &trans
+ >;
+ sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>;
+
+ };
+
+ fn_layer {
+ label = "fn layer";
+ bindings = <
+ &trans &trans &trans &trans &trans
+ &trans &kp KP_NUM &trans &trans &trans
+ &trans &trans &trans &trans &trans
+ &bt BT_CLR &trans &trans &trans &trans
+ &trans &trans &trans &trans &trans
+ &kp DEL &trans &trans &trans &trans
+ >;
+ sensor-bindings = <&inc_dec_kp PG_UP PG_DN &inc_dec_kp C_VOL_UP C_VOL_DN>;
+
+ };
+ };
+}; \ No newline at end of file
diff --git a/app/boards/shields/murphpad/murphpad.overlay b/app/boards/shields/murphpad/murphpad.overlay
new file mode 100644
index 0000000..25bd10f
--- /dev/null
+++ b/app/boards/shields/murphpad/murphpad.overlay
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2021 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <dt-bindings/zmk/matrix_transform.h>
+
+/ {
+ chosen {
+ zmk,kscan = &kscan0;
+ };
+
+ kscan0: kscan {
+ compatible = "zmk,kscan-gpio-matrix";
+ label = "KSCAN";
+
+ diode-direction = "col2row";
+ row-gpios
+ = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+ ;
+ col-gpios
+ = <&pro_micro 9 GPIO_ACTIVE_HIGH>
+ , <&pro_micro 6 GPIO_ACTIVE_HIGH>
+ , <&pro_micro 5 GPIO_ACTIVE_HIGH>
+ , <&pro_micro 4 GPIO_ACTIVE_HIGH>
+ , <&pro_micro 10 GPIO_ACTIVE_HIGH>
+ ;
+ };
+
+ encoder_1: encoder_1 {
+ compatible = "alps,ec11";
+ label = "Encoder 1";
+ a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+ b-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+ resolution = <4>;
+ status = "disabled";
+ };
+
+ encoder_2: encoder_2 {
+ compatible = "alps,ec11";
+ label = "Encoder 2";
+ a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+ b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+ resolution = <4>;
+ status = "disabled";
+ };
+
+};
+
+&pro_micro_i2c {
+ status = "okay";
+
+ oled: ssd1306@3c {
+ compatible = "solomon,ssd1306fb";
+ reg = <0x3c>;
+ label = "DISPLAY";
+ width = <128>;
+ height = <32>;
+ segment-offset = <0>;
+ page-offset = <0>;
+ display-offset = <0>;
+ multiplex-ratio = <31>;
+ segment-remap;
+ com-invdir;
+ com-sequential;
+ prechargep = <0x22>;
+ };
+};
diff --git a/app/boards/shields/murphpad/murphpad.zmk.yml b/app/boards/shields/murphpad/murphpad.zmk.yml
new file mode 100644
index 0000000..2dda83d
--- /dev/null
+++ b/app/boards/shields/murphpad/murphpad.zmk.yml
@@ -0,0 +1,12 @@
+file_format: "1"
+id: murphpad
+name: MurphPad
+type: shield
+url: https://mechwild.com/product/murphpad/
+requires: [pro_micro]
+exposes: [i2c_oled]
+features:
+ - keys
+ - display
+ - encoder
+ - underglow