I had some time to hack around the USB connection of my casio dictionary, and I have reached a “duh” point: the protocol used by the dictionary is OBEX run over USB. This is somehow surprising as OBEX is typically used over IRDA or Bluetooth not USB. What I though were commands are basically object names that are read and set. Now the content of the initial response packet makes perfect sense:
|Packet length: 7 bytes
|OBEX version: 1.1
|Max packet size: 2K
The bad news is that I should scrap most of my code, the good news is that now I could use the OBEX code in Mac OS X, and implement an OBEX Session on top of USB, and use the library calls to handle the put and get operations.