forked from mfulz_github/qmk_firmware
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:
parent
c619e21fa7
commit
d6543dee0d
|
@ -51,8 +51,8 @@ USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =
|
||||||
0x09, 0x02, /* Usage (Vendor Defined) */
|
0x09, 0x02, /* Usage (Vendor Defined) */
|
||||||
0x75, 0x08, /* Report Size (8) */
|
0x75, 0x08, /* Report Size (8) */
|
||||||
0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */
|
0x95, GENERIC_REPORT_SIZE, /* Report Count (GENERIC_REPORT_SIZE) */
|
||||||
0x15, 0x00, /* Logical Minimum (0) */
|
0x15, 0x80, /* Logical Minimum (-128) */
|
||||||
0x25, 0xff, /* Logical Maximum (255) */
|
0x25, 0x7F, /* Logical Maximum (127) */
|
||||||
0x81, 0x02, /* Input (Data, Variable, Absolute) */
|
0x81, 0x02, /* Input (Data, Variable, Absolute) */
|
||||||
0x09, 0x03, /* Usage (Vendor Defined) */
|
0x09, 0x03, /* Usage (Vendor Defined) */
|
||||||
0x75, 0x08, /* Report Size (8) */
|
0x75, 0x08, /* Report Size (8) */
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
* - Fixed USB Pad regulator not being disabled on some AVR models when the USB_OPT_REG_DISABLED option is used
|
* - Fixed USB Pad regulator not being disabled on some AVR models when the USB_OPT_REG_DISABLED option is used
|
||||||
* - Fixed Host mode to Device mode UID change not causing a USB Disconnect event when a device was connected
|
* - Fixed Host mode to Device mode UID change not causing a USB Disconnect event when a device was connected
|
||||||
* - Fixed Mouse/Keyboard demos not performing the correct arithmetic on the Idle period at the right times (thanks to Brian Dickman)
|
* - Fixed Mouse/Keyboard demos not performing the correct arithmetic on the Idle period at the right times (thanks to Brian Dickman)
|
||||||
|
* - Fixed GenericHID failing HID class tests due to incorrect Logical Minimum and Logical Maximum values (thanks to Søren Greiner)
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section Sec_ChangeLog090605 Version 090605
|
* \section Sec_ChangeLog090605 Version 090605
|
||||||
|
|
|
@ -154,7 +154,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),
|
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),
|
||||||
.Attributes = EP_TYPE_INTERRUPT,
|
.Attributes = EP_TYPE_INTERRUPT,
|
||||||
.EndpointSize = KEYBOARD_EPSIZE,
|
.EndpointSize = KEYBOARD_EPSIZE,
|
||||||
.PollingIntervalMS = 0x04
|
.PollingIntervalMS = 0x01
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,7 @@ void ReadMagstripeData(void)
|
||||||
bool ClockPinLevel = ((Magstripe_LCL & TrackInfo[Track].ClockMask) != 0);
|
bool ClockPinLevel = ((Magstripe_LCL & TrackInfo[Track].ClockMask) != 0);
|
||||||
bool ClockLevelChanged = (((Magstripe_LCL ^ Magstripe_Prev) & TrackInfo[Track].ClockMask) != 0);
|
bool ClockLevelChanged = (((Magstripe_LCL ^ Magstripe_Prev) & TrackInfo[Track].ClockMask) != 0);
|
||||||
|
|
||||||
|
/* Sample on rising clock edges */
|
||||||
if (ClockPinLevel && ClockLevelChanged)
|
if (ClockPinLevel && ClockLevelChanged)
|
||||||
BitBuffer_StoreNextBit(&TrackDataBuffers[Track], DataPinLevel);
|
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 IsKeyReleaseReport;
|
||||||
static bool IsNewlineReport;
|
static bool IsNewlineReport;
|
||||||
|
|
||||||
BitBuffer_t* Buffer = NULL;
|
|
||||||
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
|
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;
|
IsKeyReleaseReport = !IsKeyReleaseReport;
|
||||||
|
|
||||||
if (IsKeyReleaseReport)
|
if (IsKeyReleaseReport)
|
||||||
{
|
{
|
||||||
KeyboardReport->KeyCode = 0;
|
KeyboardReport->KeyCode = KEY_NONE;
|
||||||
}
|
}
|
||||||
else if (IsNewlineReport)
|
else if (IsNewlineReport)
|
||||||
{
|
{
|
||||||
|
@ -188,6 +189,7 @@ uint16_t CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const H
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* Read out tracks in ascending order - when each track buffer is empty, progress to next buffer */
|
||||||
if (TrackDataBuffers[0].Elements)
|
if (TrackDataBuffers[0].Elements)
|
||||||
Buffer = &TrackDataBuffers[0];
|
Buffer = &TrackDataBuffers[0];
|
||||||
else if (TrackDataBuffers[1].Elements)
|
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;
|
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))
|
if (!(Buffer->Elements))
|
||||||
IsNewlineReport = true;
|
IsNewlineReport = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,9 @@
|
||||||
#include <LUFA/Drivers/USB/Class/HID.h>
|
#include <LUFA/Drivers/USB/Class/HID.h>
|
||||||
|
|
||||||
/* Macros: */
|
/* 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. */
|
/** HID keyboard keycode to indicate that the "1" key is currently pressed. */
|
||||||
#define KEY_1 30
|
#define KEY_1 30
|
||||||
|
|
||||||
|
|
|
@ -137,8 +137,9 @@ void SetupHardware(void)
|
||||||
void Read_Joystick_Status(void)
|
void Read_Joystick_Status(void)
|
||||||
{
|
{
|
||||||
uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
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);
|
Send_Command(CMD_FIRE);
|
||||||
else if (JoyStatus_LCL & JOY_UP)
|
else if (JoyStatus_LCL & JOY_UP)
|
||||||
Send_Command(CMD_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 */
|
/* Class specific request to send a HID report to the device */
|
||||||
USB_ControlRequest = (USB_Request_Header_t)
|
USB_ControlRequest = (USB_Request_Header_t)
|
||||||
{
|
{
|
||||||
.bmRequestType = 0x21,
|
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE),
|
||||||
.bRequest = 0x09,
|
.bRequest = 0x09,
|
||||||
.wValue = 0x02,
|
.wValue = 0x02,
|
||||||
.wIndex = 0x01,
|
.wIndex = 0x01,
|
||||||
|
|
Loading…
Reference in New Issue