The card server I put together and shared with you supports up to 4 usb serial devices and 4 simultaneous instances of a card script. A user can access the interface and choose the seat that matches the cab they sit at. It's been a while, but IIRC the multiple instances are started dynamically based on the presence of multiple serial adapters. In addition to that, it supports netbooting to multiple devices from the one source. I think an ultimate card server would do that, in addition to the features you're integrating. Just something to consider as you progress. Great work so far!
Of course! sorry, forgot to look there! I'm working on how to identify each physical USB port reliably to then assign to each reader cable, I've got a udev rule to work but not sure if that will carry over from a Pi 4 to a Pi 3:
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{devpath}=="1.1", SYMLINK+="usb0", MODE="0666"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{devpath}=="1.2", SYMLINK+="usb1", MODE="0666"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{devpath}=="1.3", SYMLINK+="usb2", MODE="0666"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{devpath}=="1.4", SYMLINK+="usb3", MODE="0666"
This allocates the top right port to usb0, bottom right usb1, top left usb2 and bottom left usb3
@winteriscoming - I can see you polled for the ports, how were you assigning them to the physical connections? was that via the admin interface?