Switch over the BluetoothHost demo's Service Discovery code to pass around more gener...
authorDean Camera <dean@fourwalledcubicle.com>
Tue, 18 May 2010 12:54:01 +0000 (12:54 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Tue, 18 May 2010 12:54:01 +0000 (12:54 +0000)
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.c
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.h

index f91ec98..9e30a23 100644 (file)
@@ -36,9 +36,9 @@ SERVICE_ATTRIBUTE_TEXT(SDP_Attribute_Description,  "BT Service Discovery");
 SERVICE_ATTRIBUTE_LEN8(SDP_Attribute_Availability, SDP_DATATYPE_UNSIGNED_INT, 1, {0xFF});
 const ServiceAttributeTable_t SDP_Attribute_Table[] PROGMEM =
        {
-               {.ID = SDP_ATTRIBUTE_NAME        , .Data = &SDP_Attribute_Name},
-               {.ID = SDP_ATTRIBUTE_DESCRIPTION , .Data = &SDP_Attribute_Description},
-               {.ID = SDP_ATTRIBUTE_AVAILABILITY, .Data = &SDP_Attribute_Availability},
+               {.AttributeID = SDP_ATTRIBUTE_NAME        , .Data = &SDP_Attribute_Name},
+               {.AttributeID = SDP_ATTRIBUTE_DESCRIPTION , .Data = &SDP_Attribute_Description},
+               {.AttributeID = SDP_ATTRIBUTE_AVAILABILITY, .Data = &SDP_Attribute_Availability},
                SERVICE_ATTRIBUTE_TABLE_TERMINATOR
        };
 
@@ -47,9 +47,9 @@ SERVICE_ATTRIBUTE_TEXT(RFCOMM_Attribute_Description,  "Virtual Serial");
 SERVICE_ATTRIBUTE_LEN8(RFCOMM_Attribute_Availability, SDP_DATATYPE_UNSIGNED_INT, 1, {0xFF});
 const ServiceAttributeTable_t RFCOMM_Attribute_Table[] PROGMEM =
        {
-               {.ID = SDP_ATTRIBUTE_NAME        , .Data = &RFCOMM_Attribute_Name},
-               {.ID = SDP_ATTRIBUTE_DESCRIPTION , .Data = &RFCOMM_Attribute_Description},
-               {.ID = SDP_ATTRIBUTE_AVAILABILITY, .Data = &RFCOMM_Attribute_Availability},
+               {.AttributeID = SDP_ATTRIBUTE_NAME        , .Data = &RFCOMM_Attribute_Name},
+               {.AttributeID = SDP_ATTRIBUTE_DESCRIPTION , .Data = &RFCOMM_Attribute_Description},
+               {.AttributeID = SDP_ATTRIBUTE_AVAILABILITY, .Data = &RFCOMM_Attribute_Availability},
                SERVICE_ATTRIBUTE_TABLE_TERMINATOR
        };
 
@@ -107,7 +107,7 @@ static void ServiceDiscovery_ProcessServiceSearchAttribute(SDP_PDUHeader_t* SDPH
        
        BT_SDP_DEBUG(1, "<< Service Search Attribute");
 
-       uint8_t UUIDList[12][16];
+       uint8_t UUIDList[12][UUID_SIZE_BYTES];
        uint8_t TotalUUIDs = ServiceDiscovery_GetUUIDList(UUIDList, &CurrentParameter);
        BT_SDP_DEBUG(2, "-- Total UUIDs: %d", TotalUUIDs);
        
@@ -134,7 +134,7 @@ static void ServiceDiscovery_ProcessServiceSearchAttribute(SDP_PDUHeader_t* SDPH
                             Channel);
 }
 
-static uint8_t ServiceDiscovery_ProcessAttributes(uint8_t UUIDList[12][16], const uint8_t TotalUUIDs, uint8_t* ResponseBuffer,
+static uint8_t ServiceDiscovery_ProcessAttributes(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs, uint8_t* ResponseBuffer,
                                                   uint8_t MaxResponseSize, const void** CurrentParameter)
 {
        uint8_t ElementHeaderSize;
@@ -163,14 +163,14 @@ static uint8_t ServiceDiscovery_ProcessAttributes(uint8_t UUIDList[12][16], cons
        return TotalResponseSize;
 }
 
-static uint8_t ServiceDiscovery_GetAttribute(uint8_t UUIDList[12][16], const uint8_t TotalUUIDs, const uint32_t Attribute,
+static uint8_t ServiceDiscovery_GetAttribute(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs, const uint32_t Attribute,
                                              uint8_t** DataBuffer, uint8_t BufferLen)
 {
        for (uint8_t CurrTableItem = 0; CurrTableItem < (sizeof(SDP_Services_Table) / sizeof(ServiceTable_t)); CurrTableItem++)
        {
                for (uint8_t CurrUUIDIndex = 0; CurrUUIDIndex < TotalUUIDs; CurrUUIDIndex++)
                {
-                       if (!(memcmp(SDP_Services_Table[CurrTableItem].UUID, UUIDList[CurrUUIDIndex], sizeof(BaseUUID))))
+                       if (!(memcmp(SDP_Services_Table[CurrTableItem].UUID, UUIDList[CurrUUIDIndex], UUID_SIZE_BYTES)))
                        {
                                const ServiceAttributeTable_t* AttributeTable = SDP_Services_Table[CurrTableItem].AttributeTable;
 
@@ -185,7 +185,7 @@ static uint8_t ServiceDiscovery_GetAttribute(uint8_t UUIDList[12][16], const uin
        return 0;
 }
 
-static uint8_t ServiceDiscovery_GetUUIDList(uint8_t UUIDList[12][16], const void** CurrentParameter)
+static uint8_t ServiceDiscovery_GetUUIDList(uint8_t UUIDList[][UUID_SIZE_BYTES], const void** CurrentParameter)
 {
        uint8_t ElementHeaderSize;
        uint8_t TotalUUIDs = 0;
@@ -195,7 +195,7 @@ static uint8_t ServiceDiscovery_GetUUIDList(uint8_t UUIDList[12][16], const void
        while (ServicePatternLength)
        {
                uint8_t* CurrentUUID = UUIDList[TotalUUIDs++];
-               uint8_t  UUIDLength = ServiceDiscovery_GetDataElementSize(CurrentParameter, &ElementHeaderSize);
+               uint8_t  UUIDLength  = ServiceDiscovery_GetDataElementSize(CurrentParameter, &ElementHeaderSize);
                
                memcpy(CurrentUUID, BaseUUID, sizeof(BaseUUID));
                memcpy(&CurrentUUID[(UUIDLength <= 32) ? (sizeof(BaseUUID) - 32) : 0], *CurrentParameter, UUIDLength);
index d90652b..4535b35 100644 (file)
                #define SDP_DATATYPE_ELEMENT_ALTERNATIVE        (0x07 << 3)
                #define SDP_DATATYPE_URL                        (0x08 << 3)
                
+               #define UUID_SIZE_BYTES                         16
                #define BASE_96BIT_UUID                         0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00
                
                #define SERVICE_ATTRIBUTE_TEXT(name, string)    SERVICE_ATTRIBUTE_LEN8(name, SDP_DATATYPE_TEXT, sizeof(string), string)
                #define SERVICE_ATTRIBUTE_LEN8(name, type, size, ...)  const ServiceAttributeData8Bit_t  name PROGMEM = \
                                                                {.Header = (type | 5), .Size = size, .Data = __VA_ARGS__}
                #define SERVICE_ATTRIBUTE_LEN16(name, type, size, ...) const ServiceAttributeData16Bit_t name PROGMEM = \
-                                                               {.Header = (type | 5), .Size = size, .Data = __VA_ARGS__}
+                                                               {.Header = (type | 6), .Size = size, .Data = __VA_ARGS__}
                #define SERVICE_ATTRIBUTE_LEN32(name, type, size, ...) const ServiceAttributeData32Bit_t name PROGMEM = \
-                                                               {.Header = (type | 5), .Size = size, .Data = __VA_ARGS__}
-               #define SERVICE_ATTRIBUTE_TABLE_TERMINATOR      {.AttributeData = NULL}
+                                                               {.Header = (type | 7), .Size = size, .Data = __VA_ARGS__}
+               #define SERVICE_ATTRIBUTE_TABLE_TERMINATOR      {.Data = NULL}
 
        /* Type Defines: */
                typedef struct
@@ -90,7 +91,7 @@
                
                typedef struct
                {
-                       uint16_t    ID;
+                       uint16_t    AttributeID;
                        const void* Data;
                } ServiceAttributeTable_t;
 
                                return ParamValue;
                        }
 
-                       static uint8_t ServiceDiscovery_ProcessAttributes(uint8_t UUIDList[12][16], const uint8_t TotalUUIDs, 
+                       static uint8_t ServiceDiscovery_ProcessAttributes(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs, 
                                                                          uint8_t* ResponseBuffer, uint8_t MaxResponseSize,
                                                                          const void** CurrentParameter);
-                       static uint8_t ServiceDiscovery_GetAttribute(uint8_t UUIDList[12][16], const uint8_t TotalUUIDs,
+                       static uint8_t ServiceDiscovery_GetAttribute(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_t TotalUUIDs,
                                                                     const uint32_t Attribute, uint8_t** DataBuffer, uint8_t BufferLen);
-                       static uint8_t ServiceDiscovery_GetUUIDList(uint8_t UUIDList[12][16], const void** CurrentParameter);
+                       static uint8_t ServiceDiscovery_GetUUIDList(uint8_t UUIDList[][UUID_SIZE_BYTES], const void** CurrentParameter);
                        static uint32_t ServiceDiscovery_GetDataElementSize(const void** AttributeHeader, uint8_t* ElementHeaderSize);
                #endif