* [PATCH 00/10] android/map-client: Add MAP client daemon implementation
@ 2014-10-09 12:45 Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 01/10] android/map-client: Add initial files Grzegorz Kolodziejczyk
` (10 more replies)
0 siblings, 11 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth
v1.
*Add MAP client daemon implementation (skeleton, body)
*Add haltest MAP client support
Aleksander Drewnicki (4):
android/client: Add skeleton for mce calls
android/client: Add code for mce callback
android/client: Add code for mce method
android/client: Add completion for mce method
Grzegorz Kolodziejczyk (6):
android/map-client: Add initial files
android/map-client: Add stubs for MAP client commands handlers
android/map-client: Add support for get remote MAS instances
android/ipc-tester: Add missing service opcode boundries test cases
android/ipc-tester: Add case for MAP client service opcode boundries
android/ipc-tester: Add cases for MAP client msg size
android/Android.mk | 5 +-
android/Makefile.am | 2 +
android/client/haltest.c | 2 +
android/client/if-bt.c | 3 +
android/client/if-main.h | 3 +
android/client/if-mce.c | 87 +++++++++++++++++++++
android/ipc-tester.c | 32 ++++++++
android/main.c | 12 +++
android/map-client.c | 197 +++++++++++++++++++++++++++++++++++++++++++++++
android/map-client.h | 26 +++++++
10 files changed, 368 insertions(+), 1 deletion(-)
create mode 100644 android/client/if-mce.c
create mode 100644 android/map-client.c
create mode 100644 android/map-client.h
--
1.9.3
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 01/10] android/map-client: Add initial files
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 02/10] android/map-client: Add stubs for MAP client commands handlers Grzegorz Kolodziejczyk
` (9 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth
This adds initial daemon code for MAP client profile.
---
android/Android.mk | 1 +
android/Makefile.am | 1 +
android/main.c | 12 ++++++++++++
android/map-client.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
android/map-client.h | 26 ++++++++++++++++++++++++++
5 files changed, 84 insertions(+)
create mode 100644 android/map-client.c
create mode 100644 android/map-client.h
diff --git a/android/Android.mk b/android/Android.mk
index f25d60e..a9e5d4b 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -57,6 +57,7 @@ LOCAL_SRC_FILES := \
bluez/android/gatt.c \
bluez/android/health.c \
bluez/profiles/health/mcap.c \
+ bluez/android/map-client.c \
bluez/src/log.c \
bluez/src/shared/mgmt.c \
bluez/src/shared/util.c \
diff --git a/android/Makefile.am b/android/Makefile.am
index f11cff6..9279bbd 100644
--- a/android/Makefile.am
+++ b/android/Makefile.am
@@ -46,6 +46,7 @@ android_bluetoothd_SOURCES = android/main.c \
android/gatt.h android/gatt.c \
android/health.h android/health.c \
profiles/health/mcap.h profiles/health/mcap.c \
+ android/map-client.h android/map-client.c \
attrib/att.c attrib/att.h \
attrib/gatt.c attrib/gatt.h \
attrib/gattrib.c attrib/gattrib.h \
diff --git a/android/main.c b/android/main.c
index 703b3b6..b5f6937 100644
--- a/android/main.c
+++ b/android/main.c
@@ -62,6 +62,7 @@
#include "gatt.h"
#include "health.h"
#include "handsfree-client.h"
+#include "map-client.h"
#include "utils.h"
#define DEFAULT_VENDOR "BlueZ"
@@ -235,6 +236,14 @@ static void service_register(const void *buf, uint16_t len)
}
break;
+ case HAL_SERVICE_ID_MAP_CLIENT:
+ if (!bt_map_client_register(hal_ipc, &adapter_bdaddr,
+ m->mode)) {
+ status = HAL_STATUS_FAILED;
+ goto failed;
+ }
+
+ break;
default:
DBG("service %u not supported", m->service_id);
status = HAL_STATUS_FAILED;
@@ -288,6 +297,9 @@ static bool unregister_service(uint8_t id)
case HAL_SERVICE_ID_HANDSFREE_CLIENT:
bt_hf_client_unregister();
break;
+ case HAL_SERVICE_ID_MAP_CLIENT:
+ bt_map_client_unregister();
+ break;
default:
DBG("service %u not supported", id);
return false;
diff --git a/android/map-client.c b/android/map-client.c
new file mode 100644
index 0000000..4556461
--- /dev/null
+++ b/android/map-client.c
@@ -0,0 +1,44 @@
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2014 Intel Corporation. All rights reserved.
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "ipc.h"
+#include "lib/bluetooth.h"
+#include "map-client.h"
+
+bool bt_map_client_register(struct ipc *ipc, const bdaddr_t *addr, uint8_t mode)
+{
+ return false;
+}
+
+void bt_map_client_unregister(void)
+{
+
+}
diff --git a/android/map-client.h b/android/map-client.h
new file mode 100644
index 0000000..0e63072
--- /dev/null
+++ b/android/map-client.h
@@ -0,0 +1,26 @@
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2014 Intel Corporation. All rights reserved.
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+bool bt_map_client_register(struct ipc *ipc, const bdaddr_t *addr,
+ uint8_t mode);
+void bt_map_client_unregister(void);
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 02/10] android/map-client: Add stubs for MAP client commands handlers
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 01/10] android/map-client: Add initial files Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-13 19:58 ` Szymon Janc
2014-10-09 12:45 ` [PATCH 03/10] android/map-client: Add support for get remote MAS instances Grzegorz Kolodziejczyk
` (8 subsequent siblings)
10 siblings, 1 reply; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth
Add empty handlers for MAP client IPC commands.
---
android/map-client.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/android/map-client.c b/android/map-client.c
index 4556461..1001b36 100644
--- a/android/map-client.c
+++ b/android/map-client.c
@@ -28,17 +28,48 @@
#include <stdbool.h>
#include <stdlib.h>
#include <stdint.h>
+#include <glib.h>
#include "ipc.h"
#include "lib/bluetooth.h"
#include "map-client.h"
+#include "src/log.h"
+#include "hal-msg.h"
+
+static struct ipc *hal_ipc = NULL;
+static bdaddr_t adapter_addr;
+
+static void handle_get_instances(const void *buf, uint16_t len)
+{
+ DBG("");
+
+ ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
+ HAL_OP_MAP_CLIENT_GET_INSTANCES, HAL_STATUS_FAILED);
+}
+
+static const struct ipc_handler cmd_handlers[] = {
+ {handle_get_instances, false,
+ sizeof(struct hal_cmd_map_client_get_instances)},
+};
bool bt_map_client_register(struct ipc *ipc, const bdaddr_t *addr, uint8_t mode)
{
- return false;
+ DBG("");
+
+ bacpy(&adapter_addr, addr);
+
+ hal_ipc = ipc;
+
+ ipc_register(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT, cmd_handlers,
+ G_N_ELEMENTS(cmd_handlers));
+
+ return true;
}
void bt_map_client_unregister(void)
{
+ DBG("");
+ ipc_unregister(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT);
+ hal_ipc = NULL;
}
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 03/10] android/map-client: Add support for get remote MAS instances
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 01/10] android/map-client: Add initial files Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 02/10] android/map-client: Add stubs for MAP client commands handlers Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-13 20:19 ` Szymon Janc
2014-10-09 12:45 ` [PATCH 04/10] android/ipc-tester: Add missing service opcode boundries test cases Grzegorz Kolodziejczyk
` (7 subsequent siblings)
10 siblings, 1 reply; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth
This allows to get remote mas instances. In case of wrong sdp record
fail status will be returned in notification.
---
android/map-client.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 123 insertions(+), 1 deletion(-)
diff --git a/android/map-client.c b/android/map-client.c
index 1001b36..adeae4b 100644
--- a/android/map-client.c
+++ b/android/map-client.c
@@ -30,21 +30,143 @@
#include <stdint.h>
#include <glib.h>
+#include "lib/sdp.h"
+#include "lib/sdp_lib.h"
+#include "src/sdp-client.h"
+
#include "ipc.h"
#include "lib/bluetooth.h"
#include "map-client.h"
#include "src/log.h"
#include "hal-msg.h"
+#include "ipc-common.h"
+#include "utils.h"
+#include "src/shared/util.h"
static struct ipc *hal_ipc = NULL;
static bdaddr_t adapter_addr;
+static int fill_mce_inst(void *buf, int32_t id, int32_t scn, int32_t msg_type,
+ const void *name, uint8_t name_len)
+{
+ struct hal_map_client_mas_instance *inst = buf;
+
+ inst->id = id;
+ inst->scn = scn;
+ inst->msg_types = msg_type;
+ inst->name_len = name_len;
+
+ if (name_len)
+ memcpy(inst->name, name, name_len);
+
+ return sizeof(*inst) + name_len;
+}
+
+static void map_client_sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
+{
+ uint8_t buf[IPC_MTU];
+ struct hal_ev_map_client_remote_mas_instances *ev = (void *) buf;
+ bdaddr_t *dst = data;
+ sdp_list_t *list, *protos;
+ uint8_t status;
+ int32_t id, scn, msg_type, name_len, num_instances = 0;
+ char *name;
+ size_t size;
+
+ size = sizeof(*ev);
+ bdaddr2android(dst, &ev->bdaddr);
+
+ if (err < 0) {
+ error("mce: Unable to get SDP record: %s", strerror(-err));
+ status = HAL_STATUS_FAILED;
+ goto fail;
+ }
+
+ for (list = recs; list != NULL; list = list->next) {
+ sdp_record_t *rec = list->data;
+ sdp_data_t *data;
+
+ data = sdp_data_get(rec, SDP_ATTR_MAS_INSTANCE_ID);
+ if (data) {
+ id = data->val.uint8;
+ } else {
+ error("mce: cannot get mas instance id");
+ status = HAL_STATUS_FAILED;
+ goto fail;
+ }
+
+ data = sdp_data_get(rec, SDP_ATTR_SVCNAME_PRIMARY);
+ if (data) {
+ name = data->val.str;
+ name_len = data->unitSize;
+ } else {
+ error("mce: cannot get mas instance name");
+ status = HAL_STATUS_FAILED;
+ goto fail;
+ }
+
+ data = sdp_data_get(rec, SDP_ATTR_SUPPORTED_MESSAGE_TYPES);
+ if (data) {
+ msg_type = data->val.uint8;
+ } else {
+ error("mce: cannot get mas instance msg type");
+ status = HAL_STATUS_FAILED;
+ goto fail;
+ }
+
+ if (!sdp_get_access_protos(rec, &protos)) {
+ scn = sdp_get_proto_port(protos, RFCOMM_UUID);
+
+ sdp_list_foreach(protos,
+ (sdp_list_func_t) sdp_list_free, NULL);
+ sdp_list_free(protos, NULL);
+ } else {
+ error("mce: cannot get mas instance rfcomm channel");
+ status = HAL_STATUS_FAILED;
+ goto fail;
+ }
+
+ size += fill_mce_inst(buf + size, id, scn, msg_type, name,
+ name_len);
+ num_instances++;
+ }
+
+ status = HAL_STATUS_SUCCESS;
+
+fail:
+ ev->num_instances = num_instances;
+ ev->status = status;
+
+ ipc_send_notif(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
+ HAL_EV_MAP_CLIENT_REMOTE_MAS_INSTANCES, size, buf);
+
+ free(dst);
+}
+
static void handle_get_instances(const void *buf, uint16_t len)
{
+ const struct hal_cmd_map_client_get_instances *cmd = buf;
+ uint8_t status;
+ bdaddr_t *dst;
+ uuid_t uuid;
+
DBG("");
+ dst = new0(bdaddr_t, 1);
+ android2bdaddr(&cmd->bdaddr, dst);
+
+ sdp_uuid16_create(&uuid, MAP_MSE_SVCLASS_ID);
+
+ if (bt_search_service(&adapter_addr, dst, &uuid,
+ map_client_sdp_search_cb, dst, NULL, 0)) {
+ error("mce: Failed to search SDP details");
+ status = HAL_STATUS_FAILED;
+ free(dst);
+ }
+
+ status = HAL_STATUS_SUCCESS;
ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
- HAL_OP_MAP_CLIENT_GET_INSTANCES, HAL_STATUS_FAILED);
+ HAL_OP_MAP_CLIENT_GET_INSTANCES, status);
}
static const struct ipc_handler cmd_handlers[] = {
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 04/10] android/ipc-tester: Add missing service opcode boundries test cases
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (2 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 03/10] android/map-client: Add support for get remote MAS instances Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-13 20:32 ` Szymon Janc
2014-10-09 12:45 ` [PATCH 05/10] android/ipc-tester: Add case for MAP client service opcode boundries Grzegorz Kolodziejczyk
` (6 subsequent siblings)
10 siblings, 1 reply; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth
This patch adds tests sending out of range opcode for each service.
---
android/ipc-tester.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/android/ipc-tester.c b/android/ipc-tester.c
index ea71c8d..161777d 100644
--- a/android/ipc-tester.c
+++ b/android/ipc-tester.c
@@ -919,9 +919,23 @@ int main(int argc, char *argv[])
test_opcode_valid("PAN", HAL_SERVICE_ID_PAN, 0x05, 0,
HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
+ test_opcode_valid("HANDSFREE", HAL_SERVICE_ID_HANDSFREE, 0x0f, 0,
+ HAL_SERVICE_ID_BLUETOOTH,
+ HAL_SERVICE_ID_HANDSFREE);
+
test_opcode_valid("A2DP", HAL_SERVICE_ID_A2DP, 0x03, 0,
HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
+ test_opcode_valid("HEALTH", HAL_SERVICE_ID_HEALTH, 0x06, 0,
+ HAL_SERVICE_ID_BLUETOOTH,
+ HAL_SERVICE_ID_HEALTH);
+
+ test_opcode_valid("AVRCP", HAL_SERVICE_ID_AVRCP, 0x0b, 0,
+ HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_AVRCP);
+
+ test_opcode_valid("GATT", HAL_SERVICE_ID_GATT, 0x24, 0,
+ HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_GATT);
+
test_opcode_valid("HF_CLIENT", HAL_SERVICE_ID_HANDSFREE_CLIENT, 0x10, 0,
HAL_SERVICE_ID_BLUETOOTH,
HAL_SERVICE_ID_HANDSFREE_CLIENT);
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 05/10] android/ipc-tester: Add case for MAP client service opcode boundries
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (3 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 04/10] android/ipc-tester: Add missing service opcode boundries test cases Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 06/10] android/ipc-tester: Add cases for MAP client msg size Grzegorz Kolodziejczyk
` (5 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth
This patch adds test sending out of range opcode for service.
---
android/ipc-tester.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/android/ipc-tester.c b/android/ipc-tester.c
index 161777d..7dd25e8 100644
--- a/android/ipc-tester.c
+++ b/android/ipc-tester.c
@@ -940,6 +940,10 @@ int main(int argc, char *argv[])
HAL_SERVICE_ID_BLUETOOTH,
HAL_SERVICE_ID_HANDSFREE_CLIENT);
+ test_opcode_valid("MAP_CLIENT", HAL_SERVICE_ID_MAP_CLIENT, 0x01, 0,
+ HAL_SERVICE_ID_BLUETOOTH,
+ HAL_SERVICE_ID_MAP_CLIENT);
+
/* check for valid data size */
test_datasize_valid("CORE Register+", HAL_SERVICE_ID_CORE,
HAL_OP_REGISTER_MODULE,
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 06/10] android/ipc-tester: Add cases for MAP client msg size
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (4 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 05/10] android/ipc-tester: Add case for MAP client service opcode boundries Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 07/10] android/client: Add skeleton for mce calls Grzegorz Kolodziejczyk
` (4 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth
Add cases testing message size verification for MAP client opcodes.
---
android/ipc-tester.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/android/ipc-tester.c b/android/ipc-tester.c
index 7dd25e8..357dda9 100644
--- a/android/ipc-tester.c
+++ b/android/ipc-tester.c
@@ -1486,5 +1486,19 @@ int main(int argc, char *argv[])
HAL_SERVICE_ID_BLUETOOTH,
HAL_SERVICE_ID_HANDSFREE_CLIENT);
+ /* check for valid data size for MAP CLIENT */
+ test_datasize_valid("MAP CLIENT Get instances+",
+ HAL_SERVICE_ID_MAP_CLIENT,
+ HAL_OP_MAP_CLIENT_GET_INSTANCES,
+ sizeof(struct hal_cmd_map_client_get_instances),
+ 1, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_SERVICE_ID_MAP_CLIENT);
+ test_datasize_valid("MAP CLIENT Get instances-",
+ HAL_SERVICE_ID_MAP_CLIENT,
+ HAL_OP_MAP_CLIENT_GET_INSTANCES,
+ sizeof(struct hal_cmd_map_client_get_instances),
+ -1, HAL_SERVICE_ID_BLUETOOTH,
+ HAL_SERVICE_ID_MAP_CLIENT);
+
return tester_run();
}
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 07/10] android/client: Add skeleton for mce calls
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (5 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 06/10] android/ipc-tester: Add cases for MAP client msg size Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 08/10] android/client: Add code for mce callback Grzegorz Kolodziejczyk
` (3 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Aleksander Drewnicki
From: Aleksander Drewnicki <ext.aleksander.drewnicki@tieto.com>
This patch adds skeleton for all methods of mce along with
all callbacks.
---
android/Android.mk | 4 +++-
android/Makefile.am | 1 +
android/client/haltest.c | 2 ++
android/client/if-bt.c | 3 +++
android/client/if-main.h | 3 +++
android/client/if-mce.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 74 insertions(+), 1 deletion(-)
create mode 100644 android/client/if-mce.c
diff --git a/android/Android.mk b/android/Android.mk
index a9e5d4b..aefe41c 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -184,7 +184,9 @@ LOCAL_SRC_FILES := \
bluez/android/hal-utils.c \
ifeq ($(BLUEZ_EXTENSIONS), true)
-LOCAL_SRC_FILES += bluez/android/client/if-hf-client.c
+LOCAL_SRC_FILES += \
+ bluez/android/client/if-hf-client.c \
+ bluez/android/client/if-mce.c
endif
LOCAL_C_INCLUDES += \
diff --git a/android/Makefile.am b/android/Makefile.am
index 9279bbd..b3eb1c5 100644
--- a/android/Makefile.am
+++ b/android/Makefile.am
@@ -125,6 +125,7 @@ android_haltest_SOURCES = android/client/haltest.c \
android/client/if-sock.c \
android/client/if-audio.c \
android/client/if-sco.c \
+ android/client/if-mce.c \
android/hardware/hardware.c \
android/hal-utils.h android/hal-utils.c
android_haltest_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/android \
diff --git a/android/client/haltest.c b/android/client/haltest.c
index 5e1633d..781e45c 100644
--- a/android/client/haltest.c
+++ b/android/client/haltest.c
@@ -50,6 +50,7 @@ const struct interface *interfaces[] = {
&sock_if,
#ifdef BLUEZ_EXTENSIONS
&hf_client_if,
+ &mce_if,
#endif
NULL
};
@@ -397,6 +398,7 @@ static void init(void)
BT_PROFILE_SOCKETS_ID,
#ifdef BLUEZ_EXTENSIONS
BT_PROFILE_HANDSFREE_CLIENT_ID,
+ BT_PROFILE_MAP_CLIENT_ID,
#endif
};
const struct method *m;
diff --git a/android/client/if-bt.c b/android/client/if-bt.c
index 8f98ef3..2d7ac79 100644
--- a/android/client/if-bt.c
+++ b/android/client/if-bt.c
@@ -736,6 +736,7 @@ static void get_profile_interface_c(int argc, const char **argv,
BT_PROFILE_AV_RC_ID,
#ifdef BLUEZ_EXTENSIONS
BT_PROFILE_HANDSFREE_CLIENT_ID,
+ BT_PROFILE_MAP_CLIENT_ID,
#endif
NULL
};
@@ -778,6 +779,8 @@ static void get_profile_interface_p(int argc, const char **argv)
#ifdef BLUEZ_EXTENSIONS
else if (strcmp(BT_PROFILE_HANDSFREE_CLIENT_ID, id) == 0)
pif = (const void **) &if_hf_client;
+ else if (strcmp(BT_PROFILE_MAP_CLIENT_ID, id) == 0)
+ pif = (const void **) &if_mce;
#endif
else
haltest_error("%s is not correct for get_profile_interface\n",
diff --git a/android/client/if-main.h b/android/client/if-main.h
index 8aac3e3..cb5f558 100644
--- a/android/client/if-main.h
+++ b/android/client/if-main.h
@@ -39,6 +39,7 @@
#ifdef BLUEZ_EXTENSIONS
#include <hardware/bt_hf_client.h>
+#include <hardware/bt_mce.h>
#endif
#include <hardware/bt_rc.h>
@@ -63,6 +64,7 @@ extern const btgatt_server_interface_t *if_gatt_server;
extern const btgatt_client_interface_t *if_gatt_client;
#ifdef BLUEZ_EXTENSIONS
extern const bthf_client_interface_t *if_hf_client;
+extern const btmce_interface_t *if_mce;
#endif
/*
@@ -89,6 +91,7 @@ extern const struct interface hh_if;
extern const struct interface hl_if;
#ifdef BLUEZ_EXTENSIONS
extern const struct interface hf_client_if;
+extern const struct interface mce_if;
#endif
/* Interfaces that will show up in tool (first part of command line) */
diff --git a/android/client/if-mce.c b/android/client/if-mce.c
new file mode 100644
index 0000000..f9ff5f1
--- /dev/null
+++ b/android/client/if-mce.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2014 Intel Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "if-main.h"
+#include "../hal-utils.h"
+
+const btmce_interface_t *if_mce = NULL;
+
+/*
+ * Callback for get_remote_mas_instances
+ */
+static void btmce_remote_mas_instances_cb(bt_status_t status,
+ bt_bdaddr_t *bd_addr,
+ int num_instances,
+ btmce_mas_instance_t *instances)
+{
+}
+
+static btmce_callbacks_t mce_cbacks = {
+ .size = sizeof(mce_cbacks),
+ .remote_mas_instances_cb = btmce_remote_mas_instances_cb,
+};
+
+/* init */
+
+static void init_p(int argc, const char **argv)
+{
+ RETURN_IF_NULL(if_mce);
+
+ EXEC(if_mce->init, &mce_cbacks);
+}
+
+/* search for MAS instances on remote device */
+
+static void get_remote_mas_instances_p(int argc, const char **argv)
+{
+}
+
+static struct method methods[] = {
+ STD_METHOD(init),
+ STD_METHODH(get_remote_mas_instances, "<addr>"),
+ END_METHOD
+};
+
+const struct interface mce_if = {
+ .name = "mce",
+ .methods = methods
+};
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 08/10] android/client: Add code for mce callback
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (6 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 07/10] android/client: Add skeleton for mce calls Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 09/10] android/client: Add code for mce method Grzegorz Kolodziejczyk
` (2 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Aleksander Drewnicki
From: Aleksander Drewnicki <ext.aleksander.drewnicki@tieto.com>
This adds implementation for mce callback.
---
android/client/if-mce.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/android/client/if-mce.c b/android/client/if-mce.c
index f9ff5f1..c671fb2 100644
--- a/android/client/if-mce.c
+++ b/android/client/if-mce.c
@@ -28,6 +28,16 @@ static void btmce_remote_mas_instances_cb(bt_status_t status,
int num_instances,
btmce_mas_instance_t *instances)
{
+ int i;
+
+ haltest_info("%s: status=%s bd_addr=%s num_instance=%d\n", __func__,
+ bt_status_t2str(status), bdaddr2str(bd_addr),
+ num_instances);
+
+ for (i = 0; i < num_instances; i++)
+ haltest_info("id=%d scn=%d msg_types=%d name=%s\n",
+ instances[i].id, instances[i].scn,
+ instances[i].msg_types, instances[i].p_name);
}
static btmce_callbacks_t mce_cbacks = {
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 09/10] android/client: Add code for mce method
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (7 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 08/10] android/client: Add code for mce callback Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 10/10] android/client: Add completion " Grzegorz Kolodziejczyk
2014-10-13 20:47 ` [PATCH 00/10] android/map-client: Add MAP client daemon implementation Szymon Janc
10 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Aleksander Drewnicki
From: Aleksander Drewnicki <ext.aleksander.drewnicki@tieto.com>
This patch adds implementation of mce method to haltest.
---
android/client/if-mce.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/android/client/if-mce.c b/android/client/if-mce.c
index c671fb2..76c9f73 100644
--- a/android/client/if-mce.c
+++ b/android/client/if-mce.c
@@ -58,6 +58,12 @@ static void init_p(int argc, const char **argv)
static void get_remote_mas_instances_p(int argc, const char **argv)
{
+ bt_bdaddr_t addr;
+
+ RETURN_IF_NULL(if_mce);
+ VERIFY_ADDR_ARG(2, &addr);
+
+ EXEC(if_mce->get_remote_mas_instances, &addr);
}
static struct method methods[] = {
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 10/10] android/client: Add completion for mce method
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (8 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 09/10] android/client: Add code for mce method Grzegorz Kolodziejczyk
@ 2014-10-09 12:45 ` Grzegorz Kolodziejczyk
2014-10-13 20:47 ` [PATCH 00/10] android/map-client: Add MAP client daemon implementation Szymon Janc
10 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-09 12:45 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Aleksander Drewnicki
From: Aleksander Drewnicki <ext.aleksander.drewnicki@tieto.com>
This patch adds completion functions to mce method.
---
android/client/if-mce.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/android/client/if-mce.c b/android/client/if-mce.c
index 76c9f73..5f101e0 100644
--- a/android/client/if-mce.c
+++ b/android/client/if-mce.c
@@ -54,6 +54,15 @@ static void init_p(int argc, const char **argv)
EXEC(if_mce->init, &mce_cbacks);
}
+static void get_remote_mas_instances_c(int argc, const char **argv,
+ enum_func *enum_func, void **user)
+{
+ if (argc == 3) {
+ *user = NULL;
+ *enum_func = enum_devices;
+ }
+}
+
/* search for MAS instances on remote device */
static void get_remote_mas_instances_p(int argc, const char **argv)
@@ -68,7 +77,7 @@ static void get_remote_mas_instances_p(int argc, const char **argv)
static struct method methods[] = {
STD_METHOD(init),
- STD_METHODH(get_remote_mas_instances, "<addr>"),
+ STD_METHODCH(get_remote_mas_instances, "<addr>"),
END_METHOD
};
--
1.9.3
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 02/10] android/map-client: Add stubs for MAP client commands handlers
2014-10-09 12:45 ` [PATCH 02/10] android/map-client: Add stubs for MAP client commands handlers Grzegorz Kolodziejczyk
@ 2014-10-13 19:58 ` Szymon Janc
2014-10-14 8:58 ` Grzegorz Kolodziejczyk
0 siblings, 1 reply; 18+ messages in thread
From: Szymon Janc @ 2014-10-13 19:58 UTC (permalink / raw)
To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth
Hi Grzegorz,
On Thursday 09 October 2014 14:45:06 Grzegorz Kolodziejczyk wrote:
> Add empty handlers for MAP client IPC commands.
> ---
> android/map-client.c | 33 ++++++++++++++++++++++++++++++++-
> 1 file changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/android/map-client.c b/android/map-client.c
> index 4556461..1001b36 100644
> --- a/android/map-client.c
> +++ b/android/map-client.c
> @@ -28,17 +28,48 @@
> #include <stdbool.h>
> #include <stdlib.h>
> #include <stdint.h>
> +#include <glib.h>
>
> #include "ipc.h"
> #include "lib/bluetooth.h"
> #include "map-client.h"
> +#include "src/log.h"
> +#include "hal-msg.h"
> +
> +static struct ipc *hal_ipc = NULL;
> +static bdaddr_t adapter_addr;
> +
> +static void handle_get_instances(const void *buf, uint16_t len)
> +{
> + DBG("");
> +
> + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
> + HAL_OP_MAP_CLIENT_GET_INSTANCES, HAL_STATUS_FAILED);
> +}
> +
> +static const struct ipc_handler cmd_handlers[] = {
> + {handle_get_instances, false,
> + sizeof(struct hal_cmd_map_client_get_instances)},
Style issue: there should be spaces after { and before }.
Also please add comment about define type just like in other handlers (I'm
aware that there is just 1 handler here but lets be consistent).
> +};
>
> bool bt_map_client_register(struct ipc *ipc, const bdaddr_t *addr, uint8_t
> mode) {
> - return false;
> + DBG("");
> +
> + bacpy(&adapter_addr, addr);
> +
> + hal_ipc = ipc;
> +
> + ipc_register(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT, cmd_handlers,
> + G_N_ELEMENTS(cmd_handlers));
> +
> + return true;
> }
>
> void bt_map_client_unregister(void)
> {
> + DBG("");
>
> + ipc_unregister(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT);
> + hal_ipc = NULL;
> }
--
Szymon K. Janc
szymon.janc@gmail.com
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 03/10] android/map-client: Add support for get remote MAS instances
2014-10-09 12:45 ` [PATCH 03/10] android/map-client: Add support for get remote MAS instances Grzegorz Kolodziejczyk
@ 2014-10-13 20:19 ` Szymon Janc
2014-10-14 9:01 ` Grzegorz Kolodziejczyk
0 siblings, 1 reply; 18+ messages in thread
From: Szymon Janc @ 2014-10-13 20:19 UTC (permalink / raw)
To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth
On Thursday 09 October 2014 14:45:07 Grzegorz Kolodziejczyk wrote:
> This allows to get remote mas instances. In case of wrong sdp record
> fail status will be returned in notification.
> ---
> android/map-client.c | 124
> ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123
> insertions(+), 1 deletion(-)
>
> diff --git a/android/map-client.c b/android/map-client.c
> index 1001b36..adeae4b 100644
> --- a/android/map-client.c
> +++ b/android/map-client.c
> @@ -30,21 +30,143 @@
> #include <stdint.h>
> #include <glib.h>
>
> +#include "lib/sdp.h"
> +#include "lib/sdp_lib.h"
> +#include "src/sdp-client.h"
> +
> #include "ipc.h"
> #include "lib/bluetooth.h"
> #include "map-client.h"
> #include "src/log.h"
> #include "hal-msg.h"
> +#include "ipc-common.h"
> +#include "utils.h"
> +#include "src/shared/util.h"
>
> static struct ipc *hal_ipc = NULL;
> static bdaddr_t adapter_addr;
>
> +static int fill_mce_inst(void *buf, int32_t id, int32_t scn, int32_t
> msg_type, + const void *name, uint8_t name_len)
> +{
> + struct hal_map_client_mas_instance *inst = buf;
> +
> + inst->id = id;
> + inst->scn = scn;
> + inst->msg_types = msg_type;
> + inst->name_len = name_len;
> +
> + if (name_len)
> + memcpy(inst->name, name, name_len);
> +
> + return sizeof(*inst) + name_len;
> +}
> +
> +static void map_client_sdp_search_cb(sdp_list_t *recs, int err, gpointer
> data) +{
> + uint8_t buf[IPC_MTU];
> + struct hal_ev_map_client_remote_mas_instances *ev = (void *) buf;
> + bdaddr_t *dst = data;
> + sdp_list_t *list, *protos;
> + uint8_t status;
> + int32_t id, scn, msg_type, name_len, num_instances = 0;
> + char *name;
> + size_t size;
> +
> + size = sizeof(*ev);
> + bdaddr2android(dst, &ev->bdaddr);
> +
> + if (err < 0) {
> + error("mce: Unable to get SDP record: %s", strerror(-err));
> + status = HAL_STATUS_FAILED;
> + goto fail;
> + }
> +
> + for (list = recs; list != NULL; list = list->next) {
> + sdp_record_t *rec = list->data;
> + sdp_data_t *data;
> +
> + data = sdp_data_get(rec, SDP_ATTR_MAS_INSTANCE_ID);
> + if (data) {
> + id = data->val.uint8;
> + } else {
> + error("mce: cannot get mas instance id");
> + status = HAL_STATUS_FAILED;
> + goto fail;
I'm not sure if we should fail here. Lets just skip record (we can leave error
message) and continue with search.
Also make it like: if (!data) {error(); continue;};
Not need for if-else
> + }
> +
> + data = sdp_data_get(rec, SDP_ATTR_SVCNAME_PRIMARY);
> + if (data) {
> + name = data->val.str;
> + name_len = data->unitSize;
> + } else {
> + error("mce: cannot get mas instance name");
> + status = HAL_STATUS_FAILED;
> + goto fail;
> + }
> +
> + data = sdp_data_get(rec, SDP_ATTR_SUPPORTED_MESSAGE_TYPES);
> + if (data) {
> + msg_type = data->val.uint8;
> + } else {
> + error("mce: cannot get mas instance msg type");
> + status = HAL_STATUS_FAILED;
> + goto fail;
> + }
> +
> + if (!sdp_get_access_protos(rec, &protos)) {
> + scn = sdp_get_proto_port(protos, RFCOMM_UUID);
> +
> + sdp_list_foreach(protos,
> + (sdp_list_func_t) sdp_list_free, NULL);
> + sdp_list_free(protos, NULL);
> + } else {
> + error("mce: cannot get mas instance rfcomm channel");
> + status = HAL_STATUS_FAILED;
> + goto fail;
> + }
> +
> + size += fill_mce_inst(buf + size, id, scn, msg_type, name,
> + name_len);
> + num_instances++;
> + }
> +
> + status = HAL_STATUS_SUCCESS;
Please check if we are expected to return error if no instances were found.
> +
> +fail:
> + ev->num_instances = num_instances;
> + ev->status = status;
> +
> + ipc_send_notif(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
> + HAL_EV_MAP_CLIENT_REMOTE_MAS_INSTANCES, size, buf);
> +
> + free(dst);
> +}
> +
> static void handle_get_instances(const void *buf, uint16_t len)
> {
> + const struct hal_cmd_map_client_get_instances *cmd = buf;
> + uint8_t status;
> + bdaddr_t *dst;
> + uuid_t uuid;
> +
> DBG("");
>
> + dst = new0(bdaddr_t, 1);
Please check if allocation failed.
> + android2bdaddr(&cmd->bdaddr, dst);
> +
> + sdp_uuid16_create(&uuid, MAP_MSE_SVCLASS_ID);
> +
> + if (bt_search_service(&adapter_addr, dst, &uuid,
> + map_client_sdp_search_cb, dst, NULL, 0)) {
Just a hint: you can pass free as destroy function here instead of taking care
of that in callback.
> + error("mce: Failed to search SDP details");
> + status = HAL_STATUS_FAILED;
> + free(dst);
> + }
> +
> + status = HAL_STATUS_SUCCESS;
In case of error status is overwritten.
> ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
> - HAL_OP_MAP_CLIENT_GET_INSTANCES, HAL_STATUS_FAILED);
> + HAL_OP_MAP_CLIENT_GET_INSTANCES, status);
> }
>
> static const struct ipc_handler cmd_handlers[] = {
--
Szymon K. Janc
szymon.janc@gmail.com
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 04/10] android/ipc-tester: Add missing service opcode boundries test cases
2014-10-09 12:45 ` [PATCH 04/10] android/ipc-tester: Add missing service opcode boundries test cases Grzegorz Kolodziejczyk
@ 2014-10-13 20:32 ` Szymon Janc
2014-10-14 9:02 ` Grzegorz Kolodziejczyk
0 siblings, 1 reply; 18+ messages in thread
From: Szymon Janc @ 2014-10-13 20:32 UTC (permalink / raw)
To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth
Hi Grzegorz,
On Thursday 09 October 2014 14:45:08 Grzegorz Kolodziejczyk wrote:
> This patch adds tests sending out of range opcode for each service.
> ---
> android/ipc-tester.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/android/ipc-tester.c b/android/ipc-tester.c
> index ea71c8d..161777d 100644
> --- a/android/ipc-tester.c
> +++ b/android/ipc-tester.c
> @@ -919,9 +919,23 @@ int main(int argc, char *argv[])
> test_opcode_valid("PAN", HAL_SERVICE_ID_PAN, 0x05, 0,
> HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
>
> + test_opcode_valid("HANDSFREE", HAL_SERVICE_ID_HANDSFREE, 0x0f, 0,
> + HAL_SERVICE_ID_BLUETOOTH,
> + HAL_SERVICE_ID_HANDSFREE);
> +
> test_opcode_valid("A2DP", HAL_SERVICE_ID_A2DP, 0x03, 0,
> HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
>
> + test_opcode_valid("HEALTH", HAL_SERVICE_ID_HEALTH, 0x06, 0,
> + HAL_SERVICE_ID_BLUETOOTH,
> + HAL_SERVICE_ID_HEALTH);
> +
> + test_opcode_valid("AVRCP", HAL_SERVICE_ID_AVRCP, 0x0b, 0,
> + HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_AVRCP);
> +
> + test_opcode_valid("GATT", HAL_SERVICE_ID_GATT, 0x24, 0,
> + HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_GATT);
> +
> test_opcode_valid("HF_CLIENT", HAL_SERVICE_ID_HANDSFREE_CLIENT, 0x10, 0,
> HAL_SERVICE_ID_BLUETOOTH,
> HAL_SERVICE_ID_HANDSFREE_CLIENT);
In future please don't send unrelated patches as part of serie. This makes
review easier and also makes no unnecessary delays in getting such patches
merged.
Applied. Thanks.
--
Szymon K. Janc
szymon.janc@gmail.com
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 00/10] android/map-client: Add MAP client daemon implementation
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
` (9 preceding siblings ...)
2014-10-09 12:45 ` [PATCH 10/10] android/client: Add completion " Grzegorz Kolodziejczyk
@ 2014-10-13 20:47 ` Szymon Janc
10 siblings, 0 replies; 18+ messages in thread
From: Szymon Janc @ 2014-10-13 20:47 UTC (permalink / raw)
To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth
Hi Grzegorz,
On Thursday 09 October 2014 14:45:04 Grzegorz Kolodziejczyk wrote:
> v1.
> *Add MAP client daemon implementation (skeleton, body)
> *Add haltest MAP client support
>
> Aleksander Drewnicki (4):
> android/client: Add skeleton for mce calls
> android/client: Add code for mce callback
> android/client: Add code for mce method
> android/client: Add completion for mce method
>
> Grzegorz Kolodziejczyk (6):
> android/map-client: Add initial files
> android/map-client: Add stubs for MAP client commands handlers
> android/map-client: Add support for get remote MAS instances
> android/ipc-tester: Add missing service opcode boundries test cases
> android/ipc-tester: Add case for MAP client service opcode boundries
> android/ipc-tester: Add cases for MAP client msg size
>
> android/Android.mk | 5 +-
> android/Makefile.am | 2 +
> android/client/haltest.c | 2 +
> android/client/if-bt.c | 3 +
> android/client/if-main.h | 3 +
> android/client/if-mce.c | 87 +++++++++++++++++++++
> android/ipc-tester.c | 32 ++++++++
> android/main.c | 12 +++
> android/map-client.c | 197
> +++++++++++++++++++++++++++++++++++++++++++++++ android/map-client.h |
> 26 +++++++
> 10 files changed, 368 insertions(+), 1 deletion(-)
> create mode 100644 android/client/if-mce.c
> create mode 100644 android/map-client.c
> create mode 100644 android/map-client.h
android/client patches are now upstream so no need to resend them. Thanks.
--
Szymon K. Janc
szymon.janc@gmail.com
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 02/10] android/map-client: Add stubs for MAP client commands handlers
2014-10-13 19:58 ` Szymon Janc
@ 2014-10-14 8:58 ` Grzegorz Kolodziejczyk
0 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-14 8:58 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
Hi Szymon,
On 13 October 2014 21:58, Szymon Janc <szymon.janc@gmail.com> wrote:
> Hi Grzegorz,
>
> On Thursday 09 October 2014 14:45:06 Grzegorz Kolodziejczyk wrote:
>> Add empty handlers for MAP client IPC commands.
>> ---
>> android/map-client.c | 33 ++++++++++++++++++++++++++++++++-
>> 1 file changed, 32 insertions(+), 1 deletion(-)
>>
>> diff --git a/android/map-client.c b/android/map-client.c
>> index 4556461..1001b36 100644
>> --- a/android/map-client.c
>> +++ b/android/map-client.c
>> @@ -28,17 +28,48 @@
>> #include <stdbool.h>
>> #include <stdlib.h>
>> #include <stdint.h>
>> +#include <glib.h>
>>
>> #include "ipc.h"
>> #include "lib/bluetooth.h"
>> #include "map-client.h"
>> +#include "src/log.h"
>> +#include "hal-msg.h"
>> +
>> +static struct ipc *hal_ipc = NULL;
>> +static bdaddr_t adapter_addr;
>> +
>> +static void handle_get_instances(const void *buf, uint16_t len)
>> +{
>> + DBG("");
>> +
>> + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
>> + HAL_OP_MAP_CLIENT_GET_INSTANCES, HAL_STATUS_FAILED);
>> +}
>> +
>> +static const struct ipc_handler cmd_handlers[] = {
>> + {handle_get_instances, false,
>> + sizeof(struct hal_cmd_map_client_get_instances)},
>
> Style issue: there should be spaces after { and before }.
> Also please add comment about define type just like in other handlers (I'm
> aware that there is just 1 handler here but lets be consistent).
>
Ok, I'll fix it.
>> +};
>>
>> bool bt_map_client_register(struct ipc *ipc, const bdaddr_t *addr, uint8_t
>> mode) {
>> - return false;
>> + DBG("");
>> +
>> + bacpy(&adapter_addr, addr);
>> +
>> + hal_ipc = ipc;
>> +
>> + ipc_register(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT, cmd_handlers,
>> + G_N_ELEMENTS(cmd_handlers));
>> +
>> + return true;
>> }
>>
>> void bt_map_client_unregister(void)
>> {
>> + DBG("");
>>
>> + ipc_unregister(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT);
>> + hal_ipc = NULL;
>> }
>
> --
> Szymon K. Janc
> szymon.janc@gmail.com
Best regards,
Grzegorz
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 03/10] android/map-client: Add support for get remote MAS instances
2014-10-13 20:19 ` Szymon Janc
@ 2014-10-14 9:01 ` Grzegorz Kolodziejczyk
0 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-14 9:01 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
Hi Szymon,
On 13 October 2014 22:19, Szymon Janc <szymon.janc@gmail.com> wrote:
> On Thursday 09 October 2014 14:45:07 Grzegorz Kolodziejczyk wrote:
>> This allows to get remote mas instances. In case of wrong sdp record
>> fail status will be returned in notification.
>> ---
>> android/map-client.c | 124
>> ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123
>> insertions(+), 1 deletion(-)
>>
>> diff --git a/android/map-client.c b/android/map-client.c
>> index 1001b36..adeae4b 100644
>> --- a/android/map-client.c
>> +++ b/android/map-client.c
>> @@ -30,21 +30,143 @@
>> #include <stdint.h>
>> #include <glib.h>
>>
>> +#include "lib/sdp.h"
>> +#include "lib/sdp_lib.h"
>> +#include "src/sdp-client.h"
>> +
>> #include "ipc.h"
>> #include "lib/bluetooth.h"
>> #include "map-client.h"
>> #include "src/log.h"
>> #include "hal-msg.h"
>> +#include "ipc-common.h"
>> +#include "utils.h"
>> +#include "src/shared/util.h"
>>
>> static struct ipc *hal_ipc = NULL;
>> static bdaddr_t adapter_addr;
>>
>> +static int fill_mce_inst(void *buf, int32_t id, int32_t scn, int32_t
>> msg_type, + const void *name, uint8_t name_len)
>> +{
>> + struct hal_map_client_mas_instance *inst = buf;
>> +
>> + inst->id = id;
>> + inst->scn = scn;
>> + inst->msg_types = msg_type;
>> + inst->name_len = name_len;
>> +
>> + if (name_len)
>> + memcpy(inst->name, name, name_len);
>> +
>> + return sizeof(*inst) + name_len;
>> +}
>> +
>> +static void map_client_sdp_search_cb(sdp_list_t *recs, int err, gpointer
>> data) +{
>> + uint8_t buf[IPC_MTU];
>> + struct hal_ev_map_client_remote_mas_instances *ev = (void *) buf;
>> + bdaddr_t *dst = data;
>> + sdp_list_t *list, *protos;
>> + uint8_t status;
>> + int32_t id, scn, msg_type, name_len, num_instances = 0;
>> + char *name;
>> + size_t size;
>> +
>> + size = sizeof(*ev);
>> + bdaddr2android(dst, &ev->bdaddr);
>> +
>> + if (err < 0) {
>> + error("mce: Unable to get SDP record: %s", strerror(-err));
>> + status = HAL_STATUS_FAILED;
>> + goto fail;
>> + }
>> +
>> + for (list = recs; list != NULL; list = list->next) {
>> + sdp_record_t *rec = list->data;
>> + sdp_data_t *data;
>> +
>> + data = sdp_data_get(rec, SDP_ATTR_MAS_INSTANCE_ID);
>> + if (data) {
>> + id = data->val.uint8;
>> + } else {
>> + error("mce: cannot get mas instance id");
>> + status = HAL_STATUS_FAILED;
>> + goto fail;
>
> I'm not sure if we should fail here. Lets just skip record (we can leave error
> message) and continue with search.
>
> Also make it like: if (!data) {error(); continue;};
> Not need for if-else
>
Ok.
>> + }
>> +
>> + data = sdp_data_get(rec, SDP_ATTR_SVCNAME_PRIMARY);
>> + if (data) {
>> + name = data->val.str;
>> + name_len = data->unitSize;
>> + } else {
>> + error("mce: cannot get mas instance name");
>> + status = HAL_STATUS_FAILED;
>> + goto fail;
>> + }
>> +
>> + data = sdp_data_get(rec, SDP_ATTR_SUPPORTED_MESSAGE_TYPES);
>> + if (data) {
>> + msg_type = data->val.uint8;
>> + } else {
>> + error("mce: cannot get mas instance msg type");
>> + status = HAL_STATUS_FAILED;
>> + goto fail;
>> + }
>> +
>> + if (!sdp_get_access_protos(rec, &protos)) {
>> + scn = sdp_get_proto_port(protos, RFCOMM_UUID);
>> +
>> + sdp_list_foreach(protos,
>> + (sdp_list_func_t) sdp_list_free, NULL);
>> + sdp_list_free(protos, NULL);
>> + } else {
>> + error("mce: cannot get mas instance rfcomm channel");
>> + status = HAL_STATUS_FAILED;
>> + goto fail;
>> + }
>> +
>> + size += fill_mce_inst(buf + size, id, scn, msg_type, name,
>> + name_len);
>> + num_instances++;
>> + }
>> +
>> + status = HAL_STATUS_SUCCESS;
>
> Please check if we are expected to return error if no instances were found.
>
Ok, I'll check it.
>> +
>> +fail:
>> + ev->num_instances = num_instances;
>> + ev->status = status;
>> +
>> + ipc_send_notif(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
>> + HAL_EV_MAP_CLIENT_REMOTE_MAS_INSTANCES, size, buf);
>> +
>> + free(dst);
>> +}
>> +
>> static void handle_get_instances(const void *buf, uint16_t len)
>> {
>> + const struct hal_cmd_map_client_get_instances *cmd = buf;
>> + uint8_t status;
>> + bdaddr_t *dst;
>> + uuid_t uuid;
>> +
>> DBG("");
>>
>> + dst = new0(bdaddr_t, 1);
>
> Please check if allocation failed.
>
I forgot this check, I'll fix this.
>> + android2bdaddr(&cmd->bdaddr, dst);
>> +
>> + sdp_uuid16_create(&uuid, MAP_MSE_SVCLASS_ID);
>> +
>> + if (bt_search_service(&adapter_addr, dst, &uuid,
>> + map_client_sdp_search_cb, dst, NULL, 0)) {
>
> Just a hint: you can pass free as destroy function here instead of taking care
> of that in callback.
>
>> + error("mce: Failed to search SDP details");
>> + status = HAL_STATUS_FAILED;
>> + free(dst);
>> + }
>> +
>> + status = HAL_STATUS_SUCCESS;
>
> In case of error status is overwritten.
>
I'll re-check those statuses.
>> ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_MAP_CLIENT,
>> - HAL_OP_MAP_CLIENT_GET_INSTANCES, HAL_STATUS_FAILED);
>> + HAL_OP_MAP_CLIENT_GET_INSTANCES, status);
>> }
>>
>> static const struct ipc_handler cmd_handlers[] = {
>
> --
> Szymon K. Janc
> szymon.janc@gmail.com
Best regards,
Grzegorz
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 04/10] android/ipc-tester: Add missing service opcode boundries test cases
2014-10-13 20:32 ` Szymon Janc
@ 2014-10-14 9:02 ` Grzegorz Kolodziejczyk
0 siblings, 0 replies; 18+ messages in thread
From: Grzegorz Kolodziejczyk @ 2014-10-14 9:02 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
Hi Szymon,
On 13 October 2014 22:32, Szymon Janc <szymon.janc@gmail.com> wrote:
> Hi Grzegorz,
>
> On Thursday 09 October 2014 14:45:08 Grzegorz Kolodziejczyk wrote:
>> This patch adds tests sending out of range opcode for each service.
>> ---
>> android/ipc-tester.c | 14 ++++++++++++++
>> 1 file changed, 14 insertions(+)
>>
>> diff --git a/android/ipc-tester.c b/android/ipc-tester.c
>> index ea71c8d..161777d 100644
>> --- a/android/ipc-tester.c
>> +++ b/android/ipc-tester.c
>> @@ -919,9 +919,23 @@ int main(int argc, char *argv[])
>> test_opcode_valid("PAN", HAL_SERVICE_ID_PAN, 0x05, 0,
>> HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_PAN);
>>
>> + test_opcode_valid("HANDSFREE", HAL_SERVICE_ID_HANDSFREE, 0x0f, 0,
>> + HAL_SERVICE_ID_BLUETOOTH,
>> + HAL_SERVICE_ID_HANDSFREE);
>> +
>> test_opcode_valid("A2DP", HAL_SERVICE_ID_A2DP, 0x03, 0,
>> HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
>>
>> + test_opcode_valid("HEALTH", HAL_SERVICE_ID_HEALTH, 0x06, 0,
>> + HAL_SERVICE_ID_BLUETOOTH,
>> + HAL_SERVICE_ID_HEALTH);
>> +
>> + test_opcode_valid("AVRCP", HAL_SERVICE_ID_AVRCP, 0x0b, 0,
>> + HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_AVRCP);
>> +
>> + test_opcode_valid("GATT", HAL_SERVICE_ID_GATT, 0x24, 0,
>> + HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_GATT);
>> +
>> test_opcode_valid("HF_CLIENT", HAL_SERVICE_ID_HANDSFREE_CLIENT, 0x10, 0,
>> HAL_SERVICE_ID_BLUETOOTH,
>> HAL_SERVICE_ID_HANDSFREE_CLIENT);
>
> In future please don't send unrelated patches as part of serie. This makes
> review easier and also makes no unnecessary delays in getting such patches
> merged.
>
> Applied. Thanks.
>
Ok, sorry, I must forgot to move this patch to another set.
> --
> Szymon K. Janc
> szymon.janc@gmail.com
Best regards,
Grzegorz
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2014-10-14 9:02 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-09 12:45 [PATCH 00/10] android/map-client: Add MAP client daemon implementation Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 01/10] android/map-client: Add initial files Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 02/10] android/map-client: Add stubs for MAP client commands handlers Grzegorz Kolodziejczyk
2014-10-13 19:58 ` Szymon Janc
2014-10-14 8:58 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 03/10] android/map-client: Add support for get remote MAS instances Grzegorz Kolodziejczyk
2014-10-13 20:19 ` Szymon Janc
2014-10-14 9:01 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 04/10] android/ipc-tester: Add missing service opcode boundries test cases Grzegorz Kolodziejczyk
2014-10-13 20:32 ` Szymon Janc
2014-10-14 9:02 ` Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 05/10] android/ipc-tester: Add case for MAP client service opcode boundries Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 06/10] android/ipc-tester: Add cases for MAP client msg size Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 07/10] android/client: Add skeleton for mce calls Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 08/10] android/client: Add code for mce callback Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 09/10] android/client: Add code for mce method Grzegorz Kolodziejczyk
2014-10-09 12:45 ` [PATCH 10/10] android/client: Add completion " Grzegorz Kolodziejczyk
2014-10-13 20:47 ` [PATCH 00/10] android/map-client: Add MAP client daemon implementation Szymon Janc
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.