Commit Graph

20 Commits (feature-hal-spec-usb-device)

Author SHA1 Message Date
Russ Butler f8864ae307 Applied suggested astyle fixes 2019-01-29 15:45:18 -06:00
Russ Butler 5867e99bc9 Remove inclusion of mbed.h from USB
Remove mbed.h from USB files and fix the build errors this causes.
This is required to pass CI.
2019-01-29 15:31:24 -06:00
Russ Butler be5e7d3613 Abort the current USB transfer when stalling
It is undefined behavior if stalling and unstalling clears an ongoing
transfer. Abort any ongoing transfers explicitly when stalling and
unstalling so the behavior is consistent across devices.
2019-01-29 12:27:29 -06:00
Russ Butler ddc27cb821 Remove endpoint parameter from USB callbacks
Remove the endpoint parameter from endpoint callbacks. This
information is redundant because endpoints are known at
construction time because they must be in the configuration
descriptor.
2019-01-29 12:27:29 -06:00
Russ Butler 2c4686f468 Update USBDevice endpoint checks to fix asserts
Only assert if disabled endpoints are used when USBDevice is
configured. USBDevice can leave the configured state due to a
reset at any time, which disables all endpoints. Because this
can happen at any time, thread processing could be performing
any endpoint operation. The endpoint operation should return
failure and do nothing in this case, rather than asserting
as this is not an application error.

An assert should only be triggered when an invalid endpoint is
used after the use of USBDevice acknoledges the switch to
configured mode by complete_set_configuration.

In specific this PR fixes the assert caused with the following
sequence:

-ISR: OUT event sent
-ISR: USB reset event
-ISR: USB configure request start
-Thread: OUT event processed on thread and next read starts
        ***endpoint is used while disabled causing an invalid assert***
-Thread: reset event processed
-Thread: configure event processed

This patch fixes this problem by making the following changes:
1. Operations done on disabled endpoints only assert when in the configured state
2. Adding and removing endpoints is only allowed when
    the flag _endpoint_add_remove_allowed is set
3. The flag _endpoint_add_remove_allowed is set on the set
    configuration request and cleared if the request is aborted  or
    fails
2019-01-29 12:27:28 -06:00
Russ Butler 3d605b672a Require USB classes to implement descriptor
Make the function configuration_desc pure virtual inside USBDevice.
This should be a compile time error since no subclass will work
without a configuration descriptor.
2019-01-29 12:27:27 -06:00
Russ Butler beddff36e9 Add USBDevice destructor
Add a destructor to USBDevice to ensure that resources have been
properly released. Additionally add an assert in the destructor that
deinit has already been called. If it has not been called then
interrupts can still occur which may cause a crash.
2019-01-29 12:27:26 -06:00
Russ Butler 0c52350540 Remove extra USBDevice constructor
Remove the second USBDevice constructor since it does not provide
any new functionality.
2019-01-29 12:27:26 -06:00
Russ Butler 7df887fe69 Remove blocking option from USB connect
Remove the option to block in USBDevice::connect since this
should be handled at a higher level. Also call init to ensure that
the USBDevice has been initalized.
2019-01-29 12:27:26 -06:00
Russ Butler 6c427ee369 Add endpoint_remove_all helper function
Add the helper function endpoint_remove_all which removes all added
endpoints. This is useful for class drivers switching between
different USB configurations.
2019-01-29 12:27:25 -06:00
Maciej Bocianski e515a52ffa USBDevice - add multiconfiguration support 2019-01-29 12:27:25 -06:00
Russ Butler b8995e8c29 Add abort API to USBDevice
Add the function endpoint_abort and ensure ongoing transfer are
aborted when an endpoint is removed.
2019-01-29 12:27:22 -06:00
Russ Butler 3c42cd7bd1 Update USBDevice to reflect the updated USBPhy
Update USBDevice so the USB buffers are user supplied.
2019-01-29 12:27:22 -06:00
Russ Butler bf2dd81784 Call disconnect when uninitializing USB
Disconnect USB when uninitializing USB so it is in a well defined
state.
2019-01-29 12:27:22 -06:00
Russ Butler 3dd9b7a8dc Move USBDevice processing out of user callbacks
Perform processing triggered by user callbacks when USB is being
unlocked rather than synchronously. This prevents recursive callbacks
which reduces stack usage. This also prevents state change inside
the user callback which makes the code easier to reason about.
2019-01-29 12:27:21 -06:00
Russ Butler 679ca0dc0a Change USBDevice read handling
Remove the USBDevice function read_start and automatically start all
reads internally in USBDevice. This patch also renames the function
read_finish to read.
2019-01-29 12:27:21 -06:00
Russ Butler a8ac294f34 Add and assert USB callback completion
Assert that when a callback is completed it is the active callback.
2019-01-29 12:27:21 -06:00
Russ Butler c855577662 Update USBDevice and configure to use a USBPhy
Update the USBDevice class API so it matches mbed-os's naming
conventions, has a more robust API and uses USBPhy as its backend.
2019-01-29 12:27:20 -06:00
Russ Butler 14b0c313ed Update USB licenses and format code
Update USB licenses from MIT to Apache 2 and run astyle on the code.
2019-01-29 12:27:20 -06:00
Russ Butler 61a575af23 Copy USBDevice from unsupported
Copy the USBDevice code out of unsupported and into a top level USB
folder in preparation for development.

squash
2019-01-29 12:27:20 -06:00