Fork of USBDevice by
As of Revision 18 everything in the USBHID specification is now implemented, except Multi-reports.
Revision comments for changelist 18
USBHID.cpp
- Added SET_PROTOCOL support
- Added GET_PROTOCOL support
- protocolSate is set to 1 by default to match USB HID specification. This variable should be checked to determine which format theinput report should have. 1 - Use the user specified report format. 0 - Use the BOOT protocol report format.
Revision comments for changelist 16
- HID_REPORT transformed from structure to class. This was done for several reasons.
- When multiple reports are used the 64 byte size for every report becomes a problem.
- The length value should always remain the same for a report, Make the constructor set the vale at the same time it allocates memory for the DATA area.
- By default the data will be an array of MAX_HID_REPORT_SIZE like the structure,
- When given a length argument, the hid_report.length will be set, and hid_report.data will be an array of the size given.
- Length zero causes data to be NULL
- Mostly backwards compatible. The definition of a destructor caused a compiler error in USBMouse::update and USBMousekeyboard::update. This error was caused by instatiation of HID_REPORT in the middle of an IF logic statement. These files have been modified. The error complained that the logic skipped object initialization. The HID_REPORT has been moved to the class definition. Since both ABSOLUTE and RELATIVE modes used the HID_REPORT, this seems to make more sense. Previously the hid_report would be instatiated in <class>::mousesend and <class>::update.
Revision comments for changelist 14
USBdevice.cpp
- Modified USB device state to change from Configure when disconnect is called.
- Modified the call back function for when the suspend state changes. This should be used to turn off peripherals to conserve power.
Revision comments for changelist 13
USBdevice.cpp
- ) Changed DEBUG messages to be more descriptive for string descriptor
- ) Bug fix: Control Transfers did not actually transfer the data from Buffer to transfer->ptr
USBHIDTypes.h
- ) Added ALL CLASS request to KEYWORD list
- ) Added KEYWORDS for report type
USBHID.h
- ) Added a new constructor to specify size of feature report
- ) Added HID_REPORT inputReport and featureReport
- ) Added data structures to support IDLE rate
- ) Added data structures to support callback functions
USBHID.cpp
- ) Changed constructor to initialize new feature data structures
- ) Implemented Set_IDLE/GET_IDLE and the periodic resend of non-changed data
- ) Implemented HID specification required control transfer GET_REPORT
- ) Fixed issue where Intreput transfers and control transfers did not access the same data structures.
- ) Implemented Feature reports
- ) Implemented Callback Hooks for get_report/set_report actions.
- ) Added callback hooks for interupt actions in the new functions.
- ) interupt transfer can now write to outputReport
- ) Modified SET_REPORT code to function for multiple types.
- ) Refactored some code in preperation to add multi report support
Test Number | Test Description | Test Result | Notes | ||||||
1 | Use USBmouse to verify backward compatibility of constructor and methods | Pass | |||||||
2 | Test SET_REPORT can set a feature report | Pass | |||||||
3 | Test GET_REPORT can retrieve a feature report | Pass | |||||||
4 | Test SET_IDLE sets up a reoccuring trigger | Pass | IOCTL_SET_POLL_FREQUENCY_MSEC does not function for the windows HID driver. A Special test program is used to rearm the IDLE rate after windows sets it to zero | ||||||
5 | Test SET_IDLE disables a trigger | Pass | Windows automatically sends this command to a HID device when it is inserted. | ||||||
6 | Enabled DEBUG in USBDevice.cpp and generated str descriptor requests. | Pass | |||||||
7 | Test SET_REPORT can set an output report | Pass | |||||||
8 | Test GET_REPORT can retrieve an output report | Pass | |||||||
9 | ReadFile, accesses the input_report | Pass | |||||||
10 | WriteFile accesses the output_report, via interupt transfer when ep1_out is used. | Pass | |||||||
11 | WriteFile accesses the output_report, via control transfer when ep1_out is NOT used. | Not Tested | |||||||
12 | Callback hooks trigger independently for each type of set_report/get_report | Pass | |||||||
13 | New constructor sets feature_report size | Pass | |||||||
14 | Control transfer SET_REPORT and writeFile access the same data structure | BUG | The same data structure is accessed, but the data transfer size is different. The writeFile strips the leading byte which is the report ID, The Control transfer keeps the byte. | ||||||
15 | Control transfer GET_REPORT and readFile access the same data structure | BUG | The same dtat structure is accessed, but the data transfer size is different. The readFile strips the leading byte which is the report ID, The Control transfer keeps the byte. | ||||||
16 | Test GET_IDLE retrieves the IDLE rate | Unknown | Windows HID driver does not implement IOCTL_HID_GET_POLL_FREQUENCY_MSEC |
Revision 18:cb3afa532fcd, committed 2013-08-08
- Comitter:
- jakowisp
- Date:
- Thu Aug 08 08:02:46 2013 +0000
- Parent:
- 17:cf5d77f1026a
- Commit message:
- Default ProtocolState was incorrectly being set to 0:Boot when the HID specification states that the default should be 1:Report
Changed in this revision
USBHID/USBHID.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r cf5d77f1026a -r cb3afa532fcd USBHID/USBHID.cpp --- a/USBHID/USBHID.cpp Thu Aug 08 07:44:36 2013 +0000 +++ b/USBHID/USBHID.cpp Thu Aug 08 08:02:46 2013 +0000 @@ -42,7 +42,7 @@ reportIdleRateInt=0x0; reportIdleRate=0.0; - protocolState=0; + protocolState=1; if(connect) { USBDevice::connect();