forked from mfulz_github/qmk_firmware
		
	Short UUIDs are measured in bytes, not bits -- update Service Discovery Protocol code so that it can now correctly match against UUIDs in the service table.
This commit is contained in:
		
							parent
							
								
									141d94fa98
								
							
						
					
					
						commit
						3e515cdfa8
					
				@ -55,6 +55,8 @@
 | 
				
			|||||||
		/** Bluetooth specification defined channel number for connectionless data */
 | 
							/** Bluetooth specification defined channel number for connectionless data */
 | 
				
			||||||
		#define BT_CHANNEL_CONNECTIONLESS         0x0002
 | 
							#define BT_CHANNEL_CONNECTIONLESS         0x0002
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							#define BT_ACL_FIRST_AUTOFLUSH            (1 << 13)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#define BT_SIGNAL_COMMAND_REJECT          0x01
 | 
							#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
 | 
				
			||||||
@ -83,8 +85,6 @@
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		#define BT_CONFIG_OPTION_MTU              1
 | 
							#define BT_CONFIG_OPTION_MTU              1
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
		#define BT_ACL_FIRST_AUTOFLUSH            (1 << 13)
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
	/* Type Defines: */
 | 
						/* Type Defines: */
 | 
				
			||||||
		/** Bluetooth ACL header structure, common to all ACL data packets. */
 | 
							/** Bluetooth ACL header structure, common to all ACL data packets. */
 | 
				
			||||||
		typedef struct
 | 
							typedef struct
 | 
				
			||||||
 | 
				
			|||||||
@ -76,10 +76,17 @@ const ServiceTable_t SDP_Services_Table[] =
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Base UUID value common to all standardized Bluetooth services */
 | 
					/** Base UUID value common to all standardized Bluetooth services */
 | 
				
			||||||
const uint8_t BaseUUID[] = {BASE_96BIT_UUID, 0x00, 0x00, 0x00, 0x00};
 | 
					const uint8_t BaseUUID[] = {BASE_96BIT_UUID, 0x00, 0x00, 0x00, 0x00};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** Main Service Discovery Protocol packet processing routine. This function processes incomming SDP packets from
 | 
				
			||||||
 | 
					 *  a connected Bluetooth device, and sends back appropriate responses to allow other devices to determine the
 | 
				
			||||||
 | 
					 *  services the local device exposes.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  \param[in]  Data     Incomming packet data containing the SDP request
 | 
				
			||||||
 | 
					 *  \param[in]  Channel  Channel the request was issued to by the remote device
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
void ServiceDiscovery_ProcessPacket(void* Data, Bluetooth_Channel_t* Channel)
 | 
					void ServiceDiscovery_ProcessPacket(void* Data, Bluetooth_Channel_t* Channel)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDP_PDUHeader_t* SDPHeader = (SDP_PDUHeader_t*)Data;
 | 
						SDP_PDUHeader_t* SDPHeader = (SDP_PDUHeader_t*)Data;
 | 
				
			||||||
@ -209,7 +216,7 @@ static uint8_t ServiceDiscovery_GetUUIDList(uint8_t UUIDList[][UUID_SIZE_BYTES],
 | 
				
			|||||||
		uint8_t  UUIDLength  = ServiceDiscovery_GetDataElementSize(CurrentParameter, &ElementHeaderSize);
 | 
							uint8_t  UUIDLength  = ServiceDiscovery_GetDataElementSize(CurrentParameter, &ElementHeaderSize);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		memcpy(CurrentUUID, BaseUUID, sizeof(BaseUUID));
 | 
							memcpy(CurrentUUID, BaseUUID, sizeof(BaseUUID));
 | 
				
			||||||
		memcpy(&CurrentUUID[(UUIDLength <= 32) ? (sizeof(BaseUUID) - 32) : 0], *CurrentParameter, UUIDLength);
 | 
							memcpy(&CurrentUUID[(UUIDLength <= 4) ? (UUID_SIZE_BYTES - 4) : 0], *CurrentParameter, UUIDLength);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		BT_SDP_DEBUG(2, "-- UUID (%d): 0x%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
 | 
							BT_SDP_DEBUG(2, "-- UUID (%d): 0x%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
 | 
				
			||||||
		                UUIDLength,
 | 
							                UUIDLength,
 | 
				
			||||||
 | 
				
			|||||||
@ -59,7 +59,10 @@
 | 
				
			|||||||
		#define SDP_ATTRIBUTE_PROVIDER                  0x0002
 | 
							#define SDP_ATTRIBUTE_PROVIDER                  0x0002
 | 
				
			||||||
		#define SDP_ATTRIBUTE_AVAILABILITY              0x0008
 | 
							#define SDP_ATTRIBUTE_AVAILABILITY              0x0008
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							/** Size of a full 128 bit UUID, in bytes */
 | 
				
			||||||
		#define UUID_SIZE_BYTES                         16
 | 
							#define UUID_SIZE_BYTES                         16
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/** First 96 bits common to all standadized Bluetooth services */
 | 
				
			||||||
		#define BASE_96BIT_UUID                         0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00
 | 
							#define BASE_96BIT_UUID                         0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		/** Defines a service attribute as a string of characters.
 | 
							/** Defines a service attribute as a string of characters.
 | 
				
			||||||
 | 
				
			|||||||
@ -115,7 +115,7 @@
 | 
				
			|||||||
 *  <b><sup>2</sup></b> <i>See AUX line related tokens in the \ref SSec_Options section</i>
 | 
					 *  <b><sup>2</sup></b> <i>See AUX line related tokens in the \ref SSec_Options section</i>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *  \section Sec_PDI PDI Connections
 | 
					 *  \section Sec_PDI PDI Connections
 | 
				
			||||||
 *  Connections to the device for PDI programming<b><sup>1</sup></b> (when enabled):
 | 
					 *  Connections to the device for PDI programming (when enabled):
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *  <table>
 | 
					 *  <table>
 | 
				
			||||||
 *   <tr>
 | 
					 *   <tr>
 | 
				
			||||||
@ -159,7 +159,7 @@
 | 
				
			|||||||
 *  <b><sup>2</sup></b> <i>The AVR's Tx and Rx become the DATA line when connected together via a pair of 220 ohm resistors</i> \n
 | 
					 *  <b><sup>2</sup></b> <i>The AVR's Tx and Rx become the DATA line when connected together via a pair of 220 ohm resistors</i> \n
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *  \section Sec_TPI TPI Connections
 | 
					 *  \section Sec_TPI TPI Connections
 | 
				
			||||||
 *  Connections to the device for TPI programming<b><sup>1</sup></b> (when enabled):
 | 
					 *  Connections to the device for TPI programming (when enabled):
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *  <table>
 | 
					 *  <table>
 | 
				
			||||||
 *   <tr>
 | 
					 *   <tr>
 | 
				
			||||||
@ -241,7 +241,8 @@
 | 
				
			|||||||
 *   <tr>
 | 
					 *   <tr>
 | 
				
			||||||
 *    <td>VTARGET_ADC_CHANNEL</td>
 | 
					 *    <td>VTARGET_ADC_CHANNEL</td>
 | 
				
			||||||
 *    <td>Makefile CDEFS</td>
 | 
					 *    <td>Makefile CDEFS</td>
 | 
				
			||||||
 *    <td>ADC channel number (on supported AVRs) to use for VTARGET level detection, if NO_VTARGET_DETECT is not defined.</td> 
 | 
					 *    <td>ADC channel number (on supported AVRs) to use for VTARGET level detection, if NO_VTARGET_DETECT is not defined.
 | 
				
			||||||
 | 
					 *        <i>Ignored when compiled for targets lacking an ADC.</i></td> 
 | 
				
			||||||
 *   </tr>
 | 
					 *   </tr>
 | 
				
			||||||
 *   <tr>
 | 
					 *   <tr>
 | 
				
			||||||
 *    <td>ENABLE_ISP_PROTOCOL</td>
 | 
					 *    <td>ENABLE_ISP_PROTOCOL</td>
 | 
				
			||||||
@ -257,7 +258,8 @@
 | 
				
			|||||||
 *    <td>NO_VTARGET_DETECT</td>
 | 
					 *    <td>NO_VTARGET_DETECT</td>
 | 
				
			||||||
 *    <td>Makefile CDEFS</td>
 | 
					 *    <td>Makefile CDEFS</td>
 | 
				
			||||||
 *    <td>Define to disable VTARGET sampling and reporting on AVR models with an ADC converter. This will cause the programmer
 | 
					 *    <td>Define to disable VTARGET sampling and reporting on AVR models with an ADC converter. This will cause the programmer
 | 
				
			||||||
 *        to report a fixed 5V target voltage to the host regardless of the real target voltage.</td>  
 | 
					 *        to report a fixed 5V target voltage to the host regardless of the real target voltage. <i>Ignored when compiled for
 | 
				
			||||||
 | 
					 *        targets lacking an ADC.</i></td>  
 | 
				
			||||||
 *   </tr>
 | 
					 *   </tr>
 | 
				
			||||||
 *   <tr>
 | 
					 *   <tr>
 | 
				
			||||||
 *    <td>LIBUSB_DRIVER_COMPAT</td>
 | 
					 *    <td>LIBUSB_DRIVER_COMPAT</td>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user