aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/Magstripe/Magstripe.c
diff options
context:
space:
mode:
Diffstat (limited to 'Projects/Magstripe/Magstripe.c')
-rw-r--r--Projects/Magstripe/Magstripe.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c
index 95c81f342..1151735bd 100644
--- a/Projects/Magstripe/Magstripe.c
+++ b/Projects/Magstripe/Magstripe.c
@@ -130,6 +130,7 @@ void ReadMagstripeData(void)
bool ClockPinLevel = ((Magstripe_LCL & TrackInfo[Track].ClockMask) != 0);
bool ClockLevelChanged = (((Magstripe_LCL ^ Magstripe_Prev) & TrackInfo[Track].ClockMask) != 0);
+ /* Sample on rising clock edges */
if (ClockPinLevel && ClockLevelChanged)
BitBuffer_StoreNextBit(&TrackDataBuffers[Track], DataPinLevel);
}
@@ -171,15 +172,15 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
static bool IsKeyReleaseReport;
static bool IsNewlineReport;
- BitBuffer_t* Buffer = NULL;
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
+ BitBuffer_t* Buffer = NULL;
- /* Key reports must be interleaved with 0 Key Code reports to release the keys, or repeated keys will be ignored */
+ /* Key reports must be interleaved with key release reports, or repeated keys will be ignored */
IsKeyReleaseReport = !IsKeyReleaseReport;
if (IsKeyReleaseReport)
{
- KeyboardReport->KeyCode = 0;
+ KeyboardReport->KeyCode = KEY_NONE;
}
else if (IsNewlineReport)
{
@@ -188,6 +189,7 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
}
else
{
+ /* Read out tracks in ascending order - when each track buffer is empty, progress to next buffer */
if (TrackDataBuffers[0].Elements)
Buffer = &TrackDataBuffers[0];
else if (TrackDataBuffers[1].Elements)
@@ -199,7 +201,7 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
KeyboardReport->KeyCode = BitBuffer_GetNextBit(Buffer) ? KEY_1 : KEY_0;
- /* If buffer now empty, next report must be a newline to seperate track data */
+ /* If current track buffer now empty, next report must be a newline to seperate track data */
if (!(Buffer->Elements))
IsNewlineReport = true;
}