USB_HostRequest renamed to USB_ControlRequest, entire control request header is now read into USB_ControlRequest in Device mode rather than having the library pass only partially read header data to the application.

The USB_UnhandledControlPacket event has had its parameters removed, in favour of accessing the new USB_ControlRequest structure.

The Endpoint control stream functions now correctly send a ZLP to the host when less data than requested is sent.
This commit is contained in:
Dean Camera 2009-04-22 13:03:11 +00:00
parent e5e7eaee7a
commit d860e9e842
43 changed files with 209 additions and 317 deletions

View file

@ -305,7 +305,7 @@
* parameters (wValue, wIndex, wLength, and Data) remain in the control endpoint bank until
* read out by the user application for processing.
*/
void USB_UnhandledControlPacket(const uint8_t bRequest, const uint8_t bmRequestType);
void USB_UnhandledControlPacket(void);
/** Event for USB configuration number changed. This event fires when a the USB host changes the
* selected configuration number while in device mode. This event should be hooked in device
@ -392,7 +392,7 @@
#endif
#if defined(USB_CAN_BE_DEVICE)
#define USB_UnhandledControlPacket_P (const uint8_t bRequest, const uint8_t bmRequestType)
#define USB_UnhandledControlPacket_P (void)
#define USB_ConfigurationChanged_P (void)
#define USB_Suspend_P (void)
#define USB_WakeUp_P (void)

View file

@ -135,6 +135,20 @@
*/
#define FEATURE_REMOTE_WAKEUP 0x01
/* Type Defines: */
/** Type define for a standard USB control request.
*
* \see The USB 2.0 specification for more information on standard control requests.
*/
typedef struct
{
uint8_t bmRequestType; /**< Type of the request. */
uint8_t bRequest; /**< Request command code. */
uint16_t wValue; /**< wValue parameter of the request. */
uint16_t wIndex; /**< wIndex parameter of the request. */
uint16_t wLength; /**< Length of the data to transfer in bytes. */
} USB_Request_Header_t;
/* Enums: */
/** Enumeration for the various standard request commands. These commands are applicable when the
* request type is REQTYPE_STANDARD (with the exception of REQ_GetDescriptor, which is always

View file

@ -33,9 +33,10 @@
#define INCLUDE_FROM_USBTASK_C
#include "USBTask.h"
volatile bool USB_IsSuspended;
volatile bool USB_IsConnected;
volatile bool USB_IsInitialized;
volatile bool USB_IsSuspended;
volatile bool USB_IsConnected;
volatile bool USB_IsInitialized;
USB_Request_Header_t USB_ControlRequest;
#if defined(USB_CAN_BE_HOST)
volatile uint8_t USB_HostState;
@ -169,7 +170,7 @@ static void USB_HostTask(void)
USB_HostState = HOST_STATE_Default;
break;
case HOST_STATE_Default:
USB_HostRequest = (USB_Host_Request_Header_t)
USB_ControlRequest = (USB_Request_Header_t)
{
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
.bRequest = REQ_GetDescriptor,
@ -214,7 +215,7 @@ static void USB_HostTask(void)
Pipe_SetInfiniteINRequests();
USB_HostRequest = (USB_Host_Request_Header_t)
USB_ControlRequest = (USB_Request_Header_t)
{
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
.bRequest = REQ_SetAddress,

View file

@ -40,6 +40,7 @@
#include "../../../Scheduler/Scheduler.h"
#include "../LowLevel/LowLevel.h"
#include "StdRequestType.h"
#include "USBMode.h"
#include "Events.h"
#include "StdDescriptors.h"
@ -82,6 +83,14 @@
*/
extern volatile bool USB_IsInitialized;
/** Structure containing the last received Control request when in Device mode (for use in user-applications
* inside of the USB_UnhandledControlPacket() event, or for filling up with a control request to issue when
* in Host mode before calling USB_Host_SendControlRequest().
*
* \ingroup Group_USBManagement
*/
extern USB_Request_Header_t USB_ControlRequest;
#if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
/** Indicates if the USB interface is currently suspended by the host when in device mode. When suspended,
* the device should consume minimal power, and cannot communicate to the host. If Remote Wakeup is