diff options
Diffstat (limited to 'src/device.c')
-rw-r--r-- | src/device.c | 80 |
1 files changed, 56 insertions, 24 deletions
diff --git a/src/device.c b/src/device.c index bffe36ab..6d115263 100644 --- a/src/device.c +++ b/src/device.c @@ -2049,10 +2049,20 @@ done: g_dbus_send_message(dbus_conn, btd_error_failed(dev->connect, strerror(-err))); else { +#ifdef __TIZEN_PATCH__ + /* SDP is not required for Samsung TV Power on */ + if (g_strcmp0(profile->name, "hid-device") == 0) { + DBG("Skip SDP discovery."); + } else { +#endif /* Start passive SDP discovery to update known services */ if (dev->bredr && !dev->svc_refreshed) device_browse_sdp(dev, NULL); #ifdef __TIZEN_PATCH__ + } +#endif + +#ifdef __TIZEN_PATCH__ if (err) g_dbus_send_message(dbus_conn, btd_error_failed(dev->connect, strerror(-err))); @@ -4008,8 +4018,13 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) #ifdef __TIZEN_PATCH__ if (device->browse) { - /* clear browse info */ - device->browse = NULL; + struct browse_req *req = device->browse; + + if ((bdaddr_type == BDADDR_BREDR && req->search_uuid != 0) || + (bdaddr_type != BDADDR_BREDR && req->search_uuid == 0)) + device->browse = NULL; + else + DBG("device->browse is for other link"); } #endif @@ -5053,29 +5068,17 @@ static struct btd_device *device_new(struct btd_adapter *adapter, #ifdef __TIZEN_PATCH__ void device_print_addr(struct btd_device *dev) { - char addr[18]; - - ba2str(&dev->bdaddr, addr); - DBG("IDA : %s %d", addr, dev->bdaddr_type); + char ida[18]; + char rpa[18]; - if (dev->rpa) { - ba2str(dev->rpa, addr); - DBG("RPA : %s", addr); - } else { - DBG("No RPA"); - } + ba2str(&dev->bdaddr, ida); - if (dev->bredr) - DBG("BREDR Support"); - else - DBG("BREDR Not Support"); - - if (dev->le) - DBG("LE Support"); - else - DBG("LE Not Support"); + if (dev->rpa) + ba2str(dev->rpa, rpa); - DBG("***"); + DBG("IDA %s [%d] : RPA [%s], BREDR [%d], LE [%d]", + ida, dev->bdaddr_type, dev->rpa ? rpa : "0", + dev->bredr ? 1 : 0, dev->le ? 1 : 0); } #endif @@ -6560,10 +6563,16 @@ bool device_attach_att(struct btd_device *dev, GIOChannel *io) struct btd_gatt_database *database; const bdaddr_t *src, *dst; char srcaddr[18], dstaddr[18]; +#ifdef __TIZEN_PATCH__ + uint8_t dst_type = BDADDR_BREDR; +#endif bt_io_get(io, &gerr, BT_IO_OPT_SEC_LEVEL, &sec_level, BT_IO_OPT_IMTU, &mtu, BT_IO_OPT_CID, &cid, +#ifdef __TIZEN_PATCH__ + BT_IO_OPT_DEST_TYPE, &dst_type, +#endif BT_IO_OPT_INVALID); if (gerr) { @@ -6611,6 +6620,16 @@ bool device_attach_att(struct btd_device *dev, GIOChannel *io) bt_att_set_remote_key(dev->att, dev->remote_csrk->key, remote_counter, dev); +#ifdef __TIZEN_PATCH__ + if (dst_type != BDADDR_BREDR && device_get_rpa_exist(dev) == true) { + bt_att_set_remote_addr(dev->att, + device_get_rpa(dev), BDADDR_LE_RANDOM); + } else { + bt_att_set_remote_addr(dev->att, + &dev->bdaddr, dev->bdaddr_type); + } +#endif + database = btd_adapter_get_database(dev->adapter); src = btd_adapter_get_address(dev->adapter); @@ -7030,12 +7049,18 @@ void device_set_auth_addr_type(struct btd_device *device, uint8_t type) device->auth_bdaddr_type = type; } -void device_get_tizen_addr(struct btd_device *device, - struct device_addr_type *addr) +void device_get_tizen_addr(struct btd_device *device, uint8_t type, + struct device_addr_type *addr) { if (!device || !addr) return; + if (type == BDADDR_BREDR) { + bacpy(&addr->bdaddr, &device->bdaddr); + addr->bdaddr_type = BDADDR_BREDR; + return; + } + if (device->rpa) { bacpy(&addr->bdaddr, device->rpa); addr->bdaddr_type = BDADDR_LE_RANDOM; @@ -8447,6 +8472,13 @@ struct btd_service *btd_device_get_service(struct btd_device *dev, if (g_str_equal(p->remote_uuid, remote_uuid)) return service; + +#ifdef TIZEN_BT_HID_DEVICE_ENABLE + if (g_str_equal(HID_UUID, remote_uuid)) { + if (strcmp(p->name, "hid-device") == 0) + return service; + } +#endif } return NULL; |