From b98158bd50e95c65e20989d048ab42cc6de799c2 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 1 Jun 2010 14:05:47 +0000 Subject: [PATCH] Clean up the Service tables, add incomplete ProtocolDescriptorList attribute to the SDP service. --- .../BluetoothHost/Lib/SDPServices.c | 113 +++++++++++------- .../BluetoothHost/Lib/SDPServices.h | 26 ++-- 2 files changed, 87 insertions(+), 52 deletions(-) diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c index 0ad8c013e9..28b9d77746 100644 --- a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c +++ b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c @@ -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 }; diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h index 5ca010c525..61fd593904 100644 --- a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h +++ b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h @@ -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[];