This is enough to allow CASIO FA-124 to function, tested here with an fx-9750GII graphing calculator. The software must be installed in a 32-bit Windows XP prefix to work around bug 45455, and also requires native mfc42, but works nicely afterwards.
Linux does not make USB devices writable by default, so users will need to set udev rules, or perform some other configuration, for devices which they wish to use through Wine.
The code supports hotplugging in theory, but I ran into a problem where udev rules race with libusb discovery, such that libusb will pick up a device before udev has granted us write permissions. I'm not sure how to resolve this; possibly it's something that can be fixed on the host side.
Zebediah Figura (17): wineusb.sys: New stub driver. wineusb.sys: Implement AddDevice(). wineusb.sys: Implement basic IRP_MJ_PNP requests for the bus FDO. wineusb.sys: Start an event handler thread. wineusb.sys: Create USB devices. wineusb.sys: Implement IRP_MN_QUERY_DEVICE_RELATIONS. wineusb.sys: Implement device and instance IDs. wineusb.sys: Implement hardware IDs. wineusb.sys: Return compatible IDs. wineusb.inf: Add new INF file. wineboot: Install wineusb as a root-enumerated PnP service. wineusb.sys: Implement URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE. wineusb.sys: Stub URB_FUNCTION_SELECT_CONFIGURATION. wineusb.sys: Implement URB_FUNCTION_VENDOR_INTERFACE. wineusb.sys: Implement URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER. wineusb.sys: Implement URB_FUNCTION_ABORT_PIPE. wineusb.sys: Implement URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL.
configure.ac | 13 + dlls/wineusb.sys/Makefile.in | 8 + dlls/wineusb.sys/wineusb.c | 759 ++++++++++++++++++++++++++++++ dlls/wineusb.sys/wineusb.sys.spec | 1 + include/ddk/usbioctl.h | 2 + loader/Makefile.in | 3 +- loader/wine.inf.in | 3 + loader/wineusb.inf.in | 22 + programs/wineboot/wineboot.c | 1 + 9 files changed, 811 insertions(+), 1 deletion(-) create mode 100644 dlls/wineusb.sys/Makefile.in create mode 100644 dlls/wineusb.sys/wineusb.c create mode 100644 dlls/wineusb.sys/wineusb.sys.spec create mode 100644 loader/wineusb.inf.in