Update Studio Integration DLL, to include package logging.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / CDCClassDevice.h
index 3304775..1c88fb8 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2012.
+     Copyright (C) Dean Camera, 2015.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2015  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -18,7 +18,7 @@
   advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
-  The author disclaim all warranties with regard to this
+  The author disclaims 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
 /** \ingroup Group_USBClassCDC
  *  \defgroup Group_USBClassCDCDevice CDC Class Device Mode Driver
  *
- *  \section Sec_Dependencies Module Source Dependencies
+ *  \section Sec_USBClassCDCDevice_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
  *    - LUFA/Drivers/USB/Class/Device/CDCClassDevice.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
  *
- *  \section Sec_ModDescription Module Description
+ *  \section Sec_USBClassCDCDevice_ModDescription Module Description
  *  Device Mode USB Class driver framework interface, for the CDC USB Class driver.
  *
  *  \note There are several major drawbacks to the CDC-ACM standard USB class, however
                                struct
                                {
                                        uint8_t ControlInterfaceNumber; /**< Interface number of the CDC control interface within the device. */
-                                       
+
                                        USB_Endpoint_Table_t DataINEndpoint; /**< Data IN endpoint configuration table. */
                                        USB_Endpoint_Table_t DataOUTEndpoint; /**< Data OUT endpoint configuration table. */
                                        USB_Endpoint_Table_t NotificationEndpoint; /**< Notification IN Endpoint configuration table. */
                                                                                            */
                                        } ControlLineStates; /**< Current states of the virtual serial port's control lines between the device and host. */
 
-                                       CDC_LineEncoding_t LineEncoding; /** Line encoding used in the virtual serial port, for the device's information.
-                                                                         *  This is generally only used if the virtual serial port data is to be
-                                                                         *  reconstructed on a physical UART.
+                                       CDC_LineEncoding_t LineEncoding; /**< Line encoding used in the virtual serial port, for the device's information.
+                                                                         *   This is generally only used if the virtual serial port data is to be
+                                                                         *   reconstructed on a physical UART.
                                                                          */
                                } 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.
                        /** 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.
+                        *  settings are available in the \c LineEncoding structure inside the CDC interface structure passed as a parameter.
                         *
                         *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
                         */
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
                         */
                        uint8_t CDC_Device_SendData(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
-                                                   const char* const Buffer,
+                                                   const void* const Buffer,
+                                                   const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+
+                       /** Sends a given data buffer from PROGMEM space to the attached USB host, if connected. If a host is not connected when the
+                        *  function is called, the string is discarded. Bytes will be queued for transmission to the host until either the endpoint
+                        *  bank becomes full, or the \ref CDC_Device_Flush() function is called to flush the pending data to the host. This allows
+                        *  for multiple bytes to be packed into a single endpoint packet, increasing data throughput.
+                        *
+                        *  \pre This function must only be called when the Device state machine is in the \ref DEVICE_STATE_Configured state or
+                        *       the call will fail.
+                        *
+                        *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+                        *  \param[in]     Buffer            Pointer to a buffer containing the data to send to the device.
+                        *  \param[in]     Length            Length of the data to send to the host.
+                        *
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+                        */
+                       uint8_t CDC_Device_SendData_P(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
+                                                   const void* const Buffer,
                                                    const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
 
                        /** Sends a given null terminated string to the attached USB host, if connected. If a host is not connected when
                        uint8_t CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
                                                      const char* const String) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
 
+                       /** Sends a given null terminated string from PROGMEM space to the attached USB host, if connected. If a host is not connected
+                        *  when the function is called, the string is discarded. Bytes will be queued for transmission to the host until either
+                        *  the endpoint bank becomes full, or the \ref CDC_Device_Flush() function is called to flush the pending data to
+                        *  the host. This allows for multiple bytes to be packed into a single endpoint packet, increasing data throughput.
+                        *
+                        *  \pre This function must only be called when the Device state machine is in the \ref DEVICE_STATE_Configured state or
+                        *       the call will fail.
+                        *
+                        *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state.
+                        *  \param[in]     String            Pointer to the null terminated string to send to the host.
+                        *
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
+                        */
+                       uint8_t CDC_Device_SendString_P(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
+                                                     const char* const String) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+
                        /** 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. Bytes will be queued for transmission to the host until either the endpoint bank becomes full, or the
                         *  \ref CDC_Device_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
                         *  be used when the read data is processed byte-per-bye (via \c getc()) or when the user application will implement its own
                         *  line buffering.
                         *
-                        *  \note The created stream can be given as \c stdout if desired to direct the standard output from all <stdio.h> functions
+                        *  \note The created stream can be given as \c stdout if desired to direct the standard output from all \c <stdio.h> functions
                         *        to the given CDC interface.
                         *        \n\n
                         *
                        void CDC_Device_CreateBlockingStream(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
                                                             FILE* const Stream) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
                        #endif
-                       
+
        /* Private Interface - For use in library only: */
        #if !defined(__DOXYGEN__)
                /* Function Prototypes: */