Add PSM value to the RFCOMM service so that the host knows what PSM to use on channel...
authorDean Camera <dean@fourwalledcubicle.com>
Thu, 3 Jun 2010 07:45:09 +0000 (07:45 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Thu, 3 Jun 2010 07:45:09 +0000 (07:45 +0000)
Demos/Host/Incomplete/BluetoothHost/BluetoothHost.c
Demos/Host/Incomplete/BluetoothHost/Lib/BluetoothClassCodes.h
Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.c
Demos/Host/Incomplete/BluetoothHost/Lib/SDPServices.h
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.c
Demos/Host/Incomplete/BluetoothHost/Lib/ServiceDiscoveryProtocol.h

index 737932c..1028679 100644 (file)
@@ -291,11 +291,7 @@ void Bluetooth_PacketReceived(void* Data, uint16_t DataLen, Bluetooth_Channel_t*
                        break;
                default:
                        /* Unknown Protocol packet */
-                       printf_P(PSTR("Packet Received (Channel 0x%04X, PSM: 0x%02x):\r\n"), Channel->LocalNumber, Channel->PSM);
-                       for (uint16_t Byte = 0; Byte < DataLen; Byte++)
-                         printf_P(PSTR("0x%02X "), ((uint8_t*)Data)[Byte]);
-                       puts_P(PSTR("\r\n"));
-                       
+                       printf_P(PSTR("Unknown Packet Received (Channel 0x%04X, PSM: 0x%02X):\r\n"), Channel->LocalNumber, Channel->PSM);                       
                        break;
        }
 }
index 3dd9d70..c4690f4 100644 (file)
@@ -78,7 +78,7 @@
                #define DEVICE_CLASS_MINOR_LAN_50_TO_67_PC_UTILIZED    (0x04 << 5)
                #define DEVICE_CLASS_MINOR_LAN_67_TO_83_PC_UTILIZED    (0x05 << 5)
                #define DEVICE_CLASS_MINOR_LAN_83_TO_99_PC_UTILIZED    (0x06 << 5)
-               #define DEVICE_CLASS_MINOR_NO_SERVICE_AVAILABLE        (0x07 << 5)
+               #define DEVICE_CLASS_MINOR_LAN_NO_SERVICE_AVAILABLE    (0x07 << 5)
                
                #define DEVICE_CLASS_MINOR_AV_UNCATEGORIZED            (0x00 << 2)
                #define DEVICE_CLASS_MINOR_AV_HEADSET                  (0x01 << 2)
index d812252..cf32673 100644 (file)
@@ -43,57 +43,57 @@ const struct
 const struct\r
 {\r
        uint8_t    Header;\r
-       uint16_t   Size;\r
+       uint8_t    Size;\r
        ItemUUID_t UUIDList[];\r
 } PROGMEM SerialPort_Attribute_ServiceClassIDs =\r
        {\r
-               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
-               SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),\r
+               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+               (sizeof(ItemUUID_t) * 1),\r
                {\r
-                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID}\r
-               }\r
+                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), SP_CLASS_UUID},\r
+               },\r
        };\r
 \r
 const struct\r
 {\r
-       uint8_t  Header;\r
-       uint16_t Size;\r
+       uint8_t Header;\r
+       uint8_t Size;\r
 \r
-       ItemProtocol_t ProtocolList[];\r
+       ItemProtocol_t    L2CAP;\r
+       ItemProtocolPSM_t RFCOMM;\r
 } PROGMEM SerialPort_Attribute_ProtocolDescriptor =\r
        {\r
-               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
-               SWAPENDIAN_16(sizeof(ItemProtocol_t) * 2),\r
+               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+               (sizeof(ItemProtocol_t) + sizeof(ItemProtocolPSM_t)),\r
                {\r
+                       (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+                       sizeof(ItemUUID_t),\r
                        {\r
-                               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-                               sizeof(ItemUUID_t),\r
-                               {\r
-                                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},\r
-                               }\r
+                               {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), L2CAP_UUID},\r
                        },\r
+               },\r
+               {\r
+                       (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+                       (sizeof(ItemUUID_t) + sizeof(Item16Bit_t)),\r
                        {\r
-                               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-                               sizeof(ItemUUID_t),\r
-                               {\r
-                                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
-                               }\r
+                               {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), RFCOMM_UUID},\r
+                               {(SDP_DATATYPE_UnsignedInt | SDP_DATASIZE_16Bit), SWAPENDIAN_16(CHANNEL_PSM_RFCOMM)},\r
                        },\r
-               }\r
+               },\r
        };\r
 \r
 const struct\r
 {\r
        uint8_t    Header;\r
-       uint16_t   Size;\r
+       uint8_t    Size;\r
        ItemUUID_t UUIDList[];\r
 } PROGMEM SerialPort_Attribute_BrowseGroupList =\r
        {\r
-               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable16Bit),\r
-               SWAPENDIAN_16(sizeof(ItemUUID_t) * 1),\r
+               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+               (sizeof(ItemUUID_t) * 1),\r
                {\r
-                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), PUBLICBROWSEGROUP_CLASS_UUID}\r
-               }\r
+                       {(SDP_DATATYPE_UUID | SDP_DATASIZE_128Bit), PUBLICBROWSEGROUP_CLASS_UUID},\r
+               },\r
        };\r
        \r
 const struct\r
@@ -103,16 +103,15 @@ const struct
        ItemLangEncoding_t LanguageEncodings[];\r
 } PROGMEM SerialPort_Attribute_LanguageBaseIDOffset =\r
        {\r
-               .Header = (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
-               .Size   = (sizeof(ItemLangEncoding_t) * 1),\r
-               .LanguageEncodings =\r
+               (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit),\r
+               (sizeof(ItemLangEncoding_t) * 1),\r
+               {\r
                        {\r
-                               {\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
+                               {(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
 const struct\r
index 738cc06..1cfc2b2 100644 (file)
                 */\r
                typedef struct\r
                {\r
-                       uint8_t     Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
-                       uint8_t     Size; /**< Size of the inner Data Element sequence */\r
+                       uint8_t        Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
+                       uint8_t        Size; /**< Size of the inner Data Element sequence */\r
                        \r
                        struct\r
                        {\r
                                ItemUUID_t UUID; /**< UUID to store in the protocol list Data Element sequence */\r
                        } Protocol;\r
                } ItemProtocol_t;\r
+\r
+               /** Structure for a list of Data Elements Sequences containing UUID Data Elements and 16-bit PSM values, for service\r
+                *  attributes requiring extended protocol lists.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t         Header; /**< Data Element header, should be (SDP_DATATYPE_Sequence | SDP_DATASIZE_Variable8Bit) */\r
+                       uint8_t         Size; /**< Size of the inner Data Element sequence */\r
+                       \r
+                       struct\r
+                       {\r
+                               ItemUUID_t  UUID; /**< UUID to store in the protocol list Data Element sequence */\r
+                               Item16Bit_t PSM; /**< PSM that is to be used to access the service on created channels */\r
+                       } Protocol;\r
+               } ItemProtocolPSM_t;\r
                \r
                /** Structure for a list of Data Elements containing language encodings, including the language ID, Encoding ID and\r
                 *  Attribute base offset.\r
index 0ee0784..62d4c5e 100644 (file)
@@ -486,16 +486,7 @@ static void SDP_CheckUUIDMatch(uint8_t UUIDList[][UUID_SIZE_BYTES], const uint8_
                /* Look for matches in the UUID list against the current attribute UUID value */
                for (uint8_t i = 0; i < TotalUUIDs; i++)
                {
-                       uint8_t CurrentUUID[16];
-                       memcpy_P(CurrentUUID, (CurrAttribute + 1), 16);
-               
-                       BT_SDP_DEBUG(2, "-- TEST UUID: %02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-                               CurrentUUID[0], CurrentUUID[1], CurrentUUID[2], CurrentUUID[3],
-                               CurrentUUID[4], CurrentUUID[5],
-                                               CurrentUUID[6], CurrentUUID[7],
-                               CurrentUUID[8], CurrentUUID[9],
-                                               CurrentUUID[10], CurrentUUID[11], CurrentUUID[12],  CurrentUUID[13],  CurrentUUID[14],  CurrentUUID[15]);
-
+                       /* Check if the current unmatched UUID is identical to the search UUID */
                        if (!(UUIDMatch[i]) && !(memcmp_P(UUIDList[i], (CurrAttribute + 1), UUID_SIZE_BYTES)))
                        {
                                /* Indicate match found for the current attribute UUID and early-abort */
index dd5182c..0010cf1 100644 (file)
                void SDP_ProcessPacket(void* Data, Bluetooth_Channel_t* const Channel);
 
                #if defined(INCLUDE_FROM_SERVICEDISCOVERYPROTOCOL_C)
-                       static void SDP_ProcessServiceSearch(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
-                       static void SDP_ProcessServiceAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
-                       static void SDP_ProcessServiceSearchAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
+                       static void     SDP_ProcessServiceSearch(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
+                       static void     SDP_ProcessServiceAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
+                       static void     SDP_ProcessServiceSearchAttribute(const SDP_PDUHeader_t* const SDPHeader, Bluetooth_Channel_t* const Channel);
 
                        static uint16_t SDP_AddListedAttributesToResponse(const ServiceAttributeTable_t* AttributeTable, uint16_t AttributeList[][2],
                                                                          const uint8_t TotalAttributes, void** const BufferPos);