Commit 55db57e1 authored by Dean Camera's avatar Dean Camera
Browse files

Add bluetooth channel connection callback to the incomplete BluetoothHost demo.

parent 1f682ca2
...@@ -238,6 +238,20 @@ void Bluetooth_DisconnectionComplete(void) ...@@ -238,6 +238,20 @@ void Bluetooth_DisconnectionComplete(void)
Bluetooth_Connection.RemoteAddress[1], Bluetooth_Connection.RemoteAddress[0]); Bluetooth_Connection.RemoteAddress[1], Bluetooth_Connection.RemoteAddress[0]);
} }
/** Bluetooth stack callback event for a Bluetooth ACL Channel connection request. When is callback fires,
* the user application must indicate if the channel connection should be rejected or not, based on the
* protocol (PSM) value of the requested channel.
*
* \param PSM Protocol PSM value for the requested channel
*
* \return Boolean true to accept the channel connection request, false to reject it
*/
bool Bluetooth_ChannelConnectionRequest(uint16_t PSM)
{
/* Always accept channel connection requests regardless of PSM */
return true;
}
/** Bluetooth stack callback event for a non-signal ACL packet reception. This callback fires once a connection /** Bluetooth stack callback event for a non-signal ACL packet reception. This callback fires once a connection
* to a remote Bluetooth device has been made, and the remote device has sent a non-signalling ACL packet. * to a remote Bluetooth device has been made, and the remote device has sent a non-signalling ACL packet.
* *
......
...@@ -381,14 +381,26 @@ static inline void Bluetooth_Signal_ConnectionReq(BT_Signal_Header_t* SignalComm ...@@ -381,14 +381,26 @@ static inline void Bluetooth_Signal_ConnectionReq(BT_Signal_Header_t* SignalComm
} }
} }
} }
uint8_t ChannelStatus = BT_CONNECTION_REFUSED_RESOURCES;
/* Reset the channel item contents only if a channel entry was found for it */ /* Reset the channel item contents only if a channel entry was found for it */
if (ChannelData != NULL) if (ChannelData != NULL)
{ {
ChannelData->RemoteNumber = ConnectionRequest.SourceChannel; /* Check if the user application will allow the connection based on its PSM */
ChannelData->PSM = ConnectionRequest.PSM; if (Bluetooth_ChannelConnectionRequest(ConnectionRequest.PSM))
ChannelData->LocalMTU = MAXIMUM_CHANNEL_MTU; {
ChannelData->State = Channel_Config_WaitConfig; ChannelData->RemoteNumber = ConnectionRequest.SourceChannel;
ChannelData->PSM = ConnectionRequest.PSM;
ChannelData->LocalMTU = MAXIMUM_CHANNEL_MTU;
ChannelData->State = Channel_Config_WaitConfig;
ChannelStatus = BT_CONNECTION_SUCCESSFUL;
}
else
{
ChannelStatus = BT_CONNECTION_REFUSED_PSM;
}
} }
struct struct
...@@ -405,8 +417,7 @@ static inline void Bluetooth_Signal_ConnectionReq(BT_Signal_Header_t* SignalComm ...@@ -405,8 +417,7 @@ static inline void Bluetooth_Signal_ConnectionReq(BT_Signal_Header_t* SignalComm
/* Fill out the Connection Response in the response packet */ /* Fill out the Connection Response in the response packet */
ResponsePacket.ConnectionResponse.DestinationChannel = ChannelData->LocalNumber; ResponsePacket.ConnectionResponse.DestinationChannel = ChannelData->LocalNumber;
ResponsePacket.ConnectionResponse.SourceChannel = ChannelData->RemoteNumber; ResponsePacket.ConnectionResponse.SourceChannel = ChannelData->RemoteNumber;
ResponsePacket.ConnectionResponse.Result = (ChannelData == NULL) ? BT_CONNECTION_REFUSED_RESOURCES : ResponsePacket.ConnectionResponse.Result = ChannelStatus;
BT_CONNECTION_SUCCESSFUL;
ResponsePacket.ConnectionResponse.Status = 0x00; ResponsePacket.ConnectionResponse.Status = 0x00;
Bluetooth_SendPacket(&ResponsePacket, sizeof(ResponsePacket), NULL); Bluetooth_SendPacket(&ResponsePacket, sizeof(ResponsePacket), NULL);
......
...@@ -70,6 +70,7 @@ ...@@ -70,6 +70,7 @@
#define BT_INFORMATION_NOTSUPPORTED 0x0001 #define BT_INFORMATION_NOTSUPPORTED 0x0001
#define BT_CONNECTION_SUCCESSFUL 0x0000 #define BT_CONNECTION_SUCCESSFUL 0x0000
#define BT_CONNECTION_REFUSED_PSM 0x0002
#define BT_CONNECTION_REFUSED_RESOURCES 0x0004 #define BT_CONNECTION_REFUSED_RESOURCES 0x0004
#define BT_CONFIGURATION_SUCCESSFUL 0x0000 #define BT_CONFIGURATION_SUCCESSFUL 0x0000
......
...@@ -127,6 +127,7 @@ ...@@ -127,6 +127,7 @@
bool Bluetooth_ConnectionRequest(uint8_t* RemoteAddress); bool Bluetooth_ConnectionRequest(uint8_t* RemoteAddress);
void Bluetooth_ConnectionComplete(void); void Bluetooth_ConnectionComplete(void);
void Bluetooth_DisconnectionComplete(void); void Bluetooth_DisconnectionComplete(void);
bool Bluetooth_ChannelConnectionRequest(uint16_t PSM);
void Bluetooth_PacketReceived(void* Data, uint16_t DataLen, Bluetooth_Channel_t* Channel); void Bluetooth_PacketReceived(void* Data, uint16_t DataLen, Bluetooth_Channel_t* Channel);
Bluetooth_Channel_t* Bluetooth_GetChannelData(uint16_t ChannelNumber, bool SearchByRemoteChannel); Bluetooth_Channel_t* Bluetooth_GetChannelData(uint16_t ChannelNumber, bool SearchByRemoteChannel);
Bluetooth_Channel_t* Bluetooth_OpenChannel(uint16_t PSM); Bluetooth_Channel_t* Bluetooth_OpenChannel(uint16_t PSM);
......
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment