Clean up the Service tables, add incomplete ProtocolDescriptorList attribute to the SDP service.
This commit is contained in:
		
							parent
							
								
									32ab52a298
								
							
						
					
					
						commit
						b98158bd50
					
				
					 2 changed files with 87 additions and 52 deletions
				
			
		| 
						 | 
				
			
			@ -34,7 +34,11 @@ const struct
 | 
			
		|||
{
 | 
			
		||||
	uint8_t  Header;
 | 
			
		||||
	uint32_t Data;
 | 
			
		||||
} PROGMEM SDP_Attribute_ServiceHandle = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), SWAPENDIAN_32(0x00010000)};
 | 
			
		||||
} PROGMEM SDP_Attribute_ServiceHandle =
 | 
			
		||||
	{
 | 
			
		||||
		(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),
 | 
			
		||||
		SWAPENDIAN_32(0x00010000),
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -43,12 +47,29 @@ const struct
 | 
			
		|||
	ItemUUID_t UUIDList[];
 | 
			
		||||
} PROGMEM SDP_Attribute_ServiceClassIDs =
 | 
			
		||||
	{
 | 
			
		||||
		.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
 | 
			
		||||
		.Size   = SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
 | 
			
		||||
		.UUIDList =
 | 
			
		||||
		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
 | 
			
		||||
		SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
 | 
			
		||||
		{
 | 
			
		||||
			{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}}}
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
{
 | 
			
		||||
	uint8_t        Header;
 | 
			
		||||
	uint16_t       Size;
 | 
			
		||||
	ItemProtocol_t ProtocolList[];
 | 
			
		||||
} PROGMEM SDP_Attribute_ProtocolDescriptor =
 | 
			
		||||
	{
 | 
			
		||||
		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
 | 
			
		||||
		SWAPENDIAN_16(sizeof(ItemProtocol_t) * 1),
 | 
			
		||||
		{
 | 
			
		||||
			{
 | 
			
		||||
				{.Header = (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), .UUID = {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}},}
 | 
			
		||||
				(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
				sizeof(UUID_t),
 | 
			
		||||
				{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00}}},
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
| 
						 | 
				
			
			@ -58,12 +79,11 @@ const struct
 | 
			
		|||
	Item16Bit_t VersionList[];
 | 
			
		||||
} PROGMEM SDP_Attribute_Version =
 | 
			
		||||
	{
 | 
			
		||||
		.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		.Size   = (sizeof(Item16Bit_t) * 1),
 | 
			
		||||
		.VersionList =
 | 
			
		||||
			{
 | 
			
		||||
				{.Header = (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), .Value = SWAPENDIAN_16(0x0100)}
 | 
			
		||||
			}
 | 
			
		||||
		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		(sizeof(Item16Bit_t) * 1),
 | 
			
		||||
		{
 | 
			
		||||
			{(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
| 
						 | 
				
			
			@ -73,9 +93,9 @@ const struct
 | 
			
		|||
	char    Text[];
 | 
			
		||||
} PROGMEM SDP_Attribute_ServiceName =
 | 
			
		||||
	{
 | 
			
		||||
		.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		.Size   = sizeof("SDP") - 1,
 | 
			
		||||
		.Text   = "SDP",
 | 
			
		||||
		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		(sizeof("SDP") - 1),
 | 
			
		||||
		"SDP",
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
| 
						 | 
				
			
			@ -85,19 +105,20 @@ const struct
 | 
			
		|||
	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",
 | 
			
		||||
		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		(sizeof("Service Discovery Protocol Server") - 1),
 | 
			
		||||
		"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_SERVICENAME,         .Data = &SDP_Attribute_ServiceName        },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,  .Data = &SDP_Attribute_ServiceDescription },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &SDP_Attribute_ServiceHandle      },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &SDP_Attribute_ServiceClassIDs    },
 | 
			
		||||
//		{.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &SDP_Attribute_ProtocolDescriptor },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_VERSION,                .Data = &SDP_Attribute_Version            },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &SDP_Attribute_ServiceName        },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &SDP_Attribute_ServiceDescription },
 | 
			
		||||
 | 
			
		||||
		SERVICE_ATTRIBUTE_TABLE_TERMINATOR
 | 
			
		||||
	};
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +127,11 @@ const struct
 | 
			
		|||
{
 | 
			
		||||
	uint8_t  Header;
 | 
			
		||||
	uint32_t Data;
 | 
			
		||||
} PROGMEM RFCOMM_Attribute_ServiceHandle = {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit), SWAPENDIAN_32(0x00010001)};
 | 
			
		||||
} PROGMEM RFCOMM_Attribute_ServiceHandle =
 | 
			
		||||
	{
 | 
			
		||||
		(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),
 | 
			
		||||
		SWAPENDIAN_32(0x00010001),
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -115,12 +140,11 @@ const struct
 | 
			
		|||
	ItemUUID_t UUIDList[];
 | 
			
		||||
} PROGMEM RFCOMM_Attribute_ServiceClassIDs =
 | 
			
		||||
	{
 | 
			
		||||
		.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
 | 
			
		||||
		.Size   = SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
 | 
			
		||||
		.UUIDList =
 | 
			
		||||
			{
 | 
			
		||||
				{.Header = (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), .UUID = {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}},}
 | 
			
		||||
			}
 | 
			
		||||
		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
 | 
			
		||||
		SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
 | 
			
		||||
		{
 | 
			
		||||
			{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}}}
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
| 
						 | 
				
			
			@ -130,12 +154,11 @@ const struct
 | 
			
		|||
	Item16Bit_t OffsetList[];
 | 
			
		||||
} PROGMEM RFCOMM_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)}
 | 
			
		||||
			}
 | 
			
		||||
		(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		(sizeof(Item16Bit_t) * 1),
 | 
			
		||||
		{
 | 
			
		||||
			{(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
| 
						 | 
				
			
			@ -145,9 +168,9 @@ const struct
 | 
			
		|||
	char    Text[];
 | 
			
		||||
} PROGMEM RFCOMM_Attribute_ServiceName =
 | 
			
		||||
	{
 | 
			
		||||
		.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		.Size   = sizeof("Serial Port") - 1,
 | 
			
		||||
		.Text   = "Serial Port",
 | 
			
		||||
		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		sizeof("Serial Port") - 1,
 | 
			
		||||
		"Serial Port",
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const struct
 | 
			
		||||
| 
						 | 
				
			
			@ -157,17 +180,17 @@ const struct
 | 
			
		|||
	char    Text[];
 | 
			
		||||
} PROGMEM RFCOMM_Attribute_ServiceDescription =
 | 
			
		||||
	{
 | 
			
		||||
		.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		.Size   = sizeof("Wireless Serial Port Service") - 1,
 | 
			
		||||
		.Text   = "Wireless Serial Port Service",
 | 
			
		||||
		(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
 | 
			
		||||
		sizeof("Wireless Serial Port Service") - 1,
 | 
			
		||||
		"Wireless Serial Port Service",
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM =
 | 
			
		||||
	{
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &RFCOMM_Attribute_ServiceHandle      },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,     .Data = &RFCOMM_Attribute_ServiceClassIDs    },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,         .Data = &RFCOMM_Attribute_ServiceName        },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,  .Data = &RFCOMM_Attribute_ServiceDescription },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &RFCOMM_Attribute_ServiceHandle      },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &RFCOMM_Attribute_ServiceClassIDs    },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &RFCOMM_Attribute_ServiceName        },
 | 
			
		||||
		{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &RFCOMM_Attribute_ServiceDescription },
 | 
			
		||||
 | 
			
		||||
		SERVICE_ATTRIBUTE_TABLE_TERMINATOR
 | 
			
		||||
	};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,7 @@
 | 
			
		|||
		
 | 
			
		||||
		#define SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE    0x0000
 | 
			
		||||
		#define SDP_ATTRIBUTE_ID_SERVICECLASSIDS        0x0001
 | 
			
		||||
		#define SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST 0x0004
 | 
			
		||||
		#define SDP_ATTRIBUTE_ID_VERSION                0x0200
 | 
			
		||||
		#define SDP_ATTRIBUTE_ID_SERVICENAME            0x0100
 | 
			
		||||
		#define SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION     0x0101
 | 
			
		||||
| 
						 | 
				
			
			@ -87,13 +88,6 @@
 | 
			
		|||
			const void* AttributeTable; /**< Pointer to the UUID's attribute table, located in PROGMEM memory space */
 | 
			
		||||
		} ServiceTable_t;
 | 
			
		||||
 | 
			
		||||
		/** Structure for a list of Data Elements containing UUIDs, for service attributes requiring UUID lists. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
		{
 | 
			
		||||
			uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit) */
 | 
			
		||||
			UUID_t  UUID; /**< UUID to store in the list Data Element */
 | 
			
		||||
		} ItemUUID_t;
 | 
			
		||||
 | 
			
		||||
		/** Structure for a list of Data Elements containing 8-bit integers, for service attributes requiring such lists. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -115,6 +109,24 @@
 | 
			
		|||
			uint32_t Value; /**< Value to store in the list Data Element */
 | 
			
		||||
		} Item32Bit_t;
 | 
			
		||||
 | 
			
		||||
		/** Structure for a list of Data Elements containing UUIDs, for service attributes requiring UUID lists. */
 | 
			
		||||
		typedef struct
 | 
			
		||||
		{
 | 
			
		||||
			uint8_t Header; /**< Data Element header, should be (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit) */
 | 
			
		||||
			UUID_t  UUID; /**< UUID to store in the list Data Element */
 | 
			
		||||
		} ItemUUID_t;
 | 
			
		||||
		
 | 
			
		||||
		/** Structure for a list of Data Elements Sequences containing UUID Data Elements, for service attributes requiring
 | 
			
		||||
		 *  protocol lists.
 | 
			
		||||
		 */
 | 
			
		||||
		typedef struct
 | 
			
		||||
		{
 | 
			
		||||
			uint8_t     Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */
 | 
			
		||||
			uint8_t     Size; /**< Size of the inner Data Element sequence */
 | 
			
		||||
			
 | 
			
		||||
			ItemUUID_t  UUID; /**< UUID to store in the protocol list Data Element sequence */
 | 
			
		||||
		} ItemProtocol_t;
 | 
			
		||||
		
 | 
			
		||||
	/* External Variables: */
 | 
			
		||||
		extern const ServiceAttributeTable_t SDP_Attribute_Table[];
 | 
			
		||||
		extern const ServiceAttributeTable_t RFCOMM_Attribute_Table[];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue