You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							101 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							101 lines
						
					
					
						
							4.0 KiB
						
					
					
				/*
 | 
						|
  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
 |