MSR605 driver

Python driver for MSR605

The MSR605 is a magnetic trip reader / writer. There're a serial and USB versions : so, in both cases, it's viewed as a serial line at the OS level.

I've written a driver written in python, using the pyserial library for low-level serial management: msr.py. It should work with other products from Dingword (MSR206, MSR606...).

Features:

  • read/write ISO compatible tracks,
  • read/write raw tracks,
  • configure write density (210 bits/inch or 75 bits/inch),
  • configure coercivity (high or low),
  • command line interface, to be used from shell,
  • python class interface, to be used by other scripts.

Dependencies:

On Mac OS X, I use the driver from the osx-pl2303 project (here for Intel 64bits support). I've installed pyserial through macport, package py27-serial (for python 2.7). The serial device is called /dev/cu.PL2303-xxx.

On FreeBSD, the driver (uplcom) is embedded in the default kernel, and serial device is called /dev/cuaU0.

Should also work on Linux and Windows as they are compatible with pyserial.

Command line description

Read the 3 strips (swipe when the orange LED is on):

./msr.py --device /dev/cuxxx --read
1=%............?        or None if strip is empty
2=;............?        or None if strip is empty
3=;............?        or None if strip is empty

Write strips 2 and 3 (swipe when the orange+green LEDs are on, do not include the leading/trailing chars ;/%/?):

./msr605.py --device /dev/cuxxx --strip 23 --write "strip2" "strip3"

Erase the 3 strips (swipe when the orange+green LEDs are on):

./msr605.py --device /dev/cuxxx --erase

Online help (to set low-coercivity or density before writting):

./msr605.py --help

Class description

You can "import msr" this file to use the MSR605 class in your own code.

class msr inherits from Serial
    constructor : (self, dev_path)
    method reset(self)
    method read_tracks(self)
    method write_tracks(self, t1, t2, t3)
method erase_tracks(self, t1, t2, t3)

Example:

r = msr(/dev/cuaU0)
t1,t2,t3 = r.read_tracks()
r.write_tracks(t3=1234567890)
r.erase_tracks(t1=True)

Known bugs

The reset() method reset the card reader. It doesn't work every time: in case of problem, unplug the power and the USB cable to reset the reader.

External documentations

The MSR605 serial protocol.