summaryrefslogtreecommitdiff
path: root/hid
diff options
context:
space:
mode:
Diffstat (limited to 'hid')
-rw-r--r--hid/Makefile13
-rw-r--r--hid/avrdude-rpi.conf7
-rw-r--r--hid/avrdude.py53
-rw-r--r--hid/lib/.gitignore0
-rw-r--r--hid/patch.py34
-rw-r--r--hid/platformio.ini170
-rw-r--r--hid/src/main.cpp2
7 files changed, 227 insertions, 52 deletions
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