Clean up the Service tables, add incomplete ProtocolDescriptorList attribute to the SDP service.

pull/1469/head
Dean Camera 15 years ago
parent 32ab52a298
commit b98158bd50

@ -34,7 +34,11 @@ const struct
{ {
uint8_t Header; uint8_t Header;
uint32_t Data; 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 const struct
{ {
@ -43,11 +47,28 @@ const struct
ItemUUID_t UUIDList[]; ItemUUID_t UUIDList[];
} PROGMEM SDP_Attribute_ServiceClassIDs = } PROGMEM SDP_Attribute_ServiceClassIDs =
{ {
.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit), (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
.Size = SWAPENDIAN_16(sizeof(ItemUUID_t) * 1), SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
.UUIDList =
{ {
{.Header = (SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), .UUID = {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x10, 0x00}},} {(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),
{
{
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
sizeof(UUID_t),
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00}}},
}
} }
}; };
@ -58,11 +79,10 @@ const struct
Item16Bit_t VersionList[]; Item16Bit_t VersionList[];
} PROGMEM SDP_Attribute_Version = } PROGMEM SDP_Attribute_Version =
{ {
.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
.Size = (sizeof(Item16Bit_t) * 1), (sizeof(Item16Bit_t) * 1),
.VersionList =
{ {
{.Header = (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), .Value = SWAPENDIAN_16(0x0100)} {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
} }
}; };
@ -73,9 +93,9 @@ const struct
char Text[]; char Text[];
} PROGMEM SDP_Attribute_ServiceName = } PROGMEM SDP_Attribute_ServiceName =
{ {
.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
.Size = sizeof("SDP") - 1, (sizeof("SDP") - 1),
.Text = "SDP", "SDP",
}; };
const struct const struct
@ -85,9 +105,9 @@ const struct
char Text[]; char Text[];
} PROGMEM SDP_Attribute_ServiceDescription = } PROGMEM SDP_Attribute_ServiceDescription =
{ {
.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
.Size = sizeof("Service Discovery Protocol Server") - 1, (sizeof("Service Discovery Protocol Server") - 1),
.Text = "Service Discovery Protocol Server", "Service Discovery Protocol Server",
}; };
/** Service Discovery Protocol attribute table, listing all supported attributes of the service. */ /** Service Discovery Protocol attribute table, listing all supported attributes of the service. */
@ -95,6 +115,7 @@ const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM =
{ {
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle }, {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &SDP_Attribute_ServiceHandle },
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &SDP_Attribute_ServiceClassIDs }, {.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_VERSION, .Data = &SDP_Attribute_Version },
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &SDP_Attribute_ServiceName }, {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &SDP_Attribute_ServiceName },
{.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &SDP_Attribute_ServiceDescription }, {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &SDP_Attribute_ServiceDescription },
@ -106,7 +127,11 @@ const struct
{ {
uint8_t Header; uint8_t Header;
uint32_t Data; 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 const struct
{ {
@ -115,11 +140,10 @@ const struct
ItemUUID_t UUIDList[]; ItemUUID_t UUIDList[];
} PROGMEM RFCOMM_Attribute_ServiceClassIDs = } PROGMEM RFCOMM_Attribute_ServiceClassIDs =
{ {
.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit), (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
.Size = SWAPENDIAN_16(sizeof(ItemUUID_t) * 1), 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_UUID | SDP_DATASIZE_128Bit), {BASE_80BIT_UUID, {0x00, 0x00, 0x00, 0x00, 0x11, 0x01}}}
} }
}; };
@ -130,11 +154,10 @@ const struct
Item16Bit_t OffsetList[]; Item16Bit_t OffsetList[];
} PROGMEM RFCOMM_Attribute_LangOffset = } PROGMEM RFCOMM_Attribute_LangOffset =
{ {
.Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit), (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
.Size = (sizeof(Item16Bit_t) * 1), (sizeof(Item16Bit_t) * 1),
.OffsetList =
{ {
{.Header = (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), .Value = SWAPENDIAN_16(0x0100)} {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
} }
}; };
@ -145,9 +168,9 @@ const struct
char Text[]; char Text[];
} PROGMEM RFCOMM_Attribute_ServiceName = } PROGMEM RFCOMM_Attribute_ServiceName =
{ {
.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
.Size = sizeof("Serial Port") - 1, sizeof("Serial Port") - 1,
.Text = "Serial Port", "Serial Port",
}; };
const struct const struct
@ -157,9 +180,9 @@ const struct
char Text[]; char Text[];
} PROGMEM RFCOMM_Attribute_ServiceDescription = } PROGMEM RFCOMM_Attribute_ServiceDescription =
{ {
.Header = (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit), (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
.Size = sizeof("Wireless Serial Port Service") - 1, sizeof("Wireless Serial Port Service") - 1,
.Text = "Wireless Serial Port Service", "Wireless Serial Port Service",
}; };
const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM = const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM =

@ -48,6 +48,7 @@
#define SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE 0x0000 #define SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE 0x0000
#define SDP_ATTRIBUTE_ID_SERVICECLASSIDS 0x0001 #define SDP_ATTRIBUTE_ID_SERVICECLASSIDS 0x0001
#define SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST 0x0004
#define SDP_ATTRIBUTE_ID_VERSION 0x0200 #define SDP_ATTRIBUTE_ID_VERSION 0x0200
#define SDP_ATTRIBUTE_ID_SERVICENAME 0x0100 #define SDP_ATTRIBUTE_ID_SERVICENAME 0x0100
#define SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION 0x0101 #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 */ const void* AttributeTable; /**< Pointer to the UUID's attribute table, located in PROGMEM memory space */
} ServiceTable_t; } 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. */ /** Structure for a list of Data Elements containing 8-bit integers, for service attributes requiring such lists. */
typedef struct typedef struct
{ {
@ -115,6 +109,24 @@
uint32_t Value; /**< Value to store in the list Data Element */ uint32_t Value; /**< Value to store in the list Data Element */
} Item32Bit_t; } 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: */ /* External Variables: */
extern const ServiceAttributeTable_t SDP_Attribute_Table[]; extern const ServiceAttributeTable_t SDP_Attribute_Table[];
extern const ServiceAttributeTable_t RFCOMM_Attribute_Table[]; extern const ServiceAttributeTable_t RFCOMM_Attribute_Table[];

Loading…
Cancel
Save