Build: Fix incorrect build target for Ubuntu CI builds.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / CDCClassDevice.h
index fa439de..1a9b211 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2012.
+     Copyright (C) Dean Camera, 2019.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2019  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
 /** \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.
                         */
                        void EVENT_CDC_Device_BreakSent(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
                                                        const uint8_t Duration) ATTR_NON_NULL_PTR_ARG(1);
 
-                       /** Sends a given data buffer 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.
+                       /** Sends a given null terminated string 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.
+                        *  \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_SendData(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
-                                                   const char* const Buffer,
-                                                   const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+                       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 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.
+                       /** Sends a given data buffer 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.
+                        *  \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_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
-                                                     const char* const String) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+                       uint8_t CDC_Device_SendData(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);
+
+                       #if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
+                               /** 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.
+                                *
+                                *  \note This function does not exist on architectures that do not have a separate flash memory space.
+                                *
+                                *  \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);
+                       #endif
+
+                       #if defined(ARCH_HAS_FLASH_ADDRESS_SPACE)
+                               /** 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.
+                                *
+                                *  \note This function does not exist on architectures that do not have a separate flash memory space.
+                                *
+                                *  \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);
+                       #endif
 
                        /** 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
                         *  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: */
                                static int CDC_Device_getchar_Blocking(FILE* Stream) ATTR_NON_NULL_PTR_ARG(1);
                                #endif
 
-                               void CDC_Device_Event_Stub(void) ATTR_CONST;
+                               void CDC_Device_Event_Stub(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
+                               void CDC_Device_Event_Stub_2(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t _1);
 
                                void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
                                                                          ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
                                                                             ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
                                void EVENT_CDC_Device_BreakSent(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo,
                                                                const uint8_t Duration) ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1)
-                                                               ATTR_ALIAS(CDC_Device_Event_Stub);
+                                                               ATTR_ALIAS(CDC_Device_Event_Stub_2);
                        #endif
 
        #endif