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:
|
case BT_SIGNAL_INFORMATION_REQUEST:
|
||||||
Bluetooth_Signal_InformationReq(&ACLPacketHeader, &DataHeader, &SignalCommandHeader);
|
Bluetooth_Signal_InformationReq(&ACLPacketHeader, &DataHeader, &SignalCommandHeader);
|
||||||
break;
|
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:
|
default:
|
||||||
BT_ACL_DEBUG(1, "<< Unknown Signaling Command 0x%02X", SignalCommandHeader.Code);
|
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.Code = BT_SIGNAL_CONNECTION_RESPONSE;
|
||||||
ResponsePacket.SignalCommandHeader.Identifier = SignalCommandHeader->Identifier;
|
ResponsePacket.SignalCommandHeader.Identifier = SignalCommandHeader->Identifier;
|
||||||
ResponsePacket.SignalCommandHeader.Length = sizeof(ResponsePacket.ConnectionResponse);
|
ResponsePacket.SignalCommandHeader.Length = sizeof(ResponsePacket.ConnectionResponse);
|
||||||
ResponsePacket.ConnectionResponse.Result = (ChannelData == NULL) ? BT_CONNECTION_REFUSED_RESOURCES : BT_CONNECTION_SUCCESSFUL;
|
ResponsePacket.ConnectionResponse.DestinationChannel = ChannelData->LocalNumber;
|
||||||
ResponsePacket.ConnectionResponse.DestinationChannel = ChannelData->RemoteNumber;
|
ResponsePacket.ConnectionResponse.SourceChannel = ChannelData->RemoteNumber;
|
||||||
ResponsePacket.ConnectionResponse.SourceChannel = ChannelData->LocalNumber;
|
ResponsePacket.ConnectionResponse.Result = (ChannelData == NULL) ? BT_CONNECTION_REFUSED_RESOURCES :
|
||||||
|
BT_CONNECTION_SUCCESSFUL;
|
||||||
ResponsePacket.ConnectionResponse.Status = 0x00;
|
ResponsePacket.ConnectionResponse.Status = 0x00;
|
||||||
|
|
||||||
Bluetooth_SendPacket(&ResponsePacket, sizeof(ResponsePacket), NULL);
|
Bluetooth_SendPacket(&ResponsePacket, sizeof(ResponsePacket), NULL);
|
||||||
|
|
|
@ -42,13 +42,14 @@
|
||||||
|
|
||||||
/* Macros: */
|
/* 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 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_CHANNELNUMBER_BASEOFFSET 0x0040
|
||||||
|
|
||||||
#define BT_CHANNEL_SIGNALING 0x0001
|
#define BT_CHANNEL_SIGNALING 0x0001
|
||||||
#define BT_CHANNEL_CONNECTIONLESS 0x0002
|
#define BT_CHANNEL_CONNECTIONLESS 0x0002
|
||||||
|
|
||||||
|
#define BT_SIGNAL_COMMAND_REJECT 0x01
|
||||||
#define BT_SIGNAL_CONNECTION_REQUEST 0x02
|
#define BT_SIGNAL_CONNECTION_REQUEST 0x02
|
||||||
#define BT_SIGNAL_CONNECTION_RESPONSE 0x03
|
#define BT_SIGNAL_CONNECTION_RESPONSE 0x03
|
||||||
#define BT_SIGNAL_CONFIGURATION_REQUEST 0x04
|
#define BT_SIGNAL_CONFIGURATION_REQUEST 0x04
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
#define BLUETOOTH_DATA_OUT_PIPE 2
|
#define BLUETOOTH_DATA_OUT_PIPE 2
|
||||||
#define BLUETOOTH_EVENTS_PIPE 3
|
#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_SERVICEDISCOVERY 0x0001
|
||||||
#define CHANNEL_PSM_UDP 0x0002
|
#define CHANNEL_PSM_UDP 0x0002
|
||||||
|
|
Loading…
Reference in New Issue