aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-06-01 14:05:47 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-06-01 14:05:47 +0000
commitb98158bd50e95c65e20989d048ab42cc6de799c2 (patch)
tree19fddbfd3d5df2a64e4a588e48b03f71dfe125ab
parent32ab52a2987f086d34d8ac691eaed5e1af085719 (diff)
downloadlufa-b98158bd50e95c65e20989d048ab42cc6de799c2.tar.gz
lufa-b98158bd50e95c65e20989d048ab42cc6de799c2.tar.bz2
lufa-b98158bd50e95c65e20989d048ab42cc6de799c2.zip
Clean up the Service tables, add incomplete ProtocolDescriptorList attribute to the SDP service.
-rw-r--r--Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c113
-rw-r--r--Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h26
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 0ad8c013e..28b9d7774 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 5ca010c52..61fd59390 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[];