Changed Still Image Host class driver to auto-fill TransactionID element of sent...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / StillImage.h
index c83ad5b..75f76eb 100644 (file)
   this software.\r
 */\r
 \r
-/** \ingroup Group_USBClassStillImage\r
+/** \ingroup Group_USBClassSI\r
  *  @defgroup Group_USBClassStillImageHost Still Image Class Host Mode Driver\r
  *\r
+ *  \section Sec_Dependencies Module Source Dependencies\r
+ *  The following files must be built with any user project that uses this module:\r
+ *    - LUFA/Drivers/USB/Class/Host/StillImage.c\r
+ *\r
  *  \section Module Description\r
  *  Host Mode USB Class driver framework interface, for the Still Image USB Class driver.\r
  *\r
                #endif\r
 \r
        /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       #define SI_ERROR_LOGICAL_CMD_FAILED              0xC0\r
+\r
+               /* Type Defines: */\r
+                       typedef struct\r
+                       {\r
+                               const struct\r
+                               {\r
+                                       uint8_t  DataINPipeNumber; /**< Pipe number of the Still Image interface's IN data pipe */\r
+                                       uint8_t  DataOUTPipeNumber; /**< Pipe number of the Still Image interface's OUT data pipe */\r
+                                       uint8_t  EventsPipeNumber; /**< Pipe number of the Still Image interface's IN events endpoint, if used */                       \r
+                               } Config; /**< Config data for the USB class interface within the device. All elements in this section\r
+                                          *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.\r
+                                          */\r
+                               struct\r
+                               {\r
+                                       bool IsActive; /**< Indicates if the current interface instance is connected to an attached device, valid\r
+                                                       *   after \ref HID_Host_ConfigurePipes() is called and the Host state machine is in the\r
+                                                       *   Configured state\r
+                                                       */\r
+\r
+                                       uint16_t DataINPipeSize; /**< Size in bytes of the Still Image interface's IN data pipe */\r
+                                       uint16_t DataOUTPipeSize;  /**< Size in bytes of the Still Image interface's OUT data pipe */\r
+                                       uint16_t EventsPipeSize;  /**< Size in bytes of the Still Image interface's IN events pipe */\r
+                                       \r
+                                       bool IsSessionOpen; /**< Indicates if a PIMA session is currently open with the attached device */\r
+                                       uint32_t TransactionID; /**< Transaction ID for the next transaction to send to the device */\r
+                               } State; /**< State data for the USB class interface within the device. All elements in this section\r
+                                                 *   <b>may</b> be set to initial values, but may also be ignored to default to sane values when\r
+                                                 *   the interface is enumerated.\r
+                                                 */\r
+                       } USB_ClassInfo_SI_Host_t;\r
+       \r
+               /* Enums: */\r
+                       /** Enum for the possible error codes returned by the \ref SI_Host_ConfigurePipes() function. */\r
+                       enum SIHost_EnumerationFailure_ErrorCodes_t\r
+                       {\r
+                               SI_ENUMERROR_NoError                    = 0, /**< Configuration Descriptor was processed successfully */\r
+                               SI_ENUMERROR_InvalidConfigDescriptor    = 1, /**< The device returned an invalid Configuration Descriptor */\r
+                               SI_ENUMERROR_NoSIInterfaceFound         = 2, /**< A compatible Still Image interface was not found in the device's\r
+                                                                            *   Configuration Descriptor\r
+                                                                            */\r
+                               SI_ENUMERROR_EndpointsNotFound          = 3, /**< Compatible Still Image data endpoints were not found in the\r
+                                                                             *   device's Still Image interface\r
+                                                                             */\r
+                       };\r
+\r
                /* Function Prototypes: */\r
+                       /** General management task for a given Still Image host class interface, required for the correct operation of the\r
+                        *  interface. This should be called frequently in the main program loop, before the master USB management task\r
+                        *  \ref USB_USBTask().\r
+                        *\r
+                        *  \param[in,out] SIInterfaceInfo  Pointer to a structure containing a Still Image Class host configuration and state\r
+                        */\r
+                       void SI_Host_USBTask(USB_ClassInfo_SI_Host_t* SIInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+\r
+                       /** Host interface configuration routine, to configure a given Still Image host interface instance using the\r
+                        *  Configuration Descriptor read from an attached USB device. This function automatically updates the given Still\r
+                        *  Image Host instance's state values and configures the pipes required to communicate with the interface if it is\r
+                        *  found within the device. This should be called once after the stack has enumerated the attached device, while\r
+                        *  the host state machine is in the Addressed state.\r
+                        *\r
+                        *  \param[in,out] SIInterfaceInfo  Pointer to a structure containing a Still Image Class host configuration and state\r
+                        *  \param[in] ConfigDescriptorLength  Length of the attached device's Configuration Descriptor\r
+                        *  \param[in] DeviceConfigDescriptor  Pointer to a buffer containing the attached device's Configuration Descriptor\r
+                        *\r
+                        *  \return A value from the \ref SIHost_EnumerationFailure_ErrorCodes_t enum\r
+                        */\r
+                       uint8_t SI_Host_ConfigurePipes(USB_ClassInfo_SI_Host_t* SIInterfaceInfo, uint16_t ConfigDescriptorLength,\r
+                                           uint8_t* DeviceConfigDescriptor) ATTR_NON_NULL_PTR_ARG(1, 3);\r
+\r
+                       uint8_t SImage_Host_OpenSession(USB_ClassInfo_SI_Host_t* SIInterfaceInfo);\r
+                       uint8_t SImage_Host_CloseSession(USB_ClassInfo_SI_Host_t* SIInterfaceInfo);\r
+\r
+                       uint8_t SImage_Host_SendCommand(USB_ClassInfo_SI_Host_t* SIInterfaceInfo, uint16_t Operation, uint8_t UsedParams,\r
+                                                       uint32_t Param1, uint32_t Param2, uint32_t Param3, void* DataBuff);\r
+                       \r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #define STILL_IMAGE_CLASS              0x06\r
+                       #define STILL_IMAGE_SUBCLASS           0x01\r
+                       #define STILL_IMAGE_PROTOCOL           0x01\r
+\r
+                       #define SI_FOUND_EVENTS_IN             (1 << 0)\r
+                       #define SI_FOUND_DATAPIPE_IN           (1 << 1)\r
+                       #define SI_FOUND_DATAPIPE_OUT          (1 << 2)\r
+\r
+                       #define COMMAND_DATA_TIMEOUT_MS        5000\r
                \r
+               /* Function Prototypes: */\r
+                       #if defined(INCLUDE_FROM_SI_CLASS_HOST_C)\r
+                               static uint8_t DComp_SI_Host_NextSIInterface(void* CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);\r
+                               static uint8_t DComp_SI_Host_NextSIInterfaceEndpoint(void* CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                               static uint8_t SImage_Host_SendBlockHeader(USB_ClassInfo_SI_Host_t* SIInterfaceInfo,\r
+                                                                          SI_PIMA_Container_t* PIMAHeader);\r
+                               static uint8_t SImage_Host_ReceiveBlockHeader(USB_ClassInfo_SI_Host_t* SIInterfaceInfo,\r
+                                                                             SI_PIMA_Container_t* PIMAHeader);\r
+                               static uint8_t SImage_Host_SendData(USB_ClassInfo_SI_Host_t* SIInterfaceInfo, void* Buffer, uint16_t Bytes);\r
+                               static uint8_t SImage_Host_ReadData(USB_ClassInfo_SI_Host_t* SIInterfaceInfo, void* Buffer, uint16_t Bytes);\r
+                               static bool SImage_Host_IsEventReceived(USB_ClassInfo_SI_Host_t* SIInterfaceInfo);\r
+                               static uint8_t SImage_Host_ReceiveEventHeader(USB_ClassInfo_SI_Host_t* SIInterfaceInfo,\r
+                                                                             SI_PIMA_Container_t* PIMAHeader);\r
+                       #endif\r
+       #endif\r
+       \r
        /* Disable C linkage for C++ Compilers: */\r
                #if defined(__cplusplus)\r
                        }\r