CI: Build on Arch (bleeding-ege) and Ubuntu (stable) AVR-GCC toolchains.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / CDCClassHost.h
index 1b421c5..da55773 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2013.
+     Copyright (C) Dean Camera, 2018.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2013  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2018  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
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 /** \ingroup Group_USBClassCDC
  *  \defgroup Group_USBClassCDCHost CDC Class Host Mode Driver
  *
 /** \ingroup Group_USBClassCDC
  *  \defgroup Group_USBClassCDCHost CDC Class Host Mode Driver
  *
- *  \section Sec_Dependencies Module Source Dependencies
+ *  \section Sec_USBClassCDCHost_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
  *    - LUFA/Drivers/USB/Class/Host/CDCClassHost.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
  *
  *  The following files must be built with any user project that uses this module:
  *    - LUFA/Drivers/USB/Class/Host/CDCClassHost.c <i>(Makefile source module name: LUFA_SRC_USBCLASS)</i>
  *
- *  \section Sec_ModDescription Module Description
+ *  \section Sec_USBClassCDCHost_ModDescription Module Description
  *  Host Mode USB Class driver framework interface, for the CDC USB Class driver.
  *
  *  @{
  *  Host Mode USB Class driver framework interface, for the CDC USB Class driver.
  *
  *  @{
                        uint8_t CDC_Host_SendBreak(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
                                                   const uint8_t Duration) ATTR_NON_NULL_PTR_ARG(1);
 
                        uint8_t CDC_Host_SendBreak(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
                                                   const uint8_t Duration) ATTR_NON_NULL_PTR_ARG(1);
 
+                       /** Sends a given null-terminated string to the attached USB device, if connected. If a device is not connected when the
+                        *  function is called, the string is discarded. Bytes will be queued for transmission to the device until either the pipe
+                        *  bank becomes full, or the \ref CDC_Host_Flush() function is called to flush the pending data to the device. This allows
+                        *  for multiple bytes to be packed into a single pipe packet, increasing data throughput.
+                        *
+                        *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
+                        *       call will fail.
+                        *
+                        *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class host configuration and state.
+                        *  \param[in]     String            Pointer to the null terminated string to send to the device.
+                        *
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+                        */
+                       uint8_t CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
+                                                   const char* const String) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+
                        /** Sends a given data buffer to the attached USB device, if connected. If a device is not connected when the function is
                         *  called, the data will be discarded. Bytes will be queued for transmission to the device until either the pipe bank
                         *  becomes full, or the \ref CDC_Host_Flush() function is called to flush the pending data to the device. This allows for
                        /** Sends a given data buffer to the attached USB device, if connected. If a device is not connected when the function is
                         *  called, the data will be discarded. Bytes will be queued for transmission to the device until either the pipe bank
                         *  becomes full, or the \ref CDC_Host_Flush() function is called to flush the pending data to the device. This allows for
                                                  const void* const Buffer,
                                                  const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
 
                                                  const void* const Buffer,
                                                  const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
 
-                       /** Sends a given null-terminated string to the attached USB device, if connected. If a device is not connected when the
-                        *  function is called, the string is discarded. Bytes will be queued for transmission to the device until either the pipe
-                        *  bank becomes full, or the \ref CDC_Host_Flush() function is called to flush the pending data to the device. This allows
-                        *  for multiple bytes to be packed into a single pipe packet, increasing data throughput.
-                        *
-                        *  \pre This function must only be called when the Host state machine is in the \ref HOST_STATE_Configured state or the
-                        *       call will fail.
-                        *
-                        *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class host configuration and state.
-                        *  \param[in]     String            Pointer to the null terminated string to send to the device.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
-                                                   const char* const String) 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 device, if connected. If a device is not connected
+                                *  when the function is called, the string is discarded. Bytes will be queued for transmission to the device until either
+                                *  the pipe bank becomes full, or the \ref CDC_Host_Flush() function is called to flush the pending data to
+                                *  the device. This allows for multiple bytes to be packed into a single pipe packet, increasing data throughput.
+                                *
+                                *  \pre This function must only be called when the Host state machine is in the \ref HOST_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 host configuration and state.
+                                *  \param[in]     String            Pointer to the null terminated string to send to the host.
+                                *
+                                *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
+                                */
+                               uint8_t CDC_Host_SendString_P(USB_ClassInfo_CDC_Host_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 device, if connected. If a device is not connected when the
+                                *  function is called, the string is discarded. Bytes will be queued for transmission to the host until either the pipe
+                                *  bank becomes full, or the \ref CDC_Host_Flush() function is called to flush the pending data to the device. This allows
+                                *  for multiple bytes to be packed into a single pipe packet, increasing data throughput.
+                                *
+                                *  \pre This function must only be called when the Host state machine is in the \ref HOST_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 host 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 Pipe_Stream_RW_ErrorCodes_t enum.
+                                */
+                               uint8_t CDC_Host_SendData_P(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
+                                                       const void* const Buffer,
+                                                       const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+                       #endif
 
                        /** Sends a given byte to the attached USB device, if connected. If a device is not connected when the function is called, the
                         *  byte is discarded. Bytes will be queued for transmission to the device until either the pipe bank becomes full, or the
 
                        /** Sends a given byte to the attached USB device, if connected. If a device is not connected when the function is called, the
                         *  byte is discarded. Bytes will be queued for transmission to the device until either the pipe bank becomes full, or the
                         *  \param[in,out] Stream            Pointer to a FILE structure where the created stream should be placed.
                         */
                        void CDC_Host_CreateStream(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
                         *  \param[in,out] Stream            Pointer to a FILE structure where the created stream should be placed.
                         */
                        void CDC_Host_CreateStream(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
-                                                  FILE* const Stream) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
+                                                  FILE* const Stream) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
 
                        /** Identical to \ref CDC_Host_CreateStream(), except that reads are blocking until the calling stream function terminates
                         *  the transfer. While blocking, the USB and CDC service tasks are called repeatedly to maintain USB communications.
 
                        /** Identical to \ref CDC_Host_CreateStream(), except that reads are blocking until the calling stream function terminates
                         *  the transfer. While blocking, the USB and CDC service tasks are called repeatedly to maintain USB communications.
                                static int CDC_Host_getchar_Blocking(FILE* Stream) ATTR_NON_NULL_PTR_ARG(1);
                                #endif
 
                                static int CDC_Host_getchar_Blocking(FILE* Stream) ATTR_NON_NULL_PTR_ARG(1);
                                #endif
 
-                               void CDC_Host_Event_Stub(void) ATTR_CONST;
+                               void CDC_Host_Event_Stub(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo);
 
                                void EVENT_CDC_Host_ControLineStateChanged(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
                                                                           ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Host_Event_Stub);
 
                                void EVENT_CDC_Host_ControLineStateChanged(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
                                                                           ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Host_Event_Stub);