Moved out each demos' functionality library files (e.g. Ring Buffer library) to ...
[pub/lufa.git] / Demos / Host / StillImageHost / Lib / StillImageCommands.h
diff --git a/Demos/Host/StillImageHost/Lib/StillImageCommands.h b/Demos/Host/StillImageHost/Lib/StillImageCommands.h
new file mode 100644 (file)
index 0000000..ad0ba55
--- /dev/null
@@ -0,0 +1,110 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for StillImageCommands.c.\r
+ */\r
\r
+#ifndef _STILL_IMAGE_COMMANDS_H_\r
+#define _STILL_IMAGE_COMMANDS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>                        // USB Functionality\r
+               \r
+               #include "PIMACodes.h"\r
+\r
+       /* Macros: */\r
+               /** Pipe number of the Still Image data IN pipe */\r
+               #define SIMAGE_DATA_IN_PIPE            0x01\r
+\r
+               /** Pipe number of the Still Image data OUT pipe */\r
+               #define SIMAGE_DATA_OUT_PIPE           0x02\r
+\r
+               /** Pipe number of the Still Image events pipe */\r
+               #define SIMAGE_EVENTS_PIPE             0x03\r
+\r
+               /** Timeout period between the issuing of a command to a device, and the reception of the first packet */\r
+               #define COMMAND_DATA_TIMEOUT_MS        5000\r
+               \r
+               /** Used in the DataLength field of a PIMA container, to give the total container size in bytes for\r
+                *  a command container.\r
+                *\r
+                *  \param params  Number of parameters which are to be sent in the Param field of the container\r
+                */\r
+               #define PIMA_COMMAND_SIZE(params)      ((sizeof(PIMA_SendBlock) - sizeof(PIMA_SendBlock.Params)) + \\r
+                                                       (params * sizeof(PIMA_SendBlock.Params[0])))\r
+\r
+               /** Used in the DataLength field of a PIMA container, to give the total container size in bytes for\r
+                *  a data container.\r
+                *\r
+                *  \param datalen  Length in bytes of the data in the container\r
+                */\r
+               #define PIMA_DATA_SIZE(datalen)        ((sizeof(PIMA_SendBlock) - sizeof(PIMA_SendBlock.Params)) + datalen)\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a PIMA container, use to send commands and receive responses to and from an\r
+                *  attached Still Image device.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint32_t DataLength; /**< Length of the container and data, in bytes */\r
+                       uint16_t Type; /**< Container type, a value from the PIMA_Container_Types_t enum */\r
+                       uint16_t Code; /**< Command, event or response code of the container */\r
+                       uint32_t TransactionID; /**< Unique container ID to link blocks together */\r
+                       uint32_t Params[4]; /**< Block parameters to be issued along with the block code (command blocks only) */\r
+               } PIMA_Container_t;\r
+       \r
+       /* Enums: */\r
+               /** Enum for the possible PIMA contains types. */\r
+               enum PIMA_Container_Types_t\r
+               {\r
+                       CType_Undefined         = 0, /**< Undefined container type */\r
+                       CType_CommandBlock      = 1, /**< Command Block container type */\r
+                       CType_DataBlock         = 2, /**< Data Block container type */\r
+                       CType_ResponseBlock     = 3, /**< Response container type */\r
+                       CType_EventBlock        = 4, /**< Event Block container type */\r
+               };\r
+       \r
+       /* External Variables: */\r
+               extern PIMA_Container_t PIMA_SendBlock;\r
+               extern PIMA_Container_t PIMA_ReceivedBlock;\r
+               extern PIMA_Container_t PIMA_EventBlock;\r
+       \r
+       /* Function Prototypes: */\r
+               void    SImage_SendBlockHeader(void);\r
+               uint8_t SImage_RecieveBlockHeader(void);\r
+               void    SImage_RecieveEventHeader(void);\r
+               void    SImage_SendData(void* Buffer, uint16_t Bytes);\r
+               uint8_t SImage_ReadData(void* Buffer, uint16_t Bytes);\r
+               bool    SImage_IsEventReceived(void);\r
+               uint8_t SImage_ClearPipeStall(const uint8_t EndpointNum);\r
+\r
+#endif\r