* [PATCH 1/3] android/bluetooth: remove unused include
@ 2014-08-13 13:44 Grzegorz Kolodziejczyk
2014-08-13 13:44 ` [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd Grzegorz Kolodziejczyk
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-08-13 13:44 UTC (permalink / raw)
To: linux-bluetooth
uuid-helper.h is no longer used in bluetooth.c
---
android/bluetooth.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/android/bluetooth.c b/android/bluetooth.c
index 655844d..699e880 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
@@ -40,7 +40,6 @@
#include "lib/mgmt.h"
#include "src/shared/util.h"
#include "src/shared/mgmt.h"
-#include "src/uuid-helper.h"
#include "src/eir.h"
#include "lib/sdp.h"
#include "lib/sdp_lib.h"
--
1.9.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd
2014-08-13 13:44 [PATCH 1/3] android/bluetooth: remove unused include Grzegorz Kolodziejczyk
@ 2014-08-13 13:44 ` Grzegorz Kolodziejczyk
2014-08-14 10:01 ` Johan Hedberg
2014-08-13 13:44 ` [PATCH 3/3] android/pts: Update IOPT test results Grzegorz Kolodziejczyk
2014-08-14 10:02 ` [PATCH 1/3] android/bluetooth: remove unused include Johan Hedberg
2 siblings, 1 reply; 6+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-08-13 13:44 UTC (permalink / raw)
To: linux-bluetooth
This allows to get service record property by uuid of specified remote device.
---
android/bluetooth.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 119 insertions(+), 3 deletions(-)
diff --git a/android/bluetooth.c b/android/bluetooth.c
index 699e880..8d27b0a 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
@@ -38,6 +38,7 @@
#include "lib/bluetooth.h"
#include "lib/sdp.h"
#include "lib/mgmt.h"
+#include "lib/uuid.h"
#include "src/shared/util.h"
#include "src/shared/mgmt.h"
#include "src/eir.h"
@@ -1067,6 +1068,117 @@ static uint8_t browse_remote_sdp(const bdaddr_t *addr)
return HAL_STATUS_SUCCESS;
}
+static void send_remote_sdp_rec_notify(bt_uuid_t *uuid, int channel,
+ char *name, uint8_t name_len,
+ uint8_t status, bdaddr_t *bdaddr)
+{
+ struct hal_prop_device_service_rec *prop;
+ uint8_t buf[BASELEN_REMOTE_DEV_PROP + name_len + sizeof(*prop)];
+ struct hal_ev_remote_device_props *ev = (void *) buf;
+ int prop_len = sizeof(*prop) + name_len;
+
+ memset(buf, 0, sizeof(buf));
+
+ if (status == HAL_STATUS_SUCCESS) {
+ prop = malloc(sizeof(*prop) + name_len);
+ prop->name_len = name_len;
+ prop->channel = (uint16_t)channel;
+ memcpy(prop->name, name, name_len);
+ memcpy(prop->uuid, &uuid->value.u128, sizeof(prop->uuid));
+
+ memcpy(ev->props[0].val, prop, prop_len);
+
+ free(prop);
+ }
+
+ ev->num_props = 1;
+ ev->status = status;
+ ev->props[0].len = prop_len;
+ bdaddr2android(bdaddr, ev->bdaddr);
+ ev->props[0].type = HAL_PROP_DEVICE_SERVICE_REC;
+
+ ipc_send_notif(hal_ipc, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_EV_REMOTE_DEVICE_PROPS,
+ sizeof(buf), buf);
+}
+
+static void find_remote_sdp_rec_cb(sdp_list_t *recs, int err,
+ gpointer user_data)
+{
+ uint8_t name_len = 0;
+ uint8_t status;
+ char name_buf[256];
+ int channel = 0;
+ bdaddr_t *addr = user_data;
+ bt_uuid_t uuid;
+ uuid_t uuid128_sdp;
+ sdp_list_t *protos;
+ sdp_record_t *sdp_rec;
+
+ if (err < 0) {
+ error("error while search remote sdp records");
+ status = HAL_STATUS_FAILED;
+ send_remote_sdp_rec_notify(NULL, 0, NULL, 0, status, addr);
+ }
+
+ for ( ; recs; recs = recs->next) {
+ sdp_rec = recs->data;
+
+ switch (sdp_rec->svclass.type) {
+ case SDP_UUID16:
+ sdp_uuid16_to_uuid128(&uuid128_sdp,
+ &sdp_rec->svclass);
+ break;
+ case SDP_UUID32:
+ sdp_uuid32_to_uuid128(&uuid128_sdp,
+ &sdp_rec->svclass);
+ break;
+ default:
+ break;
+ }
+
+ if (!sdp_get_access_protos(sdp_rec, &protos)) {
+ channel = sdp_get_proto_port(protos, L2CAP_UUID);
+ if (channel < 0)
+ error("wrong channel");
+ }
+
+ if (!sdp_get_service_name(sdp_rec, name_buf, sizeof(name_buf)))
+ name_len = (uint8_t)strlen(name_buf);
+
+ uuid.type = BT_UUID128;
+ memcpy(&uuid.value.u128, uuid128_sdp.value.uuid128.data,
+ sizeof(uuid.value.u128));
+ status = HAL_STATUS_SUCCESS;
+
+ send_remote_sdp_rec_notify(&uuid, channel, name_buf, name_len,
+ status, addr);
+ }
+
+ free(addr);
+}
+
+static uint8_t find_remote_sdp_rec(const bdaddr_t *addr,
+ const uint8_t *find_uuid)
+{
+ uuid_t uuid;
+ bdaddr_t *bdaddr;
+
+ /* from android we always get full 128bit length uuid */
+ sdp_uuid128_create(&uuid, find_uuid);
+
+ bdaddr = malloc(sizeof(*bdaddr));
+ memcpy(bdaddr, addr, sizeof(*bdaddr));
+
+ if (bt_search_service(&adapter.bdaddr, addr, &uuid,
+ find_remote_sdp_rec_cb, bdaddr, NULL, 0) < 0) {
+ free(bdaddr);
+ return HAL_STATUS_FAILED;
+ }
+
+ return HAL_STATUS_SUCCESS;
+}
+
static void new_link_key_callback(uint16_t index, uint16_t length,
const void *param, void *user_data)
{
@@ -4746,12 +4858,16 @@ failed:
static void handle_get_remote_service_rec_cmd(const void *buf, uint16_t len)
{
- /* TODO */
+ const struct hal_cmd_get_remote_service_rec *cmd = buf;
+ uint8_t status;
+ bdaddr_t addr;
+
+ android2bdaddr(&cmd->bdaddr, &addr);
- error("get_remote_service_record not supported");
+ status = find_remote_sdp_rec(&addr, cmd->uuid);
ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_BLUETOOTH,
- HAL_OP_GET_REMOTE_SERVICE_REC, HAL_STATUS_FAILED);
+ HAL_OP_GET_REMOTE_SERVICE_REC, status);
}
static void handle_start_discovery_cmd(const void *buf, uint16_t len)
--
1.9.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] android/pts: Update IOPT test results
2014-08-13 13:44 [PATCH 1/3] android/bluetooth: remove unused include Grzegorz Kolodziejczyk
2014-08-13 13:44 ` [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd Grzegorz Kolodziejczyk
@ 2014-08-13 13:44 ` Grzegorz Kolodziejczyk
2014-08-14 10:02 ` [PATCH 1/3] android/bluetooth: remove unused include Johan Hedberg
2 siblings, 0 replies; 6+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-08-13 13:44 UTC (permalink / raw)
To: linux-bluetooth
---
android/pts-iopt.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/android/pts-iopt.txt b/android/pts-iopt.txt
index 20962af..a0fe000 100644
--- a/android/pts-iopt.txt
+++ b/android/pts-iopt.txt
@@ -19,5 +19,7 @@ TC_COD_BV_02_I N/A Under PTS 5.1 test shall be disabled as there is
PICS settings for HFP shall be disabled for IOPT
TC_SDSS_BV_02_I PASS
TC_SDSA_BV_03_I FAIL JIRA #BA-92
-TC_SDR_BV_04_I FAIL JIRA #BA-95
+TC_SDR_BV_04_I PASS for every PTS profiles:
+ haltest: bluetooth get_remote_service_record <addr>
+ <requred 128 sdp uuid>
-------------------------------------------------------------------------------
--
1.9.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd
2014-08-13 13:44 ` [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd Grzegorz Kolodziejczyk
@ 2014-08-14 10:01 ` Johan Hedberg
2014-08-14 10:13 ` Grzegorz Kolodziejczyk
0 siblings, 1 reply; 6+ messages in thread
From: Johan Hedberg @ 2014-08-14 10:01 UTC (permalink / raw)
To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth
Hi Grzegorz,
On Wed, Aug 13, 2014, Grzegorz Kolodziejczyk wrote:
> +static void send_remote_sdp_rec_notify(bt_uuid_t *uuid, int channel,
> + char *name, uint8_t name_len,
> + uint8_t status, bdaddr_t *bdaddr)
> +{
> + struct hal_prop_device_service_rec *prop;
> + uint8_t buf[BASELEN_REMOTE_DEV_PROP + name_len + sizeof(*prop)];
> + struct hal_ev_remote_device_props *ev = (void *) buf;
> + int prop_len = sizeof(*prop) + name_len;
> +
> + memset(buf, 0, sizeof(buf));
> +
> + if (status == HAL_STATUS_SUCCESS) {
> + prop = malloc(sizeof(*prop) + name_len);
> + prop->name_len = name_len;
> + prop->channel = (uint16_t)channel;
> + memcpy(prop->name, name, name_len);
> + memcpy(prop->uuid, &uuid->value.u128, sizeof(prop->uuid));
> +
> + memcpy(ev->props[0].val, prop, prop_len);
> +
> + free(prop);
> + }
This whole extra malloc (which btw is missing a NULL check) seems
unnecessary to me. Why don't you simply do:
if (status == HAL_STATUS_SUCCESS) {
prop = (void *) &ev->props[0].val;
prop->name_len = name_len;
prop->channel = channel;
memcpy(prop->name, name, name_len);
memcpy(prop->uuid, &uuid->value.u128, sizeof(prop->uuid));
}
Johan
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] android/bluetooth: remove unused include
2014-08-13 13:44 [PATCH 1/3] android/bluetooth: remove unused include Grzegorz Kolodziejczyk
2014-08-13 13:44 ` [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd Grzegorz Kolodziejczyk
2014-08-13 13:44 ` [PATCH 3/3] android/pts: Update IOPT test results Grzegorz Kolodziejczyk
@ 2014-08-14 10:02 ` Johan Hedberg
2 siblings, 0 replies; 6+ messages in thread
From: Johan Hedberg @ 2014-08-14 10:02 UTC (permalink / raw)
To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth
Hi Grzegorz,
On Wed, Aug 13, 2014, Grzegorz Kolodziejczyk wrote:
> uuid-helper.h is no longer used in bluetooth.c
> ---
> android/bluetooth.c | 1 -
> 1 file changed, 1 deletion(-)
This patch has been applied. Thanks.
Johan
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd
2014-08-14 10:01 ` Johan Hedberg
@ 2014-08-14 10:13 ` Grzegorz Kolodziejczyk
0 siblings, 0 replies; 6+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-08-14 10:13 UTC (permalink / raw)
To: Grzegorz Kolodziejczyk, linux-bluetooth
Hi Johan,
On 14 August 2014 12:01, Johan Hedberg <johan.hedberg@gmail.com> wrote:
>
> Hi Grzegorz,
>
> On Wed, Aug 13, 2014, Grzegorz Kolodziejczyk wrote:
> > +static void send_remote_sdp_rec_notify(bt_uuid_t *uuid, int channel,
> > + char *name, uint8_t name_len,
> > + uint8_t status, bdaddr_t *bdaddr)
> > +{
> > + struct hal_prop_device_service_rec *prop;
> > + uint8_t buf[BASELEN_REMOTE_DEV_PROP + name_len + sizeof(*prop)];
> > + struct hal_ev_remote_device_props *ev = (void *) buf;
> > + int prop_len = sizeof(*prop) + name_len;
> > +
> > + memset(buf, 0, sizeof(buf));
> > +
> > + if (status == HAL_STATUS_SUCCESS) {
> > + prop = malloc(sizeof(*prop) + name_len);
> > + prop->name_len = name_len;
> > + prop->channel = (uint16_t)channel;
> > + memcpy(prop->name, name, name_len);
> > + memcpy(prop->uuid, &uuid->value.u128, sizeof(prop->uuid));
> > +
> > + memcpy(ev->props[0].val, prop, prop_len);
> > +
> > + free(prop);
> > + }
>
> This whole extra malloc (which btw is missing a NULL check) seems
> unnecessary to me. Why don't you simply do:
>
> if (status == HAL_STATUS_SUCCESS) {
> prop = (void *) &ev->props[0].val;
>
> prop->name_len = name_len;
> prop->channel = channel;
> memcpy(prop->name, name, name_len);
> memcpy(prop->uuid, &uuid->value.u128, sizeof(prop->uuid));
> }
Good catch, I agree - this is simpler solution. Thanks! I'll change it in v2
>
> Johan
BR,
Grzegorz
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-08-14 10:13 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-13 13:44 [PATCH 1/3] android/bluetooth: remove unused include Grzegorz Kolodziejczyk
2014-08-13 13:44 ` [PATCH 2/3] android/bluetooth: Add support for get remote service record property cmd Grzegorz Kolodziejczyk
2014-08-14 10:01 ` Johan Hedberg
2014-08-14 10:13 ` Grzegorz Kolodziejczyk
2014-08-13 13:44 ` [PATCH 3/3] android/pts: Update IOPT test results Grzegorz Kolodziejczyk
2014-08-14 10:02 ` [PATCH 1/3] android/bluetooth: remove unused include Johan Hedberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox