diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-06-02 07:05:34 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-06-02 07:05:34 +0000 |
commit | c362709a1e2b0252cffbf1633f7cce41fea4d769 (patch) | |
tree | cbe6188d1b4e00c42045d2318964cceebedee91a /Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c | |
parent | da51c1f9749842b65608d6505a41b05981416443 (diff) | |
download | lufa-c362709a1e2b0252cffbf1633f7cce41fea4d769.tar.gz lufa-c362709a1e2b0252cffbf1633f7cce41fea4d769.tar.bz2 lufa-c362709a1e2b0252cffbf1633f7cce41fea4d769.zip |
The SDP UUID lists should be searched and ALL UUIDs matched for a record to be retrieved, not partial matches. Change the SDP code so that the entire list must be matched against a service attribute table's contents before it is returned.
Change matching algorithm so that it recursively searches through the entire attribute table, and not just pre-specified sequence attributes.
Add browse lists and proper descriptions to the Serial Port service.
Diffstat (limited to 'Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c')
-rw-r--r-- | Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c | 205 |
1 files changed, 34 insertions, 171 deletions
diff --git a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c index 96401c010..511e0b074 100644 --- a/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c +++ b/Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c @@ -30,86 +30,6 @@ #include "SDPServices.h"
-/* ------------------------------ SDP SERVICE ATTRIBUTES ------------------------------ */
-
-const struct
-{
- uint8_t Header;
- uint32_t Data;
-} PROGMEM SDP_Attribute_ServiceHandle =
- {
- (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),
- SWAPENDIAN_32(0x00010000),
- };
-
-const struct
-{
- uint8_t Header;
- uint16_t Size;
- ItemUUID_t UUIDList[];
-} PROGMEM SDP_Attribute_ServiceClassIDs =
- {
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
- SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
- {
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SDP_CLASS_UUID}
- }
- };
-
-const struct
-{
- uint8_t Header;
- uint8_t Size;
- Item16Bit_t VersionList[];
-} PROGMEM SDP_Attribute_Version =
- {
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
- (sizeof(Item16Bit_t) * 1),
- {
- {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}
- }
- };
-
-const struct
-{
- uint8_t Header;
- uint8_t Size;
- char Text[];
-} PROGMEM SDP_Attribute_ServiceName =
- {
- (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
- (sizeof("SDP") - 1),
- "SDP",
- };
-
-const struct
-{
- uint8_t Header;
- uint8_t Size;
- char Text[];
-} PROGMEM SDP_Attribute_ServiceDescription =
- {
- (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 },
-
- SERVICE_ATTRIBUTE_TABLE_TERMINATOR
- };
-
-
-/* ------------------------------ RFCOMM SERVICE ATTRIBUTES ------------------------------ */
-
-
const struct
{
uint8_t Header;
@@ -147,123 +67,64 @@ const struct {
{
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
- sizeof(UUID_t),
+ sizeof(ItemUUID_t),
{
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},
}
},
{
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
- sizeof(UUID_t),
+ sizeof(ItemUUID_t),
{
{(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},
}
- }
+ },
}
};
const struct
{
- uint8_t Header;
- uint8_t Size;
- char Text[];
-} PROGMEM RFCOMM_Attribute_ServiceName =
- {
- (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
- sizeof("Serial Port") - 1,
- "Serial Port",
- };
-
-const struct
-{
- uint8_t Header;
- uint8_t Size;
- char Text[];
-} PROGMEM RFCOMM_Attribute_ServiceDescription =
- {
- (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_PROTOCOLDESCRIPTORLIST, .Data = &RFCOMM_Attribute_ProtocolDescriptor },
- {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &RFCOMM_Attribute_ServiceName },
- {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &RFCOMM_Attribute_ServiceDescription },
-
- SERVICE_ATTRIBUTE_TABLE_TERMINATOR
- };
-
-
-/* ------------------------------ L2CAP SERVICE ATTRIBUTES ------------------------------ */
-
-
-const struct
-{
- uint8_t Header;
- uint32_t Data;
-} PROGMEM L2CAP_Attribute_ServiceHandle =
- {
- (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),
- SWAPENDIAN_32(0x00010002),
- };
-
-const struct
-{
uint8_t Header;
uint16_t Size;
ItemUUID_t UUIDList[];
-} PROGMEM L2CAP_Attribute_ServiceClassIDs =
+} PROGMEM RFCOMM_Attribute_BrowseGroupList =
{
(SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
- SWAPENDIAN_16(sizeof(ItemUUID_t) * 2),
+ SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),
{
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SDP_CLASS_UUID },
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID },
+ {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), PUBLICBROWSEGROUP_CLASS_UUID}
}
};
-
+
const struct
{
- uint8_t Header;
- uint16_t Size;
-
- ItemProtocol_t ProtocolList[];
-} PROGMEM L2CAP_Attribute_ProtocolDescriptor =
- {
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),
- SWAPENDIAN_16(sizeof(ItemProtocol_t) * 2),
- {
+ uint8_t Header;
+ uint8_t Size;
+ ItemLangID_t OffsetList[];
+} PROGMEM RFCOMM_Attribute_LanguageBaseIDOffset =
+ {
+ .Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
+ .Size = (sizeof(ItemLangID_t) * 1),
+ .OffsetList =
{
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
- sizeof(UUID_t),
{
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},
- }
- },
- {
- (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),
- sizeof(UUID_t),
- {
- {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x454E)},
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x006A)},
+ {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)},
}
}
- }
- };
+ };
const struct
{
uint8_t Header;
uint8_t Size;
char Text[];
-} PROGMEM L2CAP_Attribute_ServiceName =
+} PROGMEM RFCOMM_Attribute_ServiceName =
{
(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
- sizeof("L2CAP") - 1,
- "L2CAP",
+ sizeof("Serial Port") - 1,
+ "Serial Port",
};
const struct
@@ -271,20 +132,22 @@ const struct uint8_t Header;
uint8_t Size;
char Text[];
-} PROGMEM L2CAP_Attribute_ServiceDescription =
+} PROGMEM RFCOMM_Attribute_ServiceDescription =
{
(SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),
- sizeof("Logical Link Layer") - 1,
- "Logical Link Layer",
+ sizeof("Wireless Serial Port Service") - 1,
+ "Wireless Serial Port Service",
};
-const ServiceAttributeTable_t L2CAP_Attribute_Table[] PROGMEM =
+const ServiceAttributeTable_t PROGMEM RFCOMM_Attribute_Table[] =
{
- {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &L2CAP_Attribute_ServiceHandle },
- {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &L2CAP_Attribute_ServiceClassIDs },
- {.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &L2CAP_Attribute_ProtocolDescriptor },
- {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &L2CAP_Attribute_ServiceName },
- {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &L2CAP_Attribute_ServiceDescription },
-
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE, .Data = &RFCOMM_Attribute_ServiceHandle },
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS, .Data = &RFCOMM_Attribute_ServiceClassIDs },
+ {.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &RFCOMM_Attribute_ProtocolDescriptor },
+ {.AttributeID = SDP_ATTRIBUTE_ID_BROWSEGROUPLIST, .Data = &RFCOMM_Attribute_BrowseGroupList },
+ {.AttributeID = SDP_ATTRIBUTE_ID_LANGUAGEBASEATTROFFSET, .Data = &RFCOMM_Attribute_LanguageBaseIDOffset},
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME, .Data = &RFCOMM_Attribute_ServiceName },
+ {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION, .Data = &RFCOMM_Attribute_ServiceDescription },
+
SERVICE_ATTRIBUTE_TABLE_TERMINATOR
};
|