summaryrefslogtreecommitdiff
path: root/src/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c80
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;