const struct\r
{\r
uint8_t Header;\r
- uint16_t Size;\r
+ uint8_t Size;\r
ItemUUID_t UUIDList[];\r
} PROGMEM SerialPort_Attribute_ServiceClassIDs =\r
{\r
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
- SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),\r
+ (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+ (sizeof(ItemUUID_t) * 1),\r
{\r
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID}\r
- }\r
+ {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID},\r
+ },\r
};\r
\r
const struct\r
{\r
- uint8_t Header;\r
- uint16_t Size;\r
+ uint8_t Header;\r
+ uint8_t Size;\r
\r
- ItemProtocol_t ProtocolList[];\r
+ ItemProtocol_t L2CAP;\r
+ ItemProtocolPSM_t RFCOMM;\r
} PROGMEM SerialPort_Attribute_ProtocolDescriptor =\r
{\r
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
- SWAPENDIAN_16(sizeof(ItemProtocol_t) * 2),\r
+ (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+ (sizeof(ItemProtocol_t) + sizeof(ItemProtocolPSM_t)),\r
{\r
+ (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+ sizeof(ItemUUID_t),\r
{\r
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
- sizeof(ItemUUID_t),\r
- {\r
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},\r
- }\r
+ {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},\r
},\r
+ },\r
+ {\r
+ (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+ (sizeof(ItemUUID_t) + sizeof(Item16Bit_t)),\r
{\r
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
- sizeof(ItemUUID_t),\r
- {\r
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
- }\r
+ {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(CHANNEL_PSM_RFCOMM)},\r
},\r
- }\r
+ },\r
};\r
\r
const struct\r
{\r
uint8_t Header;\r
- uint16_t Size;\r
+ uint8_t Size;\r
ItemUUID_t UUIDList[];\r
} PROGMEM SerialPort_Attribute_BrowseGroupList =\r
{\r
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
- SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),\r
+ (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+ (sizeof(ItemUUID_t) * 1),\r
{\r
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), PUBLICBROWSEGROUP_CLASS_UUID}\r
- }\r
+ {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), PUBLICBROWSEGROUP_CLASS_UUID},\r
+ },\r
};\r
\r
const struct\r
ItemLangEncoding_t LanguageEncodings[];\r
} PROGMEM SerialPort_Attribute_LanguageBaseIDOffset =\r
{\r
- .Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
- .Size = (sizeof(ItemLangEncoding_t) * 1),\r
- .LanguageEncodings =\r
+ (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+ (sizeof(ItemLangEncoding_t) * 1),\r
+ {\r
{\r
- {\r
- {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x454E)},\r
- {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x006A)},\r
- {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)},\r
- }\r
- }\r
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x454E)},\r
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x006A)},\r
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)},\r
+ },\r
+ },\r
};\r
\r
const struct\r
*/\r
typedef struct\r
{\r
- uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
- uint8_t Size; /**< Size of the inner Data Element sequence */\r
+ uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
+ uint8_t Size; /**< Size of the inner Data Element sequence */\r
\r
struct\r
{\r
ItemUUID_t UUID; /**< UUID to store in the protocol list Data Element sequence */\r
} Protocol;\r
} ItemProtocol_t;\r
+\r
+ /** Structure for a list of Data Elements Sequences containing UUID Data Elements and 16-bit PSM values, for service\r
+ * attributes requiring extended protocol lists.\r
+ */\r
+ typedef struct\r
+ {\r
+ uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
+ uint8_t Size; /**< Size of the inner Data Element sequence */\r
+ \r
+ struct\r
+ {\r
+ ItemUUID_t UUID; /**< UUID to store in the protocol list Data Element sequence */\r
+ Item16Bit_t PSM; /**< PSM that is to be used to access the service on created channels */\r
+ } Protocol;\r
+ } ItemProtocolPSM_t;\r
\r
/** Structure for a list of Data Elements containing language encodings, including the language ID, Encoding ID and\r
* Attribute base offset.\r
/* Look for matches in the UUID list against the current attribute UUID value */
for (uint8_t i = 0; i < TotalUUIDs; i++)
{
- uint8_t CurrentUUID[16];
- memcpy_P(CurrentUUID, (CurrAttribute + 1), 16);
-
- BT_SDP_DEBUG(2, "-- TEST UUID: %02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
- CurrentUUID[0], CurrentUUID[1], CurrentUUID[2], CurrentUUID[3],
- CurrentUUID[4], CurrentUUID[5],
- CurrentUUID[6], CurrentUUID[7],
- CurrentUUID[8], CurrentUUID[9],
- CurrentUUID[10], CurrentUUID[11], CurrentUUID[12], CurrentUUID[13], CurrentUUID[14], CurrentUUID[15]);
-
+ /* Check if the current unmatched UUID is identical to the search UUID */
if (!(UUIDMatch[i]) && !(memcmp_P(UUIDList[i], (CurrAttribute + 1), UUID_SIZE_BYTES)))
{
/* Indicate match found for the current attribute UUID and early-abort */
void SDP_ProcessPacket(void* Data, Bluetooth_Channel_t* const Channel);
#if defined(INCLUDE_FROM_SERVICEDISCOVERYPROTOCOL_C)
- static void SDP_ProcessServiceSearch(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
- static void SDP_ProcessServiceAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
- static void SDP_ProcessServiceSearchAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
+ static void SDP_ProcessServiceSearch(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
+ static void SDP_ProcessServiceAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
+ static void SDP_ProcessServiceSearchAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
static uint16_t SDP_AddListedAttributesToResponse(const ServiceAttributeTable_t* AttributeTable, uint16_t AttributeList[][2],
const uint8_t TotalAttributes, void** const BufferPos);