forked from mfulz_github/qmk_firmware
Fix Bluetooth stack CONNECTION RESPONSE packets - for this command and this command only, the source/destination roles are switched. Reverse the Local/Remote channel ordering so that Windows mobile and other stacks which depend on valid channel values to connect.
This commit is contained in:
parent
6cfa3b7db8
commit
8b0ec6c5ca
|
@ -141,6 +141,17 @@ static void Bluetooth_ProcessACLPackets(void)
|
|||
case BT_SIGNAL_INFORMATION_REQUEST:
|
||||
Bluetooth_Signal_InformationReq(&ACLPacketHeader, &DataHeader, &SignalCommandHeader);
|
||||
break;
|
||||
case BT_SIGNAL_COMMAND_REJECT:
|
||||
BT_ACL_DEBUG(1, "<< Command Reject", NULL);
|
||||
|
||||
uint16_t RejectReason;
|
||||
Pipe_Read_Stream_LE(&RejectReason, sizeof(RejectReason));
|
||||
Pipe_Discard_Stream(ACLPacketHeader.DataLength - sizeof(RejectReason));
|
||||
Pipe_ClearIN();
|
||||
Pipe_Freeze();
|
||||
|
||||
BT_ACL_DEBUG(2, "-- Reason: %d", RejectReason);
|
||||
break;
|
||||
default:
|
||||
BT_ACL_DEBUG(1, "<< Unknown Signaling Command 0x%02X", SignalCommandHeader.Code);
|
||||
|
||||
|
@ -315,9 +326,10 @@ static inline void Bluetooth_Signal_ConnectionReq(BT_ACL_Header_t* ACLPac
|
|||
ResponsePacket.SignalCommandHeader.Code = BT_SIGNAL_CONNECTION_RESPONSE;
|
||||
ResponsePacket.SignalCommandHeader.Identifier = SignalCommandHeader->Identifier;
|
||||
ResponsePacket.SignalCommandHeader.Length = sizeof(ResponsePacket.ConnectionResponse);
|
||||
ResponsePacket.ConnectionResponse.Result = (ChannelData == NULL) ? BT_CONNECTION_REFUSED_RESOURCES : BT_CONNECTION_SUCCESSFUL;
|
||||
ResponsePacket.ConnectionResponse.DestinationChannel = ChannelData->RemoteNumber;
|
||||
ResponsePacket.ConnectionResponse.SourceChannel = ChannelData->LocalNumber;
|
||||
ResponsePacket.ConnectionResponse.DestinationChannel = ChannelData->LocalNumber;
|
||||
ResponsePacket.ConnectionResponse.SourceChannel = ChannelData->RemoteNumber;
|
||||
ResponsePacket.ConnectionResponse.Result = (ChannelData == NULL) ? BT_CONNECTION_REFUSED_RESOURCES :
|
||||
BT_CONNECTION_SUCCESSFUL;
|
||||
ResponsePacket.ConnectionResponse.Status = 0x00;
|
||||
|
||||
Bluetooth_SendPacket(&ResponsePacket, sizeof(ResponsePacket), NULL);
|
||||
|
|
|
@ -42,13 +42,14 @@
|
|||
|
||||
/* Macros: */
|
||||
#define BT_ACL_DEBUG(l, s, ...) do { if (ACL_DEBUG_LEVEL >= l) printf_P(PSTR("(ACL) " s "\r\n"), __VA_ARGS__); } while (0)
|
||||
#define ACL_DEBUG_LEVEL 1
|
||||
#define ACL_DEBUG_LEVEL 2
|
||||
|
||||
#define BT_CHANNELNUMBER_BASEOFFSET 0x0040
|
||||
|
||||
#define BT_CHANNEL_SIGNALING 0x0001
|
||||
#define BT_CHANNEL_CONNECTIONLESS 0x0002
|
||||
|
||||
#define BT_SIGNAL_COMMAND_REJECT 0x01
|
||||
#define BT_SIGNAL_CONNECTION_REQUEST 0x02
|
||||
#define BT_SIGNAL_CONNECTION_RESPONSE 0x03
|
||||
#define BT_SIGNAL_CONFIGURATION_REQUEST 0x04
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
#define BLUETOOTH_DATA_OUT_PIPE 2
|
||||
#define BLUETOOTH_EVENTS_PIPE 3
|
||||
|
||||
#define BLUETOOTH_MAX_OPEN_CHANNELS 2
|
||||
#define BLUETOOTH_MAX_OPEN_CHANNELS 6
|
||||
|
||||
#define CHANNEL_PSM_SERVICEDISCOVERY 0x0001
|
||||
#define CHANNEL_PSM_UDP 0x0002
|
||||
|
|
Loading…
Reference in New Issue