From 74298f8ca11dc8d3b0359d1d4e124d6494c3eeac Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Fri, 10 Apr 2009 01:15:42 +0200 Subject: * digital/avr/modules/usb: - imported LUFA. --- .../usb/lufa/Projects/Magstripe/MagstripeHW.h | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h (limited to 'digital/avr/modules/usb/lufa/Projects/Magstripe/MagstripeHW.h') 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 + + #include + + /* 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 -- cgit v1.2.3