USB keyboards and mice now work on the ARM board, and they can be unplugged and plugged back in while the machine is running. The mouse and Keyboard events still need to be wired into the the PEG task to be used. That will be the next step.
Three problems were fixed:
The board could lock up when a mouse was unplugged and reconnected. Some USB devices describe themselves incorrectly on reconnect, and the manufacturer-supplied USB software got stuck in an endless loop reading that bad description. Because that software runs at a high priority, nothing else could run — the diagnostic console went silent even though the board itself was still alive and still talking to the drive. It now recognizes the bad description and stops rather than getting stuck.
Keypresses were not being reported at all. Two causes: the board asked the keyboard for more data at once than a keyboard is able to send, and it never told the keyboard to use the simple standard reporting format. Both corrected.
After three plug/unplug cycles, nothing further could connect. Internal resources were not being released when a device was removed, so the board gradually ran out of them. They are now released properly.
Keyboard and mouse are tracked separately, so both can be connected at once and either can be removed without disturbing the other. That separation is also the groundwork for barcode scanner support, since scanners connect to the system as keyboards.
Testing: about a dozen unplug/replug cycles with no lockup, followed by confirmed live mouse movement and keystrokes. EtherCAT communication stayed running throughout.
One note for future maintenance: two pieces of the manufacturer's USB code look like straightforward bugs but are actually load-bearing — correcting them introduces real defects. Both are now commented in place so a future cleanup doesn't reintroduce the problem.