Every card reader is different and the devices themselves are very hard to differentiate, especially audio port readers.
The best and most maintainable solution is to have a separate setup section where the user selects and configures the type of hardware they have. They select the reader they have from a drop down or list, then you keep it in their preferences. From then on, you know what path to take and which library or method to use when detecting and reading the device.
I've tried in the past to integrate all device detection in one place and it quickly became unmanageable. The same goes for a universal swipe page that incorporated all readers into one. It did not work because there are just too many differences, too much poor version control, and they do not play nice together. User selection solved all of those problems for me. Good luck.