[General Questions and Answers] johnnyprimavera:
Hello!

tl;dr

I have an MC70 handheld computer with a DCR7000 magnetic stripe reader attachment running Windows Mobile 5.0. Do you know whether the magnetic stripe reader is able to read cards in RAW format, i.e. getting the bits on the magnetic stripe without any kind of encoding (without character encoding, parity bits, start and end sentinels or LRC)?

I've been trying using Symbol / Motorola EMDK dll libraries for .NET and Zebra DataWedge as well. No luck. There is a RAW_DECODING mode on Symbol dlls but it returns E? when reading any card in an arbitrary encoding.

-------------------------------

For those who love the detail:

Using Motorola EMDK with Symbol API (and the examples provided) I was able to develop a simple .NET application to read vanilla-formated credit cards with no problem. I'm using a custom encoding so no standard card reader would recognise my cards.

I have tried all possible MagStripe libraries in the Motorola EMDK (v2.9) [Symbol.MagStripe.dll, Symbol.MagStripe2.dll, Symbol.MagStripe.Design.dll, Symbol.MagStripe2.Design.dll and their .NET 3.5 upgraded counterparts] as well as the newer DataWedge API (v3.4 for compatibility with my device). While Symbol.MagStripe and Symbol.MagStripe.Design provide means to set the DecoderMode to RAW, the reader always returns "E?" for each track. Maybe I need to change the Track2Format property in some manner --don't really know how to use it--?

The communication between MC70 and DCR7X00 is via serial at 9600 baud, with the following command and response sequence. (in blue, commands sent by MC70; in red, sent by DCR7X00. Newlines added for clarity and sensitive information has been masked with asterisks.)

\x1B !F11001100110001\r

ack\r\n

DCR7000 rev. 1.82\r\n

Format Flags: 11001100110001\r\n

\x1B !S\r

a%B3852************^PLACEHOLDER VORNAME. ^*******************************?

b;3852************=********************?

c%******************==************************************===********************************************?\r

As the above listing shows, the format flags are default to STANDARD_DECODE with NO_LRC to be sent.

When using RAW_DECODE with NO_LRC, the format flags change as follows, but I wasn't able to read any card format. (We use only Track2. We omit Tracks 1 and 3.)

\x1B !F00010001000101\r

ack\r\n

DCR7000 rev. 1.82\r\n

Format Flags: 00010001000101\r\n

\x1B !S\r

bE?\r

The last line on the listing shows how the DCR7X00 recognises that there is data only in track 2, but is not able to decode it (E?) albeit having set the format to RAW_DECODE.

I'm confident that RAW decoding has to function properly, as I know of commercial stores using RAW decoding with the same hardware as mine. Moreover, in the DecoderModes Enumeration entry inside the EMDK Help file (EMDKfordotNET.chm):

Finally, DataWedge has also been installed in the MC70 but after creating a profile with the DCR using library MSRMC50.dll it has trouble recognising the DCR7X00. When starting the DataWedge service in its application, it remains to IDLE. I discarded the DataWedge option after seeing the following line in the (current, not v3.4) DataWedge documentation at Zebra TechDocs:

But ID TECH SecureHead User Manual describes a magnetic head different from the one used inside the DCR7X00 as this one encrypts data directly on the head providing Serial or USB interfaces while the one inside DCR7X00 contains seven used connections to the three different coils of the read/write head. Then the secure microcontroller inside the DCR7X00 responds with a serial command to the MC70.

-------------------------------

Thank you very much for your time and answers :) .

John