projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Speed up bit-banged USART code in the AVRISP project.
[pub/USBasp.git]
/
LUFA
/
Drivers
/
USB
/
Class
/
Host
/
HIDParser.c
diff --git
a/LUFA/Drivers/USB/Class/Host/HIDParser.c
b/LUFA/Drivers/USB/Class/Host/HIDParser.c
index
81062b1
..
5b295ed
100644
(file)
--- a/
LUFA/Drivers/USB/Class/Host/HIDParser.c
+++ b/
LUFA/Drivers/USB/Class/Host/HIDParser.c
@@
-40,7
+40,8
@@
uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
HID_CollectionPath_t* CurrCollectionPath = NULL;
\r
HID_ReportSizeInfo_t* CurrReportIDInfo = &ParserData->ReportIDSizes[0];
\r
uint16_t UsageList[HID_USAGE_STACK_DEPTH];
\r
HID_CollectionPath_t* CurrCollectionPath = NULL;
\r
HID_ReportSizeInfo_t* CurrReportIDInfo = &ParserData->ReportIDSizes[0];
\r
uint16_t UsageList[HID_USAGE_STACK_DEPTH];
\r
- uint8_t UsageListSize = 0;
\r
+ uint8_t UsageListSize = 0;
\r
+ HID_MinMax_t UsageMinMax = {0, 0};
\r
\r
memset(ParserData, 0x00, sizeof(HID_ReportInfo_t));
\r
memset(CurrStateTable, 0x00, sizeof(HID_StateTable_t));
\r
\r
memset(ParserData, 0x00, sizeof(HID_ReportInfo_t));
\r
memset(CurrStateTable, 0x00, sizeof(HID_StateTable_t));
\r
@@
-157,10
+158,10
@@
uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
UsageList[UsageListSize++] = ReportItemData;
\r
break;
\r
case (TYPE_LOCAL | TAG_LOCAL_USAGEMIN):
\r
UsageList[UsageListSize++] = ReportItemData;
\r
break;
\r
case (TYPE_LOCAL | TAG_LOCAL_USAGEMIN):
\r
-
CurrStateTable->Attributes.Usage.
MinMax.Minimum = ReportItemData;
\r
+
Usage
MinMax.Minimum = ReportItemData;
\r
break;
\r
case (TYPE_LOCAL | TAG_LOCAL_USAGEMAX):
\r
break;
\r
case (TYPE_LOCAL | TAG_LOCAL_USAGEMAX):
\r
-
CurrStateTable->Attributes.Usage.
MinMax.Maximum = ReportItemData;
\r
+
Usage
MinMax.Maximum = ReportItemData;
\r
break;
\r
case (TYPE_MAIN | TAG_MAIN_COLLECTION):
\r
if (CurrCollectionPath == NULL)
\r
break;
\r
case (TYPE_MAIN | TAG_MAIN_COLLECTION):
\r
if (CurrCollectionPath == NULL)
\r
@@
-193,9
+194,13
@@
uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
\r
for (uint8_t i = 0; i < UsageListSize; i++)
\r
UsageList[i] = UsageList[i + 1];
\r
\r
for (uint8_t i = 0; i < UsageListSize; i++)
\r
UsageList[i] = UsageList[i + 1];
\r
-
\r
+
\r
UsageListSize--;
\r
}
\r
UsageListSize--;
\r
}
\r
+ else if (UsageMinMax.Minimum <= UsageMinMax.Maximum)
\r
+ {
\r
+ CurrCollectionPath->Usage.Usage = UsageMinMax.Minimum++;
\r
+ }
\r
\r
break;
\r
case (TYPE_MAIN | TAG_MAIN_ENDCOLLECTION):
\r
\r
break;
\r
case (TYPE_MAIN | TAG_MAIN_ENDCOLLECTION):
\r
@@
-228,7
+233,11
@@
uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
\r
UsageListSize--;
\r
}
\r
\r
UsageListSize--;
\r
}
\r
-
\r
+ else if (UsageMinMax.Minimum <= UsageMinMax.Maximum)
\r
+ {
\r
+ NewReportItem.Attributes.Usage.Usage = UsageMinMax.Minimum++;
\r
+ }
\r
+
\r
uint8_t ItemTag = (HIDReportItem & TAG_MASK);
\r
\r
if (ItemTag == TAG_MAIN_INPUT)
\r
uint8_t ItemTag = (HIDReportItem & TAG_MASK);
\r
\r
if (ItemTag == TAG_MAIN_INPUT)
\r
@@
-262,9
+271,9
@@
uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
\r
if ((HIDReportItem & TYPE_MASK) == TYPE_MAIN)
\r
{
\r
\r
if ((HIDReportItem & TYPE_MASK) == TYPE_MAIN)
\r
{
\r
-
CurrStateTable->Attributes.Usage.
MinMax.Minimum = 0;
\r
-
CurrStateTable->Attributes.Usage.
MinMax.Maximum = 0;
\r
- UsageListSize = 0;
\r
+
Usage
MinMax.Minimum = 0;
\r
+
Usage
MinMax.Maximum = 0;
\r
+ UsageListSize
= 0;
\r
}
\r
}
\r
\r
}
\r
}
\r
\r
@@
-280,6
+289,7
@@
bool USB_GetHIDReportItemInfo(const uint8_t* ReportData, HID_ReportItem_t* const
uint16_t CurrentBit = ReportItem->BitOffset;
\r
uint32_t BitMask = (1 << 0);
\r
\r
uint16_t CurrentBit = ReportItem->BitOffset;
\r
uint32_t BitMask = (1 << 0);
\r
\r
+ ReportItem->PreviousValue = ReportItem->Value;
\r
ReportItem->Value = 0;
\r
\r
if (ReportItem->ReportID)
\r
ReportItem->Value = 0;
\r
\r
if (ReportItem->ReportID)
\r
@@
-302,7
+312,7
@@
bool USB_GetHIDReportItemInfo(const uint8_t* ReportData, HID_ReportItem_t* const
return true;
\r
}
\r
\r
return true;
\r
}
\r
\r
-void USB_SetHIDReportItemInfo(uint8_t* ReportData,
const HID_ReportItem_t*
ReportItem)
\r
+void USB_SetHIDReportItemInfo(uint8_t* ReportData,
HID_ReportItem_t* const
ReportItem)
\r
{
\r
uint16_t DataBitsRem = ReportItem->Attributes.BitSize;
\r
uint16_t CurrentBit = ReportItem->BitOffset;
\r
{
\r
uint16_t DataBitsRem = ReportItem->Attributes.BitSize;
\r
uint16_t CurrentBit = ReportItem->BitOffset;
\r
@@
-314,6
+324,8
@@
void USB_SetHIDReportItemInfo(uint8_t* ReportData, const HID_ReportItem_t* Repor
ReportData++;
\r
}
\r
\r
ReportData++;
\r
}
\r
\r
+ ReportItem->PreviousValue = ReportItem->Value;
\r
+
\r
while (DataBitsRem--)
\r
{
\r
if (ReportItem->Value & (1 << (CurrentBit % 8)))
\r
while (DataBitsRem--)
\r
{
\r
if (ReportItem->Value & (1 << (CurrentBit % 8)))
\r