diff options
Diffstat (limited to 'Projects/Magstripe/Lib')
-rw-r--r-- | Projects/Magstripe/Lib/CircularBitBuffer.c | 115 | ||||
-rw-r--r-- | Projects/Magstripe/Lib/CircularBitBuffer.h | 97 | ||||
-rw-r--r-- | Projects/Magstripe/Lib/MagstripeHW.h | 102 |
3 files changed, 0 insertions, 314 deletions
diff --git a/Projects/Magstripe/Lib/CircularBitBuffer.c b/Projects/Magstripe/Lib/CircularBitBuffer.c deleted file mode 100644 index 802d040c5b..0000000000 --- a/Projects/Magstripe/Lib/CircularBitBuffer.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) - Copyright 2017 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/Projects/Magstripe/Lib/CircularBitBuffer.h b/Projects/Magstripe/Lib/CircularBitBuffer.h deleted file mode 100644 index 0adbe0c89e..0000000000 --- a/Projects/Magstripe/Lib/CircularBitBuffer.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2017. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) - Copyright 2017 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/Projects/Magstripe/Lib/MagstripeHW.h b/Projects/Magstripe/Lib/MagstripeHW.h deleted file mode 100644 index 6d9cc8cbc4..0000000000 --- a/Projects/Magstripe/Lib/MagstripeHW.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright 2010 Denver Gingerich (denver [at] ossguy [dot] com) - Copyright 2017 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 - |