Added new Relay Controller Board project (thanks to OBinou).
[pub/USBasp.git] / Demos / Host / Incomplete / BluetoothHost / Lib / BluetoothHCICommands.c
index ddd159e..4870fff 100644 (file)
@@ -1,21 +1,21 @@
 /*\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
-\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
+  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
+  without fee, provided that the above copyright notice appear in \r
+  all 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
@@ -42,11 +42,11 @@ static uint8_t Bluetooth_SendHCICommand(void* Parameters, uint8_t ParamLength)
 \r
        USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
-                       bmRequestType: (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_DEVICE),\r
-                       bRequest:      0,\r
-                       wValue:        0,\r
-                       wIndex:        0,\r
-                       wLength:       sizeof(CommandBuffer)\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_DEVICE),\r
+                       .bRequest      = 0,\r
+                       .wValue        = 0,\r
+                       .wIndex        = 0,\r
+                       .wLength       = sizeof(CommandBuffer)\r
                };\r
                \r
        memset(CommandBuffer, 0x00, sizeof(CommandBuffer));\r
@@ -72,7 +72,6 @@ static bool Bluetooth_GetNextHCIEventHeader(void)
        }\r
          \r
        Pipe_Read_Stream_LE(&HCIEventHeader, sizeof(HCIEventHeader));\r
-         \r
        Pipe_Freeze();\r
 \r
        return true;\r
@@ -81,11 +80,14 @@ static bool Bluetooth_GetNextHCIEventHeader(void)
 static void Bluetooth_DiscardRemainingHCIEventParameters(void)\r
 {\r
        Pipe_SelectPipe(BLUETOOTH_EVENTS_PIPE);\r
-       \r
        Pipe_Unfreeze();\r
+\r
        Pipe_Discard_Stream(HCIEventHeader.ParameterLength);\r
        Pipe_ClearIN();\r
+\r
        Pipe_Freeze();\r
+       \r
+       HCIEventHeader.ParameterLength = 0;\r
 }\r
 \r
 void Bluetooth_ProcessHCICommands(void)\r
@@ -114,7 +116,12 @@ void Bluetooth_ProcessHCICommands(void)
 \r
                        do\r
                        {\r
-                               while (!(Bluetooth_GetNextHCIEventHeader()));\r
+                               while (!(Bluetooth_GetNextHCIEventHeader()))\r
+                               {\r
+                                       if (USB_HostState == HOST_STATE_Unattached)\r
+                                         return;\r
+                               }\r
+               \r
                                Bluetooth_DiscardRemainingHCIEventParameters();\r
                        } while (HCIEventHeader.EventCode != EVENT_COMMAND_COMPLETE);\r
 \r
@@ -133,7 +140,12 @@ void Bluetooth_ProcessHCICommands(void)
 \r
                        do\r
                        {\r
-                               while (!(Bluetooth_GetNextHCIEventHeader()));\r
+                               while (!(Bluetooth_GetNextHCIEventHeader()))\r
+                               {\r
+                                       if (USB_HostState == HOST_STATE_Unattached)\r
+                                         return;\r
+                               }\r
+\r
                                Bluetooth_DiscardRemainingHCIEventParameters();\r
                        } while (HCIEventHeader.EventCode != EVENT_COMMAND_COMPLETE);\r
 \r
@@ -155,7 +167,12 @@ void Bluetooth_ProcessHCICommands(void)
                                                                                            EventMask[3], EventMask[2], EventMask[1], EventMask[0]);\r
                        do\r
                        {\r
-                               while (!(Bluetooth_GetNextHCIEventHeader()));\r
+                               while (!(Bluetooth_GetNextHCIEventHeader()))\r
+                               {\r
+                                       if (USB_HostState == HOST_STATE_Unattached)\r
+                                         return;\r
+                               }\r
+\r
                                Bluetooth_DiscardRemainingHCIEventParameters();\r
                        } while (HCIEventHeader.EventCode != EVENT_COMMAND_COMPLETE);\r
                \r
@@ -176,7 +193,12 @@ void Bluetooth_ProcessHCICommands(void)
                        \r
                        do\r
                        {\r
-                               while (!(Bluetooth_GetNextHCIEventHeader()));\r
+                               while (!(Bluetooth_GetNextHCIEventHeader()))\r
+                               {\r
+                                       if (USB_HostState == HOST_STATE_Unattached)\r
+                                         return;\r
+                               }\r
+\r
                                Bluetooth_DiscardRemainingHCIEventParameters();\r
                        } while (HCIEventHeader.EventCode != EVENT_COMMAND_COMPLETE);\r
                        \r
@@ -195,7 +217,12 @@ void Bluetooth_ProcessHCICommands(void)
 \r
                        do\r
                        {\r
-                               while (!(Bluetooth_GetNextHCIEventHeader()));\r
+                               while (!(Bluetooth_GetNextHCIEventHeader()))\r
+                               {\r
+                                       if (USB_HostState == HOST_STATE_Unattached)\r
+                                         return;\r
+                               }\r
+\r
                                Bluetooth_DiscardRemainingHCIEventParameters();\r
                        } while (HCIEventHeader.EventCode != EVENT_COMMAND_COMPLETE);\r
 \r
@@ -215,7 +242,12 @@ void Bluetooth_ProcessHCICommands(void)
 \r
                        do\r
                        {\r
-                               while (!(Bluetooth_GetNextHCIEventHeader()));\r
+                               while (!(Bluetooth_GetNextHCIEventHeader()))\r
+                               {\r
+                                       if (USB_HostState == HOST_STATE_Unattached)\r
+                                         return;\r
+                               }\r
+\r
                                Bluetooth_DiscardRemainingHCIEventParameters();\r
                        } while (HCIEventHeader.EventCode != EVENT_COMMAND_COMPLETE);\r
 \r
@@ -299,6 +331,10 @@ void Bluetooth_ProcessHCICommands(void)
                                                         \r
                                        Bluetooth_HCIProcessingState = Bluetooth_Conn_SendPINCode;\r
                                }\r
+                               else if (HCIEventHeader.EventCode == EVENT_COMMAND_COMPLETE)\r
+                               {\r
+                                       BT_DEBUG("(HCI) >> Command Complete", NULL);\r
+                               }\r
                                \r
                                BT_DEBUG("(HCI) -- Unread Event Param Length: %d", HCIEventHeader.ParameterLength);\r
 \r
@@ -363,12 +399,6 @@ void Bluetooth_ProcessHCICommands(void)
                               sizeof(Bluetooth_DeviceConfiguration.PINCode));\r
                        \r
                        Bluetooth_SendHCICommand(&PINCodeRequestParams, sizeof(PINCodeRequestParams));\r
-               \r
-                       do\r
-                       {\r
-                               while (!(Bluetooth_GetNextHCIEventHeader()));\r
-                               Bluetooth_DiscardRemainingHCIEventParameters();\r
-                       } while (HCIEventHeader.EventCode != EVENT_COMMAND_COMPLETE);\r
 \r
                        Bluetooth_HCIProcessingState     = Bluetooth_PrepareToProcessEvents;\r
                        break;\r