summaryrefslogtreecommitdiff
path: root/digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h
diff options
context:
space:
mode:
Diffstat (limited to 'digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h')
-rw-r--r--digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h b/digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h
new file mode 100644
index 00000000..c4681188
--- /dev/null
+++ b/digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h
@@ -0,0 +1,100 @@
+/*
+ Copyright 2009 Denver Gingerich (denver [at] ossguy [dot] com)
+ Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, and distribute this software
+ and its documentation for any purpose and without fee is hereby
+ granted, provided that the above copyright notice appear in all
+ copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/*
+ NOTE: The user of this include file MUST define the following macros
+ prior to including the file:
+
+ MAG_T1_CLOCK_PIN Pin connected to Track 1 clock wire (ie. PORTC1)
+ MAG_T1_DATA_PIN Pin connected to Track 1 data wire (ie. PORTC2)
+ MAG_T2_CLOCK_PIN Pin connected to Track 2 clock wire (ie. PORTC3)
+ MAG_T2_DATA_PIN Pin connected to Track 2 data wire (ie. PORTC0)
+ MAG_T3_CLOCK_PIN Pin connected to Track 3 clock wire (ie. PORTC5)
+ MAG_T3_DATA_PIN Pin connected to Track 3 data wire (ie. PORTC6)
+ MAG_CLS_PIN Pin connected to card loaded wire (ie. PORTC4)
+ MAG_PIN PIN macro for the reader's port (ie. PINC)
+ MAG_DDR DDR macro for the reader's port (ie. DDRC)
+ MAG_PORT PORT macro for the reader's port (ie. PORTC)
+
+ The example macros listed above assume that the Track 2 data wire is
+ connected to pin 0 on port C, the Track 2 clock wire is connected to
+ pin 3 on port C (similarly for Tracks 1 and 3), and the card loaded
+ wire is connected to pin 4 on port C.
+
+ If the magstripe reader you are using only reads one or two tracks,
+ then set the clock and data pins for the tracks it doesn't read to a
+ pin that is unused. For example, on the AT90USBKey, any of the pins on
+ port C that do not have wires attached will be unused since they are
+ not connected to any onboard devices (such as the joystick or
+ temperature sensor).
+
+ Connecting wires to pins on different ports (ie. a data wire to pin 0
+ on port C and a clock wire to pin 0 on port D) is currently
+ unsupported. All pins specified above must be on the same port.
+*/
+
+/** \file
+ *
+ * Driver header for a TTL Magnetic Card reader device (such as the Omron V3B-4K).
+ */
+
+#ifndef _MAGSTRIPEHW_H_
+#define _MAGSTRIPEHW_H_
+
+ /* Includes: */
+ #include <avr/io.h>
+
+ #include <LUFA/Common/Common.h>
+
+ /* Private Interface - For use in library only: */
+ /* Macros: */
+ /** Mask of the track data, clock and card detection pins. */
+ #define MAG_MASK (MAG_T1_DATA | MAG_T1_CLOCK | \
+ MAG_T2_DATA | MAG_T2_CLOCK | \
+ MAG_T3_DATA | MAG_T3_CLOCK | \
+ MAG_CARDPRESENT)
+
+ /* Public Interface - May be used in end-application: */
+ /* Inline Functions: */
+ /** Initializes the magnetic stripe card reader ports and pins so that the card reader
+ * device can be controlled and read by the card reader driver. This must be called before
+ * trying to read any of the card reader's status lines.
+ */
+ static inline void Magstripe_Init(void)
+ {
+ MAG_DDR &= ~MAG_MASK;
+ MAG_PORT |= MAG_MASK;
+ };
+
+ /** Returns the status of all the magnetic card reader's outputs.
+ *
+ * \return A mask indicating which card lines are high or low
+ */
+ static inline uint8_t Magstripe_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
+ static inline uint8_t Magstripe_GetStatus(void)
+ {
+ /* Magstripe IOs are active low and must be inverted when read */
+ return ((uint8_t)~MAG_PIN & MAG_MASK);
+ }
+
+#endif