Fixed USB_GetHIDReportItemInfo() function modifying the given report item's data when the report item does not exist within the supplied report of a multiple report HID device.

pull/1469/head
Dean Camera 14 years ago
parent eb060db71b
commit f4de17207e

@ -276,7 +276,7 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData,
{ {
UsageMinMax.Minimum = 0; UsageMinMax.Minimum = 0;
UsageMinMax.Maximum = 0; UsageMinMax.Maximum = 0;
UsageListSize = 0; UsageListSize = 0;
} }
} }
@ -292,9 +292,6 @@ bool USB_GetHIDReportItemInfo(const uint8_t* ReportData,
uint16_t DataBitsRem = ReportItem->Attributes.BitSize; uint16_t DataBitsRem = ReportItem->Attributes.BitSize;
uint16_t CurrentBit = ReportItem->BitOffset; uint16_t CurrentBit = ReportItem->BitOffset;
uint32_t BitMask = (1 << 0); uint32_t BitMask = (1 << 0);
ReportItem->PreviousValue = ReportItem->Value;
ReportItem->Value = 0;
if (ReportItem->ReportID) if (ReportItem->ReportID)
{ {
@ -304,6 +301,9 @@ bool USB_GetHIDReportItemInfo(const uint8_t* ReportData,
ReportData++; ReportData++;
} }
ReportItem->PreviousValue = ReportItem->Value;
ReportItem->Value = 0;
while (DataBitsRem--) while (DataBitsRem--)
{ {
if (ReportData[CurrentBit / 8] & (1 << (CurrentBit % 8))) if (ReportData[CurrentBit / 8] & (1 << (CurrentBit % 8)))

@ -285,8 +285,10 @@
/** Extracts the given report item's value out of the given HID report and places it into the Value /** Extracts the given report item's value out of the given HID report and places it into the Value
* member of the report item's \ref HID_ReportItem_t structure. * member of the report item's \ref HID_ReportItem_t structure.
* *
* When called, this copies the report item's Value element to it's PreviousValue element for easy * When called on a report with an item that exists in that report, this copies the report item's Value
* checking to see if an item's value has changed before processing a report. * to it's PreviousValue element for easy checking to see if an item's value has changed before processing
* a report. If the given item does not exist in the report, the function does not modify the report item's
* data.
* *
* \param[in] ReportData Buffer containing an IN or FEATURE report from an attached device. * \param[in] ReportData Buffer containing an IN or FEATURE report from an attached device.
* \param[in,out] ReportItem Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array. * \param[in,out] ReportItem Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array.

@ -13,6 +13,10 @@
* with basic code * with basic code
* - Changed over all device demos to use a clearer algorithm for the configuring of the application's endpoints * - Changed over all device demos to use a clearer algorithm for the configuring of the application's endpoints
* *
* <b>Fixed:</b>
* - Fixed USB_GetHIDReportItemInfo() function modifying the given report item's data when the report item does not exist
* within the supplied report of a multiple report HID device
*
* \section Sec_ChangeLog100807 Version 100807 * \section Sec_ChangeLog100807 Version 100807
* <b>New:</b> * <b>New:</b>
* - Added new ADC_DisableChannel() function (thanks to Mich Davis) * - Added new ADC_DisableChannel() function (thanks to Mich Davis)

Loading…
Cancel
Save