Add HCI debugging with verbosity control to the BluetoothHost demo.
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 11 Apr 2010 06:19:58 +0000 (06:19 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 11 Apr 2010 06:19:58 +0000 (06:19 +0000)
Add Link Key Request event processing so that paired devices always re-authenticate until appropriate link key store/retrieve callbacks are implemented.

Demos/Host/Incomplete/BluetoothHost/ConfigDescriptor.c
Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothACLPackets.c
Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothACLPackets.h
Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothHCICommands.c
Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothHCICommands.h
Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothStack.h

index 4c94eaa..f0d9c1a 100644 (file)
@@ -43,7 +43,7 @@
  *\r
  *  This routine searches for a BT interface descriptor containing bulk IN and OUT data endpoints.\r
  *\r
- *  \return An error code from the \ref Bluetooth_GetConfigDescriptorDataCodes_t enum.\r
+ *  \return An error code from the \ref BluetoothHost_GetConfigDescriptorDataCodes_t enum.\r
  */\r
 uint8_t ProcessConfigurationDescriptor(void)\r
 {\r
index df831fd..45fad7b 100644 (file)
@@ -208,7 +208,7 @@ Bluetooth_Channel_t* Bluetooth_OpenChannel(uint16_t PSM)
                if (Bluetooth_Connection.Channels[i].State == Channel_Closed)\r
                {\r
                        ChannelData = &Bluetooth_Connection.Channels[i];                                \r
-                       ChannelData->LocalNumber = (BLUETOOTH_CHANNELNUMBER_BASEOFFSET + i);\r
+                       ChannelData->LocalNumber = (BT_CHANNELNUMBER_BASEOFFSET + i);\r
                        break;\r
                }\r
        }\r
@@ -292,7 +292,7 @@ static inline void Bluetooth_Signal_ConnectionReq(BT_ACL_Header_t*        ACLPac
                        if (Bluetooth_Connection.Channels[i].State == Channel_Closed)\r
                        {\r
                                ChannelData = &Bluetooth_Connection.Channels[i];                                \r
-                               ChannelData->LocalNumber = (BLUETOOTH_CHANNELNUMBER_BASEOFFSET + i);\r
+                               ChannelData->LocalNumber = (BT_CHANNELNUMBER_BASEOFFSET + i);\r
                                break;\r
                        }\r
                }\r
index 40f2bbd..012fbc0 100644 (file)
@@ -44,6 +44,8 @@
                #define BT_ACL_DEBUG(l, s, ...)           do { if (ACL_DEBUG_LEVEL >= l) printf_P(PSTR("(ACL) " s "\r\n"), __VA_ARGS__); } while (0)\r
                #define ACL_DEBUG_LEVEL                   1\r
 \r
+               #define BT_CHANNELNUMBER_BASEOFFSET       0x0040\r
+\r
                #define BT_CHANNEL_SIGNALING              0x0001\r
                #define BT_CHANNEL_CONNECTIONLESS         0x0002\r
                \r
index 3d5b14a..d154391 100644 (file)
 #define  INCLUDE_FROM_BLUETOOTHHCICOMMANDS_C\r
 #include "BluetoothHCICommands.h"\r
 \r
-static BT_HCICommand_Header_t HCICommandHeader;\r
+/** Current processing state of the HCI portion of the Bluetooth stack. */\r
+uint8_t Bluetooth_HCIProcessingState;\r
 \r
-       uint8_t                       Bluetooth_HCIProcessingState;\r
-static uint8_t                       Bluetooth_HCINextState;\r
-static uint8_t                       Bluetooth_TempDeviceAddress[6];\r
+/** Next HCI state to enter once the last issued HCI command has completed. */\r
+static uint8_t Bluetooth_HCINextState;\r
 \r
+/** Temporary Bluetooth Device Address, for HCI responses which much include the detination address */\r
+static uint8_t Bluetooth_TempDeviceAddress[6];\r
+\r
+\r
+/** Bluetooth HCI processing task. This task should be called repeatedly the main Bluetooth\r
+ *  stack task to manage the HCI processing state.\r
+ */\r
 void Bluetooth_HCITask(void)\r
 {\r
+       BT_HCICommand_Header_t HCICommandHeader;\r
+\r
        switch (Bluetooth_HCIProcessingState)\r
        {\r
                case Bluetooth_ProcessEvents:\r
@@ -58,18 +67,27 @@ void Bluetooth_HCITask(void)
                                /* Read in the event parameters into the temporary buffer */\r
                                Pipe_Read_Stream_LE(&EventParams, HCIEventHeader.ParameterLength);\r
                                Pipe_ClearIN();\r
+                               \r
+                               BT_HCI_DEBUG(1, "Event Received (0x%02X)", HCIEventHeader.EventCode);\r
 \r
                                switch (HCIEventHeader.EventCode)\r
                                {\r
                                        case EVENT_COMMAND_COMPLETE:\r
+                                               BT_HCI_DEBUG(1, "<< Command Complete", NULL);\r
                                                Bluetooth_HCIProcessingState = Bluetooth_HCINextState;\r
                                                break;\r
                                        case EVENT_COMMAND_STATUS:\r
+                                               BT_HCI_DEBUG(1, "<< Command Status", NULL);\r
+                                               BT_HCI_DEBUG(2, "-- Status Code: 0x%02X", (((BT_HCIEvent_CommandStatus_t*)&EventParams)->Status));\r
+\r
                                                /* If the execution of a command failed, reset the stack */\r
                                                if (((BT_HCIEvent_CommandStatus_t*)&EventParams)->Status)\r
                                                  Bluetooth_HCIProcessingState = Bluetooth_Init;\r
                                                break;\r
                                        case EVENT_CONNECTION_REQUEST:\r
+                                               BT_HCI_DEBUG(1, "<< Connection Request", NULL);\r
+                                               BT_HCI_DEBUG(2, "-- Link Type: 0x%02X", (((BT_HCIEvent_ConnectionRequest_t*)&EventParams)->LinkType));\r
+\r
                                                /* Need to store the remote device's BT address in a temporary buffer for later use */\r
                                                memcpy(Bluetooth_TempDeviceAddress,\r
                                                       &((BT_HCIEvent_ConnectionRequest_t*)&EventParams)->RemoteAddress,\r
@@ -82,8 +100,14 @@ void Bluetooth_HCITask(void)
                                                Bluetooth_HCIProcessingState = (Bluetooth_Connection.IsConnected || !(IsACLConnection) ||\r
                                                                                                            !(Bluetooth_ConnectionRequest(Bluetooth_TempDeviceAddress))) ?\r
                                                                                                           Bluetooth_Conn_RejectConnection : Bluetooth_Conn_AcceptConnection;\r
+\r
+                                               BT_HCI_DEBUG(2, "-- Connection %S", (Bluetooth_HCIProcessingState == Bluetooth_Conn_RejectConnection) ?\r
+                                                                                    PSTR("REJECTED") : PSTR("ACCEPTED"));\r
+\r
                                                break;\r
                                        case EVENT_PIN_CODE_REQUEST:\r
+                                               BT_HCI_DEBUG(1, "<< Pin Code Request", NULL);\r
+\r
                                                /* Need to store the remote device's BT address in a temporary buffer for later use */\r
                                                memcpy(Bluetooth_TempDeviceAddress,\r
                                                       &((BT_HCIEvent_PinCodeReq_t*)&EventParams)->RemoteAddress,\r
@@ -91,7 +115,20 @@ void Bluetooth_HCITask(void)
 \r
                                                Bluetooth_HCIProcessingState = Bluetooth_Conn_SendPINCode;\r
                                                break;\r
+                                       case EVENT_LINK_KEY_REQUEST:\r
+                                               BT_HCI_DEBUG(1, "<< Link Key Request", NULL);\r
+                                               \r
+                                               /* Need to store the remote device's BT address in a temporary buffer for later use */\r
+                                               memcpy(Bluetooth_TempDeviceAddress,\r
+                                                      &((BT_HCIEvent_LinkKeyReq_t*)&EventParams)->RemoteAddress,\r
+                                                      sizeof(Bluetooth_TempDeviceAddress));                                            \r
+                                               \r
+                                               Bluetooth_HCIProcessingState = Bluetooth_Conn_SendLinkKeyNAK;\r
+                                               break;\r
                                        case EVENT_CONNECTION_COMPLETE:\r
+                                               BT_HCI_DEBUG(1, "<< Connection Complete", NULL);\r
+                                               BT_HCI_DEBUG(2, "-- Handle: 0x%04X", ((BT_HCIEvent_ConnectionComplete_t*)&EventParams)->ConnectionHandle);\r
+\r
                                                /* Need to store the remote device's BT address in a temporary buffer for later use */\r
                                                memcpy(Bluetooth_Connection.RemoteAddress,\r
                                                       &((BT_HCIEvent_ConnectionComplete_t*)&EventParams)->RemoteAddress,\r
@@ -104,13 +141,15 @@ void Bluetooth_HCITask(void)
                                                Bluetooth_ConnectionComplete();                                         \r
                                                break;\r
                                        case EVENT_DISCONNECTION_COMPLETE:\r
+                                               BT_HCI_DEBUG(1, "<< Disconnection Complete", NULL);\r
+\r
                                                /* Device disconnected, indicate connection information no longer valid */\r
                                                Bluetooth_Connection.IsConnected = false;\r
                                                \r
                                                Bluetooth_DisconnectionComplete();\r
                                                \r
                                                Bluetooth_HCIProcessingState = Bluetooth_Init;\r
-                                               break;                                  \r
+                                               break;\r
                                }\r
                        }\r
                        \r
@@ -118,12 +157,16 @@ void Bluetooth_HCITask(void)
                        \r
                        break;\r
                case Bluetooth_Init:\r
+                       BT_HCI_DEBUG(1, "# Init", NULL);\r
+\r
                        /* Reset the connection information structure to destroy any previous connection state */\r
                        memset(&Bluetooth_Connection, 0x00, sizeof(Bluetooth_Connection));\r
 \r
                        Bluetooth_HCIProcessingState = Bluetooth_Init_Reset; \r
                        break;\r
                case Bluetooth_Init_Reset:\r
+                       BT_HCI_DEBUG(1, "# Reset", NULL);\r
+\r
                        HCICommandHeader = (BT_HCICommand_Header_t)\r
                        {\r
                                OpCode: {OGF: OGF_CTRLR_BASEBAND, OCF: OCF_CTRLR_BASEBAND_RESET},\r
@@ -131,12 +174,14 @@ void Bluetooth_HCITask(void)
                        };\r
 \r
                        /* Send the command to reset the bluetooth dongle controller */\r
-                       Bluetooth_SendHCICommand(NULL, 0);\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, NULL, 0);\r
                        \r
                        Bluetooth_HCINextState       = Bluetooth_Init_SetLocalName;\r
                        Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
                        break;\r
                case Bluetooth_Init_SetLocalName:\r
+                       BT_HCI_DEBUG(1, "# Set Local Name", NULL);\r
+\r
                        HCICommandHeader = (BT_HCICommand_Header_t)\r
                                {\r
                                        OpCode: {OGF: OGF_CTRLR_BASEBAND, OCF: OCF_CTRLR_BASEBAND_WRITE_LOCAL_NAME},\r
@@ -144,12 +189,14 @@ void Bluetooth_HCITask(void)
                                };\r
 \r
                        /* Send the command to set the bluetooth dongle's name for other devices to see */\r
-                       Bluetooth_SendHCICommand(Bluetooth_DeviceConfiguration.Name, strlen(Bluetooth_DeviceConfiguration.Name));\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, Bluetooth_DeviceConfiguration.Name, strlen(Bluetooth_DeviceConfiguration.Name));\r
 \r
                        Bluetooth_HCINextState       = Bluetooth_Init_SetDeviceClass;\r
                        Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
                        break;\r
                case Bluetooth_Init_SetDeviceClass:\r
+                       BT_HCI_DEBUG(1, "# Set Device Class", NULL);\r
+\r
                        HCICommandHeader = (BT_HCICommand_Header_t)\r
                                {\r
                                        OpCode: {OGF: OGF_CTRLR_BASEBAND, OCF: OCF_CTRLR_BASEBAND_WRITE_CLASS_OF_DEVICE},\r
@@ -157,12 +204,14 @@ void Bluetooth_HCITask(void)
                                };\r
 \r
                        /* Send the command to set the class of the device for other devices to see */\r
-                       Bluetooth_SendHCICommand(&Bluetooth_DeviceConfiguration.Class, 3);\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, &Bluetooth_DeviceConfiguration.Class, 3);\r
 \r
                        Bluetooth_HCINextState       = Bluetooth_Init_WriteScanEnable;\r
                        Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
                        break;\r
                case Bluetooth_Init_WriteScanEnable:\r
+                       BT_HCI_DEBUG(1, "# Write Scan Enable", NULL);\r
+\r
                        HCICommandHeader = (BT_HCICommand_Header_t)\r
                        {\r
                                OpCode: {OGF: OGF_CTRLR_BASEBAND, OCF: OCF_CTRLR_BASEBAND_WRITE_SCAN_ENABLE},\r
@@ -172,12 +221,14 @@ void Bluetooth_HCITask(void)
                        uint8_t Interval = BT_SCANMODE_InquiryAndPageScans;\r
                        \r
                        /* Send the command to set the remote device scanning mode */\r
-                       Bluetooth_SendHCICommand(&Interval, 1);\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, &Interval, 1);\r
                        \r
                        Bluetooth_HCINextState       = Bluetooth_ProcessEvents;\r
                        Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
                        break;\r
                case Bluetooth_Conn_AcceptConnection:\r
+                       BT_HCI_DEBUG(1, "# Accept Connection", NULL);\r
+\r
                        HCICommandHeader = (BT_HCICommand_Header_t)\r
                                {\r
                                        OpCode: {OGF: OGF_LINK_CONTROL, OCF: OCF_LINK_CONTROL_ACCEPT_CONNECTION_REQUEST},\r
@@ -192,11 +243,13 @@ void Bluetooth_HCITask(void)
                        AcceptConnectionParams.SlaveRole = true;\r
 \r
                        /* Send the command to accept the remote connection request */\r
-                       Bluetooth_SendHCICommand(&AcceptConnectionParams, sizeof(BT_HCICommand_AcceptConnectionReq_t));\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, &AcceptConnectionParams, sizeof(BT_HCICommand_AcceptConnectionReq_t));\r
                        \r
                        Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
                        break;\r
                case Bluetooth_Conn_RejectConnection:\r
+                       BT_HCI_DEBUG(1, "# Reject Connection", NULL);\r
+\r
                        HCICommandHeader = (BT_HCICommand_Header_t)\r
                                {\r
                                        OpCode: {OGF: OGF_LINK_CONTROL, OCF: OCF_LINK_CONTROL_REJECT_CONNECTION_REQUEST},\r
@@ -210,11 +263,13 @@ void Bluetooth_HCITask(void)
                        RejectConnectionParams.Reason = Bluetooth_Connection.IsConnected ? ERROR_LIMITED_RESOURCES : ERROR_UNACCEPTABLE_BDADDR;\r
 \r
                        /* Send the command to reject the remote connection request */\r
-                       Bluetooth_SendHCICommand(&RejectConnectionParams, sizeof(BT_HCICommand_RejectConnectionReq_t));\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, &RejectConnectionParams, sizeof(BT_HCICommand_RejectConnectionReq_t));\r
                \r
                        Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
                        break;\r
                case Bluetooth_Conn_SendPINCode:\r
+                       BT_HCI_DEBUG(1, "# Send Pin Code", NULL);\r
+\r
                        HCICommandHeader = (BT_HCICommand_Header_t)\r
                                {\r
                                        OpCode: {OGF: OGF_LINK_CONTROL, OCF: OCF_LINK_CONTROL_PIN_CODE_REQUEST_REPLY},\r
@@ -229,17 +284,43 @@ void Bluetooth_HCITask(void)
                        memcpy(PINCodeRequestParams.PINCode, Bluetooth_DeviceConfiguration.PINCode, sizeof(PINCodeRequestParams.PINCode));\r
                        \r
                        /* Send the command to transmit the device's local PIN number for authentication */\r
-                       Bluetooth_SendHCICommand(&PINCodeRequestParams, sizeof(BT_HCICommand_PinCodeResp_t));\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, &PINCodeRequestParams, sizeof(BT_HCICommand_PinCodeResp_t));\r
+\r
+                       Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
+                       break;\r
+               case Bluetooth_Conn_SendLinkKeyNAK:\r
+                       BT_HCI_DEBUG(1, "# Send Link Key NAK", NULL);\r
+\r
+                       HCICommandHeader = (BT_HCICommand_Header_t)\r
+                               {\r
+                                       OpCode: {OGF: OGF_LINK_CONTROL, OCF: OCF_LINK_CONTROL_LINK_KEY_REQUEST_NEG_REPLY},\r
+                                       ParameterLength: sizeof(BT_HCICommand_LinkKeyNAKResp_t),\r
+                               };\r
+\r
+                       /* Copy over the temporary BT device address saved from the Link Key Request event */\r
+                       BT_HCICommand_LinkKeyNAKResp_t LinkKeyNAKParams;\r
+                       memcpy(LinkKeyNAKParams.RemoteAddress, Bluetooth_TempDeviceAddress, sizeof(LinkKeyNAKParams.RemoteAddress));\r
+\r
+                       /* Send the command to transmit the link key NAK to the receiver */\r
+                       Bluetooth_SendHCICommand(&HCICommandHeader, &LinkKeyNAKParams, sizeof(BT_HCICommand_LinkKeyNAKResp_t));\r
 \r
                        Bluetooth_HCIProcessingState = Bluetooth_ProcessEvents;\r
                        break;\r
        }\r
 }\r
 \r
-static uint8_t Bluetooth_SendHCICommand(void* Parameters, uint16_t ParameterLength)\r
+/** Sends a Bluetooth HCI control command to the attached Bluetooth device.\r
+ *\r
+ *  \param HCICommandHeader  HCI command header to send to the attached device\r
+ *  \param Parameters        Pointer to the source of the control parameters (if any)\r
+ *  \param ParameterLength   Length of the parameters to send in bytes\r
+ *\r
+ *  \return A value from the USB_Host_SendControlErrorCodes_t enum.\r
+ */\r
+static uint8_t Bluetooth_SendHCICommand(BT_HCICommand_Header_t* HCICommandHeader, void* Parameters, uint16_t ParameterLength)\r
 {\r
        /* Need to reserve the amount of bytes given in the header for the complete payload */\r
-       uint8_t CommandBuffer[sizeof(HCICommandHeader) + HCICommandHeader.ParameterLength];\r
+       uint8_t CommandBuffer[sizeof(BT_HCICommand_Header_t) + HCICommandHeader->ParameterLength];\r
 \r
        USB_ControlRequest = (USB_Request_Header_t)\r
                {\r
@@ -251,14 +332,14 @@ static uint8_t Bluetooth_SendHCICommand(void* Parameters, uint16_t ParameterLeng
                };\r
 \r
        /* Copy over the HCI command header to the allocated buffer */\r
-       memcpy(CommandBuffer, &HCICommandHeader, sizeof(HCICommandHeader));\r
+       memcpy(CommandBuffer, HCICommandHeader, sizeof(BT_HCICommand_Header_t));\r
        \r
-       /* Zero out the parameter section of the response to ensure that any padding bytes do not expose private RAM contents */\r
-       memset(&CommandBuffer[sizeof(HCICommandHeader)], 0x00, HCICommandHeader.ParameterLength);\r
+       /* Zero out the parameter section of the response so that all padding bytes are known to be zero */\r
+       memset(&CommandBuffer[sizeof(BT_HCICommand_Header_t)], 0x00, HCICommandHeader->ParameterLength);\r
 \r
        /* Copy over the command parameters (if any) to the command buffer - note, the number of actual source parameter bytes\r
           may differ to those in the header; any difference in length is filled with 0x00 padding bytes */\r
-       memcpy(&CommandBuffer[sizeof(HCICommandHeader)], Parameters, ParameterLength);\r
+       memcpy(&CommandBuffer[sizeof(BT_HCICommand_Header_t)], Parameters, ParameterLength);\r
        \r
        Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
        return USB_Host_SendControlRequest(CommandBuffer);\r
index 9c1adf0..6a241ea 100644 (file)
@@ -42,6 +42,9 @@
                #include "BluetoothClassCodes.h"\r
 \r
        /* Macros: */\r
+               #define BT_HCI_DEBUG(l, s, ...)                        do { if (HCI_DEBUG_LEVEL >= l) printf_P(PSTR("(HCI) " s "\r\n"), __VA_ARGS__); } while (0)\r
+               #define HCI_DEBUG_LEVEL                                1\r
+\r
                #define OGF_LINK_CONTROL                               0x01\r
                #define OGF_CTRLR_BASEBAND                             0x03\r
                #define OGF_CTRLR_INFORMATIONAL                        0x04\r
@@ -79,6 +82,7 @@
                #define EVENT_DISCONNECTION_COMPLETE                   0x05\r
                #define EVENT_REMOTE_NAME_REQUEST_COMPLETE             0x07\r
                #define EVENT_PIN_CODE_REQUEST                         0x16\r
+               #define EVENT_LINK_KEY_REQUEST                         0x17\r
                \r
                #define ERROR_LIMITED_RESOURCES                        0x0D\r
                #define ERROR_UNACCEPTABLE_BDADDR                      0x0F\r
                {\r
                        uint8_t  RemoteAddress[6];\r
                } BT_HCIEvent_PinCodeReq_t;\r
-               \r
+\r
                typedef struct\r
                {\r
                        uint8_t  RemoteAddress[6];\r
-                       uint8_t  SlaveRole;\r
-               } BT_HCICommand_AcceptConnectionReq_t;\r
-               \r
+               } BT_HCIEvent_LinkKeyReq_t;\r
+                               \r
                typedef struct\r
                {\r
                        uint8_t  RemoteAddress[6];\r
-                       uint8_t  Reason;\r
-               } BT_HCICommand_RejectConnectionReq_t;\r
+               } BT_HCICommand_LinkKeyNAKResp_t;\r
 \r
                typedef struct\r
                {\r
                        char     PINCode[16];\r
                } BT_HCICommand_PinCodeResp_t;\r
                \r
+               typedef struct\r
+               {\r
+                       uint8_t  RemoteAddress[6];\r
+                       uint8_t  SlaveRole;\r
+               } BT_HCICommand_AcceptConnectionReq_t;\r
+               \r
+               typedef struct\r
+               {\r
+                       uint8_t  RemoteAddress[6];\r
+                       uint8_t  Reason;\r
+               } BT_HCICommand_RejectConnectionReq_t;          \r
+\r
        /* Enums: */\r
                enum BT_ScanEnable_Modes_t\r
                {\r
                        Bluetooth_Conn_AcceptConnection  = 6,\r
                        Bluetooth_Conn_RejectConnection  = 7,\r
                        Bluetooth_Conn_SendPINCode       = 8,\r
+                       Bluetooth_Conn_SendLinkKeyNAK    = 9,\r
                };\r
                \r
        /* External Variables: */\r
                void Bluetooth_HCITask(void);\r
                        \r
                #if defined(INCLUDE_FROM_BLUETOOTHHCICOMMANDS_C)\r
-                       static uint8_t Bluetooth_SendHCICommand(void* Parameters, uint16_t ParameterLength);\r
+                       static uint8_t Bluetooth_SendHCICommand(BT_HCICommand_Header_t* HCICommandHeader, void* Parameters,\r
+                                                               uint16_t ParameterLength);\r
                #endif\r
                \r
 #endif\r
index 9a90cff..5ab7a6f 100644 (file)
                #define BLUETOOTH_EVENTS_PIPE                    3\r
 \r
                #define BLUETOOTH_MAX_OPEN_CHANNELS              2\r
-               #define BLUETOOTH_CHANNELNUMBER_BASEOFFSET       0x0040\r
                \r
                #define CHANNEL_PSM_SERVICEDISCOVERY             0x0001\r
+               #define CHANNEL_PSM_UDP                          0x0002\r
                #define CHANNEL_PSM_RFCOMM                       0x0003\r
+               #define CHANNEL_PSM_TCP                          0x0004\r
+               #define CHANNEL_PSM_IP                           0x0009\r
+               #define CHANNEL_PSM_FTP                          0x000A\r
+               #define CHANNEL_PSM_HTTP                         0x000C\r
+               #define CHANNEL_PSM_UPNP                         0x0010\r
+               #define CHANNEL_PSM_HIDP                         0x0011\r
                \r
                #define MAXIMUM_CHANNEL_MTU                      255\r
                \r