The SDP UUID lists should be searched and ALL UUIDs matched for a record to be retrie...
[pub/lufa.git] / Demos / Host / Incomplete / BluetoothHost / Lib / SDPServices.c
index 96401c0..511e0b0 100644 (file)
 \r
 #include "SDPServices.h"\r
 \r
 \r
 #include "SDPServices.h"\r
 \r
-/* ------------------------------ SDP SERVICE ATTRIBUTES  ------------------------------ */\r
-\r
-const struct\r
-{\r
-       uint8_t  Header;\r
-       uint32_t Data;\r
-} PROGMEM SDP_Attribute_ServiceHandle =\r
-       {\r
-               (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),\r
-               SWAPENDIAN_32(0x00010000),\r
-       };\r
-\r
-const struct\r
-{\r
-       uint8_t    Header;\r
-       uint16_t   Size;\r
-       ItemUUID_t UUIDList[];\r
-} PROGMEM SDP_Attribute_ServiceClassIDs =\r
-       {\r
-               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
-               SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),\r
-               {\r
-                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SDP_CLASS_UUID}\r
-               }\r
-       };\r
-\r
-const struct\r
-{\r
-       uint8_t     Header;\r
-       uint8_t     Size;\r
-       Item16Bit_t VersionList[];\r
-} PROGMEM SDP_Attribute_Version =\r
-       {\r
-               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-               (sizeof(Item16Bit_t) * 1),\r
-               {\r
-                       {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)}\r
-               }\r
-       };\r
-\r
-const struct\r
-{\r
-       uint8_t Header;\r
-       uint8_t Size;\r
-       char    Text[];\r
-} PROGMEM SDP_Attribute_ServiceName =\r
-       {\r
-               (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
-               (sizeof("SDP") - 1),\r
-               "SDP",\r
-       };\r
-\r
-const struct\r
-{\r
-       uint8_t Header;\r
-       uint8_t Size;\r
-       char    Text[];\r
-} PROGMEM SDP_Attribute_ServiceDescription =\r
-       {\r
-               (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
-               (sizeof("Service Discovery Protocol Server") - 1),\r
-               "Service Discovery Protocol Server",\r
-       };\r
-\r
-/** Service Discovery Protocol attribute table, listing all supported attributes of the service. */\r
-const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM =\r
-       {\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &SDP_Attribute_ServiceHandle      },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &SDP_Attribute_ServiceClassIDs    },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_VERSION,                .Data = &SDP_Attribute_Version            },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &SDP_Attribute_ServiceName        },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &SDP_Attribute_ServiceDescription },\r
-\r
-               SERVICE_ATTRIBUTE_TABLE_TERMINATOR\r
-       };\r
-\r
-\r
-/* ------------------------------ RFCOMM SERVICE ATTRIBUTES  ------------------------------ */\r
-\r
-\r
 const struct\r
 {\r
        uint8_t  Header;\r
 const struct\r
 {\r
        uint8_t  Header;\r
@@ -147,123 +67,64 @@ const struct
                {\r
                        {\r
                                (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
                {\r
                        {\r
                                (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-                               sizeof(UUID_t),\r
+                               sizeof(ItemUUID_t),\r
                                {\r
                                        {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},\r
                                }\r
                        },\r
                        {\r
                                (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
                                {\r
                                        {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},\r
                                }\r
                        },\r
                        {\r
                                (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-                               sizeof(UUID_t),\r
+                               sizeof(ItemUUID_t),\r
                                {\r
                                        {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
                                }\r
                                {\r
                                        {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
                                }\r
-                       }\r
+                       },\r
                }\r
        };\r
 \r
 const struct\r
 {\r
                }\r
        };\r
 \r
 const struct\r
 {\r
-       uint8_t Header;\r
-       uint8_t Size;\r
-       char    Text[];\r
-} PROGMEM RFCOMM_Attribute_ServiceName =\r
-       {\r
-               (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
-               sizeof("Serial Port") - 1,\r
-               "Serial Port",\r
-       };\r
-\r
-const struct\r
-{\r
-       uint8_t Header;\r
-       uint8_t Size;\r
-       char    Text[];\r
-} PROGMEM RFCOMM_Attribute_ServiceDescription =\r
-       {\r
-               (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
-               sizeof("Wireless Serial Port Service") - 1,\r
-               "Wireless Serial Port Service",\r
-       };\r
-\r
-const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM =\r
-       {\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &RFCOMM_Attribute_ServiceHandle      },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &RFCOMM_Attribute_ServiceClassIDs    },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &RFCOMM_Attribute_ProtocolDescriptor },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &RFCOMM_Attribute_ServiceName        },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &RFCOMM_Attribute_ServiceDescription },\r
-\r
-               SERVICE_ATTRIBUTE_TABLE_TERMINATOR\r
-       };\r
-\r
-\r
-/* ------------------------------ L2CAP SERVICE ATTRIBUTES  ------------------------------ */\r
-\r
-\r
-const struct\r
-{\r
-       uint8_t  Header;\r
-       uint32_t Data;\r
-} PROGMEM L2CAP_Attribute_ServiceHandle =\r
-       {\r
-               (SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_32Bit),\r
-               SWAPENDIAN_32(0x00010002),\r
-       };\r
-\r
-const struct\r
-{\r
        uint8_t    Header;\r
        uint16_t   Size;\r
        ItemUUID_t UUIDList[];\r
        uint8_t    Header;\r
        uint16_t   Size;\r
        ItemUUID_t UUIDList[];\r
-} PROGMEM L2CAP_Attribute_ServiceClassIDs =\r
+} PROGMEM RFCOMM_Attribute_BrowseGroupList =\r
        {\r
                (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
        {\r
                (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
-               SWAPENDIAN_16(sizeof(ItemUUID_t) * 2),\r
+               SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),\r
                {\r
                {\r
-                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SDP_CLASS_UUID },\r
-                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID  },\r
+                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), PUBLICBROWSEGROUP_CLASS_UUID}\r
                }\r
        };\r
                }\r
        };\r
-\r
+       \r
 const struct\r
 {\r
 const struct\r
 {\r
-       uint8_t        Header;\r
-       uint16_t       Size;\r
-\r
-       ItemProtocol_t ProtocolList[];\r
-} PROGMEM L2CAP_Attribute_ProtocolDescriptor =\r
-       {\r
-               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
-               SWAPENDIAN_16(sizeof(ItemProtocol_t) * 2),\r
-               {\r
+       uint8_t      Header;\r
+       uint8_t      Size;\r
+       ItemLangID_t OffsetList[];\r
+} PROGMEM RFCOMM_Attribute_LanguageBaseIDOffset =\r
+       {\r
+               .Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+               .Size   = (sizeof(ItemLangID_t) * 1),\r
+               .OffsetList =\r
                        {\r
                        {\r
-                               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-                               sizeof(UUID_t),\r
                                {\r
                                {\r
-                                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},\r
-                               }\r
-                       },\r
-                       {\r
-                               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-                               sizeof(UUID_t),\r
-                               {\r
-                                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
+                                       {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x454E)},\r
+                                       {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x006A)},\r
+                                       {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(0x0100)},\r
                                }\r
                        }\r
                                }\r
                        }\r
-               }\r
-       };\r
+       };      \r
        \r
 const struct\r
 {\r
        uint8_t Header;\r
        uint8_t Size;\r
        char    Text[];\r
        \r
 const struct\r
 {\r
        uint8_t Header;\r
        uint8_t Size;\r
        char    Text[];\r
-} PROGMEM L2CAP_Attribute_ServiceName =\r
+} PROGMEM RFCOMM_Attribute_ServiceName =\r
        {\r
                (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
        {\r
                (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
-               sizeof("L2CAP") - 1,\r
-               "L2CAP",\r
+               sizeof("Serial Port") - 1,\r
+               "Serial Port",\r
        };\r
 \r
 const struct\r
        };\r
 \r
 const struct\r
@@ -271,20 +132,22 @@ const struct
        uint8_t Header;\r
        uint8_t Size;\r
        char    Text[];\r
        uint8_t Header;\r
        uint8_t Size;\r
        char    Text[];\r
-} PROGMEM L2CAP_Attribute_ServiceDescription =\r
+} PROGMEM RFCOMM_Attribute_ServiceDescription =\r
        {\r
                (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
        {\r
                (SDP_DATATYPE_String | SDP_DATASIZE_Variable8Bit),\r
-               sizeof("Logical Link Layer") - 1,\r
-               "Logical Link Layer",\r
+               sizeof("Wireless Serial Port Service") - 1,\r
+               "Wireless Serial Port Service",\r
        };\r
 \r
        };\r
 \r
-const ServiceAttributeTable_t L2CAP_Attribute_Table[] PROGMEM =\r
+const ServiceAttributeTable_t PROGMEM RFCOMM_Attribute_Table[] =\r
        {\r
        {\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &L2CAP_Attribute_ServiceHandle      },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &L2CAP_Attribute_ServiceClassIDs    },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &L2CAP_Attribute_ProtocolDescriptor },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &L2CAP_Attribute_ServiceName        },\r
-               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &L2CAP_Attribute_ServiceDescription },\r
-               \r
+               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICERECORDHANDLE,    .Data = &RFCOMM_Attribute_ServiceHandle       },\r
+               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICECLASSIDS,        .Data = &RFCOMM_Attribute_ServiceClassIDs     },\r
+               {.AttributeID = SDP_ATTRIBUTE_ID_PROTOCOLDESCRIPTORLIST, .Data = &RFCOMM_Attribute_ProtocolDescriptor  },\r
+               {.AttributeID = SDP_ATTRIBUTE_ID_BROWSEGROUPLIST,        .Data = &RFCOMM_Attribute_BrowseGroupList     },\r
+               {.AttributeID = SDP_ATTRIBUTE_ID_LANGUAGEBASEATTROFFSET, .Data = &RFCOMM_Attribute_LanguageBaseIDOffset},\r
+               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICENAME,            .Data = &RFCOMM_Attribute_ServiceName         },\r
+               {.AttributeID = SDP_ATTRIBUTE_ID_SERVICEDESCRIPTION,     .Data = &RFCOMM_Attribute_ServiceDescription  },\r
+\r
                SERVICE_ATTRIBUTE_TABLE_TERMINATOR\r
        };\r
                SERVICE_ATTRIBUTE_TABLE_TERMINATOR\r
        };\r