diff options
| author | tmk <hasu@tmk-kbd.com> | 2015-05-13 11:13:10 +0900 | 
|---|---|---|
| committer | tmk <hasu@tmk-kbd.com> | 2015-05-13 11:13:10 +0900 | 
| commit | f6d56675f9f981c5464f0ca7a1fbb0162154e8c5 (patch) | |
| tree | 57c9d4b3808a26116ae0ee7956fc00b84841aa2b /protocol/lufa/LUFA-git/Projects/Magstripe/Lib | |
| parent | 4d116a04e94cf0d19317d5b44e4fa9f34a3e5594 (diff) | |
Squashed 'tmk_core/' changes from caca2c0..dc0e46e
dc0e46e Rename LUFA to LUFA-git
3bfa7fa Remove LUFA-120730
215b764 Merge commit 'afa0f22a9299686fd88f58ce09c5b521ac917e8f' as 'protocol/lufa/LUFA'
afa0f22 Squashed 'protocol/lufa/LUFA/' content from commit def7fca
c0c42fa Remove submodule of LUFA
30f897d Merge commit '87ced33feb74e79c3281dda36eb6d6d153399b41' as 'protocol/usb_hid/USB_Host_Shield_2.0'
87ced33 Squashed 'protocol/usb_hid/USB_Host_Shield_2.0/' content from commit aab4a69
14f6d49 Remove submodule of USB_Host_Shield_2.0
git-subtree-dir: tmk_core
git-subtree-split: dc0e46eaa4367d4e218f8816e3c117895820f07c
Diffstat (limited to 'protocol/lufa/LUFA-git/Projects/Magstripe/Lib')
4 files changed, 314 insertions, 0 deletions
diff --git a/protocol/lufa/LUFA-git b/protocol/lufa/LUFA-git deleted file mode 160000 -Subproject b6c18b2a7c544653efbe12a1d4e8ba65e7d83c3 diff --git a/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/CircularBitBuffer.c b/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/CircularBitBuffer.c new file mode 100644 index 0000000000..fbd511b813 --- /dev/null +++ b/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/CircularBitBuffer.c @@ -0,0 +1,115 @@ +/* +             LUFA Library +     Copyright (C) Dean Camera, 2014. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2010  Denver Gingerich (denver [at] ossguy [dot] com) +  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com) + +  Permission to use, copy, modify, distribute, and sell this +  software and its documentation for any purpose is hereby granted +  without fee, 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 disclaims 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. +*/ + +/** Circular bit buffer library. This will allow for individual bits + *  to be stored in packed form inside circular buffers, to reduce + *  overall RAM usage. + */ + +#include "CircularBitBuffer.h" + +/** Function to initialize or reset a bit buffer, ready for data to be stored into it. */ +void BitBuffer_Init(BitBuffer_t* const Buffer) +{ +	/* Reset the number of stored bits in the buffer */ +	Buffer->Elements        = 0; + +	/* Reset the data in and out pointer structures in the buffer to the first buffer bit */ +	Buffer->In.CurrentByte  = Buffer->Data; +	Buffer->In.ByteMask     = (1 << 0); +	Buffer->Out.CurrentByte = Buffer->Data; +	Buffer->Out.ByteMask    = (1 << 0); +} + +/** Function to store the given bit into the given bit buffer. */ +void BitBuffer_StoreNextBit(BitBuffer_t* const Buffer, +                            const bool Bit) +{ +	/* If the bit to store is true, set the next bit in the buffer */ +	if (Bit) +	  *Buffer->In.CurrentByte |= Buffer->In.ByteMask; + +	/* Increment the number of stored bits in the buffer counter */ +	Buffer->Elements++; + +	/* Check if the current buffer byte is full of stored bits */ +	if (Buffer->In.ByteMask == (1 << 7)) +	{ +		/* Check if the end of the buffer has been reached, if so reset to start of buffer, otherwise advance to next bit */ +		if (Buffer->In.CurrentByte != &Buffer->Data[sizeof(Buffer->Data) - 1]) +		  Buffer->In.CurrentByte++; +		else +		  Buffer->In.CurrentByte = Buffer->Data; + +		/* Reset the storage bit mask in the current buffer byte to the first bit */ +		Buffer->In.ByteMask = (1 << 0); +	} +	else +	{ +		/* Shift the current storage bit mask to the next bit in the current byte */ +		Buffer->In.ByteMask <<= 1; +	} +} + +/** Function to retrieve the next bit stored in the given bit buffer. */ +bool BitBuffer_GetNextBit(BitBuffer_t* const Buffer) +{ +	/* Retrieve the value of the next bit stored in the buffer */ +	bool Bit = ((*Buffer->Out.CurrentByte & Buffer->Out.ByteMask) != 0); + +	/* Clear the buffer bit */ +	*Buffer->Out.CurrentByte &= ~Buffer->Out.ByteMask; + +	/* Decrement the number of stored bits in the buffer counter */ +	Buffer->Elements--; + +	/* Check if the current buffer byte is empty of stored bits */ +	if (Buffer->Out.ByteMask == (1 << 7)) +	{ +		/* Check if the end of the buffer has been reached, if so reset to start of buffer, otherwise advance to next bit */ +		if (Buffer->Out.CurrentByte != &Buffer->Data[sizeof(Buffer->Data) - 1]) +		  Buffer->Out.CurrentByte++; +		else +		  Buffer->Out.CurrentByte = Buffer->Data; + +		/* Reset the retrieval bit mask in the current buffer byte to the first bit */ +		Buffer->Out.ByteMask = (1 << 0); +	} +	else +	{ +		/* Shift the current retrieval bit mask to the next bit in the current byte */ +		Buffer->Out.ByteMask <<= 1; +	} + +	/* Return the retrieved bit from the buffer */ +	return Bit; +} + diff --git a/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/CircularBitBuffer.h b/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/CircularBitBuffer.h new file mode 100644 index 0000000000..918c825337 --- /dev/null +++ b/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/CircularBitBuffer.h @@ -0,0 +1,97 @@ +/* +             LUFA Library +     Copyright (C) Dean Camera, 2014. + +  dean [at] fourwalledcubicle [dot] com +           www.lufa-lib.org +*/ + +/* +  Copyright 2010  Denver Gingerich (denver [at] ossguy [dot] com) +  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com) + +  Permission to use, copy, modify, distribute, and sell this +  software and its documentation for any purpose is hereby granted +  without fee, 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 disclaims 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. +*/ + +/** \file + * + *  Header file for CircularBitBuffer.c. + */ + +#ifndef _CIRCULARBITBUFFER_H_ +#define _CIRCULARBITBUFFER_H_ + +	/* Includes: */ +		#include <avr/io.h> +		#include <stdbool.h> + +		#include <LUFA/Common/Common.h> + +	/* Macros: */ +		#if (defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \ +		     defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__)) || defined(__DOXYGEN__) +			/** Maximum number of bits which can be stored into a bit buffer. The memory usage is one eighth of this value per buffer. */ +			#define MAX_BITS 8192 +		#else +			#define MAX_BITS 1024 +		#endif + +	/* Type Defines: */ +		/** Type define for a pointer to a bit in a bit buffer. */ +		typedef struct +		{ +			uint8_t* CurrentByte; /**< Pointer to the current byte in the buffer */ +			uint8_t  ByteMask; /**< Mask of the current bit in the buffer */ +		} BitBufferPointer_t; + +		/** Type define for a circular packet bit buffer. */ +		typedef struct +		{ +			uint8_t            Data[MAX_BITS / 8]; /**< Buffer to hold the stored bits in packed form */ +			uint16_t           Elements; /**< Number of stored bits in the bit buffer */ + +			BitBufferPointer_t In; /**< Bit pointer to the next storage location in the buffer */ +			BitBufferPointer_t Out; /**< Bit pointer to the next retrieval location in the buffer */ +		} BitBuffer_t; + +	/* Function Prototypes: */ +		/** Initializes or resets a given bit buffer, ready to store new bits. +		 * +		 *  \param[in,out] Buffer  Bit buffer to initialize +		 */ +		void BitBuffer_Init(BitBuffer_t* const Buffer) ATTR_NON_NULL_PTR_ARG(1); + +		/** Stores a bit into the next location inside a given bit buffer. +		 * +		 *  \param[in,out] Buffer  Bit buffer to store a bit into +		 *  \param[in] Bit  Bit to store into the buffer +		 */ +		void BitBuffer_StoreNextBit(BitBuffer_t* const Buffer, +		                            const bool Bit) ATTR_NON_NULL_PTR_ARG(1); + +		/** Retrieves a bit from the next location inside a given bit buffer. +		 * +		 *  \param[in,out] Buffer  Bit buffer to retrieve a bit from +		 * +		 *  \return Next bit from the buffer +		 */ +		bool BitBuffer_GetNextBit(BitBuffer_t* const Buffer) ATTR_NON_NULL_PTR_ARG(1); + +#endif + diff --git a/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/MagstripeHW.h b/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/MagstripeHW.h new file mode 100644 index 0000000000..45c040eec6 --- /dev/null +++ b/protocol/lufa/LUFA-git/Projects/Magstripe/Lib/MagstripeHW.h @@ -0,0 +1,102 @@ +/* +  Copyright 2010  Denver Gingerich (denver [at] ossguy [dot] com) +  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com) + +  Permission to use, copy, modify, distribute, and sell this +  software and its documentation for any purpose is hereby granted +  without fee, 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 disclaims 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 (i.e.. PORTC1) +	MAG_T1_DATA_PIN    Pin connected to Track 1 data wire (i.e.. PORTC2) +	MAG_T2_CLOCK_PIN   Pin connected to Track 2 clock wire (i.e.. PORTC3) +	MAG_T2_DATA_PIN    Pin connected to Track 2 data wire (i.e.. PORTC0) +	MAG_T3_CLOCK_PIN   Pin connected to Track 3 clock wire (i.e.. PORTC5) +	MAG_T3_DATA_PIN    Pin connected to Track 3 data wire (i.e.. PORTC6) +	MAG_CLS_PIN        Pin connected to card loaded wire (i.e.. PORTC4) +	MAG_PIN            PIN macro for the reader's port (i.e.. PINC) +	MAG_DDR            DDR macro for the reader's port (i.e.. DDRC) +	MAG_PORT           PORT macro for the reader's port (i.e.. 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 mag-stripe 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 (i.e.. 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> +		#include "Config/AppConfig.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) +			{ +				/* Mag-stripe IOs are active low and must be inverted when read */ +				return ((uint8_t)~MAG_PIN & MAG_MASK); +			} + +#endif +  | 
