diff --git a/.ampy b/.ampy deleted file mode 100644 index 8bce788..0000000 --- a/.ampy +++ /dev/null @@ -1,7 +0,0 @@ -# These values work only for Feathers on Linux hosts -# right now. If using Docker, requires execution as such: -# -# docker run -t kmk_firmware:latest --device /dev/ttyUSB0 -AMPY_PORT=/dev/ttyUSB0 -AMPY_BAUD=115200 -AMPY_DELAY=1.5 diff --git a/.gitignore b/.gitignore index 894a44c..0f9f262 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,7 @@ venv.bak/ # mypy .mypy_cache/ + +.ampy +.submodules +.circuitpy-deps diff --git a/.gitmodules b/.gitmodules index 3134eff..ce7fb1a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,12 @@ [submodule "circuitpython"] path = vendor/circuitpython url = https://github.com/adafruit/circuitpython.git + branch = "9b98ad779468676c3d5f1efdc06b454aaed7c407" +[submodule "pydux"] + path = vendor/pydux + url = https://github.com/usrlocalben/pydux.git + branch = "943ca1c75357b9289f55f17ff2d997a66a3313a4" +[submodule "upy-lib"] + path = vendor/upy-lib + url = https://github.com/micropython/micropython-lib.git + branch = "f20d89c6aad9443a696561ca2a01f7ef0c8fb302" diff --git a/Makefile b/Makefile index a716a4d..fb9f393 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,65 @@ -.PHONY: build-feather devdeps lint +.PHONY: \ + build-feather \ + circuitpy-deps \ + circuitpy-freeze-kmk-nrf \ + devdeps \ + freeze-nrf-vendor-deps \ + lint devdeps: Pipfile.lock - pipenv install --dev --ignore-pipfile + @pipenv install --dev --ignore-pipfile lint: devdeps - pipenv run flake8 + @pipenv run flake8 -build-feather-test: lint devdeps +.submodules: .gitmodules @echo "===> Pulling dependencies, this may take several minutes" @git submodule update --init --recursive + @touch .submodules + +.circuitpy-deps: .submodules @echo "===> Building circuitpython/mpy-cross" @make -C vendor/circuitpython/mpy-cross @echo "===> Pulling Nordic BLE stack" @cd vendor/circuitpython/ports/nrf && ./drivers/bluetooth/download_ble_stack.sh 2>/dev/null >/dev/null + @touch .circuitpy-deps + +circuitpy-deps: .circuitpy-deps + +freeze-nrf-vendor-deps: vendor/circuitpython/ports/nrf/freeze/.kmk_frozen + +vendor/circuitpython/ports/nrf/freeze/.kmk_frozen: upy-freeze.txt + @echo "===> Preparing vendored dependencies for bundling" + @rm -rf vendor/circuitpython/ports/nrf/freeze/* + @cat $< | xargs -I '{}' cp -a {} vendor/circuitpython/ports/nrf/freeze/ + @touch $@ + +circuitpy-freeze-kmk-nrf: freeze-nrf-vendor-deps @echo "===> Preparing KMK source for bundling into CircuitPython" - @rm -rf vendor/circuitpython/ports/nrf/freeze/kmk - @rm -rf vendor/circuitpython/ports/nrf/freeze/kmk_keyboard_user.py + @rm -rf vendor/circuitpython/ports/nrf/kmk* @cp -av kmk vendor/circuitpython/ports/nrf/freeze/ - @cp -av boards/klardotsh/twotwo_matrix_feather.py vendor/circuitpython/ports/nrf/freeze/kmk_keyboard_user.py + +circuitpy-flash-nrf: circuitpy-freeze-kmk-nrf @echo "===> Building and flashing CircuitPython with KMK and your keymap" @make -C vendor/circuitpython/ports/nrf BOARD=feather_nrf52832 SERIAL=/dev/ttyUSB0 SD=s132 FROZEN_MPY_DIR=freeze clean dfu-gen dfu-flash + +circuitpy-flash-nrf-entrypoint: @echo "===> Flashing entrypoint if it doesn't already exist" @sleep 2 @-timeout -k 5s 10s pipenv run ampy rm main.py 2>/dev/null @-timeout -k 5s 10s pipenv run ampy put entrypoints/feather_nrf52832.py main.py @echo "===> Flashed keyboard successfully!" +build-feather-test: lint devdeps circuitpy-deps circuitpy-freeze-kmk-nrf + @echo "===> Preparing keyboard script for bundling into CircuitPython" + @cp -av boards/klardotsh/twotwo_matrix_feather.py vendor/circuitpython/ports/nrf/freeze/kmk_keyboard_user.py + @$(MAKE) circuitpy-flash-nrf circuitpy-flash-nrf-entrypoint + +build-feather-noop: lint devdeps circuitpy-deps circuitpy-freeze-kmk-nrf + @echo "===> Preparing keyboard script for bundling into CircuitPython" + @cp -av boards/noop.py vendor/circuitpython/ports/nrf/freeze/kmk_keyboard_user.py + @$(MAKE) circuitpy-flash-nrf circuitpy-flash-nrf-entrypoint + # Fully wipe the board with only stock CircuitPython burn-it-all-with-fire: lint devdeps @echo "===> Flashing STOCK CircuitPython with no KMK or user keyboard scripts, and wiping entrypoint" @@ -38,10 +72,9 @@ burn-it-all-with-fire: lint devdeps @echo "===> Pulling Nordic BLE stack" @cd vendor/circuitpython/ports/nrf && ./drivers/bluetooth/download_ble_stack.sh 2>/dev/null >/dev/null @echo "===> Preparing KMK source for bundling into CircuitPython" - @rm -rf vendor/circuitpython/ports/nrf/freeze/kmk - @rm -rf vendor/circuitpython/ports/nrf/freeze/kmk_keyboard_user.py + @rm -rf vendor/circuitpython/ports/nrf/* @echo "===> Building CircuitPython WITHOUT KMK or user keyboard script to induce ImportError" - @make -C vendor/circuitpython/ports/nrf BOARD=feather_nrf52832 SERIAL=/dev/ttyUSB0 SD=s132 FROZEN_MPY_DIR=freeze clean dfu-gen dfu-flash + @$(MAKE) circuitpy-flash-nrf @echo "===> Wiping keyboard config" @sleep 2 @-pipenv run ampy rm main.py 2>/dev/null diff --git a/boards/noop.py b/boards/noop.py new file mode 100644 index 0000000..024987e --- /dev/null +++ b/boards/noop.py @@ -0,0 +1,5 @@ +import sys + + +def main(): + sys.exit(0) diff --git a/upy-freeze.txt b/upy-freeze.txt new file mode 100644 index 0000000..97cb5b7 --- /dev/null +++ b/upy-freeze.txt @@ -0,0 +1,4 @@ +vendor/upy-lib/__future__/__future__.py +vendor/upy-lib/functools/functools.py +vendor/upy-lib/string/string.py +vendor/pydux/pydux diff --git a/vendor/pydux b/vendor/pydux new file mode 160000 index 0000000..943ca1c --- /dev/null +++ b/vendor/pydux @@ -0,0 +1 @@ +Subproject commit 943ca1c75357b9289f55f17ff2d997a66a3313a4 diff --git a/vendor/upy-lib b/vendor/upy-lib new file mode 160000 index 0000000..f20d89c --- /dev/null +++ b/vendor/upy-lib @@ -0,0 +1 @@ +Subproject commit f20d89c6aad9443a696561ca2a01f7ef0c8fb302