diff --git a/app/boards/arm/mikoto/Kconfig b/app/boards/arm/mikoto/Kconfig index 71ec9411..d267c80e 100644 --- a/app/boards/arm/mikoto/Kconfig +++ b/app/boards/arm/mikoto/Kconfig @@ -2,11 +2,11 @@ config BOARD_ENABLE_DCDC bool "Enable DCDC mode" select SOC_DCDC_NRF52X default y - depends on (BOARD_MIKOTO_520) + depends on (BOARD_MIKOTO) choice BOARD_MIKOTO_CHARGER_CURRENT prompt "Charge current to supply to attached batteries" - depends on (BOARD_MIKOTO_520) + depends on (BOARD_MIKOTO) config BOARD_MIKOTO_CHARGER_CURRENT_40MA bool "40mA charge current, for battery capacity 40mAh or higher" @@ -26,4 +26,4 @@ config BOARD_MIKOTO_CHARGER_CURRENT_350MA config BOARD_MIKOTO_CHARGER_CURRENT_NONE bool "Disable charge current" -endchoice \ No newline at end of file +endchoice diff --git a/app/boards/arm/mikoto/Kconfig.board b/app/boards/arm/mikoto/Kconfig.board index a872fa1f..b51dce8a 100644 --- a/app/boards/arm/mikoto/Kconfig.board +++ b/app/boards/arm/mikoto/Kconfig.board @@ -3,6 +3,6 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT -config BOARD_MIKOTO_520 - bool "mikoto_520" +config BOARD_MIKOTO + bool "mikoto" depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/mikoto/Kconfig.defconfig b/app/boards/arm/mikoto/Kconfig.defconfig index 5702c6de..0710f6fd 100644 --- a/app/boards/arm/mikoto/Kconfig.defconfig +++ b/app/boards/arm/mikoto/Kconfig.defconfig @@ -3,7 +3,7 @@ # Copyright (c) 2020 The ZMK Contributors # SPDX-License-Identifier: MIT -if BOARD_MIKOTO_520 +if BOARD_MIKOTO config BOARD default "mikoto" @@ -25,4 +25,4 @@ choice BOARD_MIKOTO_CHARGER_CURRENT default BOARD_MIKOTO_CHARGER_CURRENT_100MA endchoice -endif # BOARD_MIKOTO_520 +endif # BOARD_MIKOTO diff --git a/app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi b/app/boards/arm/mikoto/arduino_pro_micro_pins_v5.dtsi similarity index 100% rename from app/boards/arm/mikoto/arduino_pro_micro_pins.dtsi rename to app/boards/arm/mikoto/arduino_pro_micro_pins_v5.dtsi diff --git a/app/boards/arm/mikoto/arduino_pro_micro_pins_v6.dtsi b/app/boards/arm/mikoto/arduino_pro_micro_pins_v6.dtsi new file mode 100644 index 00000000..79d8b155 --- /dev/null +++ b/app/boards/arm/mikoto/arduino_pro_micro_pins_v6.dtsi @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + pro_micro: connector { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 4 0> /* D0 */ + , <1 0 &gpio0 8 0> /* D1 */ + , <2 0 &gpio0 17 0> /* D2 */ + , <3 0 &gpio0 20 0> /* D3 */ + , <4 0 &gpio0 22 0> /* D4/A6 */ + , <5 0 &gpio0 24 0> /* D5 */ + , <6 0 &gpio1 8 0> /* D6/A7 */ + , <7 0 &gpio1 2 0> /* D7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio1 13 0> /* D14 */ + , <15 0 &gpio0 2 0> /* D15 */ + , <18 0 &gpio0 29 0> /* D18/A0 */ + , <19 0 &gpio0 31 0> /* D19/A1 */ + , <20 0 &gpio0 25 0> /* D20/A2 */ + , <21 0 &gpio0 11 0> /* D21/A3 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 29 0> /* D18/A0 */ + , <1 0 &gpio0 31 0> /* D19/A1 */ + , <2 0 &gpio0 25 0> /* D20/A2 */ + , <3 0 &gpio0 11 0> /* D21/A3 */ + , <6 0 &gpio0 22 0> /* D4/A6 */ + , <7 0 &gpio1 8 0> /* D6/A7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + ; + }; +}; + + +pro_micro_d: &pro_micro {}; +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi b/app/boards/arm/mikoto/mikoto-pinctrl.dtsi similarity index 83% rename from app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi rename to app/boards/arm/mikoto/mikoto-pinctrl.dtsi index df43c407..675587f2 100644 --- a/app/boards/arm/mikoto/mikoto_520-pinctrl.dtsi +++ b/app/boards/arm/mikoto/mikoto-pinctrl.dtsi @@ -17,7 +17,7 @@ uart0_sleep: uart0_sleep { group1 { psels = , - ; + ; low-power-enable; }; }; @@ -25,14 +25,14 @@ i2c0_default: i2c0_default { group1 { psels = , - ; + ; }; }; i2c0_sleep: i2c0_sleep { group1 { psels = , - ; + ; low-power-enable; }; }; diff --git a/app/boards/arm/mikoto/mikoto_520.dts b/app/boards/arm/mikoto/mikoto.dts similarity index 97% rename from app/boards/arm/mikoto/mikoto_520.dts rename to app/boards/arm/mikoto/mikoto.dts index 05ec72df..d94c0c42 100644 --- a/app/boards/arm/mikoto/mikoto_520.dts +++ b/app/boards/arm/mikoto/mikoto.dts @@ -6,8 +6,6 @@ /dts-v1/; #include -#include "arduino_pro_micro_pins.dtsi" -#include "mikoto_520-pinctrl.dtsi" / { model = "mikoto"; diff --git a/app/boards/arm/mikoto/mikoto_520.yaml b/app/boards/arm/mikoto/mikoto.yaml similarity index 78% rename from app/boards/arm/mikoto/mikoto_520.yaml rename to app/boards/arm/mikoto/mikoto.yaml index 8d9f49ae..7410471e 100644 --- a/app/boards/arm/mikoto/mikoto_520.yaml +++ b/app/boards/arm/mikoto/mikoto.yaml @@ -1,5 +1,5 @@ -identifier: mikoto_520 -name: mikoto_520 +identifier: mikoto +name: mikoto type: mcu arch: arm toolchain: diff --git a/app/boards/arm/mikoto/mikoto_520.zmk.yml b/app/boards/arm/mikoto/mikoto.zmk.yml similarity index 57% rename from app/boards/arm/mikoto/mikoto_520.zmk.yml rename to app/boards/arm/mikoto/mikoto.zmk.yml index 91dcc9e0..2898e6bd 100644 --- a/app/boards/arm/mikoto/mikoto_520.zmk.yml +++ b/app/boards/arm/mikoto/mikoto.zmk.yml @@ -1,6 +1,6 @@ file_format: "1" -id: mikoto_520 -name: Mikoto 5.20 +id: mikoto +name: Mikoto type: board arch: arm outputs: @@ -8,3 +8,8 @@ outputs: - ble url: https://github.com/zhiayang/mikoto exposes: [pro_micro] +revisions: + - "5.20" + - "7.1" + - "7.3" +default_revision: "5.20" diff --git a/app/boards/arm/mikoto/mikoto_5_20_0.overlay b/app/boards/arm/mikoto/mikoto_5_20_0.overlay new file mode 100644 index 00000000..f9e744ea --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_5_20_0.overlay @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "mikoto-pinctrl.dtsi" +#include "arduino_pro_micro_pins_v5.dtsi" diff --git a/app/boards/arm/mikoto/mikoto_6_1_0.overlay b/app/boards/arm/mikoto/mikoto_6_1_0.overlay new file mode 100644 index 00000000..80466fd2 --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_6_1_0.overlay @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "mikoto-pinctrl.dtsi" +#include "arduino_pro_micro_pins_v6.dtsi" diff --git a/app/boards/arm/mikoto/mikoto_7_1_0.conf b/app/boards/arm/mikoto/mikoto_7_1_0.conf new file mode 100644 index 00000000..8bf92886 --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_7_1_0.conf @@ -0,0 +1,2 @@ +CONFIG_I2C=y +CONFIG_ZMK_MAX17048=y diff --git a/app/boards/arm/mikoto/mikoto_7_1_0.overlay b/app/boards/arm/mikoto/mikoto_7_1_0.overlay new file mode 100644 index 00000000..d4394497 --- /dev/null +++ b/app/boards/arm/mikoto/mikoto_7_1_0.overlay @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "mikoto-pinctrl.dtsi" +#include "arduino_pro_micro_pins_v6.dtsi" + +&pinctrl { + i2c1_default: i2c1_default { + group1 { + psels = , + ; + }; + }; + + i2c1_sleep: i2c1_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +&i2c1 { + status = "okay"; + compatible = "nordic,nrf-twi"; + pinctrl-0 = <&i2c1_default>; + pinctrl-1 = <&i2c1_sleep>; + pinctrl-names = "default", "sleep"; + + builtin_fuel_gauge: max17048@36 { + compatible = "zmk,maxim-max17048"; + status = "okay"; + reg = <0x36>; + }; +}; + +/ { + chosen { + zmk,battery = &builtin_fuel_gauge; + }; +}; diff --git a/app/boards/arm/mikoto/mikoto_520_defconfig b/app/boards/arm/mikoto/mikoto_defconfig similarity index 93% rename from app/boards/arm/mikoto/mikoto_520_defconfig rename to app/boards/arm/mikoto/mikoto_defconfig index 354fa56a..4b3bc7d9 100644 --- a/app/boards/arm/mikoto/mikoto_520_defconfig +++ b/app/boards/arm/mikoto/mikoto_defconfig @@ -2,11 +2,10 @@ CONFIG_SOC_SERIES_NRF52X=y CONFIG_SOC_NRF52840_QIAA=y -CONFIG_BOARD_MIKOTO_520=y +CONFIG_BOARD_MIKOTO=y # Enable MPU CONFIG_ARM_MPU=y - CONFIG_PINCTRL=y # enable GPIO diff --git a/app/boards/arm/mikoto/pinmux.c b/app/boards/arm/mikoto/pinmux.c index c34c2dc8..a3901424 100644 --- a/app/boards/arm/mikoto/pinmux.c +++ b/app/boards/arm/mikoto/pinmux.c @@ -13,7 +13,7 @@ static int pinmux_mikoto_init(void) { -#if CONFIG_BOARD_MIKOTO_520 +#if CONFIG_BOARD_MIKOTO const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); const struct device *p1 = DEVICE_DT_GET(DT_NODELABEL(gpio1)); #if CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_40MA diff --git a/app/boards/arm/mikoto/revision.cmake b/app/boards/arm/mikoto/revision.cmake new file mode 100644 index 00000000..519cafb6 --- /dev/null +++ b/app/boards/arm/mikoto/revision.cmake @@ -0,0 +1,7 @@ +board_check_revision(FORMAT MAJOR.MINOR.PATCH + DEFAULT_REVISION 5.20.0 + VALID_REVISIONS + 5.20.0 # first public release + 6.1.0 6.3.0 # incompatible pinout change from v5+ + 7.1.0 # addition of MAX17048; compatible pinout with v6+ +) diff --git a/app/build.sh b/app/build.sh new file mode 100755 index 00000000..ff54270c --- /dev/null +++ b/app/build.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +pristine="" +if [ $# -gt 0 ] && [ "$1" = "-p" -o "$1" = "--pristine" ]; then + pristine="--pristine" +fi + +COMMON_ARGS=( + "-DZEPHYR_TOOLCHAIN_VARIANT=zephyr" + "-DZEPHYR_SDK_INSTALL_DIR=/opt/pacman/opt/zephyr-sdk" + "-DZMK_CONFIG=$(pwd)/../../zmk-config/config" + "-Wno-dev" +) + +set -x + +west build -d build/left -b mikoto_520 ${pristine} -- -DSHIELD=misaka_left "${COMMON_ARGS[@]}" && mv build/left/zephyr/zmk.uf2 ./left.uf2 +west build -d build/right -b mikoto_520 ${pristine} -- -DSHIELD=misaka_right "${COMMON_ARGS[@]}" && mv build/right/zephyr/zmk.uf2 ./right.uf2 + + diff --git a/app/left.uf2 b/app/left.uf2 new file mode 100644 index 00000000..3f405dd0 Binary files /dev/null and b/app/left.uf2 differ diff --git a/app/right.uf2 b/app/right.uf2 new file mode 100644 index 00000000..677a22c0 Binary files /dev/null and b/app/right.uf2 differ diff --git a/docs/src/templates/setup.sh.mustache b/docs/src/templates/setup.sh.mustache index c711dbc5..09ed8c29 100644 --- a/docs/src/templates/setup.sh.mustache +++ b/docs/src/templates/setup.sh.mustache @@ -122,6 +122,9 @@ if [ "$keyboard_shield" == "y" ]; then board_ids=({{#boards}}"{{id}}" {{/boards}}) boards_usb_only=({{#boards}}"{{#usb_only}}y{{/usb_only}}{{^usb_only}}n{{/usb_only}}" {{/boards}}) + boards_revisions=({{#boards}}"{{#revisions}}{{.}} {{/revisions}}" {{/boards}}) + boards_default_revision=({{#boards}}"{{{default_revision}}}" {{/boards}}) + echo "" echo "MCU Board Selection:" PS3="$prompt " @@ -151,6 +154,34 @@ if [ "$keyboard_shield" == "y" ]; then esac done + + if [ -n "${boards_revisions[$board_index]}" ]; then + read -a _valid_revisions <<< "${boards_revisions[$board_index]}" + for (( _i=0; _i<${#_valid_revisions}; _i++ )); do + if [ "${boards_default_revision[board_index]}" = "${_valid_revisions[_i]}" ]; then + _valid_revisions[_i]+=" (default)" + fi + done + + echo "" + echo "MCU Board Revision:" + select opt in "${_valid_revisions[@]}" "Quit"; do + ''|*[!0-9]*) echo "Invalid option. Try another one."; continue;; + + $(( ${#_valid_revisions[@]}+1 )) ) echo "Goodbye!"; exit 1;; + *) + if [ $REPLY -gt $(( ${#_valid_revisions[@]}+1 )) ] || [ $REPLY -lt 0 ]; then + echo "Invalid option. Try another one." + continue + fi + + _rev_index=$(( $REPLY-1 )) + board="${board_ids[$board_index]}@${_valid_revisions[_rev_index]}" + boards=( "${board}" ) + break + ;; + done + fi else board=${keyboard} boards=$keyboard_siblings diff --git a/schema/hardware-metadata.schema.json b/schema/hardware-metadata.schema.json index 4c2bdf3b..9710c792 100644 --- a/schema/hardware-metadata.schema.json +++ b/schema/hardware-metadata.schema.json @@ -16,7 +16,11 @@ "$defs": { "id": { "type": "string", - "pattern": "^[a-z0-9_]+$" + "pattern": "^[a-z0-9_]+(@([A-Z]|[0-9]+|([0-9]+(\\.[0-9]+){1,2})))?$" + }, + "revision": { + "type": "string", + "pattern": "[A-Z]|[0-9]+|([0-9]+(\\.[0-9]+){1,2})" }, "keyboard_siblings": { "type": "array", @@ -202,6 +206,15 @@ }, "exposes": { "$ref": "#/$defs/interconnects" + }, + "revisions": { + "type": "array", + "items": { + "$ref": "#/$defs/revision" + } + }, + "default_revision": { + "$ref": "#/$defs/revision" } } },