Oops - fix broken SPI driver due to missing bit inversion on a port mask.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / Printer.h
index 3721608..96ecd0f 100644 (file)
@@ -1,7 +1,7 @@
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2010.
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2010.
-              
+
   dean [at] fourwalledcubicle [dot] com
       www.fourwalledcubicle.com
 */
   dean [at] fourwalledcubicle [dot] com
       www.fourwalledcubicle.com
 */
@@ -9,13 +9,13 @@
 /*
   Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
 /*
   Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
-  Permission to use, copy, modify, distribute, and sell this 
+  Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
   software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
+  without fee, provided that the above copyright notice appear in
   all copies and that both that the copyright notice and this
   all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
@@ -56,7 +56,7 @@
        /* Includes: */
                #include "../../USB.h"
                #include "../Common/Printer.h"
        /* Includes: */
                #include "../../USB.h"
                #include "../Common/Printer.h"
-               
+
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
                        {
                                PRNT_ENUMERROR_NoError                    = 0, /**< Configuration Descriptor was processed successfully. */
                                PRNT_ENUMERROR_InvalidConfigDescriptor    = 1, /**< The device returned an invalid Configuration Descriptor. */
                        {
                                PRNT_ENUMERROR_NoError                    = 0, /**< Configuration Descriptor was processed successfully. */
                                PRNT_ENUMERROR_InvalidConfigDescriptor    = 1, /**< The device returned an invalid Configuration Descriptor. */
-                               PRNT_ENUMERROR_NoPrinterInterfaceFound    = 2, /**< A compatible Printer interface was not found in the device's Configuration Descriptor. */
-                               PRNT_ENUMERROR_EndpointsNotFound          = 3, /**< Compatible Printer endpoints were not found in the device's interfaces. */
+                               PRNT_ENUMERROR_NoCompatibleInterfaceFound = 2, /**< A compatible Printer interface was not found in the device's Configuration Descriptor. */
                        };
                        };
-       
+
                /* Function Prototypes: */
                        /** General management task for a given Printer host 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
                /* Function Prototypes: */
                        /** General management task for a given Printer host 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
                         *  the device. This should be called once after the stack has enumerated the attached device, while the host state
                         *  machine is in the Addressed state.
                         *
                         *  the device. This should be called once after the stack has enumerated the attached device, while the host state
                         *  machine is in the Addressed state.
                         *
+                        *  \note The pipe index numbers as given in the interface's configuration structure must not overlap with any other
+                        *        interface, or pipe bank corruption will occur. Gaps in the allocated pipe numbers or non-sequential indexes
+                        *        within a single interface is allowed, but no two interfaces of any type have have interleaved pipe indexes.
+                        *
                         *  \param[in,out] PRNTInterfaceInfo       Pointer to a structure containing a Printer Class host configuration and state.
                         *  \param[in]     ConfigDescriptorSize    Length of the attached device's Configuration Descriptor.
                         *  \param[in]     DeviceConfigDescriptor  Pointer to a buffer containing the attached device's Configuration Descriptor.
                         *  \param[in,out] PRNTInterfaceInfo       Pointer to a structure containing a Printer Class host configuration and state.
                         *  \param[in]     ConfigDescriptorSize    Length of the attached device's Configuration Descriptor.
                         *  \param[in]     DeviceConfigDescriptor  Pointer to a buffer containing the attached device's Configuration Descriptor.
                        uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
                                                         uint16_t ConfigDescriptorSize,
                                                         void* DeviceConfigDescriptor) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
                        uint8_t PRNT_Host_ConfigurePipes(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
                                                         uint16_t ConfigDescriptorSize,
                                                         void* DeviceConfigDescriptor) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3);
-                       
+
                        /** Configures the printer to enable Bidirectional mode, if it is not already in this mode. This should be called
                         *  once the connected device's configuration has been set, to ensure the printer is ready to accept commands.
                         *
                        /** Configures the printer to enable Bidirectional mode, if it is not already in this mode. This should be called
                         *  once the connected device's configuration has been set, to ensure the printer is ready to accept commands.
                         *
                         *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum.
                         */
                        uint8_t PRNT_Host_SetBidirectionalMode(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
                         *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum.
                         */
                        uint8_t PRNT_Host_SetBidirectionalMode(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
-                       
+
                        /** Retrieves the status of the virtual Printer port's inbound status lines. The result can then be masked against the
                         *  PRNT_PORTSTATUS_* macros to determine the printer port's status.
                         *
                        /** Retrieves the status of the virtual Printer port's inbound status lines. The result can then be masked against the
                         *  PRNT_PORTSTATUS_* macros to determine the printer port's status.
                         *
 
                        /** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
                         *
 
                        /** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
                         *
-                        *  \pre This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
+                        *  \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] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *       call will fail.
                         *
                         *  \param[in,out] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *  printer is able to understand - for example, PCL data. Not all printers accept all printer languages; see
                         *  \ref PRNT_Host_GetDeviceID() for details on determining acceptable languages for an attached printer.
                         *
                         *  printer is able to understand - for example, PCL data. Not all printers accept all printer languages; see
                         *  \ref PRNT_Host_GetDeviceID() for details on determining acceptable languages for an attached printer.
                         *
-                        *  \pre This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
+                        *  \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] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *       call will fail.
                         *
                         *  \param[in,out] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
                         */
                        uint8_t PRNT_Host_SendString(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
                         *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
                         */
                        uint8_t PRNT_Host_SendString(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
-                                                    void* Buffer, 
+                                                    void* Buffer,
                                                     const uint16_t Length) 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
                                                     const uint16_t Length) 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 PRNT_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be 
+                        *  \ref PRNT_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
                         *  packed into a single pipe packet, increasing data throughput.
                         *
                         *  packed into a single pipe packet, increasing data throughput.
                         *
-                        *  \pre This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
+                        *  \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] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *       call will fail.
                         *
                         *  \param[in,out] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *  immediately. If multiple bytes are to be received, they should be buffered by the user application, as the pipe bank will not be
                         *  released back to the USB controller until all bytes are read.
                         *
                         *  immediately. If multiple bytes are to be received, they should be buffered by the user application, as the pipe bank will not be
                         *  released back to the USB controller until all bytes are read.
                         *
-                        *  \pre This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
+                        *  \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] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *
                         *  \return Total number of buffered bytes received from the device.
                         */
                         *       call will fail.
                         *
                         *  \param[in,out] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *
                         *  \return Total number of buffered bytes received from the device.
                         */
-                       uint16_t PRNT_Host_BytesReceived(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo);                   
-                       
+                       uint16_t PRNT_Host_BytesReceived(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo);
+
                        /** Reads a byte of data from the device. If no data is waiting to be read of if a USB device is not connected, the function
                         *  returns a negative value. The \ref PRNT_Host_BytesReceived() function may be queried in advance to determine how many bytes
                         *  are currently buffered in the Printer interface's data receive pipe.
                         *
                        /** Reads a byte of data from the device. If no data is waiting to be read of if a USB device is not connected, the function
                         *  returns a negative value. The \ref PRNT_Host_BytesReceived() function may be queried in advance to determine how many bytes
                         *  are currently buffered in the Printer interface's data receive pipe.
                         *
-                        *  \pre This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
+                        *  \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] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *       call will fail.
                         *
                         *  \param[in,out] PRNTInterfaceInfo  Pointer to a structure containing a Printer Class host configuration and state.
                         *  \return Next received byte from the device, or a negative value if no data received.
                         */
                        int16_t PRNT_Host_ReceiveByte(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo);
                         *  \return Next received byte from the device, or a negative value if no data received.
                         */
                        int16_t PRNT_Host_ReceiveByte(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo);
-                       
+
                        /** Retrieves the attached printer device's ID string, formatted according to IEEE 1284. This string is sent as a
                         *  Unicode string from the device and is automatically converted to an ASCII encoded C string by this function, thus
                         *  the maximum reportable string length is two less than the size given (to accommodate the Unicode string length
                        /** Retrieves the attached printer device's ID string, formatted according to IEEE 1284. This string is sent as a
                         *  Unicode string from the device and is automatically converted to an ASCII encoded C string by this function, thus
                         *  the maximum reportable string length is two less than the size given (to accommodate the Unicode string length
                        #define REQ_GetDeviceID                0
                        #define REQ_GetPortStatus              1
                        #define REQ_SoftReset                  2
                        #define REQ_GetDeviceID                0
                        #define REQ_GetPortStatus              1
                        #define REQ_SoftReset                  2
-               
-                       #define PRNT_FOUND_DATAPIPE_IN         (1 << 0)
-                       #define PRNT_FOUND_DATAPIPE_OUT        (1 << 1)
-                       
+
                /* Function Prototypes: */
                /* Function Prototypes: */
-                       #if defined(__INCLUDE_FROM_PRINTER_CLASS_HOST_C)                
-                               static uint8_t DCOMP_PRNT_NextPRNTInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-                               static uint8_t DCOMP_PRNT_NextPRNTInterfaceEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                       #if defined(__INCLUDE_FROM_PRINTER_CLASS_HOST_C)
+                               static uint8_t DCOMP_PRNT_Host_NextPRNTInterface(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
+                               static uint8_t DCOMP_PRNT_Host_NextPRNTInterfaceEndpoint(void* const CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
                        #endif
        #endif
                        #endif
        #endif
-       
+
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        }
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        }
 #endif
 
 /** @} */
 #endif
 
 /** @} */
+