Fix in logic to write EIR when SDP records are changed.
PATCH 5/7 Fix in logic to write EIR when SDP records are changed.
Whenever SDP service record is added/deleted/modified check for whether class of device needs to be updated as well. If the update is needed, proceed as before: new EIR will be written subsequently. If the class of device is already present, just update EIR and return.
--- src/adapter.c | 69 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 37 insertions(+), 32 deletions(-)
src/adapter.c +37 -32
@@ -206,6 +206,34 @@ void clear_found_devices_list(struct btd_adapter *adapter) adapter->found_devices =NULL ; } +static void update_ext_inquiry_response (struct btd_adapter *adapter) +{ +uint8_t fec =0 , data[240 ]; +struct hci_dev *dev = &adapter->dev; +int dd; + +if (!(dev->features[6 ] &LMP_EXT_INQ )) +return ; + +memset (data,0 ,sizeof (data)); + + dd =hci_open_dev (adapter->dev_id); +if (dd <0 ) +return ; + +if (dev->ssp_mode >0 ) +create_ext_inquiry_response ((char *) dev->name, + adapter->tx_power, + adapter->services, data); + +if (hci_write_ext_inquiry_response (dd, fec, data, +HCI_REQ_TIMEOUT ) <0 ) +error ("Can't write extended inquiry response: %s (%d)" , +strerror (errno), errno); + +hci_close_dev (dd); +} +static int adapter_set_service_classes (struct btd_adapter *adapter,uint8_t value) {
@@ -216,11 +244,16 @@ static int adapter_set_service_classes(struct btd_adapter *adapter, adapter->wanted_cod &=0x00ffff ; adapter->wanted_cod |= (value <<16 ); -/* If we already have the CoD we want or the cache is enabled or an -* existing CoD write is in progress just bail out */ -if (adapter->current_cod == adapter->wanted_cod || - adapter->cache_enable || adapter->pending_cod) +/* If the cache is enabled or an existing CoD write is in progress +* just bail out */ +if (adapter->cache_enable || adapter->pending_cod) +return 0 ; + +/* If we already have the CoD we want, update EIR and return */ +if (adapter->current_cod == adapter->wanted_cod) { +update_ext_inquiry_response (adapter);return 0 ; + }DBG ("Changing service classes to 0x%06x" , adapter->wanted_cod);
@@ -818,34 +851,6 @@ static DBusMessage *set_pairable_timeout(DBusConnection *conn,return dbus_message_new_method_return (msg); } -static void update_ext_inquiry_response (struct btd_adapter *adapter) -{ -uint8_t fec =0 , data[240 ]; -struct hci_dev *dev = &adapter->dev; -int dd; - -if (!(dev->features[6 ] &LMP_EXT_INQ )) -return ; - -memset (data,0 ,sizeof (data)); - - dd =hci_open_dev (adapter->dev_id); -if (dd <0 ) -return ; - -if (dev->ssp_mode >0 ) -create_ext_inquiry_response ((char *) dev->name, - adapter->tx_power, - adapter->services, data); - -if (hci_write_ext_inquiry_response (dd, fec, data, -HCI_REQ_TIMEOUT ) <0 ) -error ("Can't write extended inquiry response: %s (%d)" , -strerror (errno), errno); - -hci_close_dev (dd); -} -void adapter_set_class_complete (bdaddr_t *bdaddr,uint8_t status) {uint8_t class[3 ];
Signature · 6 lines
1.7.2 -- Inga Stotland Sent by an employee of the Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.