Add PROGMEM variant data send functions to the CDC host class driver.
authorDean Camera <dean@fourwalledcubicle.com>
Sat, 1 Aug 2015 01:58:30 +0000 (11:58 +1000)
committerDean Camera <dean@fourwalledcubicle.com>
Sat, 1 Aug 2015 01:58:30 +0000 (11:58 +1000)
LUFA/DoxygenPages/ChangeLog.txt
LUFA/Drivers/USB/Class/Host/CDCClassHost.c
LUFA/Drivers/USB/Class/Host/CDCClassHost.h

index f80c190..811937a 100644 (file)
@@ -9,7 +9,8 @@
   *  \section Sec_ChangeLogXXXXXX Version XXXXXX
   *  <b>New:</b>
   *   - Added support for the Atmel Xplained-MINI series of development kits
-  *   - Added new PROGMEM variant send functions to the CDC class driver (thanks to Stefan Hellermann)
+  *   - Added new PROGMEM variant send functions to the CDC class device driver (thanks to Stefan Hellermann)
+  *   - Added new PROGMEM variant send functions to the CDC class host driver
   *
   *  <b>Changed:</b>
   *  - Library Applications:
index 9d962ef..94ec943 100644 (file)
@@ -294,6 +294,24 @@ uint8_t CDC_Host_SendData(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
        return ErrorCode;
 }
 
+uint8_t CDC_Host_SendData_P(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
+                          const void* const Buffer,
+                          const uint16_t Length)
+{
+       if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
+         return PIPE_READYWAIT_DeviceDisconnected;
+
+       uint8_t ErrorCode;
+
+       Pipe_SelectPipe(CDCInterfaceInfo->Config.DataOUTPipe.Address);
+
+       Pipe_Unfreeze();
+       ErrorCode = Pipe_Write_PStream_LE(Buffer, Length, NULL);
+       Pipe_Freeze();
+
+       return ErrorCode;
+}
+
 uint8_t CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
                             const char* const String)
 {
@@ -311,6 +329,23 @@ uint8_t CDC_Host_SendString(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
        return ErrorCode;
 }
 
+uint8_t CDC_Host_SendString_P(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
+                            const char* const String)
+{
+       if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
+         return PIPE_READYWAIT_DeviceDisconnected;
+
+       uint8_t ErrorCode;
+
+       Pipe_SelectPipe(CDCInterfaceInfo->Config.DataOUTPipe.Address);
+
+       Pipe_Unfreeze();
+       ErrorCode = Pipe_Write_PStream_LE(String, strlen_P(String), NULL);
+       Pipe_Freeze();
+
+       return ErrorCode;
+}
+
 uint8_t CDC_Host_SendByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo,
                           const uint8_t Data)
 {
index 2afe2e4..2a81572 100644 (file)
                                                  const void* const Buffer,
                                                  const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
 
+                       /** 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.
+                        *
+                        *  \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);
+
                        /** 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
                        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 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.
+                        *
+                        *  \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);
+
                        /** 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
                         *  \ref CDC_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be