+\r
+static inline void Bluetooth_SignalPacket_DisconnectionRequest(Bluetooth_ACL_Header_t* ACLPacketHeader,\r
+ Bluetooth_DataPacket_Header_t* DataHeader,\r
+ Bluetooth_SignalCommand_Header_t* SignalCommandHeader)\r
+{\r
+ Bluetooth_SignalCommand_DisconnectionRequest_t DisconnectionRequest;\r
+ \r
+ Pipe_Read_Stream_LE(&DisconnectionRequest, sizeof(DisconnectionRequest));\r
+\r
+ BT_ACL_DEBUG("<< L2CAP Disconnection Request", NULL);\r
+#if (ACL_DEBUG_LEVEL > 1)\r
+ BT_ACL_DEBUG("-- Destination Channel: 0x%04X", DisconnectionRequest.DestinationChannel);\r
+ BT_ACL_DEBUG("-- Source Channel: 0x%04X", DisconnectionRequest.SourceChannel);\r
+#endif\r
+ \r
+ Pipe_ClearIN();\r
+ Pipe_Freeze();\r
+ Pipe_SelectPipe(BLUETOOTH_DATA_OUT_PIPE);\r
+ Pipe_Unfreeze();\r
+ \r
+ Bluetooth_SignalCommand_DisconnectionResponse_t DisconnectionResponse;\r
+\r
+ ACLPacketHeader->DataLength = sizeof(*DataHeader) + sizeof(*SignalCommandHeader) + sizeof(DisconnectionResponse);\r
+ DataHeader->PayloadLength = sizeof(*SignalCommandHeader) + sizeof(DisconnectionResponse);\r
+ DataHeader->DestinationChannel = BLUETOOTH_CHANNEL_SIGNALING;\r
+ SignalCommandHeader->Code = BLUETOOTH_SIGNAL_DISCONNECTION_RESPONSE;\r
+ SignalCommandHeader->Length = sizeof(DisconnectionResponse);\r
+ \r
+ Bluetooth_Channel_t* ChannelData = Bluetooth_GetChannelData(DisconnectionRequest.SourceChannel, true);\r
+\r
+ if (ChannelData != NULL)\r
+ ChannelData->State = Channel_Closed;\r
+ \r
+ DisconnectionResponse.DestinationChannel = ChannelData->LocalNumber;\r
+ DisconnectionResponse.SourceChannel = ChannelData->RemoteNumber;\r
+\r
+ Pipe_Write_Stream_LE(ACLPacketHeader, sizeof(*ACLPacketHeader));\r
+ Pipe_Write_Stream_LE(DataHeader, sizeof(*DataHeader));\r
+ Pipe_Write_Stream_LE(SignalCommandHeader, sizeof(*SignalCommandHeader));\r
+ Pipe_Write_Stream_LE(&DisconnectionResponse, sizeof(DisconnectionResponse));\r
+ \r
+ Pipe_ClearOUT();\r
+ Pipe_Freeze();\r
+ \r
+#if (ACL_DEBUG_LEVEL > 1)\r
+ BT_ACL_DEBUG("Packet Sent", NULL);\r
+ BT_ACL_DEBUG("-- Connection Handle: 0x%04X", (ACLPacketHeader->ConnectionHandle & 0x0FFF));\r
+ BT_ACL_DEBUG("-- Data Length: 0x%04X", ACLPacketHeader->DataLength);\r
+ BT_ACL_DEBUG("-- Destination Channel: 0x%04X", DataHeader->DestinationChannel);\r
+ BT_ACL_DEBUG("-- Payload Length: 0x%04X", DataHeader->PayloadLength); \r
+#endif\r
+ BT_ACL_DEBUG(">> L2CAP Disconnection Response", NULL);\r
+#if (ACL_DEBUG_LEVEL > 1)\r
+ BT_ACL_DEBUG("-- Source Channel: 0x%04X", DisconnectionResponse.SourceChannel);\r
+ BT_ACL_DEBUG("-- Destination Channel: 0x%04X", DisconnectionResponse.DestinationChannel);\r
+#endif\r
+}\r
+\r
+static inline void Bluetooth_SignalPacket_EchoRequest(Bluetooth_ACL_Header_t* ACLPacketHeader,\r
+ Bluetooth_DataPacket_Header_t* DataHeader,\r
+ Bluetooth_SignalCommand_Header_t* SignalCommandHeader)\r
+{\r
+ BT_ACL_DEBUG("<< L2CAP Echo Request", NULL);\r
+ \r
+ Pipe_ClearIN();\r
+ Pipe_Freeze();\r
+ Pipe_SelectPipe(BLUETOOTH_DATA_OUT_PIPE);\r
+ Pipe_Unfreeze();\r
+ \r
+ ACLPacketHeader->DataLength = sizeof(*DataHeader) + sizeof(*SignalCommandHeader);\r
+ DataHeader->PayloadLength = sizeof(*SignalCommandHeader);\r
+ DataHeader->DestinationChannel = BLUETOOTH_CHANNEL_SIGNALING;\r
+ SignalCommandHeader->Code = BLUETOOTH_SIGNAL_ECHO_RESPONSE;\r
+ SignalCommandHeader->Length = 0;\r
+ \r
+ Pipe_Write_Stream_LE(ACLPacketHeader, sizeof(*ACLPacketHeader));\r
+ Pipe_Write_Stream_LE(DataHeader, sizeof(*DataHeader));\r
+ Pipe_Write_Stream_LE(SignalCommandHeader, sizeof(*SignalCommandHeader));\r
+ \r
+ Pipe_ClearOUT(); \r
+ Pipe_Freeze();\r
+ \r
+#if (ACL_DEBUG_LEVEL > 1)\r
+ BT_ACL_DEBUG("Packet Sent", NULL);\r
+ BT_ACL_DEBUG("-- Connection Handle: 0x%04X", (ACLPacketHeader->ConnectionHandle & 0x0FFF));\r
+ BT_ACL_DEBUG("-- Data Length: 0x%04X", ACLPacketHeader->DataLength);\r
+ BT_ACL_DEBUG("-- Destination Channel: 0x%04X", DataHeader->DestinationChannel);\r
+ BT_ACL_DEBUG("-- Payload Length: 0x%04X", DataHeader->PayloadLength); \r
+#endif\r
+ BT_ACL_DEBUG(">> L2CAP Echo Response", NULL);\r
+}\r