I was able to reverse part of the protocol this beast speaks, currently I am able to read tracks, eject card and reset device. It was a rather tedious but fun task, learned quite some new tricks. The layer 1 is R232 and what took me 4 hours to figure out is that you absolutely need to send the Data Set Ready (DSR) signal prior to sending commands.
It is a rather simple binary protocol over R232, here is a small excerpt of my debugging output :
On the left wee see the Hexadecimal representation of the protocol, on the right the ASCII display.
Request: 2/20/2009 7:23:07 PM.01564
10 02 43 30 30 10 03 40 - ..C00..@
Answer: 2/20/2009 7:23:07 PM.01564 (+0.0000 seconds)
10 06 - ..
Request: 2/20/2009 7:23:07 PM.12564 (+0.1094 seconds)
10 05 - ..
Answer: 2/20/2009 7:23:09 PM.59364 (+2.4688 seconds)
10 02 50 30 30 30 31 10 03 52 - ..P0001..R
The first command send is Hex (10 02 43 30 30 10 03 4) which interpreted stands for <DLE><STX>C00<DLE><ETX>@
- DLE = (Data Link Escape, ASCII Code 127)
- STX = (Start of TeXt, ASCII Code 2)
- ETX = (End of TeXt, ASCII Code 3)
The command itself sits in the middle, namely C00, which is the reset command. The protocol flow itself is a simple handshake flow, in tcpish terms : SYN | SYN ACK | SYN-ACK 2 | ACK |
The command ACK is alwas 10 06.
I then started to implement the communication protocol in C#, here is a screenshot of the current prototype, the "Omron Communicator" in C#.
After searching the web for parts of the reversed protocol I was able to find a complete specification of the device together with the protocol documentation. Since this is difficult to find without detailed knowledge I am going to mirror the pdf on this site for google to gather it under the relevant keywords.