Fixed incorrect comparison in the descriptor callback routine of the TeensyHID bootlo...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / StillImage.c
index 169fc10..50be7d6 100644 (file)
@@ -1,13 +1,13 @@
 /*\r
              LUFA Library\r
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\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
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
 \r
   Permission to use, copy, modify, distribute, and sell this \r
   software and its documentation for any purpose is hereby granted\r
 \r
   Permission to use, copy, modify, distribute, and sell this \r
   software and its documentation for any purpose is hereby granted\r
   this software.\r
 */\r
 \r
   this software.\r
 */\r
 \r
+#define  __INCLUDE_FROM_USB_DRIVER\r
 #include "../../HighLevel/USBMode.h"\r
 #if defined(USB_CAN_BE_HOST)\r
 \r
 #include "../../HighLevel/USBMode.h"\r
 #if defined(USB_CAN_BE_HOST)\r
 \r
-#define INCLUDE_FROM_SI_CLASS_HOST_C\r
+#define  __INCLUDE_FROM_SI_CLASS_HOST_C\r
+#define  __INCLUDE_FROM_SI_DRIVER\r
 #include "StillImage.h"\r
 \r
 uint8_t SImage_Host_ConfigurePipes(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo, uint16_t ConfigDescriptorSize,\r
 #include "StillImage.h"\r
 \r
 uint8_t SImage_Host_ConfigurePipes(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo, uint16_t ConfigDescriptorSize,\r
@@ -142,11 +144,6 @@ uint8_t DComp_SI_Host_NextSIInterfaceEndpoint(void* const CurrentDescriptor)
        return DESCRIPTOR_SEARCH_NotFound;\r
 }\r
 \r
        return DESCRIPTOR_SEARCH_NotFound;\r
 }\r
 \r
-void SImage_Host_USBTask(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo)\r
-{\r
-       (void)SIInterfaceInfo;\r
-}\r
-\r
 uint8_t SImage_Host_SendBlockHeader(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo, SI_PIMA_Container_t* const PIMAHeader)\r
 {\r
        uint8_t ErrorCode;\r
 uint8_t SImage_Host_SendBlockHeader(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo, SI_PIMA_Container_t* const PIMAHeader)\r
 {\r
        uint8_t ErrorCode;\r
@@ -154,7 +151,8 @@ uint8_t SImage_Host_SendBlockHeader(USB_ClassInfo_SI_Host_t* const SIInterfaceIn
        if ((USB_HostState != HOST_STATE_Configured) || !(SIInterfaceInfo->State.IsActive))\r
          return PIPE_RWSTREAM_DeviceDisconnected;\r
 \r
        if ((USB_HostState != HOST_STATE_Configured) || !(SIInterfaceInfo->State.IsActive))\r
          return PIPE_RWSTREAM_DeviceDisconnected;\r
 \r
-       PIMAHeader->TransactionID = SIInterfaceInfo->State.TransactionID++;\r
+       if (SIInterfaceInfo->State.IsSessionOpen)\r
+         PIMAHeader->TransactionID = SIInterfaceInfo->State.TransactionID++;\r
 \r
        Pipe_SelectPipe(SIInterfaceInfo->Config.DataOUTPipeNumber);\r
        Pipe_Unfreeze();\r
 \r
        Pipe_SelectPipe(SIInterfaceInfo->Config.DataOUTPipeNumber);\r
        Pipe_Unfreeze();\r
@@ -318,12 +316,15 @@ uint8_t SImage_Host_OpenSession(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo)
 \r
        uint8_t ErrorCode;\r
 \r
 \r
        uint8_t ErrorCode;\r
 \r
+       SIInterfaceInfo->State.TransactionID = 0;\r
+       SIInterfaceInfo->State.IsSessionOpen = false;\r
+\r
        SI_PIMA_Container_t PIMABlock = (SI_PIMA_Container_t)\r
                                                        {\r
        SI_PIMA_Container_t PIMABlock = (SI_PIMA_Container_t)\r
                                                        {\r
-                                                               .DataLength    = PIMA_COMMAND_SIZE(0),\r
+                                                               .DataLength    = PIMA_COMMAND_SIZE(1),\r
                                                                .Type          = CType_CommandBlock,\r
                                                                .Code          = 0x1002,\r
                                                                .Type          = CType_CommandBlock,\r
                                                                .Code          = 0x1002,\r
-                                                               .Params        = {},\r
+                                                               .Params        = {1},\r
                                                        };\r
                                                        \r
        if ((ErrorCode = SImage_Host_SendBlockHeader(SIInterfaceInfo, &PIMABlock)) != PIPE_RWSTREAM_NoError)\r
                                                        };\r
                                                        \r
        if ((ErrorCode = SImage_Host_SendBlockHeader(SIInterfaceInfo, &PIMABlock)) != PIPE_RWSTREAM_NoError)\r
@@ -335,7 +336,6 @@ uint8_t SImage_Host_OpenSession(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo)
        if ((PIMABlock.Type != CType_ResponseBlock) || (PIMABlock.Code != 0x2001))\r
          return SI_ERROR_LOGICAL_CMD_FAILED;\r
          \r
        if ((PIMABlock.Type != CType_ResponseBlock) || (PIMABlock.Code != 0x2001))\r
          return SI_ERROR_LOGICAL_CMD_FAILED;\r
          \r
-       SIInterfaceInfo->State.TransactionID = 0;\r
        SIInterfaceInfo->State.IsSessionOpen = true;\r
 \r
        return PIPE_RWSTREAM_NoError;\r
        SIInterfaceInfo->State.IsSessionOpen = true;\r
 \r
        return PIPE_RWSTREAM_NoError;\r
@@ -350,10 +350,10 @@ uint8_t SImage_Host_CloseSession(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo)
 \r
        SI_PIMA_Container_t PIMABlock = (SI_PIMA_Container_t)\r
                                                        {\r
 \r
        SI_PIMA_Container_t PIMABlock = (SI_PIMA_Container_t)\r
                                                        {\r
-                                                               .DataLength    = PIMA_COMMAND_SIZE(0),\r
+                                                               .DataLength    = PIMA_COMMAND_SIZE(1),\r
                                                                .Type          = CType_CommandBlock,\r
                                                                .Code          = 0x1003,\r
                                                                .Type          = CType_CommandBlock,\r
                                                                .Code          = 0x1003,\r
-                                                               .Params        = {},\r
+                                                               .Params        = {1},\r
                                                        };\r
                                                        \r
        if ((ErrorCode = SImage_Host_SendBlockHeader(SIInterfaceInfo, &PIMABlock)) != PIPE_RWSTREAM_NoError)\r
                                                        };\r
                                                        \r
        if ((ErrorCode = SImage_Host_SendBlockHeader(SIInterfaceInfo, &PIMABlock)) != PIPE_RWSTREAM_NoError)\r