EDIT: I fixed a bug with a hardcoded COM port in the InputViewer and also made minor changes to the apps/ directory structure and parsing code.
https://github.com/RedGuyyyy/sd2snes/releases/download/v3/usb2snes_v3.1.zipusb2snes v3.1
Added websocket/tray app.
Added input viewer based on NintendoSpy.
Fixed lots of bugs and added lots more.
The main update is the tray app. You can launch the file, input, and memory viewer from there. They can all work at the same time including multiple instances, but things start to get slow if you are reading a lot of data with something like the memory viewer. The input viewer will work with only a few games. If it doesn't work and you know the memory address where it stores the controller buttons you can type that (in hex) into the address field and try that. The memory viewer can help to find the location in memory for the buttons if you know what to look for and the game writes them out.
<Technical stuff below>
The tray app listens on localhost:8080 (likely IPv6 depending on OS) and supports the websocket protocol with JSON commands and binary data. It's a pretty simple protocol and everything available across USB has a simplified command over the websocket interface. The websocket API I used has some issues including not exposing partial messages.
There's also more general configuration register accesses (on the FPGA) with masking support and a trace buffer which uses that config. The trace buffer needs some testing and a tool to interface with it. It lets you set a start and stop trigger event on the bus and captures the events in that window. It re-uses the MSU buffer which is now expanded to 30 KB.
To free up space, the BSX, DSP, and MSU code was commented out from the default FPGA file. The firmware loads up the appropriate default 0.1.7e when it detects these files. So those games will lose several of the features of the USB changes.