Re-add in simple scheduler for compatibility with legacy code, mark all scheduler related files as deprecated.
This commit is contained in:
parent
8bc3a91c1f
commit
0d8679cf6b
8 changed files with 458 additions and 33 deletions
|
@ -34,7 +34,7 @@
|
|||
#define INCLUDE_FROM_CDC_CLASS_HOST_C
|
||||
#include "CDC.h"
|
||||
|
||||
static uint8_t CDC_Host_ProcessConfigDescriptor(void)
|
||||
static uint8_t CDC_Host_ProcessConfigDescriptor(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo)
|
||||
{
|
||||
uint8_t* ConfigDescriptorData;
|
||||
uint16_t ConfigDescriptorSize;
|
||||
|
@ -59,13 +59,13 @@ static uint8_t CDC_Host_ProcessConfigDescriptor(void)
|
|||
return CDC_ENUMERROR_NoCDCInterfaceFound;
|
||||
}
|
||||
|
||||
while (FoundEndpoints != ((1 << CDC_NOTIFICATIONPIPE) | (1 << CDC_DATAPIPE_IN) | (1 << CDC_DATAPIPE_OUT)))
|
||||
while (FoundEndpoints != (CDC_FOUND_DATAPIPE_IN | CDC_FOUND_DATAPIPE_OUT | CDC_FOUND_DATAPIPE_NOTIFICATION))
|
||||
{
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
DComp_CDC_Host_NextInterfaceCDCDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
|
||||
{
|
||||
/* Check to see if the control interface's notification pipe has been found, if so search for the data interface */
|
||||
if (FoundEndpoints & (1 << CDC_NOTIFICATIONPIPE))
|
||||
if (FoundEndpoints & CDC_FOUND_DATAPIPE_NOTIFICATION)
|
||||
{
|
||||
/* Get the next CDC data interface from the configuration descriptor (CDC class has two CDC interfaces) */
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
|
@ -79,11 +79,11 @@ static uint8_t CDC_Host_ProcessConfigDescriptor(void)
|
|||
{
|
||||
FoundEndpoints = 0;
|
||||
|
||||
Pipe_SelectPipe(CDC_NOTIFICATIONPIPE);
|
||||
Pipe_SelectPipe(CDCInterfaceInfo->Config.DataINPipeNumber);
|
||||
Pipe_DisablePipe();
|
||||
Pipe_SelectPipe(CDC_DATAPIPE_IN);
|
||||
Pipe_SelectPipe(CDCInterfaceInfo->Config.DataOUTPipeNumber);
|
||||
Pipe_DisablePipe();
|
||||
Pipe_SelectPipe(CDC_DATAPIPE_OUT);
|
||||
Pipe_SelectPipe(CDCInterfaceInfo->Config.NotificationPipeNumber);
|
||||
Pipe_DisablePipe();
|
||||
|
||||
if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
|
||||
|
@ -106,35 +106,38 @@ static uint8_t CDC_Host_ProcessConfigDescriptor(void)
|
|||
{
|
||||
if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)
|
||||
{
|
||||
Pipe_ConfigurePipe(CDC_NOTIFICATIONPIPE, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,
|
||||
Pipe_ConfigurePipe(CDCInterfaceInfo->Config.NotificationPipeNumber, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN,
|
||||
EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);
|
||||
CDCInterfaceInfo->State.NotificationPipeSize = EndpointData->EndpointSize;
|
||||
|
||||
Pipe_SetInfiniteINRequests();
|
||||
Pipe_SetInterruptPeriod(EndpointData->PollingIntervalMS);
|
||||
|
||||
FoundEndpoints |= (1 << CDC_NOTIFICATIONPIPE);
|
||||
FoundEndpoints |= CDC_FOUND_DATAPIPE_NOTIFICATION;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)
|
||||
{
|
||||
Pipe_ConfigurePipe(CDC_DATAPIPE_IN, EP_TYPE_BULK, PIPE_TOKEN_IN,
|
||||
Pipe_ConfigurePipe(CDCInterfaceInfo->Config.DataINPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_IN,
|
||||
EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);
|
||||
CDCInterfaceInfo->State.DataINPipeSize = EndpointData->EndpointSize;
|
||||
|
||||
Pipe_SetInfiniteINRequests();
|
||||
Pipe_Unfreeze();
|
||||
|
||||
FoundEndpoints |= (1 << CDC_DATAPIPE_IN);
|
||||
FoundEndpoints |= CDC_FOUND_DATAPIPE_IN;
|
||||
}
|
||||
else
|
||||
{
|
||||
Pipe_ConfigurePipe(CDC_DATAPIPE_OUT, EP_TYPE_BULK, PIPE_TOKEN_OUT,
|
||||
Pipe_ConfigurePipe(CDCInterfaceInfo->Config.DataOUTPipeNumber, EP_TYPE_BULK, PIPE_TOKEN_OUT,
|
||||
EndpointData->EndpointAddress, EndpointData->EndpointSize, PIPE_BANK_SINGLE);
|
||||
CDCInterfaceInfo->State.DataOUTPipeSize = EndpointData->EndpointSize;
|
||||
|
||||
Pipe_Unfreeze();
|
||||
|
||||
FoundEndpoints |= (1 << CDC_DATAPIPE_OUT);
|
||||
FoundEndpoints |= CDC_FOUND_DATAPIPE_OUT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -199,7 +202,7 @@ void CDC_Host_USBTask(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo)
|
|||
switch (USB_HostState)
|
||||
{
|
||||
case HOST_STATE_Addressed:
|
||||
if ((ErrorCode = CDC_Host_ProcessConfigDescriptor()) != SuccessfulConfigRead)
|
||||
if ((ErrorCode = CDC_Host_ProcessConfigDescriptor(CDCInterfaceInfo)) != CDC_ENUMERROR_NoError)
|
||||
{
|
||||
USB_HostState = HOST_STATE_Unattached;
|
||||
}
|
||||
|
|
|
@ -50,18 +50,22 @@
|
|||
#endif
|
||||
|
||||
/* Public Interface - May be used in end-application: */
|
||||
/* Type Defines: */
|
||||
/* Type Defines: */
|
||||
/** Configuration information structure for \ref USB_ClassInfo_CDC_Host_t CDC host interface structures. */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t DataINPipeNumber; /**< Pipe number of the CDC interface's IN data pipe */
|
||||
uint8_t DataOUTPipeNumber; /**< Pipe number of the CDC interface's OUT data pipe */
|
||||
uint8_t NotificationPipeNumber; /**< Pipe number of the CDC interface's IN notification endpoint, if used */
|
||||
} USB_ClassInfo_CDC_Host_Config_t;
|
||||
|
||||
/** Current State information structure for \ref USB_ClassInfo_CDC_Host_t CDC host interface structures. */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t ControlInterfaceNumber; /**< Interface number of the CDC control interface within the device */
|
||||
|
||||
uint8_t DataINPipeNumber; /**< Pipe number of the CDC interface's IN data pipe */
|
||||
uint16_t DataINPipeSize; /**< Size in bytes of the CDC interface's IN data pipe */
|
||||
|
||||
uint8_t DataOUTPipeNumber; /**< Pipe number of the CDC interface's OUT data pipe */
|
||||
uint16_t DataOUTPipeSize; /**< Size in bytes of the CDC interface's OUT data pipe */
|
||||
|
||||
uint8_t NotificationPipeNumber; /**< Pipe number of the CDC interface's IN notification endpoint, if used */
|
||||
uint16_t NotificationPipeSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
|
||||
|
||||
uint8_t ControlLineState; /**< Current control line states */
|
||||
|
@ -76,7 +80,27 @@
|
|||
* CDCDevice_LineCodingParity_t enum
|
||||
*/
|
||||
uint8_t DataBits; /**< Bits of data per character of the virtual serial port */
|
||||
} LineEncoding;
|
||||
} LineEncoding;
|
||||
} USB_ClassInfo_CDC_Host_State_t;
|
||||
|
||||
/** Class state structure. An instance of this structure should be made within the user application,
|
||||
* and passed to each of the CDC class driver functions as the CDCInterfaceInfo parameter. This
|
||||
* stores each CDC interface's configuration and state information.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
const USB_ClassInfo_CDC_Host_Config_t Config; /**< Config data for the USB class interface within
|
||||
* the device. All elements in this section
|
||||
* <b>must</b> be set or the interface will fail
|
||||
* to enumerate and operate correctly.
|
||||
*/
|
||||
|
||||
USB_ClassInfo_CDC_Host_State_t State; /**< State data for the USB class interface within
|
||||
* the device. All elements in this section
|
||||
* <b>may</b> be set to initial values, but may
|
||||
* also be ignored to default to sane values when
|
||||
* the interface is enumerated.
|
||||
*/
|
||||
} USB_ClassInfo_CDC_Host_t;
|
||||
|
||||
/* Enums: */
|
||||
|
@ -96,16 +120,20 @@
|
|||
/* Private Interface - For use in library only: */
|
||||
#if !defined(__DOXYGEN__)
|
||||
/* Macros: */
|
||||
#define CDC_CONTROL_CLASS 0x02
|
||||
#define CDC_CONTROL_SUBCLASS 0x02
|
||||
#define CDC_CONTROL_PROTOCOL 0x01
|
||||
#define CDC_DATA_CLASS 0x0A
|
||||
#define CDC_DATA_SUBCLASS 0x00
|
||||
#define CDC_DATA_PROTOCOL 0x00
|
||||
#define CDC_CONTROL_CLASS 0x02
|
||||
#define CDC_CONTROL_SUBCLASS 0x02
|
||||
#define CDC_CONTROL_PROTOCOL 0x01
|
||||
#define CDC_DATA_CLASS 0x0A
|
||||
#define CDC_DATA_SUBCLASS 0x00
|
||||
#define CDC_DATA_PROTOCOL 0x00
|
||||
|
||||
#define CDC_FOUND_DATAPIPE_IN (1 << 0)
|
||||
#define CDC_FOUND_DATAPIPE_OUT (1 << 1)
|
||||
#define CDC_FOUND_DATAPIPE_NOTIFICATION (1 << 2)
|
||||
|
||||
/* Function Prototypes: */
|
||||
#if defined(INCLUDE_FROM_CDC_CLASS_HOST_C)
|
||||
static uint8_t CDC_Host_ProcessConfigDescriptor(void);
|
||||
static uint8_t CDC_Host_ProcessConfigDescriptor(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo);
|
||||
static uint8_t DComp_CDC_Host_NextCDCControlInterface(void* CurrentDescriptor);
|
||||
static uint8_t DComp_CDC_Host_NextCDCDataInterface(void* CurrentDescriptor);
|
||||
static uint8_t DComp_CDC_Host_NextInterfaceCDCDataEndpoint(void* CurrentDescriptor);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue