Minor updates to the Magstripe and MissileLauncher projects to fix bugs and improve performance.

Fixed error in GenericHID descriptors preventing it from passing the USB-IF HID tests (thanks to Søren Greiner).
This commit is contained in:
Dean Camera 2009-07-16 15:00:10 +00:00
parent c619e21fa7
commit d6543dee0d
6 changed files with 16 additions and 9 deletions

View file

@ -154,7 +154,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),
.Attributes = EP_TYPE_INTERRUPT,
.EndpointSize = KEYBOARD_EPSIZE,
.PollingIntervalMS = 0x04
.PollingIntervalMS = 0x01
},
};

View file

@ -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;
}

View file

@ -51,6 +51,9 @@
#include <LUFA/Drivers/USB/Class/HID.h>
/* Macros: */
/** HID keyboard keycode to indicate that no is currently pressed. */
#define KEY_NONE 0
/** HID keyboard keycode to indicate that the "1" key is currently pressed. */
#define KEY_1 30

View file

@ -137,8 +137,9 @@ void SetupHardware(void)
void Read_Joystick_Status(void)
{
uint8_t JoyStatus_LCL = Joystick_GetStatus();
uint8_t Buttons_LCL = Buttons_GetStatus();
if (BUTTONS_BUTTON1 && Buttons_GetStatus())
if (Buttons_LCL & BUTTONS_BUTTON1)
Send_Command(CMD_FIRE);
else if (JoyStatus_LCL & JOY_UP)
Send_Command(CMD_UP);
@ -285,7 +286,7 @@ void WriteNextReport(uint8_t* ReportOUTData, uint16_t ReportLength)
/* Class specific request to send a HID report to the device */
USB_ControlRequest = (USB_Request_Header_t)
{
.bmRequestType = 0x21,
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
.bRequest = 0x09,
.wValue = 0x02,
.wIndex = 0x01,