diff --git a/android/hidhost.c b/android/hidhost.c
index bb55f5e..c01c563 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
sdp_record_t *rec = list->data;
sdp_data_t *data;
- data = sdp_data_get(rec, SDP_ATTR_VENDOR_ID);
- if (data)
- dev->vendor = data->val.uint16;
-
- data = sdp_data_get(rec, SDP_ATTR_PRODUCT_ID);
- if (data)
- dev->product = data->val.uint16;
-
- data = sdp_data_get(rec, SDP_ATTR_VERSION);
- if (data)
- dev->version = data->val.uint16;
-
data = sdp_data_get(rec, SDP_ATTR_HID_COUNTRY_CODE);
if (data)
dev->country = data->val.uint8;
hid_device_free(dev);
}
+static void hid_sdp_did_search_cb(sdp_list_t *recs, int err, gpointer data)
+{
+ struct hid_device *dev = data;
+ sdp_list_t *list;
+ uuid_t uuid;
+
+ DBG("");
+
+ if (err < 0) {
+ error("Unable to get Device ID SDP record: %s", strerror(-err));
+ goto fail;
+ }
+
+ if (!recs || !recs->data) {
+ error("No SDP records found");
+ goto fail;
+ }
+
+ for (list = recs; list; list = list->next) {
+ sdp_record_t *rec = list->data;
+ sdp_data_t *data;
+
+ data = sdp_data_get(rec, SDP_ATTR_VENDOR_ID);
+ if (data)
+ dev->vendor = data->val.uint16;
+
+ data = sdp_data_get(rec, SDP_ATTR_PRODUCT_ID);
+ if (data)
+ dev->product = data->val.uint16;
+
+ data = sdp_data_get(rec, SDP_ATTR_VERSION);
+ if (data)
+ dev->version = data->val.uint16;
+ }
+
+ bt_string2uuid(&uuid, HID_UUID);
+ if (bt_search_service(&adapter_addr, &dev->dst, &uuid,
+ hid_sdp_search_cb, dev, NULL, 0) < 0) {
+ error("failed to search sdp details");
+ goto fail;
+ }
+
+ return;
+
+fail:
+ bt_hid_notify_state(dev, HAL_HIDHOST_STATE_DISCONNECTED);
+ hid_device_free(dev);
+}
+
static void bt_hid_connect(const void *buf, uint16_t len)
{
const struct hal_cmd_hidhost_connect *cmd = buf;
ba2str(&dev->dst, addr);
DBG("connecting to %s", addr);
- bt_string2uuid(&uuid, HID_UUID);
+ bt_string2uuid(&uuid, PNP_UUID);
if (bt_search_service(&adapter_addr, &dev->dst, &uuid,
- hid_sdp_search_cb, dev, NULL, 0) < 0) {
- error("Failed to search sdp details");
+ hid_sdp_did_search_cb, dev, NULL, 0) < 0) {
+ error("Failed to search DeviceID SDP details");
hid_device_free(dev);
status = HAL_STATUS_FAILED;
goto failed;
dev->ctrl_io = g_io_channel_ref(chan);
dev->uhid_fd = -1;
- bt_string2uuid(&uuid, HID_UUID);
+ bt_string2uuid(&uuid, PNP_UUID);
if (bt_search_service(&src, &dev->dst, &uuid,
- hid_sdp_search_cb, dev, NULL, 0) < 0) {
- error("failed to search sdp details");
+ hid_sdp_did_search_cb, dev, NULL, 0) < 0) {
+ error("failed to search did sdp details");
hid_device_free(dev);
return;
}