Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
dab7e06a
Commit
dab7e06a
authored
Jun 20, 2011
by
Dean Camera
Browse files
Split HIDReportViewer project sub-components into seperate functions for readability/convenience.
parent
ea3b5c74
Changes
2
Hide whitespace changes
Inline
Side-by-side
Projects/HIDReportViewer/HIDReportViewer.c
View file @
dab7e06a
...
...
@@ -123,76 +123,8 @@ int main(void)
case
HOST_STATE_Configured
:
LEDs_SetAllLEDs
(
LEDMASK_USB_BUSY
);
printf_P
(
PSTR
(
"
\r\n\r\n
Total Device Reports: %"
PRId8
"
\r\n
"
),
HIDReportInfo
.
TotalDeviceReports
);
for
(
uint8_t
ReportIndex
=
0
;
ReportIndex
<
HIDReportInfo
.
TotalDeviceReports
;
ReportIndex
++
)
{
HID_ReportSizeInfo_t
*
CurrReportIDInfo
=
&
HIDReportInfo
.
ReportIDSizes
[
ReportIndex
];
uint8_t
ReportSizeInBits
=
CurrReportIDInfo
->
ReportSizeBits
[
HID_REPORT_ITEM_In
];
uint8_t
ReportSizeOutBits
=
CurrReportIDInfo
->
ReportSizeBits
[
HID_REPORT_ITEM_Out
];
uint8_t
ReportSizeFeatureBits
=
CurrReportIDInfo
->
ReportSizeBits
[
HID_REPORT_ITEM_Feature
];
/* Print out the byte sizes of each report within the device */
printf_P
(
PSTR
(
" + Report ID 0x%02"
PRIX8
"
\r\n
"
" - Input Data: %"
PRId8
" bits (%"
PRId8
" bytes)
\r\n
"
" - Output Data: %"
PRId8
" bits (%"
PRId8
" bytes)
\r\n
"
" - Feature Data: %"
PRId8
" bits (%"
PRId8
" bytes)
\r\n
"
),
CurrReportIDInfo
->
ReportID
,
ReportSizeInBits
,
((
ReportSizeInBits
>>
3
)
+
((
ReportSizeInBits
&
0x07
)
!=
0
)),
ReportSizeOutBits
,
((
ReportSizeOutBits
>>
3
)
+
((
ReportSizeOutBits
&
0x07
)
!=
0
)),
ReportSizeFeatureBits
,
((
ReportSizeFeatureBits
>>
3
)
+
((
ReportSizeFeatureBits
&
0x07
)
!=
0
)));
}
printf_P
(
PSTR
(
"
\r\n
Report Items (%"
PRId8
" Stored in Table):
\r\n
"
),
HIDReportInfo
.
TotalReportItems
);
for
(
uint8_t
ItemIndex
=
0
;
ItemIndex
<
HIDReportInfo
.
TotalReportItems
;
ItemIndex
++
)
{
const
HID_ReportItem_t
*
RItem
=
&
HIDReportInfo
.
ReportItems
[
ItemIndex
];
printf_P
(
PSTR
(
" + Item %"
PRId8
":
\r\n
"
" - Report ID: 0x%02"
PRIX8
"
\r\n
"
" - Data Direction: %s
\r\n
"
" - Item Flags: 0x%02"
PRIX8
"
\r\n
"
" - Item Offset (Bits): 0x%02"
PRIX8
"
\r\n
"
" - Item Size (Bits): 0x%02"
PRIX8
"
\r\n
"
" - Usage Page: 0x%04"
PRIX16
"
\r\n
"
" - Usage: 0x%04"
PRIX16
"
\r\n
"
" - Unit Type: 0x%08"
PRIX32
"
\r\n
"
" - Unit Exponent: 0x%02"
PRIX8
"
\r\n
"
" - Logical Minimum: 0x%08"
PRIX32
"
\r\n
"
" - Logical Maximum: 0x%08"
PRIX32
"
\r\n
"
" - Physical Minimum: 0x%08"
PRIX32
"
\r\n
"
" - Physical Maximum: 0x%08"
PRIX32
"
\r\n
"
" - Collection Path:
\r\n
"
),
ItemIndex
,
RItem
->
ReportID
,
((
RItem
->
ItemType
==
HID_REPORT_ITEM_In
)
?
"IN"
:
((
RItem
->
ItemType
==
HID_REPORT_ITEM_Out
)
?
"OUT"
:
"FEATURE"
)),
RItem
->
ItemFlags
,
RItem
->
BitOffset
,
RItem
->
Attributes
.
BitSize
,
RItem
->
Attributes
.
Usage
.
Page
,
RItem
->
Attributes
.
Usage
.
Usage
,
RItem
->
Attributes
.
Unit
.
Type
,
RItem
->
Attributes
.
Unit
.
Exponent
,
RItem
->
Attributes
.
Logical
.
Minimum
,
RItem
->
Attributes
.
Logical
.
Maximum
,
RItem
->
Attributes
.
Physical
.
Minimum
,
RItem
->
Attributes
.
Physical
.
Maximum
);
const
HID_CollectionPath_t
*
CollectionPath
=
RItem
->
CollectionPath
;
while
(
CollectionPath
!=
NULL
)
{
printf_P
(
PSTR
(
" |
\r\n
"
" - Type: 0x%02"
PRIX8
"
\r\n
"
" - Usage: 0x%02"
PRIX8
"
\r\n
"
),
CollectionPath
->
Type
,
CollectionPath
->
Usage
);
CollectionPath
=
CollectionPath
->
Parent
;
}
}
OutputReportSizes
();
OutputParsedReportItems
();
LEDs_SetAllLEDs
(
LEDMASK_USB_READY
);
USB_HostState
=
HOST_STATE_WaitForDeviceRemoval
;
...
...
@@ -204,6 +136,104 @@ int main(void)
}
}
/** Prints a summary of the device's HID report sizes from the HID parser output to the serial port
* for display to the user.
*/
void
OutputReportSizes
(
void
)
{
printf_P
(
PSTR
(
"
\r\n\r\n
Total Device Reports: %"
PRId8
"
\r\n
"
),
HIDReportInfo
.
TotalDeviceReports
);
for
(
uint8_t
ReportIndex
=
0
;
ReportIndex
<
HIDReportInfo
.
TotalDeviceReports
;
ReportIndex
++
)
{
const
HID_ReportSizeInfo_t
*
CurrReportIDInfo
=
&
HIDReportInfo
.
ReportIDSizes
[
ReportIndex
];
uint8_t
ReportSizeInBits
=
CurrReportIDInfo
->
ReportSizeBits
[
HID_REPORT_ITEM_In
];
uint8_t
ReportSizeOutBits
=
CurrReportIDInfo
->
ReportSizeBits
[
HID_REPORT_ITEM_Out
];
uint8_t
ReportSizeFeatureBits
=
CurrReportIDInfo
->
ReportSizeBits
[
HID_REPORT_ITEM_Feature
];
/* Print out the byte sizes of each report within the device */
printf_P
(
PSTR
(
" + Report ID 0x%02"
PRIX8
"
\r\n
"
" - Input Data: %"
PRId8
" bits (%"
PRId8
" bytes)
\r\n
"
" - Output Data: %"
PRId8
" bits (%"
PRId8
" bytes)
\r\n
"
" - Feature Data: %"
PRId8
" bits (%"
PRId8
" bytes)
\r\n
"
),
CurrReportIDInfo
->
ReportID
,
ReportSizeInBits
,
((
ReportSizeInBits
>>
3
)
+
((
ReportSizeInBits
&
0x07
)
!=
0
)),
ReportSizeOutBits
,
((
ReportSizeOutBits
>>
3
)
+
((
ReportSizeOutBits
&
0x07
)
!=
0
)),
ReportSizeFeatureBits
,
((
ReportSizeFeatureBits
>>
3
)
+
((
ReportSizeFeatureBits
&
0x07
)
!=
0
)));
}
}
/** Prints a summary of the device's parsed and stored report items along with their attributes
* to the serial port for display to the user.
*/
void
OutputParsedReportItems
(
void
)
{
printf_P
(
PSTR
(
"
\r\n
Report Items (%"
PRId8
" in Table):
\r\n
"
),
HIDReportInfo
.
TotalReportItems
);
for
(
uint8_t
ItemIndex
=
0
;
ItemIndex
<
HIDReportInfo
.
TotalReportItems
;
ItemIndex
++
)
{
const
HID_ReportItem_t
*
RItem
=
&
HIDReportInfo
.
ReportItems
[
ItemIndex
];
printf_P
(
PSTR
(
" + Item %"
PRId8
":
\r\n
"
" - Report ID: 0x%02"
PRIX8
"
\r\n
"
" - Data Direction: %s
\r\n
"
" - Item Flags: 0x%02"
PRIX8
"
\r\n
"
" - Item Offset (Bits): 0x%02"
PRIX8
"
\r\n
"
" - Item Size (Bits): 0x%02"
PRIX8
"
\r\n
"
" - Usage Page: 0x%04"
PRIX16
"
\r\n
"
" - Usage: 0x%04"
PRIX16
"
\r\n
"
" - Unit Type: 0x%08"
PRIX32
"
\r\n
"
" - Unit Exponent: 0x%02"
PRIX8
"
\r\n
"
" - Logical Minimum: 0x%08"
PRIX32
"
\r\n
"
" - Logical Maximum: 0x%08"
PRIX32
"
\r\n
"
" - Physical Minimum: 0x%08"
PRIX32
"
\r\n
"
" - Physical Maximum: 0x%08"
PRIX32
"
\r\n
"
" - Collection Path:
\r\n
"
),
ItemIndex
,
RItem
->
ReportID
,
((
RItem
->
ItemType
==
HID_REPORT_ITEM_In
)
?
"IN"
:
((
RItem
->
ItemType
==
HID_REPORT_ITEM_Out
)
?
"OUT"
:
"FEATURE"
)),
RItem
->
ItemFlags
,
RItem
->
BitOffset
,
RItem
->
Attributes
.
BitSize
,
RItem
->
Attributes
.
Usage
.
Page
,
RItem
->
Attributes
.
Usage
.
Usage
,
RItem
->
Attributes
.
Unit
.
Type
,
RItem
->
Attributes
.
Unit
.
Exponent
,
RItem
->
Attributes
.
Logical
.
Minimum
,
RItem
->
Attributes
.
Logical
.
Maximum
,
RItem
->
Attributes
.
Physical
.
Minimum
,
RItem
->
Attributes
.
Physical
.
Maximum
);
OutputCollectionPath
(
RItem
->
CollectionPath
);
}
}
/** Prints the HID Collection path (along with each node's attributes) to the serial port
* for display to the user, from the given starting node to the root node.
*
* \param[in] CollectionPath Starting HID Collection node to print
*/
void
OutputCollectionPath
(
const
HID_CollectionPath_t
*
const
CollectionPath
)
{
const
HID_CollectionPath_t
*
CurrentNode
=
CollectionPath
;
while
(
CurrentNode
!=
NULL
)
{
printf_P
(
PSTR
(
" |
\r\n
"
" - Type: 0x%02"
PRIX8
"
\r\n
"
" - Usage: 0x%02"
PRIX8
"
\r\n
"
),
CurrentNode
->
Type
,
CurrentNode
->
Usage
);
CurrentNode
=
CurrentNode
->
Parent
;
}
printf_P
(
PSTR
(
" |
\r\n
"
" END
\r\n
"
));
}
/** Configures the board hardware and chip peripherals for the demo's functionality. */
void
SetupHardware
(
void
)
{
...
...
Projects/HIDReportViewer/HIDReportViewer.h
View file @
dab7e06a
...
...
@@ -69,6 +69,9 @@
/* Function Prototypes: */
void
SetupHardware
(
void
);
void
OutputReportSizes
(
void
);
void
OutputParsedReportItems
(
void
);
void
OutputCollectionPath
(
const
HID_CollectionPath_t
*
const
CollectionPath
);
void
EVENT_USB_Host_HostError
(
const
uint8_t
ErrorCode
);
void
EVENT_USB_Host_DeviceAttached
(
void
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment