lesavka/scripts/navka-core.sh

60 lines
2.2 KiB
Bash
Raw Normal View History

2025-06-01 21:28:09 -05:00
#!/usr/bin/env bash
# Proven Pi-5 configfs gadget: HID keyboard+mouse + stereo UAC2
2025-06-06 20:25:26 -05:00
# Still need Web Cam Support
2025-06-01 21:28:09 -05:00
set -euo pipefail
2025-06-06 20:25:26 -05:00
echo "uboot_overlay_addr0=/boot/overlays/dwc2.dtbo" >> /boot/firmware/config.txt
2025-06-06 01:53:19 -05:00
modprobe dwc2
2025-06-06 00:41:32 -05:00
modprobe libcomposite || { echo "libcomposite not in kernel; abort" >&2; exit 1; }
2025-06-06 20:25:26 -05:00
# mountpoint -q /sys/kernel/config || mount -t configfs configfs /sys/kernel/config
mountpoint -q /sys/kernel/config || mount -t configfs none /sys/kernel/config
2025-06-01 21:28:09 -05:00
G=/sys/kernel/config/usb_gadget/navka
2025-06-02 20:18:19 -05:00
if [[ -d $G ]]; then
2025-06-06 02:01:30 -05:00
echo "" >"$G/UDC" 2>/dev/null || true
2025-06-02 20:18:19 -05:00
find "$G/configs" -type l -delete || true
rmdir "$G/functions/"* 2>/dev/null || true
rmdir "$G" 2>/dev/null || true
fi
2025-06-01 21:28:09 -05:00
mkdir -p "$G"
echo 0x1d6b >"$G/idVendor" # Linux Foundation
echo 0x0104 >"$G/idProduct" # Multifunction Composite Gadget
echo 0x0200 >"$G/bcdUSB"
mkdir -p "$G/strings/0x409"
2025-06-06 20:25:26 -05:00
echo "$(cat /proc/sys/kernel/random/uuid)" >"$G/strings/0x409/serialnumber"
echo "Navka" >"$G/strings/0x409/manufacturer"
echo "Navka Composite" >"$G/strings/0x409/product"
2025-06-01 21:28:09 -05:00
# HID (boot keyboard)
mkdir -p "$G/functions/hid.usb0"
echo 1 >"$G/functions/hid.usb0/protocol"
echo 1 >"$G/functions/hid.usb0/subclass"
echo 8 >"$G/functions/hid.usb0/report_length"
echo -ne '\x05\x01\x09\x06\xa1\x01\x05\x07\x19\xe0\x29\xe7\x15\x00\x25'\
'\x01\x75\x01\x95\x08\x81\x02\x95\x01\x75\x08\x81\x01\x95\x05\x75\x01'\
'\x05\x08\x19\x01\x29\x05\x91\x02\x95\x01\x75\x03\x91\x01\x95\x06\x75'\
'\x08\x15\x00\x25\x65\x05\x07\x19\x00\x29\x65\x81\x00\xc0' \
>"$G/functions/hid.usb0/report_desc"
# UAC2 stereo 48 kHz
mkdir -p "$G/functions/uac2.usb0"
echo 48000 >"$G/functions/uac2.usb0/c_srate"
echo 2 >"$G/functions/uac2.usb0/c_ssize"
echo 2 >"$G/functions/uac2.usb0/p_chmask"
mkdir -p "$G/configs/c.1/strings/0x409"
echo "Config 1" >"$G/configs/c.1/strings/0x409/configuration"
echo 500 >"$G/configs/c.1/MaxPower"
2025-06-06 20:25:26 -05:00
mkdir -p "$G/configs/c.1" "$G/configs/c.1/strings/0x409"
echo "Keyboard" >"$G/configs/c.1/strings/0x409/configuration"
2025-06-01 21:28:09 -05:00
ln -s "$G/functions/hid.usb0" "$G/configs/c.1/"
ln -s "$G/functions/uac2.usb0" "$G/configs/c.1/"
echo "$(ls /sys/class/udc | head -n1)" >"$G/UDC"
2025-06-06 20:25:26 -05:00
echo '[navka-core] gadget ready'