forked from mfulz_github/qmk_firmware
Add bluetooth channel connection callback to the incomplete BluetoothHost demo.
This commit is contained in:
parent
1f682ca2de
commit
55db57e1ed
|
@ -238,6 +238,20 @@ void Bluetooth_DisconnectionComplete(void)
|
|||
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
|
||||
* 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
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ChannelStatus = BT_CONNECTION_REFUSED_RESOURCES;
|
||||
|
||||
/* Reset the channel item contents only if a channel entry was found for it */
|
||||
if (ChannelData != NULL)
|
||||
{
|
||||
ChannelData->RemoteNumber = ConnectionRequest.SourceChannel;
|
||||
ChannelData->PSM = ConnectionRequest.PSM;
|
||||
ChannelData->LocalMTU = MAXIMUM_CHANNEL_MTU;
|
||||
ChannelData->State = Channel_Config_WaitConfig;
|
||||
/* Check if the user application will allow the connection based on its PSM */
|
||||
if (Bluetooth_ChannelConnectionRequest(ConnectionRequest.PSM))
|
||||
{
|
||||
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
|
||||
|
@ -405,8 +417,7 @@ static inline void Bluetooth_Signal_ConnectionReq(BT_Signal_Header_t* SignalComm
|
|||
/* Fill out the Connection Response in the response packet */
|
||||
ResponsePacket.ConnectionResponse.DestinationChannel = ChannelData->LocalNumber;
|
||||
ResponsePacket.ConnectionResponse.SourceChannel = ChannelData->RemoteNumber;
|
||||
ResponsePacket.ConnectionResponse.Result = (ChannelData == NULL) ? BT_CONNECTION_REFUSED_RESOURCES :
|
||||
BT_CONNECTION_SUCCESSFUL;
|
||||
ResponsePacket.ConnectionResponse.Result = ChannelStatus;
|
||||
ResponsePacket.ConnectionResponse.Status = 0x00;
|
||||
|
||||
Bluetooth_SendPacket(&ResponsePacket, sizeof(ResponsePacket), NULL);
|
||||
|
|
|
@ -70,6 +70,7 @@
|
|||
#define BT_INFORMATION_NOTSUPPORTED 0x0001
|
||||
|
||||
#define BT_CONNECTION_SUCCESSFUL 0x0000
|
||||
#define BT_CONNECTION_REFUSED_PSM 0x0002
|
||||
#define BT_CONNECTION_REFUSED_RESOURCES 0x0004
|
||||
|
||||
#define BT_CONFIGURATION_SUCCESSFUL 0x0000
|
||||
|
|
|
@ -127,6 +127,7 @@
|
|||
bool Bluetooth_ConnectionRequest(uint8_t* RemoteAddress);
|
||||
void Bluetooth_ConnectionComplete(void);
|
||||
void Bluetooth_DisconnectionComplete(void);
|
||||
bool Bluetooth_ChannelConnectionRequest(uint16_t PSM);
|
||||
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_OpenChannel(uint16_t PSM);
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue