X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/f896c00c48f04fb9273555ab8d9b1af99f865d25..ce3ea6fb2513d3aa14c354e2ed78c7eb4a38ee0e:/LUFA/Drivers/USB/Class/Device/CDC.h?ds=sidebyside
diff --git a/LUFA/Drivers/USB/Class/Device/CDC.h b/LUFA/Drivers/USB/Class/Device/CDC.h
index 13fa8d3b7..2a8f1ecd8 100644
--- a/LUFA/Drivers/USB/Class/Device/CDC.h
+++ b/LUFA/Drivers/USB/Class/Device/CDC.h
@@ -31,6 +31,10 @@
 /** \ingroup Group_USBClassCDC
  *  @defgroup Group_USBClassCDCDevice CDC Class Device Mode Driver
  *
+ *  \section Sec_Dependencies Module Source Dependencies
+ *  The following files must be built with any user project that uses this module:
+ *    - LUFA/Drivers/USB/Class/Device/CDC.c
+ *
  *  \section Module Description
  *  Device Mode USB Class driver framework interface, for the CDC USB Class driver.
  *
@@ -53,57 +57,53 @@
 
 	/* Public Interface - May be used in end-application: */
 		/* Type Defines: */
-			/** Configuration information structure for \ref USB_ClassInfo_CDC_Device_t CDC device interface structures. */
+			/** Class state structure. An instance of this structure should be made for each CDC interface
+			 *  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
 			{
-				uint8_t  ControlInterfaceNumber; /**< Interface number of the CDC control interface within the device */
+				const struct
+				{
+					uint8_t  ControlInterfaceNumber; /**< Interface number of the CDC control interface within the device */
 
-				uint8_t  DataINEndpointNumber; /**< Endpoint number of the CDC interface's IN data endpoint */
-				uint16_t DataINEndpointSize; /**< Size in bytes of the CDC interface's IN data endpoint */
+					uint8_t  DataINEndpointNumber; /**< Endpoint number of the CDC interface's IN data endpoint */
+					uint16_t DataINEndpointSize; /**< Size in bytes of the CDC interface's IN data endpoint */
 
-				uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */
-				uint16_t DataOUTEndpointSize;  /**< Size in bytes of the CDC interface's OUT data endpoint */
-
-				uint8_t  NotificationEndpointNumber; /**< Endpoint 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 */
-			} USB_ClassInfo_CDC_Device_Config_t;
-			
-			/** Current State information structure for \ref USB_ClassInfo_CDC_Device_t CDC device interface structures. */
-			typedef struct
-			{
-				uint8_t  ControlLineState; /**< Current control line states, as set by the host */
+					uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */
+					uint16_t DataOUTEndpointSize;  /**< Size in bytes of the CDC interface's OUT data endpoint */
 
+					uint8_t  NotificationEndpointNumber; /**< Endpoint 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 */
+				} 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.
+				           */
 				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
-										  */
-					uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the
-										  *   CDCDevice_LineCodingParity_t enum
-										  */
-					uint8_t  DataBits; /**< Bits of data per character of the virtual serial port */
-				} LineEncoding;			
-			} USB_ClassInfo_CDC_Device_State_t;
-		
-			/** Class state structure. An instance of this structure should be made for each CDC interface
-			 *  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_Device_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_Device_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.
-				                                         */
+					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
+											  */
+						uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the
+											  *   CDCDevice_LineCodingParity_t enum
+											  */
+						uint8_t  DataBits; /**< Bits of data per character of the virtual serial port */
+					} LineEncoding;			
+				} State; /**< State data for the USB class interface within the device. All elements in this section
+				          *   are reset to their defaults when the interface is enumerated.
+				          */
 			} USB_ClassInfo_CDC_Device_t;
 		
 		/* Function Prototypes: */		
@@ -111,97 +111,97 @@
 			 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the
 			 *  given CDC interface is selected.
 			 *
-			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 			 *
 			 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 			 */
-			bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
+			bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 
 			/** 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.
 			 *
-			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 			 */
-			void CDC_Device_ProcessControlPacket(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
+			void CDC_Device_ProcessControlPacket(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 
 			/** 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().
 			 *
-			 *  \param CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 			 */
-			void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
+			void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 
 			/** 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.
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 			 */
-			void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
+			void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 			
 			/** 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.
+			 *  are available in the ControlLineStates.HostToDevice 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.
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 			 */		
-			void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
+			void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 
 			/** 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
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+			 *  \param[in] Data  Pointer to the string to send to the host
+			 *  \param[in] Length  Size in bytes of the string to send to the host
 			 */
-			void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, char* Data, uint16_t Length);
+			void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, char* const Data, const uint16_t Length);
 			
 			/** 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
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+			 *  \param[in] Data  Byte of data to send to the host
 			 */
-			void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, uint8_t Data);
+			void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data);
 			
 			/** 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.
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 			 *
 			 *  \return Total number of buffered bytes received from the host
 			 */
-			uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
+			uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 			
 			/** 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.
+			 *  \param[in,out] 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
 			 */
-			uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo);
+			uint8_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 			
-			/** 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.
+			/** 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. This should be called each time the CDC class driver's 
+			 *  ControlLineStates.DeviceToHost value is updated to push the new states to the USB host.
 			 *
-			 *  \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
+			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
 			 */
-			void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, uint16_t LineStateMask);
+			void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
 
 	/* Private Interface - For use in library only: */
 	#if !defined(__DOXYGEN__)
 		/* Function Prototypes: */
 			#if defined(INCLUDE_FROM_CDC_CLASS_DEVICE_C)
 				void CDC_Device_Event_Stub(void);
-				void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
+				void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 														  ATTR_WEAK ATTR_ALIAS(CDC_Device_Event_Stub);
-				void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
+				void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 															 ATTR_WEAK ATTR_ALIAS(CDC_Device_Event_Stub);
 			#endif