8cd796e3dd
- USB gadget (UAC1 + MIDI) with boot persistence - USB host mode with auto-detection - Pure Data synth patch with ALSA + UDP netreceive MIDI input - MIDI rawmidi-to-UDP bridge (midi-bridge.py) - LED matrix visualization (led-matrix-viz.py via arduino-router RPC) - MCU sketch for LED matrix control (Arduino_RouterBridge + ArduinoGraphics) - Conftest/OPA Rego policy validation suite for .pd files - gen_synth_pd.py: programmatic .pd file generator - System services: midi-bridge, led-matrix-viz, pd-synth-auto, usb-role-detect - Justfile with deploy, enable, diagnostic recipes - Diagnostic script (diag.sh)
104 lines
3.5 KiB
Bash
104 lines
3.5 KiB
Bash
#!/bin/bash
|
|
# diag.sh — run on the board for diagnostics
|
|
set -e
|
|
|
|
echo "--- System ---"
|
|
echo " Kernel: $(uname -r)"
|
|
echo " Uptime: $(uptime -p | sed 's/up //')"
|
|
echo " Load: $(cat /proc/loadavg | cut -d' ' -f1-3)"
|
|
echo " Memory: $(free -h | awk '/^Mem:/{print $3 "/" $2}')"
|
|
echo " Disk: $(df -h / | awk 'NR==2{print $3 "/" $2 " (" $5 ")"}')"
|
|
|
|
echo ""
|
|
echo "--- USB Gadget (configfs) ---"
|
|
UDC=$(cat /sys/kernel/config/usb_gadget/g1/UDC 2>/dev/null || echo '(not bound)')
|
|
echo " UDC bound: $UDC"
|
|
for f in /sys/kernel/config/usb_gadget/g1/functions/*/; do
|
|
echo " Function: $(basename "$f")"
|
|
done
|
|
for c in /sys/kernel/config/usb_gadget/g1/configs/*/; do
|
|
cfg=$(basename "$c")
|
|
for l in "$c"/*.*/; do
|
|
[ -L "$l" ] && echo " linked: $(basename "$l") -> config $cfg"
|
|
done
|
|
done
|
|
|
|
echo ""
|
|
echo "--- UDC Hardware ---"
|
|
for u in /sys/class/udc/*/; do
|
|
name=$(basename "$u")
|
|
echo " Controller: $name"
|
|
echo " state: $(cat "$u/state" 2>/dev/null)"
|
|
echo " speed: $(cat "$u/current_speed" 2>/dev/null)"
|
|
echo " max_speed: $(cat "$u/maximum_speed" 2>/dev/null)"
|
|
done
|
|
role=$(cat /sys/class/usb_role/*/role 2>/dev/null || echo '(none)')
|
|
echo " USB role: $role"
|
|
echo " Role sw: $(ls /sys/class/usb_role/ 2>/dev/null | tr '\n' ' ')"
|
|
|
|
echo ""
|
|
echo "--- USB Audio Params ---"
|
|
for p in /sys/kernel/config/usb_gadget/g1/functions/uac1.gs0/p_* /sys/kernel/config/usb_gadget/g1/functions/uac1.gs0/c_*; do
|
|
name=$(basename "$p")
|
|
echo " $name: $(cat "$p" 2>/dev/null)"
|
|
done
|
|
|
|
echo ""
|
|
echo "--- USB MIDI Params ---"
|
|
for p in in_ports out_ports index; do
|
|
val=$(cat /sys/kernel/config/usb_gadget/g1/functions/midi.gs0/$p 2>/dev/null)
|
|
echo " $p: $val"
|
|
done
|
|
|
|
echo ""
|
|
echo "--- Modules ---"
|
|
lsmod | awk '$1 ~ /^(usb_f_|u_audio|libcomposite|snd_usb|snd_rawmidi|snd_soc|dwc3)/ {print " " $0}'
|
|
for m in usb_f_uac1 usb_f_midi dwc3-qcom-legacy; do
|
|
if lsmod 2>/dev/null | grep -q "^$m "; then
|
|
echo " $m: LOADED"
|
|
else
|
|
echo " $m: not loaded"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "--- ALSA Cards ---"
|
|
cat /proc/asound/cards
|
|
echo ""
|
|
aplay -l 2>/dev/null | awk '{print " " $0}'
|
|
echo ""
|
|
arecord -l 2>/dev/null | awk '{print " " $0}'
|
|
|
|
echo ""
|
|
echo "--- ALSA MIDI ---"
|
|
echo " Raw MIDI devices:"
|
|
ls /dev/snd/midi* 2>/dev/null | awk '{print " " $0}' || echo " (none)"
|
|
echo " ALSA sequencer:"
|
|
aconnect -lio 2>/dev/null | awk '{print " " $0}' || echo " (none)"
|
|
echo " amidi ports:"
|
|
amidi -l 2>/dev/null | awk '{print " " $0}' || echo " (none)"
|
|
|
|
echo ""
|
|
echo "--- Pd Status ---"
|
|
pd_pid=$(pgrep -x pd 2>/dev/null || echo "")
|
|
if [ -n "$pd_pid" ]; then
|
|
echo " PID: $pd_pid"
|
|
echo " Args: $(tr '\0' ' ' < /proc/$pd_pid/cmdline 2>/dev/null)"
|
|
echo " Uptime: $(ps -o etime= -p $pd_pid 2>/dev/null | xargs)"
|
|
echo " CPU: $(ps -o %cpu= -p $pd_pid 2>/dev/null | xargs)%"
|
|
echo " MEM: $(ps -o %mem= -p $pd_pid 2>/dev/null | xargs)%"
|
|
else
|
|
echo " Pd: not running"
|
|
fi
|
|
for svc in pd-synth-auto pd-synth pd-synth-i2s usb-role-detect usb-gadget-audio; do
|
|
state=$(systemctl is-active "$svc" 2>/dev/null || echo '(not found)')
|
|
enabled=$(systemctl is-enabled "$svc" 2>/dev/null || echo '(not found)')
|
|
echo " $svc: $state (enabled: $enabled)"
|
|
done
|
|
|
|
echo ""
|
|
echo "--- dmesg (USB/gadget errors) ---"
|
|
dmesg -l err,warn 2>/dev/null | grep -iE 'usb|gadget|uac1|midi|pd|audio|dwc3' | tail -20 | awk '{print " " $0}'
|
|
echo ""
|
|
dmesg 2>/dev/null | grep -i 'failed to start\|incorrect sample\|couldn.t find.*UDC\|probe.*failed' | tail -5 | awk '{print " " $0}'
|