Make SPI and USART peripheral dispatch driver headers in preparation for a set of...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Pipe.c
index d449040..78c82e8 100644 (file)
@@ -1,13 +1,13 @@
 /*\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
-  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
   this software.\r
 */\r
 \r
+#define  __INCLUDE_FROM_USB_DRIVER\r
 #include "../HighLevel/USBMode.h"\r
 \r
 #if defined(USB_CAN_BE_HOST)\r
 \r
-#define  INCLUDE_FROM_PIPE_C\r
+#define  __INCLUDE_FROM_PIPE_C\r
 #include "Pipe.h"\r
 \r
 uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;\r
@@ -78,8 +79,15 @@ bool Pipe_IsEndpointBound(const uint8_t EndpointAddress)
        {\r
                Pipe_SelectPipe(PNum);\r
                \r
-               if (Pipe_IsConfigured() && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)))\r
-                 return true;\r
+               uint8_t PipeToken = Pipe_GetPipeToken();\r
+\r
+               if (PipeToken != PIPE_TOKEN_SETUP)\r
+                 PipeToken = (PipeToken == ((EndpointAddress & PIPE_EPDIR_MASK) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT));\r
+               \r
+               if (Pipe_IsConfigured() && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)) && PipeToken)\r
+               {               \r
+                       return true;\r
+               }\r
        }\r
        \r
        Pipe_SelectPipe(PrevPipeNumber);\r