CDC.h 7.42 KB
 Dean Camera committed Jun 01, 2009 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 /* LUFA Library Copyright (C) Dean Camera, 2009. dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ /* Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that the copyright notice and this permission notice and warranty disclaimer appear in supporting documentation, and that the name of the author not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the author be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. */  Dean Camera committed Jun 14, 2009 31 32 /** \ingroup Group_USBClassCDC * @defgroup Group_USBClassCDCDevice CDC Class Device Mode Driver  Dean Camera committed Jun 04, 2009 33 34  * * \section Module Description  Dean Camera committed Jun 14, 2009 35  * Device Mode USB Class driver framework interface, for the CDC USB Class driver.  Dean Camera committed Jun 04, 2009 36 37 38 39  * * @{ */  Dean Camera committed Jun 14, 2009 40 41 #ifndef _CDC_CLASS_DEVICE_H_ #define _CDC_CLASS_DEVICE_H_  Dean Camera committed Jun 01, 2009 42 43 44  /* Includes: */ #include "../../USB.h"  Dean Camera committed Jun 14, 2009 45  #include "../Common/CDC.h"  Dean Camera committed Jun 01, 2009 46 47 48  #include  Dean Camera committed Jun 04, 2009 49 50 51 52 53  /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) extern "C" { #endif  Dean Camera committed Jun 01, 2009 54  /* Function Prototypes: */  Dean Camera committed Jun 14, 2009 55  #if defined(INCLUDE_FROM_CDC_CLASS_DEVICE_C)  Dean Camera committed Jun 11, 2009 56 57 58 59 60  void CDC_Device_Event_Stub(void); void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo) ATTR_WEAK ATTR_ALIAS(CDC_Device_Event_Stub); void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo) ATTR_WEAK ATTR_ALIAS(CDC_Device_Event_Stub);  Dean Camera committed Jun 01, 2009 61 62  #endif  Dean Camera committed Jun 04, 2009 63 64 65 66  /** Configures the endpoints of a given CDC interface, ready for use. This should be linked to the library * \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the * given CDC interface is selected. *  Dean Camera committed Jun 05, 2009 67  * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state.  Dean Camera committed Jun 04, 2009 68 69 70  * * \return Boolean true if the endpoints were sucessfully configured, false otherwise */  Dean Camera committed Jun 11, 2009 71  bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo);  Dean Camera committed Jun 04, 2009 72 73 74 75  /** Processes incomming control requests from the host, that are directed to the given CDC class interface. This should be * linked to the library \ref EVENT_USB_UnhandledControlPacket() event. *  Dean Camera committed Jun 05, 2009 76  * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state.  Dean Camera committed Jun 04, 2009 77  */  Dean Camera committed Jun 11, 2009 78  void CDC_Device_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo);  Dean Camera committed Jun 04, 2009 79 80 81 82  /** General management task for a given CDC class interface, required for the correct operation of the interface. This should * be called frequently in the main program loop, before the master USB management task \ref USB_USBTask(). *  Dean Camera committed Jun 05, 2009 83  * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state.  Dean Camera committed Jun 04, 2009 84  */  Dean Camera committed Jun 11, 2009 85  void CDC_Device_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo);  Dean Camera committed Jun 01, 2009 86   Dean Camera committed Jun 05, 2009 87 88 89 90 91 92 93  /** CDC class driver event for a line encoding change on a CDC interface. This event fires each time the host requests a * line encoding change (containing the serial parity, baud and other configuration information) and may be hooked in the * user program by declaring a handler function with the same name and parameters listed here. The new line encoding * settings are available in the LineEncoding structure inside the CDC interface structure passed as a parameter. * * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state. */  Dean Camera committed Jun 11, 2009 94  void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);  Dean Camera committed Jun 05, 2009 95 96 97 98 99 100 101 102 103  /** CDC class driver event for a control line state change on a CDC interface. This event fires each time the host requests a * control line state change (containing the virtual serial control line states, such as DTR) and may be hooked in the * user program by declaring a handler function with the same name and parameters listed here. The new control line states * are available in the ControlLineState value inside the CDC interface structure passed as a parameter, set as a mask of * CDC_CONTROL_LINE_OUT_* masks. * * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state. */  Dean Camera committed Jun 11, 2009 104  void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);  Dean Camera committed Jun 01, 2009 105   Dean Camera committed Jun 08, 2009 106 107 108 109 110 111 112  /** Sends a given string to the attached USB host, if connected. If a host is not connected when the function is called, the * string is discarded. * * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state. * \param Data Pointer to the string to send to the host * \param Length Size in bytes of the string to send to the host */  Dean Camera committed Jun 11, 2009 113  void CDC_Device_SendString(USB_ClassInfo_CDC_t* CDCInterfaceInfo, char* Data, uint16_t Length);  Dean Camera committed Jun 08, 2009 114 115 116 117 118 119 120  /** Sends a given byte to the attached USB host, if connected. If a host is not connected when the function is called, the * byte is discarded. * * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state. * \param Data Byte of data to send to the host */  Dean Camera committed Jun 11, 2009 121  void CDC_Device_SendByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint8_t Data);  Dean Camera committed Jun 08, 2009 122 123 124 125 126 127 128  /** Determines the number of bytes received by the CDC interface from the host, waiting to be read. * * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state. * * \return Total number of buffered bytes received from the host */  Dean Camera committed Jun 11, 2009 129  uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_t* CDCInterfaceInfo);  Dean Camera committed Jun 08, 2009 130 131 132 133 134 135 136 137 138  /** Reads a byte of data from the host. If no data is waiting to be read of if a USB host is not connected, the function * returns 0. The USB_CDC_BytesReceived() function should be queried before data is recieved to ensure that no data * underflow occurs. * * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state. * * \return Next received byte from the host, or 0 if no data received */  Dean Camera committed Jun 11, 2009 139  uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo);  Dean Camera committed Jun 08, 2009 140 141 142 143 144 145 146 147  /** Sends a Serial Control Line State Change notification to the host. This should be called when the virtual serial control * lines (DCD, DSR, etc.) have changed states, or to give BREAK notfications to the host. Line states persist until they are * cleared via a second notification. * * \param CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state. * \param LineStateMask Mask of CDC_CONTROL_LINE_IN_* masks giving the current control line states */  Dean Camera committed Jun 11, 2009 148  void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint16_t LineStateMask);  Dean Camera committed Jun 04, 2009 149 150 151 152 153  /* Disable C linkage for C++ Compilers: */ #if defined(__cplusplus) } #endif  Dean Camera committed Jun 01, 2009 154 155  #endif  Dean Camera committed Jun 04, 2009 156 157  /** @} */