X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/c75f8bf2236bc69511d0ff0bc79bfaf1f62e3bfd..7d7573e4e554f4b17686a915eba0da12fbebc2ed:/LUFA/Drivers/USB/Class/Host/CDC.h?ds=inline
diff --git a/LUFA/Drivers/USB/Class/Host/CDC.h b/LUFA/Drivers/USB/Class/Host/CDC.h
index 3bc814daf..4054cf117 100644
--- a/LUFA/Drivers/USB/Class/Host/CDC.h
+++ b/LUFA/Drivers/USB/Class/Host/CDC.h
@@ -50,26 +50,36 @@
#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
{
- bool IsActive; /**< Indicates if this class driver is currently attached to the device */
-
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 NotificationEndpointNumber; /**< Pipe number of the CDC interface's IN notification endpoint, if used */
- uint16_t NotificationEndpointSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
-
- uint8_t ControlLineState; /**< Current control line states */
+ uint16_t NotificationPipeSize; /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
struct
{
+ uint8_t HostToDevice; /**< Control line states from the host to device, as a set of CDC_CONTROL_LINE_OUT_*
+ * masks.
+ */
+ uint8_t DeviceToHost; /**< Control line states from the device to host, as a set of CDC_CONTROL_LINE_IN_*
+ * masks.
+ */
+ } ControlLineStates;
+
+ struct
+ {
uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */
uint8_t CharFormat; /**< Character format of the virtual serial port, a value from the
* CDCDevice_CDC_LineCodingFormats_t enum
@@ -79,28 +89,73 @@
*/
uint8_t DataBits; /**< Bits of data per character of the virtual serial port */
} 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
+ * must 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
+ * may 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: */
+ typedef enum
+ {
+ CDC_ENUMERROR_NoError = 0, /**< Configuration Descriptor was processed successfully */
+ CDC_ENUMERROR_ControlError = 1, /**< A control request to the device failed to complete successfully */
+ CDC_ENUMERROR_DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */
+ CDC_ENUMERROR_InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */
+ CDC_ENUMERROR_NoCDCInterfaceFound = 4, /**< A compatible CDC interface was not found in the device's Configuration Descriptor */
+ CDC_ENUMERROR_NoEndpointFound = 5, /**< Compatible CDC endpoints were not found in the device's CDC interface */
+ } CDCHost_EnumerationFailure_ErrorCodes_t;
/* Function Prototypes: */
- void CDC_Host_Task(void);
+ void CDC_Host_USBTask(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo);
/* 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);
#endif
+
+ void EVENT_CDC_Host_ControLineStateChanged(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo);
+
+ uint8_t CDC_Host_SetLineEncoding(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo);
+ uint8_t CDC_Host_SendControlLineStateChange(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo);
+
+ void CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, char* Data, uint16_t Length);
+ void CDC_Host_SendByte(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, uint8_t Data);
+ uint16_t CDC_Host_BytesReceived(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo);
+ uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo);
#endif