bool ClockPinLevel = ((Magstripe_LCL & TrackInfo[Track].ClockMask) != 0);\r
bool ClockLevelChanged = (((Magstripe_LCL ^ Magstripe_Prev) & TrackInfo[Track].ClockMask) != 0);\r
\r
+ /* Sample on rising clock edges */\r
if (ClockPinLevel && ClockLevelChanged)\r
BitBuffer_StoreNextBit(&TrackDataBuffers[Track], DataPinLevel);\r
}\r
static bool IsKeyReleaseReport;\r
static bool IsNewlineReport;\r
\r
- BitBuffer_t* Buffer = NULL;\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
+ BitBuffer_t* Buffer = NULL;\r
\r
- /* Key reports must be interleaved with 0 Key Code reports to release the keys, or repeated keys will be ignored */\r
+ /* Key reports must be interleaved with key release reports, or repeated keys will be ignored */\r
IsKeyReleaseReport = !IsKeyReleaseReport; \r
\r
if (IsKeyReleaseReport)\r
{\r
- KeyboardReport->KeyCode = 0;\r
+ KeyboardReport->KeyCode = KEY_NONE;\r
}\r
else if (IsNewlineReport)\r
{\r
}\r
else\r
{\r
+ /* Read out tracks in ascending order - when each track buffer is empty, progress to next buffer */\r
if (TrackDataBuffers[0].Elements)\r
Buffer = &TrackDataBuffers[0];\r
else if (TrackDataBuffers[1].Elements)\r
\r
KeyboardReport->KeyCode = BitBuffer_GetNextBit(Buffer) ? KEY_1 : KEY_0;\r
\r
- /* If buffer now empty, next report must be a newline to seperate track data */\r
+ /* If current track buffer now empty, next report must be a newline to seperate track data */\r
if (!(Buffer->Elements))\r
IsNewlineReport = true;\r
}\r