diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | PKGBUILD | 1 | ||||
-rw-r--r-- | hid/Makefile | 13 | ||||
-rw-r--r-- | hid/avrdude-rpi.conf | 7 | ||||
-rw-r--r-- | hid/avrdude.py | 53 | ||||
-rw-r--r-- | hid/lib/.gitignore | 0 | ||||
-rw-r--r-- | hid/patch.py | 34 | ||||
-rw-r--r-- | hid/platformio.ini | 170 | ||||
-rw-r--r-- | hid/src/main.cpp | 2 |
9 files changed, 229 insertions, 52 deletions
@@ -1,3 +1,4 @@ +/hid/.platformio/ /hid/.pio/ /pkg/ /src/ @@ -56,6 +56,7 @@ depends=( nginx-mainline openssl platformio + avrdude-svn make patch sudo diff --git a/hid/Makefile b/hid/Makefile index 0d07db84..81fe129d 100644 --- a/hid/Makefile +++ b/hid/Makefile @@ -4,6 +4,12 @@ ps2: make _build E=ps2 mixed: make _build E=mixed +usb-spi: + make _build E=usb_spi +ps2-spi: + make _build E=ps2_spi +mixed-spi: + make _build E=mixed_spi _build: rm -f .current platformio run --environment $(E) @@ -15,11 +21,18 @@ upload: platformio run --environment $(shell cat .current) --target upload +bootloader-spi: install-bootloader-spi +install-bootloader-spi: upload-bootloader-spi +upload-bootloader-spi: + platformio run --environment bootloader_spi --target bootloader + + update: platformio platform update clean-all: clean + rm -rf .platformio clean: rm -rf .pio .current diff --git a/hid/avrdude-rpi.conf b/hid/avrdude-rpi.conf new file mode 100644 index 00000000..8a6f5460 --- /dev/null +++ b/hid/avrdude-rpi.conf @@ -0,0 +1,7 @@ +programmer + id = "rpi"; + desc = "RPi SPI programmer"; + type = "linuxspi"; + reset = 25; + baudrate = 400000; +; diff --git a/hid/avrdude.py b/hid/avrdude.py new file mode 100644 index 00000000..1eef53b4 --- /dev/null +++ b/hid/avrdude.py @@ -0,0 +1,53 @@ +# https://docs.platformio.org/en/latest/projectconf/advanced_scripting.html + +from os import rename +from os import symlink +from os.path import exists +from os.path import join + +import platform + +Import("env") + + +# ===== +def _get_tool_path() -> str: + path = env.PioPlatform().get_package_dir("tool-avrdude") + assert exists(path) + return path + + +def _fix_ld_arm() -> None: + tool_path = _get_tool_path() + flag_path = join(tool_path, ".fix-ld-arm.done") + + if not exists(flag_path): + def patch(*_, **__) -> None: + symlink("/usr/lib/libtinfo.so.6", join(tool_path, "libtinfo.so.5")) + open(flag_path, "w").close() + + env.Execute(patch) + + +def _replace_to_system(new_path: str) -> None: + tool_path = _get_tool_path() + flag_path = join(tool_path, ".replace-to-system.done") + + if not exists(flag_path): + def patch(*_, **__) -> None: + old_path = join(tool_path, "avrdude") + bak_path = join(tool_path, "_avrdude_bak") + rename(old_path, bak_path) + symlink(new_path, old_path) + open(flag_path, "w").close() + + env.Execute(patch) + + +# ===== +if "arm" in platform.machine(): + _fix_ld_arm() + +_path = "/usr/bin/avrdude" +if exists(_path): + _replace_to_system(_path) diff --git a/hid/lib/.gitignore b/hid/lib/.gitignore new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/hid/lib/.gitignore diff --git a/hid/patch.py b/hid/patch.py index 100c0d5b..7b88eeb1 100644 --- a/hid/patch.py +++ b/hid/patch.py @@ -1,20 +1,32 @@ -from os.path import join +# https://docs.platformio.org/en/latest/projectconf/advanced_scripting.html + from os.path import exists +from os.path import join +from os.path import basename + +from typing import Dict Import("env") # ===== -deps_path = env.get("PROJECT_LIBDEPS_DIR", env.get("PROJECTLIBDEPS_DIR")) -assert deps_path, deps_path -env_path = join(deps_path, env["PIOENV"]) -flag_path = join(env_path, ".patched") +def _get_libs() -> Dict[str, str]: + return { + builder.name: builder.path + for builder in env.GetLibBuilders() + } + -if not exists(flag_path): - env.Execute(f"patch -p1 -d {join(env_path, 'HID-Project')} < {join('patches', 'absmouse.patch')}") +def _patch_lib(lib_path: str, patch_path: str) -> None: + assert exists(lib_path) + flag_path: str = join(lib_path, f".{basename(patch_path)}.done") + if not exists(flag_path): + env.Execute(f"patch -p1 -d {lib_path} < {patch_path}") + env.Execute(lambda *_, **__: open(flag_path, "w").close()) - def touch_flag(*_, **__) -> None: - with open(flag_path, "w") as flag_file: - pass - env.Execute(touch_flag) +# ===== +_libs = _get_libs() +assert "TimerOne" in _libs # Just checking +if "HID-Project" in _libs: + _patch_lib(_libs["HID-Project"], "patches/absmouse.patch") diff --git a/hid/platformio.ini b/hid/platformio.ini index c6c7c34b..1bf05d03 100644 --- a/hid/platformio.ini +++ b/hid/platformio.ini @@ -1,59 +1,149 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; http://docs.platformio.org/page/projectconf.html - -[common] -lib_deps = -build_flags = - -DCMD_SERIAL=Serial1 +# http://docs.platformio.org/page/projectconf.html +[platformio] +core_dir = ./.platformio/ -[env:usb] +[env] platform = atmelavr board = micro framework = arduino -upload_port = /dev/ttyACM0 +extra_scripts = + pre:avrdude.py + post:patch.py +platform_packages = + tool-avrdude + +[_parts_common] +lib_deps = + +[_parts_usb_kbd] lib_deps = - ${common.lib_deps} build_flags = - ${common.build_flags} -DHID_USB_KBD + +[_parts_usb_mouse] +lib_deps = +build_flags = -DHID_USB_MOUSE -extra_scripts = post:patch.py -[env:ps2] -platform = atmelavr -board = micro -framework = arduino -upload_port = /dev/ttyACM0 +[_parts_ps2_kbd] lib_deps = - ${common.lib_deps} git+https://github.com/Harvie/ps2dev#v0.0.3 build_flags = - ${common.build_flags} -DHID_PS2_KBD -DPS2_KBD_CLOCK_PIN=7 -DPS2_KBD_DATA_PIN=5 -[env:mixed] -platform = atmelavr -board = micro -framework = arduino -upload_port = /dev/ttyACM0 +[_usb] lib_deps = - ${common.lib_deps} - git+https://github.com/Harvie/ps2dev#v0.0.3 + ${_parts_common.lib_deps} + ${_parts_usb_kbd.lib_deps} +# ${_parts_usb_mouse.lib_deps} build_flags = - ${common.build_flags} - -DHID_PS2_KBD - -DHID_USB_MOUSE - -DPS2_KBD_CLOCK_PIN=7 - -DPS2_KBD_DATA_PIN=5 + ${_parts_usb_kbd.build_flags} + ${_parts_usb_mouse.build_flags} + +[_ps2] +lib_deps = + ${_parts_common.lib_deps} + ${_parts_ps2_kbd.lib_deps} +build_flags = + ${_parts_ps2_kbd.build_flags} + +[_mixed] +lib_deps = + ${_parts_common.lib_deps} + ${_parts_ps2_kbd.lib_deps} + ${_parts_usb_mouse.lib_deps} +build_flags = + ${_parts_ps2_kbd.build_flags} + ${_parts_usb_mouse.build_flags} + + +# ===== Serial ===== +[_cmd_serial] +build_flags = + -DCMD_SERIAL=Serial1 + -DCMD_SERIAL_SPEED=115200 +upload_port = /dev/ttyACM0 + +[env:usb] +extends = + _usb + _cmd_serial +build_flags = + ${_usb.build_flags} + ${_cmd_serial.build_flags} + +[env:ps2] +extends = + _ps2 + _cmd_serial +build_flags = + ${_ps2.build_flags} + ${_cmd_serial.build_flags} + +[env:mixed] +extends = + _mixed + _cmd_serial +build_flags = + ${_mixed.build_flags} + ${_cmd_serial.build_flags} + + +# ===== RPi SPI ===== +[env:bootloader_spi] +upload_protocol = rpi +upload_flags = + -C + +avrdude-rpi.conf + -P + /dev/spidev0.0:/dev/gpiochip0 +extra_scripts = + pre:avrdude.py + +[_cmd_spi] +build_flags = + -DCMD_SERIAL=Serial1 + -DCMD_SERIAL_SPEED=115200 +# -DCMD_SPI +upload_protocol = custom +upload_flags = + -C + $PROJECT_PACKAGES_DIR/tool-avrdude/avrdude.conf + -C + +avrdude-rpi.conf + -P + /dev/spidev0.0:/dev/gpiochip0 + -c + rpi + -p + $BOARD_MCU +upload_command = avrdude $UPLOAD_FLAGS -U flash:w:$SOURCE:i + +[env:usb_spi] +extends = + _usb + _cmd_spi +build_flags = + ${_usb.build_flags} + ${_cmd_spi.build_flags} + +[env:ps2_spi] +extends = + _ps2 + _cmd_spi +build_flags = + ${_ps2.build_flags} + ${_cmd_spi.build_flags} + +[env:mixed_spi] +extends = + _mixed + _cmd_spi +build_flags = + ${_mixed.build_flags} + ${_cmd_spi.build_flags} diff --git a/hid/src/main.cpp b/hid/src/main.cpp index cd3c245a..29982c8d 100644 --- a/hid/src/main.cpp +++ b/hid/src/main.cpp @@ -34,7 +34,7 @@ // #define CMD_SERIAL Serial1 -#define CMD_SERIAL_SPEED 115200 +// #define CMD_SERIAL_SPEED 115200 #define CMD_RECV_TIMEOUT 100000 #define PROTO_MAGIC 0x33 |