From 0e2ffebb82af721299f2df9089f66f9da68e1e1e Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 1 Sep 2009 13:47:11 +0000
Subject: [PATCH] Added documentation for the constants and enums of the new
 StillImage Host Class driver added to the library so far.

---
 LUFA/Drivers/USB/Class/Common/StillImage.h | 60 ++++++++++++----------
 LUFA/Drivers/USB/Class/Host/StillImage.c   |  2 +
 LUFA/Drivers/USB/Class/Host/StillImage.h   |  2 +
 3 files changed, 37 insertions(+), 27 deletions(-)

diff --git a/LUFA/Drivers/USB/Class/Common/StillImage.h b/LUFA/Drivers/USB/Class/Common/StillImage.h
index 804b31255..84dee7156 100644
--- a/LUFA/Drivers/USB/Class/Common/StillImage.h
+++ b/LUFA/Drivers/USB/Class/Common/StillImage.h
@@ -45,7 +45,7 @@
 		#include "../../USB.h"
 
 		#include <string.h>
-
+		
 	/* Enable C linkage for C++ Compilers: */
 		#if defined(__cplusplus)
 			extern "C" {
@@ -55,11 +55,10 @@
 		/** Length in bytes of a given Unicode string's character length
 		 *
 		 *  \param[in] chars  Total number of Unicode characters in the string
+		 *
+		 *  \return Number of bytes of the given unicode string
 		 */
 		#define UNICODE_STRING_LENGTH(chars)   (chars << 1)
-
-		/** Timeout period between the issuing of a command to a device, and the reception of the first packet */
-		#define COMMAND_DATA_TIMEOUT_MS        5000
 		
 		/** Used in the DataLength field of a PIMA container, to give the total container size in bytes for
 		 *  a command container.
@@ -67,28 +66,16 @@
 		 *  \param[in] params  Number of parameters which are to be sent in the Param field of the container
 		 */
 		#define PIMA_COMMAND_SIZE(params)      ((sizeof(SI_PIMA_Container_t) - sizeof(((SI_PIMA_Container_t*)NULL)->Params)) + \
-		                                        (params * sizeof(((SI_PIMA_Container_t*)NULL)->Params[0])))
+		                                        (params * sizeof(uint32_t)))
 
 		/** Used in the DataLength field of a PIMA container, to give the total container size in bytes for
 		 *  a data container.
 		 *
 		 *  \param[in] datalen  Length in bytes of the data in the container
 		 */
-		#define PIMA_DATA_SIZE(datalen)        ((sizeof(SI_PIMA_Container_t) - sizeof(((SI_PIMA_Container_t*)NULL)->Params)) + datalen)
+		#define PIMA_DATA_SIZE(datalen)        ((sizeof(SI_PIMA_Container_t) - sizeof(((SI_PIMA_Container_t*)NULL)->Params)) + \
+		                                        datalen)
 
-	/* Type defines: */
-		/** Type define for a PIMA container, use to send commands and receive responses to and from an
-		 *  attached Still Image device.
-		 */
-		typedef struct
-		{
-			uint32_t DataLength; /**< Length of the container and data, in bytes */
-			uint16_t Type; /**< Container type, a value from the PIMA_Container_Types_t enum */
-			uint16_t Code; /**< Command, event or response code of the container */
-			uint32_t TransactionID; /**< Unique container ID to link blocks together */
-			uint32_t Params[4]; /**< Block parameters to be issued along with the block code (command blocks only) */
-		} SI_PIMA_Container_t;
-	
 	/* Enums: */
 		/** Enum for the possible PIMA contains types. */
 		enum SI_PIMA_Container_Types_t
@@ -101,19 +88,38 @@
 		};	
 		
 	/* Enums: */
+		/** Enums for the possible status codes of a returned Response Block from an attached PIMA compliant Still Image device. */
 		enum SI_PIMA_ResponseCodes_t
 		{
-			PIMA_RESPONSE_OK                     = 1,
-			PIMA_RESPONSE_GeneralError           = 2,
-			PIMA_RESPONSE_SessionNotOpen         = 3,
-			PIMA_RESPONSE_InvalidTransaction     = 4,
-			PIMA_RESPONSE_OperationNotSupported  = 5,
-			PIMA_RESPONSE_ParameterNotSupported  = 6,
+			PIMA_RESPONSE_OK                     = 1, /**< Response code indicating no error in the issued command */
+			PIMA_RESPONSE_GeneralError           = 2, /**< Response code indicating a general error while processing the
+			                                            *  issued command
+			                                            */
+			PIMA_RESPONSE_SessionNotOpen         = 3, /**< Response code indicating that the sent command requires an open
+			                                           *   session before being issued
+			                                           */
+			PIMA_RESPONSE_InvalidTransaction     = 4, /**< Response code indicating an invalid transaction occurred */
+			PIMA_RESPONSE_OperationNotSupported  = 5, /**< Response code indicating that the issued command is not supported
+			                                           *   by the attached device
+			                                           */
+			PIMA_RESPONSE_ParameterNotSupported  = 6, /**< Response code indicating that one or more of the issued command's
+			                                           *   parameters are not supported by the device
+			                                           */
 		};
 	
 	/* Type Defines: */
-	
-	
+		/** Type define for a PIMA container, use to send commands and receive responses to and from an
+		 *  attached Still Image device.
+		 */
+		typedef struct
+		{
+			uint32_t DataLength; /**< Length of the container and data, in bytes */
+			uint16_t Type; /**< Container type, a value from the PIMA_Container_Types_t enum */
+			uint16_t Code; /**< Command, event or response code of the container */
+			uint32_t TransactionID; /**< Unique container ID to link blocks together */
+			uint32_t Params[4]; /**< Block parameters to be issued along with the block code (command blocks only) */
+		} SI_PIMA_Container_t;
+		
 	/* Disable C linkage for C++ Compilers: */
 		#if defined(__cplusplus)
 			}
diff --git a/LUFA/Drivers/USB/Class/Host/StillImage.c b/LUFA/Drivers/USB/Class/Host/StillImage.c
index 10759f6bf..40ef4f23e 100644
--- a/LUFA/Drivers/USB/Class/Host/StillImage.c
+++ b/LUFA/Drivers/USB/Class/Host/StillImage.c
@@ -222,6 +222,8 @@ uint8_t SImage_Host_RecieveBlockHeader(USB_ClassInfo_SI_Host_t* SIInterfaceInfo,
 		  Pipe_Read_Stream_LE(&PIMAHeader->Params, ParamBytes, NO_STREAM_CALLBACK);
 		
 		Pipe_ClearIN();
+		
+		PIMAHeader->Code &= 0x0000000F;
 	}
 	
 	Pipe_Freeze();
diff --git a/LUFA/Drivers/USB/Class/Host/StillImage.h b/LUFA/Drivers/USB/Class/Host/StillImage.h
index f4d1bb144..4d3779603 100644
--- a/LUFA/Drivers/USB/Class/Host/StillImage.h
+++ b/LUFA/Drivers/USB/Class/Host/StillImage.h
@@ -138,6 +138,8 @@
 			#define SI_FOUND_DATAPIPE_IN           (1 << 1)
 			#define SI_FOUND_DATAPIPE_OUT          (1 << 2)
 
+			#define COMMAND_DATA_TIMEOUT_MS        5000
+		
 		/* Function Prototypes: */
 			#if defined(INCLUDE_FROM_SI_CLASS_HOST_C)
 				static uint8_t DComp_SI_Host_NextSIInterface(void* CurrentDescriptor) ATTR_NON_NULL_PTR_ARG(1);
-- 
GitLab