3      Copyright (C) Dean Camera, 2011. 
   5   dean [at] fourwalledcubicle [dot] com 
  10   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) 
  12   Permission to use, copy, modify, distribute, and sell this 
  13   software and its documentation for any purpose is hereby granted 
  14   without fee, provided that the above copyright notice appear in 
  15   all copies and that both that the copyright notice and this 
  16   permission notice and warranty disclaimer appear in supporting 
  17   documentation, and that the name of the author not be used in 
  18   advertising or publicity pertaining to distribution of the 
  19   software without specific, written prior permission. 
  21   The author disclaim all warranties with regard to this 
  22   software, including all implied warranties of merchantability 
  23   and fitness.  In no event shall the author be liable for any 
  24   special, indirect or consequential damages or any damages 
  25   whatsoever resulting from loss of use, data or profits, whether 
  26   in an action of contract, negligence or other tortious action, 
  27   arising out of or in connection with the use or performance of 
  32  *  \brief Common definitions and declarations for the library USB Still Image Class driver. 
  34  *  Common definitions and declarations for the library USB Still Image Class driver. 
  36  *  \note This file should not be included directly. It is automatically included as needed by the USB module driver 
  37  *        dispatch header located in LUFA/Drivers/USB.h. 
  40 /** \ingroup Group_USBClassSI 
  41  *  \defgroup Group_USBClassSICommon  Common Class Definitions 
  43  *  \section Sec_ModDescription Module Description 
  44  *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB 
  50 #ifndef _SI_CLASS_COMMON_H_ 
  51 #define _SI_CLASS_COMMON_H_ 
  54                 #include "../../Core/StdDescriptors.h" 
  56         /* Enable C linkage for C++ Compilers: */ 
  57                 #if defined(__cplusplus) 
  61         /* Preprocessor Checks: */ 
  62                 #if !defined(__INCLUDE_FROM_SI_DRIVER) 
  63                         #error Do not include this file directly. Include LUFA/Drivers/USB.h instead. 
  67                 /** Length in bytes of a given Unicode string's character length. 
  69                  *  \param[in] Chars  Total number of Unicode characters in the string. 
  71                  *  \return Number of bytes of the given unicode string. 
  73                 #define UNICODE_STRING_LENGTH(Chars)  ((Chars) << 1) 
  75                 /** Used in the DataLength field of a PIMA container, to give the total container size in bytes for 
  76                  *  a command container. 
  78                  *  \param[in] Params  Number of parameters which are to be sent in the \c Param field of the container. 
  80                 #define PIMA_COMMAND_SIZE(Params)     ((sizeof(PIMA_Container_t) - 12) + ((Params) * sizeof(uint32_t))) 
  82                 /** Used in the DataLength field of a PIMA container, to give the total container size in bytes for 
  85                  *  \param[in] DataLen  Length in bytes of the data in the container. 
  87                 #define PIMA_DATA_SIZE(DataLen)       ((sizeof(PIMA_Container_t) - 12) + (DataLen)) 
  90                 /** Enum for the possible PIMA contains types. */ 
  91                 enum PIMA_Container_Types_t
 
  93                         PIMA_CONTAINER_Undefined     
= 0, /**< Undefined container type. */ 
  94                         PIMA_CONTAINER_CommandBlock  
= 1, /**< Command Block container type. */ 
  95                         PIMA_CONTAINER_DataBlock     
= 2, /**< Data Block container type. */ 
  96                         PIMA_CONTAINER_ResponseBlock 
= 3, /**< Response container type. */ 
  97                         PIMA_CONTAINER_EventBlock    
= 4, /**< Event Block container type. */ 
 101                 /** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the 
 102                  *  Still Image device class. 
 104                 enum SI_Descriptor_ClassSubclassProtocol_t
 
 106                         SI_CSCP_StillImageClass             
= 0x06, /**< Descriptor Class value indicating that the device or interface 
 107                                                                      *   belongs to the Still Image class. 
 109                         SI_CSCP_StillImageSubclass          
= 0x01, /**< Descriptor Subclass value indicating that the device or interface 
 110                                                                      *   belongs to the Still Image subclass. 
 112                         SI_CSCP_BulkOnlyProtocol            
= 0x01, /**< Descriptor Protocol value indicating that the device or interface 
 113                                                                      *   belongs to the Bulk Only Transport protocol of the Still Image class. 
 117                 /** Enums for the possible status codes of a returned Response Block from an attached PIMA compliant Still Image device. */ 
 118                 enum PIMA_ResponseCodes_t
 
 120                         PIMA_RESPONSE_OK                    
= 1, /**< Response code indicating no error in the issued command. */ 
 121                         PIMA_RESPONSE_GeneralError          
= 2, /**< Response code indicating a general error while processing the 
 124                         PIMA_RESPONSE_SessionNotOpen        
= 3, /**< Response code indicating that the sent command requires an open 
 125                                                                      *   session before being issued. 
 127                         PIMA_RESPONSE_InvalidTransaction    
= 4, /**< Response code indicating an invalid transaction occurred. */ 
 128                         PIMA_RESPONSE_OperationNotSupported 
= 5, /**< Response code indicating that the issued command is not supported 
 129                                                                      *   by the attached device. 
 131                         PIMA_RESPONSE_ParameterNotSupported 
= 6, /**< Response code indicating that one or more of the issued command's 
 132                                                                      *   parameters are not supported by the device. 
 137                 /** \brief PIMA Still Image Device Command/Response Container. 
 139                  *  Type define for a PIMA container, use to send commands and receive responses to and from an 
 140                  *  attached Still Image device. 
 144                         uint32_t DataLength
; /**< Length of the container and data, in bytes. */ 
 145                         uint16_t Type
; /**< Container type, a value from the \ref PIMA_Container_Types_t enum. */ 
 146                         uint16_t Code
; /**< Command, event or response code of the container. */ 
 147                         uint32_t TransactionID
; /**< Unique container ID to link blocks together. */ 
 148                         uint32_t Params
[3]; /**< Block parameters to be issued along with the block code (command blocks only). */ 
 149                 } ATTR_PACKED PIMA_Container_t
; 
 151         /* Disable C linkage for C++ Compilers: */ 
 152                 #if defined(__cplusplus)