+ uint8_t Size;
+ Item16Bit_t OffsetList[];
+} PROGMEM SDP_Attribute_LangOffset =
+ {
+ .Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
+ .Size = (sizeof(Item16Bit_t) * 1),
+ .OffsetList =
+ {
+ {.Header = (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), .Value = SWAPENDIAN_16(0x0100)}
+ }
+ };
+
+const struct
+{
+ uint8_t Header;
+ uint8_t Size;
+ char Text[];
+} PROGMEM SDP_Attribute_ServiceName =
+ {
+ .Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
+ .Size = sizeof("SDP") - 1,
+ .Text = "SDP",
+ };
+
+const struct
+{
+ uint8_t Header;
+ uint8_t Size;
+ char Text[];
+} PROGMEM SDP_Attribute_ServiceDescription =
+ {
+ .Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
+ .Size = sizeof("Service Discovery Protocol Server") - 1,
+ .Text = "Service Discovery Protocol Server",
+ };
+
+/** Service Discovery Protocol attribute table, listing all supported attributes of the service. */
+const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM =
+ {
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle },
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &SDP_Attribute_ServiceClassIDs },
+ {.AttributeID = SDP_ATTRIBUTE_ID_VERSION, .Data = &SDP_Attribute_Version },
+ {.AttributeID = SDP_ATTRIBUTE_ID_LANGIDOFFSET, .Data = &SDP_Attribute_LangOffset },
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &SDP_Attribute_ServiceName },
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &SDP_Attribute_ServiceDescription },
+
+ SERVICE_ATTRIBUTE_TABLE_TERMINATOR
+ };
+
+const struct
+{
+ uint8_t Header;
+ uint32_t Data;
+} PROGMEM RFCOMM_Attribute_ServiceHandle = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), SWAPENDIAN_32(0x00010001)};
+
+const struct
+{
+ uint8_t Header;