Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH 0/2] Add basic scripting to haltest
From: Jerzy Kasenberg @ 2013-10-24 12:46 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jerzy Kasenberg

This patcheset adds command 'source' to interpret scripts
and processing of .haltestrc to execute some commands automatically.

Jerzy Kasenberg (2):
  android/client: Add source command to haltest
  android/client: Add processing of .haltestrc

 android/client/haltest.c |   55 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 54 insertions(+), 1 deletion(-)

-- 
1.7.9.5


^ permalink raw reply

* [PATCH v2 5/5] android: Use adapter index in mgmt functions
From: Szymon Janc @ 2013-10-24  9:54 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382608464-10389-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

Instead of hardcoding index 0 use real index of adapter. This fix
using invalid index if adapter ID happens to be different than 0.

This should not happen on Android but is possible while testing on
Linux PC.
---
 android/adapter.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index 84b3d93..8917b8e 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -170,14 +170,16 @@ static void mgmt_dev_class_changed_event(uint16_t index, uint16_t length,
 
 static void register_mgmt_handlers(void)
 {
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, 0,
+	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, adapter->index,
 					new_settings_callback, NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_CLASS_OF_DEV_CHANGED,
-			0, mgmt_dev_class_changed_event, NULL, NULL);
+				adapter->index, mgmt_dev_class_changed_event,
+				NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_LOCAL_NAME_CHANGED,
-			0, mgmt_local_name_changed_event, NULL, NULL);
+				adapter->index, mgmt_local_name_changed_event,
+				NULL, NULL);
 }
 
 static void load_link_keys_complete(uint8_t status, uint16_t length,
@@ -216,7 +218,7 @@ static void load_link_keys(GSList *keys)
 	cp->debug_keys = 0;
 	cp->key_count = htobs(key_len);
 
-	mgmt_send(adapter->mgmt, MGMT_OP_LOAD_LINK_KEYS, 0, len,
+	mgmt_send(adapter->mgmt, MGMT_OP_LOAD_LINK_KEYS, adapter->index, len,
 				cp, load_link_keys_complete, NULL, NULL);
 
 	g_free(cp);
-- 
1.8.4


^ permalink raw reply related

* [PATCH v2 4/5] android: Use default adapter in adapter functions
From: Szymon Janc @ 2013-10-24  9:54 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382608464-10389-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

There is no need to pass pointer to adapter between function as there
is only one adapter in android daemon. Also default_adapter is renamed
to adapter.

There is no need to pass adapter pointer as user data since there is
only one adapter present.
---
 android/adapter.c | 63 +++++++++++++++++++++++--------------------------------
 1 file changed, 26 insertions(+), 37 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index aee9cf4..84b3d93 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -50,12 +50,11 @@ struct bt_adapter {
 	uint32_t current_settings;
 };
 
-static struct bt_adapter *default_adapter;
+static struct bt_adapter *adapter;
 
 static void mgmt_local_name_changed_event(uint16_t index, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	const struct mgmt_cp_set_local_name *rp = param;
 
 	if (length < sizeof(*rp)) {
@@ -74,7 +73,7 @@ static void mgmt_local_name_changed_event(uint16_t index, uint16_t length,
 	/* TODO Update services if needed */
 }
 
-static void settings_changed_powered(struct bt_adapter *adapter)
+static void settings_changed_powered(void)
 {
 	struct hal_ev_adapter_state_changed ev;
 
@@ -87,17 +86,17 @@ static void settings_changed_powered(struct bt_adapter *adapter)
 			HAL_EV_ADAPTER_STATE_CHANGED, sizeof(ev), &ev, -1);
 }
 
-static void settings_changed_connectable(struct bt_adapter *adapter)
+static void settings_changed_connectable(void)
 {
 	/* TODO */
 }
 
-static void settings_changed_discoverable(struct bt_adapter *adapter)
+static void settings_changed_discoverable(void)
 {
 	/* TODO */
 }
 
-static void settings_changed(struct bt_adapter *adapter, uint32_t settings)
+static void settings_changed(uint32_t settings)
 {
 	uint32_t changed_mask;
 
@@ -108,25 +107,24 @@ static void settings_changed(struct bt_adapter *adapter, uint32_t settings)
 	DBG("0x%08x", changed_mask);
 
 	if (changed_mask & MGMT_SETTING_POWERED)
-		settings_changed_powered(adapter);
+		settings_changed_powered();
 
 	if (changed_mask & MGMT_SETTING_CONNECTABLE) {
 		DBG("Connectable");
 
-		settings_changed_connectable(adapter);
+		settings_changed_connectable();
 	}
 
 	if (changed_mask & MGMT_SETTING_DISCOVERABLE) {
 		DBG("Discoverable");
 
-		settings_changed_discoverable(adapter);
+		settings_changed_discoverable();
 	}
 }
 
 static void new_settings_callback(uint16_t index, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	uint32_t settings;
 
 	if (length < sizeof(settings)) {
@@ -142,13 +140,12 @@ static void new_settings_callback(uint16_t index, uint16_t length,
 	if (settings == adapter->current_settings)
 		return;
 
-	settings_changed(adapter, settings);
+	settings_changed(settings);
 }
 
 static void mgmt_dev_class_changed_event(uint16_t index, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	const struct mgmt_cod *rp = param;
 	uint32_t dev_class;
 
@@ -171,24 +168,21 @@ static void mgmt_dev_class_changed_event(uint16_t index, uint16_t length,
 	/* TODO: Gatt attrib set*/
 }
 
-static void register_mgmt_handlers(struct bt_adapter *adapter)
+static void register_mgmt_handlers(void)
 {
 	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, 0,
-			new_settings_callback, adapter, NULL);
+					new_settings_callback, NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_CLASS_OF_DEV_CHANGED,
-			0, mgmt_dev_class_changed_event,
-			adapter, NULL);
+			0, mgmt_dev_class_changed_event, NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_LOCAL_NAME_CHANGED,
-			0, mgmt_local_name_changed_event,
-			adapter, NULL);
+			0, mgmt_local_name_changed_event, NULL, NULL);
 }
 
 static void load_link_keys_complete(uint8_t status, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	int err;
 
 	if (status) {
@@ -200,7 +194,6 @@ static void load_link_keys_complete(uint8_t status, uint16_t length,
 
 	DBG("status %u", status);
 
-	default_adapter = adapter;
 	adapter->ready(0);
 	return;
 
@@ -208,7 +201,7 @@ failed:
 	adapter->ready(err);
 }
 
-static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
+static void load_link_keys(GSList *keys)
 {
 	struct mgmt_cp_load_link_keys *cp;
 	size_t key_len = g_slist_length(keys);
@@ -224,7 +217,7 @@ static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
 	cp->key_count = htobs(key_len);
 
 	mgmt_send(adapter->mgmt, MGMT_OP_LOAD_LINK_KEYS, 0, len,
-				cp, load_link_keys_complete, adapter, NULL);
+				cp, load_link_keys_complete, NULL, NULL);
 
 	g_free(cp);
 }
@@ -232,7 +225,6 @@ static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
 static void read_info_complete(uint8_t status, uint16_t length, const void *param,
 							void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	const struct mgmt_rp_read_info *rp = param;
 	int err;
 
@@ -240,7 +232,7 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
 
 	if (status) {
 		error("Failed to read info for index %u: %s (0x%02x)",
-			adapter->index, mgmt_errstr(status), status);
+				adapter->index, mgmt_errstr(status), status);
 		err = -EIO;
 		goto failed;
 	}
@@ -267,9 +259,9 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
 	adapter->current_settings = btohs(rp->current_settings);
 
 	/* TODO: Register all event notification handlers */
-	register_mgmt_handlers(adapter);
+	register_mgmt_handlers();
 
-	load_link_keys(adapter, NULL);
+	load_link_keys(NULL);
 
 	return;
 
@@ -280,8 +272,6 @@ failed:
 void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 							bt_adapter_ready cb)
 {
-	struct bt_adapter *adapter;
-
 	adapter = g_new0(struct bt_adapter, 1);
 
 	adapter->mgmt = mgmt_ref(mgmt_if);
@@ -289,10 +279,10 @@ void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 	adapter->ready = cb;
 
 	if (mgmt_send(mgmt_if, MGMT_OP_READ_INFO, index, 0, NULL,
-				read_info_complete, adapter, NULL) > 0)
+					read_info_complete, NULL, NULL) > 0)
 		return;
 
-	mgmt_unref(mgmt_if);
+	mgmt_unref(adapter->mgmt);
 	adapter->ready(-EIO);
 }
 
@@ -310,8 +300,7 @@ static void set_mode_complete(uint8_t status, uint16_t length,
 	 * required in both cases. So it is safe to just call the
 	 * event handling functions here.
 	 */
-	new_settings_callback(default_adapter->index, length, param,
-							default_adapter);
+	new_settings_callback(adapter->index, length, param, NULL);
 }
 
 static bool set_mode(uint16_t opcode, uint8_t mode)
@@ -323,8 +312,8 @@ static bool set_mode(uint16_t opcode, uint8_t mode)
 
 	DBG("opcode=0x%x mode=0x%x", opcode, mode);
 
-	if (mgmt_send(default_adapter->mgmt, opcode, default_adapter->index,
-			sizeof(cp), &cp, set_mode_complete, NULL, NULL) > 0)
+	if (mgmt_send(adapter->mgmt, opcode, adapter->index, sizeof(cp), &cp,
+					set_mode_complete, NULL, NULL) > 0)
 		return true;
 
 	error("Failed to set mode");
@@ -339,7 +328,7 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
 
 	switch (opcode) {
 	case HAL_OP_ENABLE:
-		if (default_adapter->current_settings & MGMT_SETTING_POWERED) {
+		if (adapter->current_settings & MGMT_SETTING_POWERED) {
 			status = HAL_ERROR_DONE;
 			break;
 		}
@@ -351,7 +340,7 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
 		}
 		break;
 	case HAL_OP_DISABLE:
-		if (!(default_adapter->current_settings & MGMT_SETTING_POWERED)) {
+		if (!(adapter->current_settings & MGMT_SETTING_POWERED)) {
 			status = HAL_ERROR_DONE;
 			break;
 		}
@@ -372,7 +361,7 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
 
 const bdaddr_t *bt_adapter_get_address(void)
 {
-	return &default_adapter->bdaddr;
+	return &adapter->bdaddr;
 }
 
 bool bt_adapter_register(GIOChannel *io)
-- 
1.8.4


^ permalink raw reply related

* [PATCH v2 3/5] android: Remove not needed adapter parameter from bt_adapter_ready
From: Szymon Janc @ 2013-10-24  9:54 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382608464-10389-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

There is no need to pass adapter pointer in bt_adapter_ready callback
as there is only one present.
---
 android/adapter.c | 6 +++---
 android/adapter.h | 4 +---
 android/main.c    | 2 +-
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index 79cfcfd..aee9cf4 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -201,11 +201,11 @@ static void load_link_keys_complete(uint8_t status, uint16_t length,
 	DBG("status %u", status);
 
 	default_adapter = adapter;
-	adapter->ready(adapter, 0);
+	adapter->ready(0);
 	return;
 
 failed:
-	adapter->ready(NULL, err);
+	adapter->ready(err);
 }
 
 static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
@@ -274,7 +274,7 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
 	return;
 
 failed:
-	adapter->ready(NULL, err);
+	adapter->ready(err);
 }
 
 void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
diff --git a/android/adapter.h b/android/adapter.h
index 236f10a..2afc67a 100644
--- a/android/adapter.h
+++ b/android/adapter.h
@@ -28,9 +28,7 @@
 
 #include "lib/bluetooth.h"
 
-struct bt_adapter;
-
-typedef void (*bt_adapter_ready)(struct bt_adapter *adapter, int err);
+typedef void (*bt_adapter_ready)(int err);
 
 void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 							bt_adapter_ready cb);
diff --git a/android/main.c b/android/main.c
index 740b532..50b5901 100644
--- a/android/main.c
+++ b/android/main.c
@@ -392,7 +392,7 @@ static GOptionEntry options[] = {
 	{ NULL }
 };
 
-static void adapter_ready(struct bt_adapter *adapter, int err)
+static void adapter_ready(int err)
 {
 	if (err) {
 		error("Adapter initialization failed: %s", strerror(err));
-- 
1.8.4


^ permalink raw reply related

* [PATCH v2 2/5] android: Fix bt_adapter_init
From: Szymon Janc @ 2013-10-24  9:54 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382608464-10389-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

Make bt_adapter_init return void and use ready callback for error
reporting. This also fix returning incorrect status and invalid
mgmt_if unref (mgmt_send return 0 on error or >0 on success).
---
 android/adapter.c | 15 +++++++--------
 android/adapter.h |  4 ++--
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index 88ac19f..79cfcfd 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -277,8 +277,8 @@ failed:
 	adapter->ready(NULL, err);
 }
 
-bool bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
-						bt_adapter_ready ready)
+void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
+							bt_adapter_ready cb)
 {
 	struct bt_adapter *adapter;
 
@@ -286,15 +286,14 @@ bool bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 
 	adapter->mgmt = mgmt_ref(mgmt_if);
 	adapter->index = index;
-	adapter->ready = ready;
+	adapter->ready = cb;
 
 	if (mgmt_send(mgmt_if, MGMT_OP_READ_INFO, index, 0, NULL,
-				read_info_complete, adapter, NULL) > 0) {
-		mgmt_unref(mgmt_if);
-		return false;
-	}
+				read_info_complete, adapter, NULL) > 0)
+		return;
 
-	return adapter;
+	mgmt_unref(mgmt_if);
+	adapter->ready(-EIO);
 }
 
 static void set_mode_complete(uint8_t status, uint16_t length,
diff --git a/android/adapter.h b/android/adapter.h
index b8d0a58..236f10a 100644
--- a/android/adapter.h
+++ b/android/adapter.h
@@ -32,8 +32,8 @@ struct bt_adapter;
 
 typedef void (*bt_adapter_ready)(struct bt_adapter *adapter, int err);
 
-bool bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
-						bt_adapter_ready func);
+void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
+							bt_adapter_ready cb);
 
 void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
 								uint16_t len);
-- 
1.8.4


^ permalink raw reply related

* [PATCH v2 1/5] android: Start command watch after notify channel is connected
From: Szymon Janc @ 2013-10-24  9:54 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc

From: Szymon Janc <szymon.janc@gmail.com>

Daemon should start processing commands only after both communication
channels were connected.
---
 android/main.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/android/main.c b/android/main.c
index 9879f05..740b532 100644
--- a/android/main.c
+++ b/android/main.c
@@ -288,9 +288,11 @@ static gboolean notif_connect_cb(GIOChannel *io, GIOCondition cond,
 
 	g_io_add_watch(io, cond, notif_watch_cb, NULL);
 
-	info("Successfully connected to HAL");
+	cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
 
-	/* TODO start handling commands */
+	g_io_add_watch(hal_cmd_io, cond, cmd_watch_cb, NULL);
+
+	info("Successfully connected to HAL");
 
 	return FALSE;
 }
@@ -305,10 +307,6 @@ static gboolean cmd_connect_cb(GIOChannel *io, GIOCondition cond,
 		return FALSE;
 	}
 
-	cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
-
-	g_io_add_watch(io, cond, cmd_watch_cb, NULL);
-
 	hal_notif_io = connect_hal(notif_connect_cb);
 	if (!hal_notif_io) {
 		error("Cannot connect to HAL, terminating");
-- 
1.8.4


^ permalink raw reply related

* [PATCH v2] android/client: Fix various coding style issues
From: Jerzy Kasenberg @ 2013-10-24  9:50 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jerzy Kasenberg

Mostly indentation of arguments in functions and calls.
Prefix p remove from puser/penum_func.
Some empty lines added after closing } when needed.
Magic number for string length changed to preprocessor define.
Added spaces after casts.
---
 
v2:
 - fixed casts

 android/client/haltest.c       |   18 +++--
 android/client/if-bt.c         |  154 ++++++++++++++++++++++------------------
 android/client/if-hh.c         |   64 ++++++++---------
 android/client/if-main.h       |   12 ++--
 android/client/if-pan.c        |   34 ++++-----
 android/client/if-sock.c       |   26 +++----
 android/client/tabcompletion.c |    8 +--
 android/client/terminal.c      |    5 ++
 android/client/textconv.h      |    2 +-
 9 files changed, 175 insertions(+), 148 deletions(-)

diff --git a/android/client/haltest.c b/android/client/haltest.c
index 19e81b8..189af0b 100644
--- a/android/client/haltest.c
+++ b/android/client/haltest.c
@@ -47,6 +47,7 @@ struct method *get_method(struct method *methods, const char *name)
 			return methods;
 		methods++;
 	}
+
 	return NULL;
 }
 
@@ -103,11 +104,11 @@ static void help_print_interface(const struct interface *i)
 }
 
 /* Help completion */
-static void help_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+static void help_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 2)
-		*penum_func = interface_name;
+		*enum_func = interface_name;
 }
 
 /* Help execution */
@@ -125,11 +126,13 @@ static void help_p(int argc, const char **argv)
 						(m->help ? m->help : ""));
 			m++;
 		}
+
 		terminal_print("\nAvailable interfaces to use:\n");
 		while (NULL != *ip) {
 			terminal_print("\t%s\n", (*ip)->name);
 			ip++;
 		}
+
 		terminal_print("\nTo get help on methods for each interface type:\n");
 		terminal_print("\n\thelp <inerface>\n");
 		terminal_print("\nBasic scenario:\n\tadapter init\n");
@@ -138,11 +141,13 @@ static void help_p(int argc, const char **argv)
 		terminal_print("\thandsfree init\n\n");
 		return;
 	}
+
 	i = get_interface(argv[1]);
 	if (i == NULL) {
 		haltest_error("No such interface\n");
 		return;
 	}
+
 	help_print_interface(i);
 }
 
@@ -176,6 +181,7 @@ const char *interface_name(void *v, int i)
 const char *command_name(void *v, int i)
 {
 	int cmd_cnt = (int) (sizeof(commands)/sizeof(commands[0]) - 1);
+
 	if (i >= cmd_cnt)
 		return interface_name(v, i - cmd_cnt);
 	else
@@ -188,8 +194,7 @@ const char *command_name(void *v, int i)
  * Output argv is filled with pointers to arguments
  * returns number of tokens parsed - argc
  */
-static int command_line_to_argv(char *line_buffer,
-				char *argv[], int argv_size)
+static int command_line_to_argv(char *line_buffer, char *argv[], int argv_size)
 {
 	static const char *token_breaks = "\r\n\t ";
 	char *token;
@@ -220,15 +225,18 @@ static void process_line(char *line_buffer)
 			i++;
 			continue;
 		}
+
 		if (argc < 2 || strcmp(argv[1], "?") == 0) {
 			help_print_interface(interfaces[i]);
 			return;
 		}
+
 		m = get_method(interfaces[i]->methods, argv[1]);
 		if (m != NULL) {
 			m->func(argc, (const char **) argv);
 			return;
 		}
+
 		haltest_error("No function %s found\n", argv[1]);
 		return;
 	}
diff --git a/android/client/if-bt.c b/android/client/if-bt.c
index f5c84c1..dd5d12e 100644
--- a/android/client/if-bt.c
+++ b/android/client/if-bt.c
@@ -82,13 +82,14 @@ static char *btproperty2str(bt_property_t property)
 	char *p;
 
 	p = buf + sprintf(buf, "type=%s len=%d val=",
-			  bt_property_type_t2str(property.type), property.len);
+					bt_property_type_t2str(property.type),
+					property.len);
 
 	switch (property.type) {
 	case BT_PROPERTY_BDNAME:
 	case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
 		sprintf(p, "%*s", property.len,
-			((bt_bdname_t *) property.val)->name);
+					((bt_bdname_t *) property.val)->name);
 		break;
 
 	case BT_PROPERTY_BDADDR:
@@ -160,7 +161,7 @@ static char *btproperty2str(bt_property_t property)
 			bt_service_record_t *rec = property.val;
 
 			sprintf(p, "{%s, %d, %s}", btuuid2str(&rec->uuid),
-				rec->channel, rec->name);
+						rec->channel, rec->name);
 		}
 		break;
 
@@ -206,12 +207,14 @@ void add_remote_device(const bt_bdaddr_t *addr)
 			remote_devices_capacity = 0;
 			return;
 		}
+
 		remote_devices_capacity = 4;
 	}
 
 	/* Array is sorted, search for right place */
 	for (i = 0; i < remote_devices_cnt; ++i) {
 		int res = memcmp(&remote_devices[i], addr, sizeof(*addr));
+
 		if (res == 0)
 			return; /* Already added */
 		else if (res > 0)
@@ -259,6 +262,7 @@ static void add_remote_device_from_props(int num_properties,
 		 * aligned buffer
 		 */
 		bt_property_t property;
+
 		memcpy(&property, properties + i, sizeof(property));
 		if (property.type == BT_PROPERTY_BDADDR)
 			add_remote_device((bt_bdaddr_t *) property.val);
@@ -270,21 +274,23 @@ static void adapter_state_changed_cb(bt_state_t state)
 	haltest_info("%s: state=%s\n", __func__, bt_state_t2str(state));
 }
 
-static void adapter_properties_cb(bt_status_t status,
-	int num_properties, bt_property_t *properties)
+static void adapter_properties_cb(bt_status_t status, int num_properties,
+						bt_property_t *properties)
 {
-	haltest_info("%s: status=%s num_properties=%d\n",
-	       __func__, bt_status_t2str(status), num_properties);
+	haltest_info("%s: status=%s num_properties=%d\n", __func__,
+				bt_status_t2str(status), num_properties);
 
 	dump_properties(num_properties, properties);
 }
 
 static void remote_device_properties_cb(bt_status_t status,
-	bt_bdaddr_t *bd_addr, int num_properties, bt_property_t *properties)
+					bt_bdaddr_t *bd_addr,
+					int num_properties,
+					bt_property_t *properties)
 {
-	haltest_info("%s: status=%s bd_addr=%s num_properties=%d\n",
-	       __func__, bt_status_t2str(status), bdaddr2str(bd_addr),
-	       num_properties);
+	haltest_info("%s: status=%s bd_addr=%s num_properties=%d\n", __func__,
+			bt_status_t2str(status), bdaddr2str(bd_addr),
+			num_properties);
 
 	add_remote_device(bd_addr);
 
@@ -303,7 +309,7 @@ static void device_found_cb(int num_properties, bt_property_t *properties)
 static void discovery_state_changed_cb(bt_discovery_state_t state)
 {
 	haltest_info("%s: state=%s\n", __func__,
-		bt_discovery_state_t2str(state));
+					bt_discovery_state_t2str(state));
 }
 
 /*
@@ -311,16 +317,16 @@ static void discovery_state_changed_cb(bt_discovery_state_t state)
  * It's stored for command completion.
  */
 static char last_remote_addr[MAX_ADDR_STR_LEN];
-static bt_ssp_variant_t last_ssp_variant = (bt_ssp_variant_t)-1;
+static bt_ssp_variant_t last_ssp_variant = (bt_ssp_variant_t) -1;
 
 static void pin_request_cb(bt_bdaddr_t *remote_bd_addr, bt_bdname_t *bd_name,
-	uint32_t cod)
+								uint32_t cod)
 {
 	/* Store for command completion */
 	bt_bdaddr_t2str(remote_bd_addr, last_remote_addr);
 
 	haltest_info("%s: remote_bd_addr=%s bd_name=%s cod=%06x\n", __func__,
-				       last_remote_addr, bd_name->name, cod);
+					last_remote_addr, bd_name->name, cod);
 }
 
 static void ssp_request_cb(bt_bdaddr_t *remote_bd_addr, bt_bdname_t *bd_name,
@@ -332,26 +338,26 @@ static void ssp_request_cb(bt_bdaddr_t *remote_bd_addr, bt_bdname_t *bd_name,
 	last_ssp_variant = pairing_variant;
 
 	haltest_info("%s: remote_bd_addr=%s bd_name=%s cod=%06x pairing_variant=%s pass_key=%d\n",
-		     __func__, last_remote_addr, bd_name->name, cod,
-		     bt_ssp_variant_t2str(pairing_variant), pass_key);
+			__func__, last_remote_addr, bd_name->name, cod,
+			bt_ssp_variant_t2str(pairing_variant), pass_key);
 }
 
 static void bond_state_changed_cb(bt_status_t status,
-					bt_bdaddr_t *remote_bd_addr,
-					bt_bond_state_t state)
+						bt_bdaddr_t *remote_bd_addr,
+						bt_bond_state_t state)
 {
 	haltest_info("%s: status=%s remote_bd_addr=%s state=%s\n", __func__,
-		       bt_status_t2str(status), bdaddr2str(remote_bd_addr),
-		       bt_bond_state_t2str(state));
+			bt_status_t2str(status), bdaddr2str(remote_bd_addr),
+			bt_bond_state_t2str(state));
 }
 
 static void acl_state_changed_cb(bt_status_t status,
-					bt_bdaddr_t *remote_bd_addr,
-					bt_acl_state_t state)
+						bt_bdaddr_t *remote_bd_addr,
+						bt_acl_state_t state)
 {
 	haltest_info("%s: status=%s remote_bd_addr=%s state=%s\n", __func__,
-		       bt_status_t2str(status), bdaddr2str(remote_bd_addr),
-		       bt_acl_state_t2str(state));
+			bt_status_t2str(status), bdaddr2str(remote_bd_addr),
+			bt_acl_state_t2str(state));
 }
 
 static void thread_evt_cb(bt_cb_thread_evt evt)
@@ -409,7 +415,7 @@ static void init_p(int argc, const char **argv)
 	}
 
 	if_bluetooth =
-	    ((bluetooth_device_t *) device)->get_bluetooth_interface();
+		    ((bluetooth_device_t *) device)->get_bluetooth_interface();
 	if (!if_bluetooth) {
 		haltest_error("get_bluetooth_interface returned NULL\n");
 		return;
@@ -449,11 +455,11 @@ static void get_adapter_properties_p(int argc, const char **argv)
 }
 
 static void get_adapter_property_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = TYPE_ENUM(bt_property_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bt_property_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -468,21 +474,22 @@ static void get_adapter_property_p(int argc, const char **argv)
 }
 
 static const char * const names[] = {
-		"BT_PROPERTY_BDNAME",
-		"BT_PROPERTY_ADAPTER_SCAN_MODE",
-		"BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT", NULL
+	"BT_PROPERTY_BDNAME",
+	"BT_PROPERTY_ADAPTER_SCAN_MODE",
+	"BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT",
+	NULL
 };
 
 static void set_adapter_property_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = (void *) names;
-		*penum_func = enum_strings;
+		*user = (void *) names;
+		*enum_func = enum_strings;
 	} else if (argc == 4) {
 		if (0 == strcmp(argv[2], "BT_PROPERTY_ADAPTER_SCAN_MODE")) {
-			*puser = TYPE_ENUM(bt_scan_mode_t);
-			*penum_func = enum_defines;
+			*user = TYPE_ENUM(bt_scan_mode_t);
+			*enum_func = enum_defines;
 		}
 	}
 }
@@ -529,12 +536,12 @@ static void set_adapter_property_p(int argc, const char **argv)
 /*
  * This function is to be used for completion methods that need only address
  */
-static void complete_addr_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+static void complete_addr_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = NULL;
-		*penum_func = enum_devices;
+		*user = NULL;
+		*enum_func = enum_devices;
 	}
 }
 
@@ -552,15 +559,15 @@ static void get_remote_device_properties_p(int argc, const char **argv)
 }
 
 static void get_remote_device_property_c(int argc, const char **argv,
-						enum_func *penum_func,
-								void **puser)
+							enum_func *enum_func,
+							void **user)
 {
 	if (argc == 3) {
-		*puser = NULL;
-		*penum_func = enum_devices;
+		*user = NULL;
+		*enum_func = enum_devices;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bt_property_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bt_property_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -596,7 +603,6 @@ static void set_remote_device_property_p(int argc, const char **argv)
 		property.len = strlen(argv[4]);
 		property.val = (char *) argv[4];
 		break;
-
 	default:
 		return;
 	}
@@ -621,6 +627,7 @@ static void get_remote_service_record_p(int argc, const char **argv)
 		haltest_error("No uuid specified\n");
 		return;
 	}
+
 	str2bt_uuid_t(argv[3], &uuid);
 
 	EXEC(if_bluetooth->get_remote_service_record, &addr, &uuid);
@@ -692,13 +699,14 @@ static void cancel_bond_p(int argc, const char **argv)
 	EXEC(if_bluetooth->cancel_bond, &addr);
 }
 
-static void pin_reply_c(int argc, const char **argv,
-		enum_func *penum_func, void **puser)
+static void pin_reply_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	static const char *const completions[] = { last_remote_addr, NULL };
+
 	if (argc == 3) {
-		*puser = (void *) completions;
-		*penum_func = enum_strings;
+		*user = (void *) completions;
+		*enum_func = enum_strings;
 	}
 }
 
@@ -721,22 +729,22 @@ static void pin_reply_p(int argc, const char **argv)
 	EXEC(if_bluetooth->pin_reply, &addr, accept, pin_len, &pin);
 }
 
-static void ssp_reply_c(int argc, const char **argv,
-		enum_func *penum_func, void **puser)
+static void ssp_reply_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = last_remote_addr;
-		*penum_func = enum_one_string;
+		*user = last_remote_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 5) {
-		*puser = "1";
-		*penum_func = enum_one_string;
+		*user = "1";
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
 		if (-1 != (int) last_ssp_variant) {
-			*puser = (void *) bt_ssp_variant_t2str(last_ssp_variant);
-			*penum_func = enum_one_string;
+			*user = (void *) bt_ssp_variant_t2str(last_ssp_variant);
+			*enum_func = enum_one_string;
 		} else {
-			*puser = TYPE_ENUM(bt_ssp_variant_t);
-			*penum_func = enum_defines;
+			*user = TYPE_ENUM(bt_ssp_variant_t);
+			*enum_func = enum_defines;
 		}
 	}
 }
@@ -755,11 +763,13 @@ static void ssp_reply_p(int argc, const char **argv)
 		haltest_error("No ssp variant specified\n");
 		return;
 	}
+
 	var = str2btsspvariant(argv[3]);
 	if (argc < 5) {
 		haltest_error("No accept value specified\n");
 		return;
 	}
+
 	accept = atoi(argv[4]);
 	passkey = 0;
 
@@ -770,7 +780,7 @@ static void ssp_reply_p(int argc, const char **argv)
 }
 
 static void get_profile_interface_c(int argc, const char **argv,
-		enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	static const char *const profile_ids[] = {
 		BT_PROFILE_HANDSFREE_ID,
@@ -787,8 +797,8 @@ static void get_profile_interface_c(int argc, const char **argv,
 	};
 
 	if (argc == 3) {
-		*puser = (void *) profile_ids;
-		*penum_func = enum_strings;
+		*user = (void *) profile_ids;
+		*enum_func = enum_strings;
 	}
 }
 
@@ -803,22 +813,22 @@ static void get_profile_interface_p(int argc, const char **argv)
 	if (strcmp(BT_PROFILE_HANDSFREE_ID, id) == 0)
 		pif = &dummy; /* TODO: change when if_hf is there */
 	else if (strcmp(BT_PROFILE_ADVANCED_AUDIO_ID, id) == 0)
-		pif = (const void **)&if_av;
+		pif = (const void **) &if_av;
 	else if (strcmp(BT_PROFILE_HEALTH_ID, id) == 0)
 		pif = &dummy; /* TODO: change when if_hl is there */
 	else if (strcmp(BT_PROFILE_SOCKETS_ID, id) == 0)
-		pif = (const void **)&if_sock;
+		pif = (const void **) &if_sock;
 	else if (strcmp(BT_PROFILE_HIDHOST_ID, id) == 0)
-		pif = (const void **)&if_hh;
+		pif = (const void **) &if_hh;
 	else if (strcmp(BT_PROFILE_PAN_ID, id) == 0)
-		pif = (const void **)&if_pan;
+		pif = (const void **) &if_pan;
 #if PLATFORM_SDK_VERSION > 17
 	else if (strcmp(BT_PROFILE_AV_RC_ID, id) == 0)
 		pif = &dummy; /* TODO: change when if_rc is there */
 #endif
 	else
 		haltest_error("%s is not correct for get_profile_interface\n",
-		     id);
+									id);
 
 	if (pif != NULL) {
 		*pif = if_bluetooth->get_profile_interface(id);
@@ -836,6 +846,7 @@ static void dut_mode_configure_p(int argc, const char **argv)
 		haltest_error("No dut mode specified\n");
 		return;
 	}
+
 	mode = strtol(argv[2], NULL, 0);
 
 	EXEC(if_bluetooth->dut_mode_configure, mode);
@@ -851,7 +862,8 @@ static struct method methods[] = {
 	STD_METHODCH(set_adapter_property, "<prop_type> <prop_value>"),
 	STD_METHODCH(get_remote_device_properties, "<addr>"),
 	STD_METHODCH(get_remote_device_property, "<addr> <property_type>"),
-	STD_METHODCH(set_remote_device_property, "<addr> <property_type> <value>"),
+	STD_METHODCH(set_remote_device_property,
+					"<addr> <property_type> <value>"),
 	STD_METHODCH(get_remote_service_record, "<addr> <uuid>"),
 	STD_METHODCH(get_remote_services, "<addr>"),
 	STD_METHOD(start_discovery),
diff --git a/android/client/if-hh.c b/android/client/if-hh.c
index e23e4d5..005b13a 100644
--- a/android/client/if-hh.c
+++ b/android/client/if-hh.c
@@ -79,7 +79,7 @@ static void connection_state_cb(bt_bdaddr_t *bd_addr,
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s connection_state=%s\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
+					bt_bdaddr_t2str(bd_addr, addr),
 					bthh_connection_state_t2str(state));
 	if (state == BTHH_CONN_STATE_CONNECTED)
 		strcpy(connected_device_addr, addr);
@@ -94,7 +94,7 @@ static void virtual_unplug_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status)
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s hh_status=%s\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
+						bt_bdaddr_t2str(bd_addr, addr),
 						bthh_status_t2str(hh_status));
 }
 
@@ -122,9 +122,9 @@ static void protocol_mode_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status,
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s hh_status=%s mode=%s\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
-			bthh_status_t2str(hh_status),
-						bthh_protocol_mode_t2str(mode));
+					bt_bdaddr_t2str(bd_addr, addr),
+					bthh_status_t2str(hh_status),
+					bthh_protocol_mode_t2str(mode));
 }
 
 /*
@@ -136,8 +136,8 @@ static void idle_time_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status,
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s hh_status=%s idle_rate=%d\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
-			bthh_status_t2str(hh_status), idle_rate);
+				bt_bdaddr_t2str(bd_addr, addr),
+				bthh_status_t2str(hh_status), idle_rate);
 }
 
 
@@ -152,8 +152,8 @@ static void get_report_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status,
 
 	/* TODO: print actual report */
 	haltest_info("%s: bd_addr=%s hh_status=%s rpt_size=%d\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
-			bthh_status_t2str(hh_status), rpt_size);
+					bt_bdaddr_t2str(bd_addr, addr),
+					bthh_status_t2str(hh_status), rpt_size);
 }
 
 static bthh_callbacks_t bthh_callbacks = {
@@ -177,12 +177,12 @@ static void init_p(int argc, const char **argv)
 
 /* connect */
 
-static void connect_c(int argc, const const char **argv,
-				enum_func *penum_func, void **puser)
+static void connect_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = (void *) connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = (void *) connected_device_addr;
+		*enum_func = enum_one_string;
 	}
 }
 
@@ -243,14 +243,14 @@ static void set_info_p(int argc, const char **argv)
 /* get_protocol */
 
 static void get_protocol_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bthh_protocol_mode_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bthh_protocol_mode_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -296,14 +296,14 @@ static void set_protocol_p(int argc, const char **argv)
 /* get_report */
 
 static void get_report_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bthh_report_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bthh_report_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -341,14 +341,14 @@ static void get_report_p(int argc, const char **argv)
 /* set_report */
 
 static void set_report_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bthh_report_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bthh_report_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -376,12 +376,12 @@ static void set_report_p(int argc, const char **argv)
 
 /* send_data */
 
-static void send_data_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+static void send_data_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	}
 }
 
diff --git a/android/client/if-main.h b/android/client/if-main.h
index f2d35d9..eaee914 100644
--- a/android/client/if-main.h
+++ b/android/client/if-main.h
@@ -93,11 +93,11 @@ typedef const char *(*enum_func)(void *user, int i);
 
 /*
  * This is prototype of function that when given argc, argv will
- * fill penum_func with pointer to function that will enumerate
- * parameters for argc argument, puser will be passed to penum_func.
+ * fill enum_func with pointer to function that will enumerate
+ * parameters for argc argument, user will be passed to enum_func.
  */
-typedef void (*tab_complete)(int argc, const char **argv,
-					enum_func *penum_func, void **puser);
+typedef void (*tab_complete)(int argc, const char **argv, enum_func *enum_func,
+								void **user);
 
 /*
  * For each method there is name and two functions to parse command line
@@ -145,9 +145,9 @@ struct method *get_command(const char *name);
 
 #define VERIFY_ADDR_ARG(n, adr) \
 	do { \
-		if (n < argc) \
+		if (n < argc) {\
 			str2bt_bdaddr_t(argv[n], adr); \
-		else { \
+		} else { \
 			haltest_error("No address specified\n");\
 			return;\
 		} \
diff --git a/android/client/if-pan.c b/android/client/if-pan.c
index e9cfa23..dcc7e80 100644
--- a/android/client/if-pan.c
+++ b/android/client/if-pan.c
@@ -45,12 +45,12 @@ static void control_state_cb(btpan_control_state_t state, bt_status_t error,
 					int local_role, const char *ifname)
 {
 	haltest_info("%s: state=%s error=%s local_role=%s ifname=%s\n",
-		       __func__, btpan_control_state_t2str(state),
-		       bt_status_t2str(error), btpan_role_t2str(local_role),
-		       ifname);
+			__func__, btpan_control_state_t2str(state),
+			bt_status_t2str(error), btpan_role_t2str(local_role),
+			ifname);
 }
 
-static char last_used_addr[18];
+static char last_used_addr[MAX_ADDR_STR_LEN];
 
 static void connection_state_cb(btpan_connection_state_t state,
 				bt_status_t error, const bt_bdaddr_t *bd_addr,
@@ -79,12 +79,12 @@ static void init_p(int argc, const char **argv)
 
 /* enable */
 
-static void enable_c(int argc, const const char **argv, enum_func *penum_func,
-								void **puser)
+static void enable_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = TYPE_ENUM(btpan_role_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btpan_role_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -120,15 +120,15 @@ static void get_local_role_p(int argc, const char **argv)
 
 /* connect */
 
-static void connect_c(int argc, const const char **argv, enum_func *penum_func,
-								void **puser)
+static void connect_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = NULL;
-		*penum_func = enum_devices;
+		*user = NULL;
+		*enum_func = enum_devices;
 	} else if (argc == 4 || argc == 5) {
-		*puser = TYPE_ENUM(btpan_role_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btpan_role_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -165,11 +165,11 @@ static void connect_p(int argc, const char **argv)
 /* disconnect */
 
 static void disconnect_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = last_used_addr;
-		*penum_func = enum_one_string;
+		*user = last_used_addr;
+		*enum_func = enum_one_string;
 	}
 }
 
diff --git a/android/client/if-sock.c b/android/client/if-sock.c
index f3125f8..dcaf048 100644
--- a/android/client/if-sock.c
+++ b/android/client/if-sock.c
@@ -52,7 +52,6 @@ static void receive_from_client(struct pollfd *pollfd)
 		haltest_error("Disconnected fd=%d\n", pollfd->fd);
 		poll_unregister_fd(pollfd->fd, receive_from_client);
 	} else if (pollfd->revents & POLLIN) {
-
 		haltest_info("receiving from client fd=%d\n", pollfd->fd);
 
 		do {
@@ -95,9 +94,10 @@ static void receive_sock_connect_signal(struct pollfd *pollfd)
 			haltest_info("Read on connect return %d\n", ret);
 			return;
 		}
+
 		haltest_info("Connection to %s channel %d status=%d\n",
 				bt_bdaddr_t2str(&cs.bd_addr, addr_str),
-							cs.channel, cs.status);
+				cs.channel, cs.status);
 
 		if (cs.status == 0)
 			poll_register_fd(pollfd->fd, POLLIN,
@@ -106,7 +106,7 @@ static void receive_sock_connect_signal(struct pollfd *pollfd)
 
 	if (pollfd->revents & POLLHUP) {
 		haltest_error("Disconnected fd=%d revents=0x%X\n", pollfd->fd,
-							pollfd->revents);
+				pollfd->revents);
 		poll_unregister_fd(pollfd->fd, receive_sock_connect_signal);
 	}
 }
@@ -165,6 +165,7 @@ static void read_accepted(int fd)
 		accepted_fd = descs[0];
 		break;
 	}
+
 	haltest_info("Incoming connection from %s channel %d status=%d fd=%d\n",
 					bt_bdaddr_t2str(&cs.bd_addr, addr_str),
 					cs.channel, cs.status, accepted_fd);
@@ -184,12 +185,12 @@ static void client_connected(struct pollfd *pollfd)
 
 /** listen */
 
-static void listen_c(int argc, const char **argv, enum_func *penum_func,
-								void **puser)
+static void listen_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = TYPE_ENUM(btsock_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btsock_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -253,14 +254,14 @@ static void listen_p(int argc, const char **argv)
 
 /** connect */
 
-static void connect_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+static void connect_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*penum_func = enum_devices;
+		*enum_func = enum_devices;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(btsock_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btsock_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -313,6 +314,7 @@ static void connect_p(int argc, const char **argv)
 	if (sock_fd > 0) {
 		int channel = 0;
 		int ret = read(sock_fd, &channel, 4);
+
 		if (ret != 4)
 			haltest_info("Read channel failed\n");
 		haltest_info("Channel returned from first read %d\n", channel);
diff --git a/android/client/tabcompletion.c b/android/client/tabcompletion.c
index 2b95591..69af609 100644
--- a/android/client/tabcompletion.c
+++ b/android/client/tabcompletion.c
@@ -63,8 +63,8 @@ static void print_matches(enum_func f, void *user, const char *prefix, int len)
  * buf - output buffer to keep splited arguments list
  * buf_size_in_bytes - size of buf
  */
-static int split_command(const char *line_buffer, int size,
-					split_arg_t *buf, int buf_size_in_bytes)
+static int split_command(const char *line_buffer, int size, split_arg_t *buf,
+							int buf_size_in_bytes)
 {
 	split_arg_t *prev = NULL;
 	split_arg_t *arg = buf;
@@ -218,8 +218,8 @@ static void method_completion(const struct interface *iface, split_arg_t *arg)
 static const char *bold = "\x1b[1m";
 static const char *normal = "\x1b[0m";
 
-static bool find_nth_argument(const char *str, int n,
-						const char **s, const char **e)
+static bool find_nth_argument(const char *str, int n, const char **s,
+								const char **e)
 {
 	const char *p = str;
 	int argc = 0;
diff --git a/android/client/terminal.c b/android/client/terminal.c
index a57068a..88c963b 100644
--- a/android/client/terminal.c
+++ b/android/client/terminal.c
@@ -214,6 +214,7 @@ static void terminal_line_replaced(void)
 			putchar('\b');
 			line_buf_ix--;
 		}
+
 		/* If cursor was not at the end, move it to the end */
 		if (line_buf_ix < line_len)
 			printf("%.*s", line_len - line_buf_ix,
@@ -222,6 +223,7 @@ static void terminal_line_replaced(void)
 		while (line_len >= len++)
 			putchar(' ');
 	}
+
 	/* draw new line */
 	printf("\r%s%s", prompt, line_buf);
 	/* set up indexes to new line */
@@ -321,6 +323,7 @@ static int terminal_convert_sequence(int c)
 	       }
 	       return c;
 	}
+
 	/* Inside sequence */
 	current_sequence[current_sequence_len++] = c;
 	current_sequence[current_sequence_len] = '\0';
@@ -338,6 +341,7 @@ static int terminal_convert_sequence(int c)
 		/* partial match (not whole sequence yet) */
 		return KEY_SEQUNCE_NOT_FINISHED;
 	}
+
 	terminal_print("ansii char 0x%X %c\n", c);
 	/*
 	 * Sequence does not match
@@ -530,6 +534,7 @@ void terminal_process_char(int c, void (*process_line)(char *line))
 			printf("char-0x%02x\n", c);
 			break;
 		}
+
 		if (line_buf_ix < LINE_BUF_MAX - 1) {
 			if (line_len == line_buf_ix) {
 				putchar(c);
diff --git a/android/client/textconv.h b/android/client/textconv.h
index 056e706..085b141 100644
--- a/android/client/textconv.h
+++ b/android/client/textconv.h
@@ -58,7 +58,7 @@ const char *enum_defines(void *v, int i);
 const char *enum_strings(void *v, int i);
 const char *enum_one_string(void *v, int i);
 
-#define TYPE_ENUM(type) ((void *)&__##type##2str[0])
+#define TYPE_ENUM(type) ((void *) &__##type##2str[0])
 #define DECINTMAP(type) \
 extern struct int2str __##type##2str[]; \
 const char *type##2##str(type v); \
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH] android/client: Fix various coding style issues
From: Jerzy Kasenberg @ 2013-10-24  8:50 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jerzy Kasenberg

Mostly indentation of arguments in functions and calls.
Prefix p remove from puser/penum_func.
Some empty lines added after closing } when needed.
Magic number for string length changed to preprocessor define.
---
 android/client/haltest.c       |   18 +++--
 android/client/if-bt.c         |  144 ++++++++++++++++++++++------------------
 android/client/if-hh.c         |   64 +++++++++---------
 android/client/if-main.h       |   12 ++--
 android/client/if-pan.c        |   34 +++++-----
 android/client/if-sock.c       |   26 ++++----
 android/client/tabcompletion.c |    8 +--
 android/client/terminal.c      |    5 ++
 8 files changed, 169 insertions(+), 142 deletions(-)

diff --git a/android/client/haltest.c b/android/client/haltest.c
index 19e81b8..189af0b 100644
--- a/android/client/haltest.c
+++ b/android/client/haltest.c
@@ -47,6 +47,7 @@ struct method *get_method(struct method *methods, const char *name)
 			return methods;
 		methods++;
 	}
+
 	return NULL;
 }
 
@@ -103,11 +104,11 @@ static void help_print_interface(const struct interface *i)
 }
 
 /* Help completion */
-static void help_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+static void help_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 2)
-		*penum_func = interface_name;
+		*enum_func = interface_name;
 }
 
 /* Help execution */
@@ -125,11 +126,13 @@ static void help_p(int argc, const char **argv)
 						(m->help ? m->help : ""));
 			m++;
 		}
+
 		terminal_print("\nAvailable interfaces to use:\n");
 		while (NULL != *ip) {
 			terminal_print("\t%s\n", (*ip)->name);
 			ip++;
 		}
+
 		terminal_print("\nTo get help on methods for each interface type:\n");
 		terminal_print("\n\thelp <inerface>\n");
 		terminal_print("\nBasic scenario:\n\tadapter init\n");
@@ -138,11 +141,13 @@ static void help_p(int argc, const char **argv)
 		terminal_print("\thandsfree init\n\n");
 		return;
 	}
+
 	i = get_interface(argv[1]);
 	if (i == NULL) {
 		haltest_error("No such interface\n");
 		return;
 	}
+
 	help_print_interface(i);
 }
 
@@ -176,6 +181,7 @@ const char *interface_name(void *v, int i)
 const char *command_name(void *v, int i)
 {
 	int cmd_cnt = (int) (sizeof(commands)/sizeof(commands[0]) - 1);
+
 	if (i >= cmd_cnt)
 		return interface_name(v, i - cmd_cnt);
 	else
@@ -188,8 +194,7 @@ const char *command_name(void *v, int i)
  * Output argv is filled with pointers to arguments
  * returns number of tokens parsed - argc
  */
-static int command_line_to_argv(char *line_buffer,
-				char *argv[], int argv_size)
+static int command_line_to_argv(char *line_buffer, char *argv[], int argv_size)
 {
 	static const char *token_breaks = "\r\n\t ";
 	char *token;
@@ -220,15 +225,18 @@ static void process_line(char *line_buffer)
 			i++;
 			continue;
 		}
+
 		if (argc < 2 || strcmp(argv[1], "?") == 0) {
 			help_print_interface(interfaces[i]);
 			return;
 		}
+
 		m = get_method(interfaces[i]->methods, argv[1]);
 		if (m != NULL) {
 			m->func(argc, (const char **) argv);
 			return;
 		}
+
 		haltest_error("No function %s found\n", argv[1]);
 		return;
 	}
diff --git a/android/client/if-bt.c b/android/client/if-bt.c
index f5c84c1..4dc9f6b 100644
--- a/android/client/if-bt.c
+++ b/android/client/if-bt.c
@@ -82,13 +82,14 @@ static char *btproperty2str(bt_property_t property)
 	char *p;
 
 	p = buf + sprintf(buf, "type=%s len=%d val=",
-			  bt_property_type_t2str(property.type), property.len);
+					bt_property_type_t2str(property.type),
+					property.len);
 
 	switch (property.type) {
 	case BT_PROPERTY_BDNAME:
 	case BT_PROPERTY_REMOTE_FRIENDLY_NAME:
 		sprintf(p, "%*s", property.len,
-			((bt_bdname_t *) property.val)->name);
+					((bt_bdname_t *) property.val)->name);
 		break;
 
 	case BT_PROPERTY_BDADDR:
@@ -160,7 +161,7 @@ static char *btproperty2str(bt_property_t property)
 			bt_service_record_t *rec = property.val;
 
 			sprintf(p, "{%s, %d, %s}", btuuid2str(&rec->uuid),
-				rec->channel, rec->name);
+						rec->channel, rec->name);
 		}
 		break;
 
@@ -206,12 +207,14 @@ void add_remote_device(const bt_bdaddr_t *addr)
 			remote_devices_capacity = 0;
 			return;
 		}
+
 		remote_devices_capacity = 4;
 	}
 
 	/* Array is sorted, search for right place */
 	for (i = 0; i < remote_devices_cnt; ++i) {
 		int res = memcmp(&remote_devices[i], addr, sizeof(*addr));
+
 		if (res == 0)
 			return; /* Already added */
 		else if (res > 0)
@@ -259,6 +262,7 @@ static void add_remote_device_from_props(int num_properties,
 		 * aligned buffer
 		 */
 		bt_property_t property;
+
 		memcpy(&property, properties + i, sizeof(property));
 		if (property.type == BT_PROPERTY_BDADDR)
 			add_remote_device((bt_bdaddr_t *) property.val);
@@ -270,21 +274,23 @@ static void adapter_state_changed_cb(bt_state_t state)
 	haltest_info("%s: state=%s\n", __func__, bt_state_t2str(state));
 }
 
-static void adapter_properties_cb(bt_status_t status,
-	int num_properties, bt_property_t *properties)
+static void adapter_properties_cb(bt_status_t status, int num_properties,
+						bt_property_t *properties)
 {
-	haltest_info("%s: status=%s num_properties=%d\n",
-	       __func__, bt_status_t2str(status), num_properties);
+	haltest_info("%s: status=%s num_properties=%d\n", __func__,
+				bt_status_t2str(status), num_properties);
 
 	dump_properties(num_properties, properties);
 }
 
 static void remote_device_properties_cb(bt_status_t status,
-	bt_bdaddr_t *bd_addr, int num_properties, bt_property_t *properties)
+					bt_bdaddr_t *bd_addr,
+					int num_properties,
+					bt_property_t *properties)
 {
-	haltest_info("%s: status=%s bd_addr=%s num_properties=%d\n",
-	       __func__, bt_status_t2str(status), bdaddr2str(bd_addr),
-	       num_properties);
+	haltest_info("%s: status=%s bd_addr=%s num_properties=%d\n", __func__,
+			bt_status_t2str(status), bdaddr2str(bd_addr),
+			num_properties);
 
 	add_remote_device(bd_addr);
 
@@ -303,7 +309,7 @@ static void device_found_cb(int num_properties, bt_property_t *properties)
 static void discovery_state_changed_cb(bt_discovery_state_t state)
 {
 	haltest_info("%s: state=%s\n", __func__,
-		bt_discovery_state_t2str(state));
+					bt_discovery_state_t2str(state));
 }
 
 /*
@@ -314,13 +320,13 @@ static char last_remote_addr[MAX_ADDR_STR_LEN];
 static bt_ssp_variant_t last_ssp_variant = (bt_ssp_variant_t)-1;
 
 static void pin_request_cb(bt_bdaddr_t *remote_bd_addr, bt_bdname_t *bd_name,
-	uint32_t cod)
+								uint32_t cod)
 {
 	/* Store for command completion */
 	bt_bdaddr_t2str(remote_bd_addr, last_remote_addr);
 
 	haltest_info("%s: remote_bd_addr=%s bd_name=%s cod=%06x\n", __func__,
-				       last_remote_addr, bd_name->name, cod);
+					last_remote_addr, bd_name->name, cod);
 }
 
 static void ssp_request_cb(bt_bdaddr_t *remote_bd_addr, bt_bdname_t *bd_name,
@@ -332,26 +338,26 @@ static void ssp_request_cb(bt_bdaddr_t *remote_bd_addr, bt_bdname_t *bd_name,
 	last_ssp_variant = pairing_variant;
 
 	haltest_info("%s: remote_bd_addr=%s bd_name=%s cod=%06x pairing_variant=%s pass_key=%d\n",
-		     __func__, last_remote_addr, bd_name->name, cod,
-		     bt_ssp_variant_t2str(pairing_variant), pass_key);
+			__func__, last_remote_addr, bd_name->name, cod,
+			bt_ssp_variant_t2str(pairing_variant), pass_key);
 }
 
 static void bond_state_changed_cb(bt_status_t status,
-					bt_bdaddr_t *remote_bd_addr,
-					bt_bond_state_t state)
+						bt_bdaddr_t *remote_bd_addr,
+						bt_bond_state_t state)
 {
 	haltest_info("%s: status=%s remote_bd_addr=%s state=%s\n", __func__,
-		       bt_status_t2str(status), bdaddr2str(remote_bd_addr),
-		       bt_bond_state_t2str(state));
+			bt_status_t2str(status), bdaddr2str(remote_bd_addr),
+			bt_bond_state_t2str(state));
 }
 
 static void acl_state_changed_cb(bt_status_t status,
-					bt_bdaddr_t *remote_bd_addr,
-					bt_acl_state_t state)
+						bt_bdaddr_t *remote_bd_addr,
+						bt_acl_state_t state)
 {
 	haltest_info("%s: status=%s remote_bd_addr=%s state=%s\n", __func__,
-		       bt_status_t2str(status), bdaddr2str(remote_bd_addr),
-		       bt_acl_state_t2str(state));
+			bt_status_t2str(status), bdaddr2str(remote_bd_addr),
+			bt_acl_state_t2str(state));
 }
 
 static void thread_evt_cb(bt_cb_thread_evt evt)
@@ -409,7 +415,7 @@ static void init_p(int argc, const char **argv)
 	}
 
 	if_bluetooth =
-	    ((bluetooth_device_t *) device)->get_bluetooth_interface();
+		    ((bluetooth_device_t *) device)->get_bluetooth_interface();
 	if (!if_bluetooth) {
 		haltest_error("get_bluetooth_interface returned NULL\n");
 		return;
@@ -449,11 +455,11 @@ static void get_adapter_properties_p(int argc, const char **argv)
 }
 
 static void get_adapter_property_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = TYPE_ENUM(bt_property_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bt_property_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -468,21 +474,22 @@ static void get_adapter_property_p(int argc, const char **argv)
 }
 
 static const char * const names[] = {
-		"BT_PROPERTY_BDNAME",
-		"BT_PROPERTY_ADAPTER_SCAN_MODE",
-		"BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT", NULL
+	"BT_PROPERTY_BDNAME",
+	"BT_PROPERTY_ADAPTER_SCAN_MODE",
+	"BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT",
+	NULL
 };
 
 static void set_adapter_property_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = (void *) names;
-		*penum_func = enum_strings;
+		*user = (void *) names;
+		*enum_func = enum_strings;
 	} else if (argc == 4) {
 		if (0 == strcmp(argv[2], "BT_PROPERTY_ADAPTER_SCAN_MODE")) {
-			*puser = TYPE_ENUM(bt_scan_mode_t);
-			*penum_func = enum_defines;
+			*user = TYPE_ENUM(bt_scan_mode_t);
+			*enum_func = enum_defines;
 		}
 	}
 }
@@ -529,12 +536,12 @@ static void set_adapter_property_p(int argc, const char **argv)
 /*
  * This function is to be used for completion methods that need only address
  */
-static void complete_addr_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+static void complete_addr_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = NULL;
-		*penum_func = enum_devices;
+		*user = NULL;
+		*enum_func = enum_devices;
 	}
 }
 
@@ -552,15 +559,15 @@ static void get_remote_device_properties_p(int argc, const char **argv)
 }
 
 static void get_remote_device_property_c(int argc, const char **argv,
-						enum_func *penum_func,
-								void **puser)
+							enum_func *enum_func,
+							void **user)
 {
 	if (argc == 3) {
-		*puser = NULL;
-		*penum_func = enum_devices;
+		*user = NULL;
+		*enum_func = enum_devices;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bt_property_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bt_property_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -596,7 +603,6 @@ static void set_remote_device_property_p(int argc, const char **argv)
 		property.len = strlen(argv[4]);
 		property.val = (char *) argv[4];
 		break;
-
 	default:
 		return;
 	}
@@ -621,6 +627,7 @@ static void get_remote_service_record_p(int argc, const char **argv)
 		haltest_error("No uuid specified\n");
 		return;
 	}
+
 	str2bt_uuid_t(argv[3], &uuid);
 
 	EXEC(if_bluetooth->get_remote_service_record, &addr, &uuid);
@@ -692,13 +699,14 @@ static void cancel_bond_p(int argc, const char **argv)
 	EXEC(if_bluetooth->cancel_bond, &addr);
 }
 
-static void pin_reply_c(int argc, const char **argv,
-		enum_func *penum_func, void **puser)
+static void pin_reply_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	static const char *const completions[] = { last_remote_addr, NULL };
+
 	if (argc == 3) {
-		*puser = (void *) completions;
-		*penum_func = enum_strings;
+		*user = (void *) completions;
+		*enum_func = enum_strings;
 	}
 }
 
@@ -721,22 +729,22 @@ static void pin_reply_p(int argc, const char **argv)
 	EXEC(if_bluetooth->pin_reply, &addr, accept, pin_len, &pin);
 }
 
-static void ssp_reply_c(int argc, const char **argv,
-		enum_func *penum_func, void **puser)
+static void ssp_reply_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = last_remote_addr;
-		*penum_func = enum_one_string;
+		*user = last_remote_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 5) {
-		*puser = "1";
-		*penum_func = enum_one_string;
+		*user = "1";
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
 		if (-1 != (int) last_ssp_variant) {
-			*puser = (void *) bt_ssp_variant_t2str(last_ssp_variant);
-			*penum_func = enum_one_string;
+			*user = (void *) bt_ssp_variant_t2str(last_ssp_variant);
+			*enum_func = enum_one_string;
 		} else {
-			*puser = TYPE_ENUM(bt_ssp_variant_t);
-			*penum_func = enum_defines;
+			*user = TYPE_ENUM(bt_ssp_variant_t);
+			*enum_func = enum_defines;
 		}
 	}
 }
@@ -755,11 +763,13 @@ static void ssp_reply_p(int argc, const char **argv)
 		haltest_error("No ssp variant specified\n");
 		return;
 	}
+
 	var = str2btsspvariant(argv[3]);
 	if (argc < 5) {
 		haltest_error("No accept value specified\n");
 		return;
 	}
+
 	accept = atoi(argv[4]);
 	passkey = 0;
 
@@ -770,7 +780,7 @@ static void ssp_reply_p(int argc, const char **argv)
 }
 
 static void get_profile_interface_c(int argc, const char **argv,
-		enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	static const char *const profile_ids[] = {
 		BT_PROFILE_HANDSFREE_ID,
@@ -787,8 +797,8 @@ static void get_profile_interface_c(int argc, const char **argv,
 	};
 
 	if (argc == 3) {
-		*puser = (void *) profile_ids;
-		*penum_func = enum_strings;
+		*user = (void *) profile_ids;
+		*enum_func = enum_strings;
 	}
 }
 
@@ -818,7 +828,7 @@ static void get_profile_interface_p(int argc, const char **argv)
 #endif
 	else
 		haltest_error("%s is not correct for get_profile_interface\n",
-		     id);
+									id);
 
 	if (pif != NULL) {
 		*pif = if_bluetooth->get_profile_interface(id);
@@ -836,6 +846,7 @@ static void dut_mode_configure_p(int argc, const char **argv)
 		haltest_error("No dut mode specified\n");
 		return;
 	}
+
 	mode = strtol(argv[2], NULL, 0);
 
 	EXEC(if_bluetooth->dut_mode_configure, mode);
@@ -851,7 +862,8 @@ static struct method methods[] = {
 	STD_METHODCH(set_adapter_property, "<prop_type> <prop_value>"),
 	STD_METHODCH(get_remote_device_properties, "<addr>"),
 	STD_METHODCH(get_remote_device_property, "<addr> <property_type>"),
-	STD_METHODCH(set_remote_device_property, "<addr> <property_type> <value>"),
+	STD_METHODCH(set_remote_device_property,
+					"<addr> <property_type> <value>"),
 	STD_METHODCH(get_remote_service_record, "<addr> <uuid>"),
 	STD_METHODCH(get_remote_services, "<addr>"),
 	STD_METHOD(start_discovery),
diff --git a/android/client/if-hh.c b/android/client/if-hh.c
index e23e4d5..005b13a 100644
--- a/android/client/if-hh.c
+++ b/android/client/if-hh.c
@@ -79,7 +79,7 @@ static void connection_state_cb(bt_bdaddr_t *bd_addr,
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s connection_state=%s\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
+					bt_bdaddr_t2str(bd_addr, addr),
 					bthh_connection_state_t2str(state));
 	if (state == BTHH_CONN_STATE_CONNECTED)
 		strcpy(connected_device_addr, addr);
@@ -94,7 +94,7 @@ static void virtual_unplug_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status)
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s hh_status=%s\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
+						bt_bdaddr_t2str(bd_addr, addr),
 						bthh_status_t2str(hh_status));
 }
 
@@ -122,9 +122,9 @@ static void protocol_mode_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status,
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s hh_status=%s mode=%s\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
-			bthh_status_t2str(hh_status),
-						bthh_protocol_mode_t2str(mode));
+					bt_bdaddr_t2str(bd_addr, addr),
+					bthh_status_t2str(hh_status),
+					bthh_protocol_mode_t2str(mode));
 }
 
 /*
@@ -136,8 +136,8 @@ static void idle_time_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status,
 	char addr[MAX_ADDR_STR_LEN];
 
 	haltest_info("%s: bd_addr=%s hh_status=%s idle_rate=%d\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
-			bthh_status_t2str(hh_status), idle_rate);
+				bt_bdaddr_t2str(bd_addr, addr),
+				bthh_status_t2str(hh_status), idle_rate);
 }
 
 
@@ -152,8 +152,8 @@ static void get_report_cb(bt_bdaddr_t *bd_addr, bthh_status_t hh_status,
 
 	/* TODO: print actual report */
 	haltest_info("%s: bd_addr=%s hh_status=%s rpt_size=%d\n", __func__,
-			bt_bdaddr_t2str(bd_addr, addr),
-			bthh_status_t2str(hh_status), rpt_size);
+					bt_bdaddr_t2str(bd_addr, addr),
+					bthh_status_t2str(hh_status), rpt_size);
 }
 
 static bthh_callbacks_t bthh_callbacks = {
@@ -177,12 +177,12 @@ static void init_p(int argc, const char **argv)
 
 /* connect */
 
-static void connect_c(int argc, const const char **argv,
-				enum_func *penum_func, void **puser)
+static void connect_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = (void *) connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = (void *) connected_device_addr;
+		*enum_func = enum_one_string;
 	}
 }
 
@@ -243,14 +243,14 @@ static void set_info_p(int argc, const char **argv)
 /* get_protocol */
 
 static void get_protocol_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bthh_protocol_mode_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bthh_protocol_mode_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -296,14 +296,14 @@ static void set_protocol_p(int argc, const char **argv)
 /* get_report */
 
 static void get_report_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bthh_report_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bthh_report_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -341,14 +341,14 @@ static void get_report_p(int argc, const char **argv)
 /* set_report */
 
 static void set_report_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(bthh_report_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(bthh_report_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -376,12 +376,12 @@ static void set_report_p(int argc, const char **argv)
 
 /* send_data */
 
-static void send_data_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+static void send_data_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = connected_device_addr;
-		*penum_func = enum_one_string;
+		*user = connected_device_addr;
+		*enum_func = enum_one_string;
 	}
 }
 
diff --git a/android/client/if-main.h b/android/client/if-main.h
index f2d35d9..eaee914 100644
--- a/android/client/if-main.h
+++ b/android/client/if-main.h
@@ -93,11 +93,11 @@ typedef const char *(*enum_func)(void *user, int i);
 
 /*
  * This is prototype of function that when given argc, argv will
- * fill penum_func with pointer to function that will enumerate
- * parameters for argc argument, puser will be passed to penum_func.
+ * fill enum_func with pointer to function that will enumerate
+ * parameters for argc argument, user will be passed to enum_func.
  */
-typedef void (*tab_complete)(int argc, const char **argv,
-					enum_func *penum_func, void **puser);
+typedef void (*tab_complete)(int argc, const char **argv, enum_func *enum_func,
+								void **user);
 
 /*
  * For each method there is name and two functions to parse command line
@@ -145,9 +145,9 @@ struct method *get_command(const char *name);
 
 #define VERIFY_ADDR_ARG(n, adr) \
 	do { \
-		if (n < argc) \
+		if (n < argc) {\
 			str2bt_bdaddr_t(argv[n], adr); \
-		else { \
+		} else { \
 			haltest_error("No address specified\n");\
 			return;\
 		} \
diff --git a/android/client/if-pan.c b/android/client/if-pan.c
index e9cfa23..dcc7e80 100644
--- a/android/client/if-pan.c
+++ b/android/client/if-pan.c
@@ -45,12 +45,12 @@ static void control_state_cb(btpan_control_state_t state, bt_status_t error,
 					int local_role, const char *ifname)
 {
 	haltest_info("%s: state=%s error=%s local_role=%s ifname=%s\n",
-		       __func__, btpan_control_state_t2str(state),
-		       bt_status_t2str(error), btpan_role_t2str(local_role),
-		       ifname);
+			__func__, btpan_control_state_t2str(state),
+			bt_status_t2str(error), btpan_role_t2str(local_role),
+			ifname);
 }
 
-static char last_used_addr[18];
+static char last_used_addr[MAX_ADDR_STR_LEN];
 
 static void connection_state_cb(btpan_connection_state_t state,
 				bt_status_t error, const bt_bdaddr_t *bd_addr,
@@ -79,12 +79,12 @@ static void init_p(int argc, const char **argv)
 
 /* enable */
 
-static void enable_c(int argc, const const char **argv, enum_func *penum_func,
-								void **puser)
+static void enable_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = TYPE_ENUM(btpan_role_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btpan_role_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -120,15 +120,15 @@ static void get_local_role_p(int argc, const char **argv)
 
 /* connect */
 
-static void connect_c(int argc, const const char **argv, enum_func *penum_func,
-								void **puser)
+static void connect_c(int argc, const const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = NULL;
-		*penum_func = enum_devices;
+		*user = NULL;
+		*enum_func = enum_devices;
 	} else if (argc == 4 || argc == 5) {
-		*puser = TYPE_ENUM(btpan_role_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btpan_role_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -165,11 +165,11 @@ static void connect_p(int argc, const char **argv)
 /* disconnect */
 
 static void disconnect_c(int argc, const const char **argv,
-					enum_func *penum_func, void **puser)
+					enum_func *enum_func, void **user)
 {
 	if (argc == 3) {
-		*puser = last_used_addr;
-		*penum_func = enum_one_string;
+		*user = last_used_addr;
+		*enum_func = enum_one_string;
 	}
 }
 
diff --git a/android/client/if-sock.c b/android/client/if-sock.c
index f3125f8..dcaf048 100644
--- a/android/client/if-sock.c
+++ b/android/client/if-sock.c
@@ -52,7 +52,6 @@ static void receive_from_client(struct pollfd *pollfd)
 		haltest_error("Disconnected fd=%d\n", pollfd->fd);
 		poll_unregister_fd(pollfd->fd, receive_from_client);
 	} else if (pollfd->revents & POLLIN) {
-
 		haltest_info("receiving from client fd=%d\n", pollfd->fd);
 
 		do {
@@ -95,9 +94,10 @@ static void receive_sock_connect_signal(struct pollfd *pollfd)
 			haltest_info("Read on connect return %d\n", ret);
 			return;
 		}
+
 		haltest_info("Connection to %s channel %d status=%d\n",
 				bt_bdaddr_t2str(&cs.bd_addr, addr_str),
-							cs.channel, cs.status);
+				cs.channel, cs.status);
 
 		if (cs.status == 0)
 			poll_register_fd(pollfd->fd, POLLIN,
@@ -106,7 +106,7 @@ static void receive_sock_connect_signal(struct pollfd *pollfd)
 
 	if (pollfd->revents & POLLHUP) {
 		haltest_error("Disconnected fd=%d revents=0x%X\n", pollfd->fd,
-							pollfd->revents);
+				pollfd->revents);
 		poll_unregister_fd(pollfd->fd, receive_sock_connect_signal);
 	}
 }
@@ -165,6 +165,7 @@ static void read_accepted(int fd)
 		accepted_fd = descs[0];
 		break;
 	}
+
 	haltest_info("Incoming connection from %s channel %d status=%d fd=%d\n",
 					bt_bdaddr_t2str(&cs.bd_addr, addr_str),
 					cs.channel, cs.status, accepted_fd);
@@ -184,12 +185,12 @@ static void client_connected(struct pollfd *pollfd)
 
 /** listen */
 
-static void listen_c(int argc, const char **argv, enum_func *penum_func,
-								void **puser)
+static void listen_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*puser = TYPE_ENUM(btsock_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btsock_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -253,14 +254,14 @@ static void listen_p(int argc, const char **argv)
 
 /** connect */
 
-static void connect_c(int argc, const char **argv,
-					enum_func *penum_func, void **puser)
+static void connect_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
 {
 	if (argc == 3) {
-		*penum_func = enum_devices;
+		*enum_func = enum_devices;
 	} else if (argc == 4) {
-		*puser = TYPE_ENUM(btsock_type_t);
-		*penum_func = enum_defines;
+		*user = TYPE_ENUM(btsock_type_t);
+		*enum_func = enum_defines;
 	}
 }
 
@@ -313,6 +314,7 @@ static void connect_p(int argc, const char **argv)
 	if (sock_fd > 0) {
 		int channel = 0;
 		int ret = read(sock_fd, &channel, 4);
+
 		if (ret != 4)
 			haltest_info("Read channel failed\n");
 		haltest_info("Channel returned from first read %d\n", channel);
diff --git a/android/client/tabcompletion.c b/android/client/tabcompletion.c
index 2b95591..69af609 100644
--- a/android/client/tabcompletion.c
+++ b/android/client/tabcompletion.c
@@ -63,8 +63,8 @@ static void print_matches(enum_func f, void *user, const char *prefix, int len)
  * buf - output buffer to keep splited arguments list
  * buf_size_in_bytes - size of buf
  */
-static int split_command(const char *line_buffer, int size,
-					split_arg_t *buf, int buf_size_in_bytes)
+static int split_command(const char *line_buffer, int size, split_arg_t *buf,
+							int buf_size_in_bytes)
 {
 	split_arg_t *prev = NULL;
 	split_arg_t *arg = buf;
@@ -218,8 +218,8 @@ static void method_completion(const struct interface *iface, split_arg_t *arg)
 static const char *bold = "\x1b[1m";
 static const char *normal = "\x1b[0m";
 
-static bool find_nth_argument(const char *str, int n,
-						const char **s, const char **e)
+static bool find_nth_argument(const char *str, int n, const char **s,
+								const char **e)
 {
 	const char *p = str;
 	int argc = 0;
diff --git a/android/client/terminal.c b/android/client/terminal.c
index a57068a..88c963b 100644
--- a/android/client/terminal.c
+++ b/android/client/terminal.c
@@ -214,6 +214,7 @@ static void terminal_line_replaced(void)
 			putchar('\b');
 			line_buf_ix--;
 		}
+
 		/* If cursor was not at the end, move it to the end */
 		if (line_buf_ix < line_len)
 			printf("%.*s", line_len - line_buf_ix,
@@ -222,6 +223,7 @@ static void terminal_line_replaced(void)
 		while (line_len >= len++)
 			putchar(' ');
 	}
+
 	/* draw new line */
 	printf("\r%s%s", prompt, line_buf);
 	/* set up indexes to new line */
@@ -321,6 +323,7 @@ static int terminal_convert_sequence(int c)
 	       }
 	       return c;
 	}
+
 	/* Inside sequence */
 	current_sequence[current_sequence_len++] = c;
 	current_sequence[current_sequence_len] = '\0';
@@ -338,6 +341,7 @@ static int terminal_convert_sequence(int c)
 		/* partial match (not whole sequence yet) */
 		return KEY_SEQUNCE_NOT_FINISHED;
 	}
+
 	terminal_print("ansii char 0x%X %c\n", c);
 	/*
 	 * Sequence does not match
@@ -530,6 +534,7 @@ void terminal_process_char(int c, void (*process_line)(char *line))
 			printf("char-0x%02x\n", c);
 			break;
 		}
+
 		if (line_buf_ix < LINE_BUF_MAX - 1) {
 			if (line_len == line_buf_ix) {
 				putchar(c);
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH 5/5] android: Use adapter index in mgmt functions
From: Szymon Janc @ 2013-10-24  8:36 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382603813-9157-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

Instead of hardcoding index 0 use real index of adapter. This fix
using invalid index if adapter ID happens to be different than 0.

This should not happen on Android but is possible while testing on
Linux PC.
---
 android/adapter.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index 0305ccb..532f964 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -170,14 +170,16 @@ static void mgmt_dev_class_changed_event(uint16_t index, uint16_t length,
 
 static void register_mgmt_handlers(void)
 {
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, 0,
+	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, adapter->index,
 					new_settings_callback, NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_CLASS_OF_DEV_CHANGED,
-			0, mgmt_dev_class_changed_event, NULL, NULL);
+				adapter->index, mgmt_dev_class_changed_event,
+				NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_LOCAL_NAME_CHANGED,
-			0, mgmt_local_name_changed_event, NULL, NULL);
+				adapter->index, mgmt_local_name_changed_event,
+				NULL, NULL);
 }
 
 static void load_link_keys_complete(uint8_t status, uint16_t length,
@@ -216,7 +218,7 @@ static void load_link_keys(GSList *keys)
 	cp->debug_keys = 0;
 	cp->key_count = htobs(key_len);
 
-	mgmt_send(adapter->mgmt, MGMT_OP_LOAD_LINK_KEYS, 0, len,
+	mgmt_send(adapter->mgmt, MGMT_OP_LOAD_LINK_KEYS, adapter->index, len,
 				cp, load_link_keys_complete, NULL, NULL);
 
 	g_free(cp);
-- 
1.8.4


^ permalink raw reply related

* [PATCH 4/5] android: Use default adapter in adapter functions
From: Szymon Janc @ 2013-10-24  8:36 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382603813-9157-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

There is no need to pass pointer to adapter between function as there
is only one adapter in android daemon. Also default_adapter is renamed
to adapter.

There is no need to pass adapter pointer as user data since there is
only one adapter present.
---
 android/adapter.c | 63 +++++++++++++++++++++++--------------------------------
 1 file changed, 26 insertions(+), 37 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index 0a53021..0305ccb 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -50,12 +50,11 @@ struct bt_adapter {
 	uint32_t current_settings;
 };
 
-static struct bt_adapter *default_adapter;
+static struct bt_adapter *adapter;
 
 static void mgmt_local_name_changed_event(uint16_t index, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	const struct mgmt_cp_set_local_name *rp = param;
 
 	if (length < sizeof(*rp)) {
@@ -74,7 +73,7 @@ static void mgmt_local_name_changed_event(uint16_t index, uint16_t length,
 	/* TODO Update services if needed */
 }
 
-static void settings_changed_powered(struct bt_adapter *adapter)
+static void settings_changed_powered(void)
 {
 	struct hal_ev_adapter_state_changed ev;
 
@@ -87,17 +86,17 @@ static void settings_changed_powered(struct bt_adapter *adapter)
 			HAL_EV_ADAPTER_STATE_CHANGED, sizeof(ev), &ev, -1);
 }
 
-static void settings_changed_connectable(struct bt_adapter *adapter)
+static void settings_changed_connectable(void)
 {
 	/* TODO */
 }
 
-static void settings_changed_discoverable(struct bt_adapter *adapter)
+static void settings_changed_discoverable(void)
 {
 	/* TODO */
 }
 
-static void settings_changed(struct bt_adapter *adapter, uint32_t settings)
+static void settings_changed(uint32_t settings)
 {
 	uint32_t changed_mask;
 
@@ -108,25 +107,24 @@ static void settings_changed(struct bt_adapter *adapter, uint32_t settings)
 	DBG("0x%08x", changed_mask);
 
 	if (changed_mask & MGMT_SETTING_POWERED)
-		settings_changed_powered(adapter);
+		settings_changed_powered();
 
 	if (changed_mask & MGMT_SETTING_CONNECTABLE) {
 		DBG("Connectable");
 
-		settings_changed_connectable(adapter);
+		settings_changed_connectable();
 	}
 
 	if (changed_mask & MGMT_SETTING_DISCOVERABLE) {
 		DBG("Discoverable");
 
-		settings_changed_discoverable(adapter);
+		settings_changed_discoverable();
 	}
 }
 
 static void new_settings_callback(uint16_t index, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	uint32_t settings;
 
 	if (length < sizeof(settings)) {
@@ -142,13 +140,12 @@ static void new_settings_callback(uint16_t index, uint16_t length,
 	if (settings == adapter->current_settings)
 		return;
 
-	settings_changed(adapter, settings);
+	settings_changed(settings);
 }
 
 static void mgmt_dev_class_changed_event(uint16_t index, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	const struct mgmt_cod *rp = param;
 	uint32_t dev_class;
 
@@ -171,24 +168,21 @@ static void mgmt_dev_class_changed_event(uint16_t index, uint16_t length,
 	/* TODO: Gatt attrib set*/
 }
 
-static void register_mgmt_handlers(struct bt_adapter *adapter)
+static void register_mgmt_handlers(void)
 {
 	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, 0,
-			new_settings_callback, adapter, NULL);
+					new_settings_callback, NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_CLASS_OF_DEV_CHANGED,
-			0, mgmt_dev_class_changed_event,
-			adapter, NULL);
+			0, mgmt_dev_class_changed_event, NULL, NULL);
 
 	mgmt_register(adapter->mgmt, MGMT_EV_LOCAL_NAME_CHANGED,
-			0, mgmt_local_name_changed_event,
-			adapter, NULL);
+			0, mgmt_local_name_changed_event, NULL, NULL);
 }
 
 static void load_link_keys_complete(uint8_t status, uint16_t length,
 					const void *param, void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	int err;
 
 	if (status) {
@@ -200,7 +194,6 @@ static void load_link_keys_complete(uint8_t status, uint16_t length,
 
 	DBG("status %u", status);
 
-	default_adapter = adapter;
 	adapter->ready(0);
 	return;
 
@@ -208,7 +201,7 @@ failed:
 	adapter->ready(err);
 }
 
-static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
+static void load_link_keys(GSList *keys)
 {
 	struct mgmt_cp_load_link_keys *cp;
 	size_t key_len = g_slist_length(keys);
@@ -224,7 +217,7 @@ static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
 	cp->key_count = htobs(key_len);
 
 	mgmt_send(adapter->mgmt, MGMT_OP_LOAD_LINK_KEYS, 0, len,
-				cp, load_link_keys_complete, adapter, NULL);
+				cp, load_link_keys_complete, NULL, NULL);
 
 	g_free(cp);
 }
@@ -232,7 +225,6 @@ static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
 static void read_info_complete(uint8_t status, uint16_t length, const void *param,
 							void *user_data)
 {
-	struct bt_adapter *adapter = user_data;
 	const struct mgmt_rp_read_info *rp = param;
 	int err;
 
@@ -240,7 +232,7 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
 
 	if (status) {
 		error("Failed to read info for index %u: %s (0x%02x)",
-			adapter->index, mgmt_errstr(status), status);
+				adapter->index, mgmt_errstr(status), status);
 		err = -EIO;
 		goto failed;
 	}
@@ -267,9 +259,9 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
 	adapter->current_settings = btohs(rp->current_settings);
 
 	/* TODO: Register all event notification handlers */
-	register_mgmt_handlers(adapter);
+	register_mgmt_handlers();
 
-	load_link_keys(adapter, NULL);
+	load_link_keys(NULL);
 
 	return;
 
@@ -280,8 +272,6 @@ failed:
 void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 						bt_adapter_ready ready)
 {
-	struct bt_adapter *adapter;
-
 	adapter = g_new0(struct bt_adapter, 1);
 
 	adapter->mgmt = mgmt_ref(mgmt_if);
@@ -289,11 +279,11 @@ void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 	adapter->ready = ready;
 
 	if (mgmt_send(mgmt_if, MGMT_OP_READ_INFO, index, 0, NULL,
-				read_info_complete, adapter, NULL) > 0)
+					read_info_complete, NULL, NULL) > 0)
 		return;
 
+	mgmt_unref(adapter->mgmt);
 	ready(-EIO);
-	mgmt_unref(mgmt_if);
 }
 
 static void set_mode_complete(uint8_t status, uint16_t length,
@@ -310,8 +300,7 @@ static void set_mode_complete(uint8_t status, uint16_t length,
 	 * required in both cases. So it is safe to just call the
 	 * event handling functions here.
 	 */
-	new_settings_callback(default_adapter->index, length, param,
-							default_adapter);
+	new_settings_callback(adapter->index, length, param, NULL);
 }
 
 static bool set_mode(uint16_t opcode, uint8_t mode)
@@ -323,8 +312,8 @@ static bool set_mode(uint16_t opcode, uint8_t mode)
 
 	DBG("opcode=0x%x mode=0x%x", opcode, mode);
 
-	if (mgmt_send(default_adapter->mgmt, opcode, default_adapter->index,
-			sizeof(cp), &cp, set_mode_complete, NULL, NULL) > 0)
+	if (mgmt_send(adapter->mgmt, opcode, adapter->index, sizeof(cp), &cp,
+					set_mode_complete, NULL, NULL) > 0)
 		return true;
 
 	error("Failed to set mode");
@@ -339,7 +328,7 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
 
 	switch (opcode) {
 	case HAL_OP_ENABLE:
-		if (default_adapter->current_settings & MGMT_SETTING_POWERED) {
+		if (adapter->current_settings & MGMT_SETTING_POWERED) {
 			status = HAL_ERROR_DONE;
 			break;
 		}
@@ -351,7 +340,7 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
 		}
 		break;
 	case HAL_OP_DISABLE:
-		if (!(default_adapter->current_settings & MGMT_SETTING_POWERED)) {
+		if (!(adapter->current_settings & MGMT_SETTING_POWERED)) {
 			status = HAL_ERROR_DONE;
 			break;
 		}
@@ -372,7 +361,7 @@ void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
 
 const bdaddr_t *bt_adapter_get_address(void)
 {
-	return &default_adapter->bdaddr;
+	return &adapter->bdaddr;
 }
 
 bool bt_adapter_register(GIOChannel *io)
-- 
1.8.4


^ permalink raw reply related

* [PATCH 3/5] android: Remove not needed adapter parameter from bt_adapter_ready
From: Szymon Janc @ 2013-10-24  8:36 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382603813-9157-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

There is no need to pass adapter pointer in bt_adapter_ready callback
as there is only one present.
---
 android/adapter.c | 6 +++---
 android/adapter.h | 4 +---
 android/main.c    | 2 +-
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index d85fa1f..0a53021 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -201,11 +201,11 @@ static void load_link_keys_complete(uint8_t status, uint16_t length,
 	DBG("status %u", status);
 
 	default_adapter = adapter;
-	adapter->ready(adapter, 0);
+	adapter->ready(0);
 	return;
 
 failed:
-	adapter->ready(NULL, err);
+	adapter->ready(err);
 }
 
 static void load_link_keys(struct bt_adapter *adapter, GSList *keys)
@@ -274,7 +274,7 @@ static void read_info_complete(uint8_t status, uint16_t length, const void *para
 	return;
 
 failed:
-	adapter->ready(NULL, err);
+	adapter->ready(err);
 }
 
 void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
diff --git a/android/adapter.h b/android/adapter.h
index 9ae2d33..3d7b804 100644
--- a/android/adapter.h
+++ b/android/adapter.h
@@ -28,9 +28,7 @@
 
 #include "lib/bluetooth.h"
 
-struct bt_adapter;
-
-typedef void (*bt_adapter_ready)(struct bt_adapter *adapter, int err);
+typedef void (*bt_adapter_ready)(int err);
 
 void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 						bt_adapter_ready func);
diff --git a/android/main.c b/android/main.c
index 740b532..50b5901 100644
--- a/android/main.c
+++ b/android/main.c
@@ -392,7 +392,7 @@ static GOptionEntry options[] = {
 	{ NULL }
 };
 
-static void adapter_ready(struct bt_adapter *adapter, int err)
+static void adapter_ready(int err)
 {
 	if (err) {
 		error("Adapter initialization failed: %s", strerror(err));
-- 
1.8.4


^ permalink raw reply related

* [PATCH 2/5] android: Fix bt_adapter_init
From: Szymon Janc @ 2013-10-24  8:36 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc
In-Reply-To: <1382603813-9157-1-git-send-email-szymon.janc@tieto.com>

From: Szymon Janc <szymon.janc@gmail.com>

Make bt_adapter_init return void and use ready callback for error
reporting. This also fix returning incorrect status and invalid
mgmt_if unref (mgmt_send return 0 on error or >0 on success).
---
 android/adapter.c | 11 +++++------
 android/adapter.h |  2 +-
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/android/adapter.c b/android/adapter.c
index 88ac19f..d85fa1f 100644
--- a/android/adapter.c
+++ b/android/adapter.c
@@ -277,7 +277,7 @@ failed:
 	adapter->ready(NULL, err);
 }
 
-bool bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
+void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 						bt_adapter_ready ready)
 {
 	struct bt_adapter *adapter;
@@ -289,12 +289,11 @@ bool bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 	adapter->ready = ready;
 
 	if (mgmt_send(mgmt_if, MGMT_OP_READ_INFO, index, 0, NULL,
-				read_info_complete, adapter, NULL) > 0) {
-		mgmt_unref(mgmt_if);
-		return false;
-	}
+				read_info_complete, adapter, NULL) > 0)
+		return;
 
-	return adapter;
+	ready(-EIO);
+	mgmt_unref(mgmt_if);
 }
 
 static void set_mode_complete(uint8_t status, uint16_t length,
diff --git a/android/adapter.h b/android/adapter.h
index b8d0a58..9ae2d33 100644
--- a/android/adapter.h
+++ b/android/adapter.h
@@ -32,7 +32,7 @@ struct bt_adapter;
 
 typedef void (*bt_adapter_ready)(struct bt_adapter *adapter, int err);
 
-bool bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
+void bt_adapter_init(uint16_t index, struct mgmt *mgmt_if,
 						bt_adapter_ready func);
 
 void bt_adapter_handle_cmd(GIOChannel *io, uint8_t opcode, void *buf,
-- 
1.8.4


^ permalink raw reply related

* [PATCH 1/5] android: Start command watch after notify channel is connected
From: Szymon Janc @ 2013-10-24  8:36 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Szymon Janc

From: Szymon Janc <szymon.janc@gmail.com>

Daemon should start processing commands only after both communication
channels were connected.
---
 android/main.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/android/main.c b/android/main.c
index 9879f05..740b532 100644
--- a/android/main.c
+++ b/android/main.c
@@ -288,9 +288,11 @@ static gboolean notif_connect_cb(GIOChannel *io, GIOCondition cond,
 
 	g_io_add_watch(io, cond, notif_watch_cb, NULL);
 
-	info("Successfully connected to HAL");
+	cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
 
-	/* TODO start handling commands */
+	g_io_add_watch(hal_cmd_io, cond, cmd_watch_cb, NULL);
+
+	info("Successfully connected to HAL");
 
 	return FALSE;
 }
@@ -305,10 +307,6 @@ static gboolean cmd_connect_cb(GIOChannel *io, GIOCondition cond,
 		return FALSE;
 	}
 
-	cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
-
-	g_io_add_watch(io, cond, cmd_watch_cb, NULL);
-
 	hal_notif_io = connect_hal(notif_connect_cb);
 	if (!hal_notif_io) {
 		error("Cannot connect to HAL, terminating");
-- 
1.8.4


^ permalink raw reply related

* Re: [PATCHv1 0/2] Enable av interface
From: Jerzy Kasenberg @ 2013-10-24  7:39 UTC (permalink / raw)
  To: Andrei Emeltchenko; +Cc: linux-bluetooth
In-Reply-To: <1382598639-6920-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

On 24 October 2013 09:10, Andrei Emeltchenko
<Andrei.Emeltchenko.news@gmail.com> wrote:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> For some reason get av interface was missing from hal-bluetooth and from
> hal test tool.
>
> PS: Not sure that haltest is fully implemented, Jerzy please comment here.

I must have missed if-bt in commit.
Thanks Andrei.
Apart from one line in if-bt.c all code to call av interface is there
and should be
functional.

>
> Andrei Emeltchenko (2):
>   android: haltest: Enable av interface in test tool
>   android: Enable AV interface
>
>  android/client/if-bt.c  |    2 +-
>  android/hal-bluetooth.c |    3 +++
>  2 files changed, 4 insertions(+), 1 deletion(-)
>
> --
> 1.7.10.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Jerzy

^ permalink raw reply

* Re: [PATCHv1 0/2] Enable av interface
From: Luiz Augusto von Dentz @ 2013-10-24  7:28 UTC (permalink / raw)
  To: Andrei Emeltchenko; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <1382598639-6920-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

Hi Andrei,

On Thu, Oct 24, 2013 at 10:10 AM, Andrei Emeltchenko
<Andrei.Emeltchenko.news@gmail.com> wrote:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> For some reason get av interface was missing from hal-bluetooth and from
> hal test tool.
>
> PS: Not sure that haltest is fully implemented, Jerzy please comment here.
>
> Andrei Emeltchenko (2):
>   android: haltest: Enable av interface in test tool
>   android: Enable AV interface
>
>  android/client/if-bt.c  |    2 +-
>  android/hal-bluetooth.c |    3 +++
>  2 files changed, 4 insertions(+), 1 deletion(-)
>
> --
> 1.7.10.4

Pushed, thanks.


-- 
Luiz Augusto von Dentz

^ permalink raw reply

* [PATCHv1 2/2] android: Enable AV interface
From: Andrei Emeltchenko @ 2013-10-24  7:10 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1382598639-6920-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Include av_interface to get_interface function.
---
 android/hal-bluetooth.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index d988778..52c7c68 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -310,6 +310,9 @@ static const void *get_profile_interface(const char *profile_id)
 	if (!strcmp(profile_id, BT_PROFILE_PAN_ID))
 		return bt_get_pan_interface();
 
+	if (!strcmp(profile_id, BT_PROFILE_ADVANCED_AUDIO_ID))
+		return bt_get_av_interface();
+
 	return NULL;
 }
 
-- 
1.7.10.4


^ permalink raw reply related

* [PATCHv1 1/2] android: haltest: Enable av interface in test tool
From: Andrei Emeltchenko @ 2013-10-24  7:10 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1382598639-6920-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/client/if-bt.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/android/client/if-bt.c b/android/client/if-bt.c
index 2d9c0b5..f5c84c1 100644
--- a/android/client/if-bt.c
+++ b/android/client/if-bt.c
@@ -803,7 +803,7 @@ static void get_profile_interface_p(int argc, const char **argv)
 	if (strcmp(BT_PROFILE_HANDSFREE_ID, id) == 0)
 		pif = &dummy; /* TODO: change when if_hf is there */
 	else if (strcmp(BT_PROFILE_ADVANCED_AUDIO_ID, id) == 0)
-		pif = &dummy; /* TODO: change when if_av is there */
+		pif = (const void **)&if_av;
 	else if (strcmp(BT_PROFILE_HEALTH_ID, id) == 0)
 		pif = &dummy; /* TODO: change when if_hl is there */
 	else if (strcmp(BT_PROFILE_SOCKETS_ID, id) == 0)
-- 
1.7.10.4


^ permalink raw reply related

* [PATCHv1 0/2] Enable av interface
From: Andrei Emeltchenko @ 2013-10-24  7:10 UTC (permalink / raw)
  To: linux-bluetooth

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

For some reason get av interface was missing from hal-bluetooth and from
hal test tool.

PS: Not sure that haltest is fully implemented, Jerzy please comment here.

Andrei Emeltchenko (2):
  android: haltest: Enable av interface in test tool
  android: Enable AV interface

 android/client/if-bt.c  |    2 +-
 android/hal-bluetooth.c |    3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

-- 
1.7.10.4


^ permalink raw reply

* Use Bluez as peripheral
From: Elvis Angelaccio @ 2013-10-23 22:16 UTC (permalink / raw)
  To: linux-bluetooth

Hi all, this is my first post to this mailing list, sorry if I am in the
wrong place.
I'm learning Bluetooth Low Energy with a simple Android application. Since
the Android API implements only the "central" side of the BTLE stack, I
need to implement the "peripheral" side on my laptop (thinkpad edge e130,
bluetooth 4.0, linux 3.11).

As I understand, Bluez should support this feature (while Windows 8 and Max
OSX don't).
For now I'm able to "advertise" my laptop using the command "hciconfig hci0
leadv". My android app succeeds to find my laptop after a btleScan().
Of course actually there is no a GATT server and no "characteristics" to
read and write.

I really need some hints on how to create a GATT server using Bluez, so I
have some questions.

1. In my distro, I have by default Bluez 4.101. Should I compile Bluez 5?
2. If I have to use Bluez 5, should I learn how to program using DBus?
3. I I can use Bluez 4, what are the header files that I'm required to
include? (i.e. the function that I have to use?)


I know the C language, but I have no idea how to deal with kernel code as
Bluez seems to be, sorry if these are noob questions.

Thank you all in Advance,
Elvis

^ permalink raw reply

* Re: [PATCH] Bluetooth: Fix limited discoverable mode for Zeevo modules
From: Johan Hedberg @ 2013-10-23 16:44 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: linux-bluetooth
In-Reply-To: <1382542081-36918-1-git-send-email-marcel@holtmann.org>

Hi Marcel,

On Wed, Oct 23, 2013, Marcel Holtmann wrote:
> There is an old Panasonic module with a Zeevo chip in there that is
> not really operating according to Bluetooth core specification when
> it comes to setting the IAC LAP for limited discoverable mode.
> 
> For reference, this is the vendor information about this module:
> 
>   < HCI Command: Read Local Version Information (0x04|0x0001) plen 0
>   > HCI Event: Command Complete (0x0e) plen 12
>         Read Local Version Information (0x04|0x0001) ncmd 1
>           Status: Success (0x00)
>           HCI version: Bluetooth 1.2 (0x02) - Revision 196 (0x00c4)
>           LMP version: Bluetooth 1.2 (0x02) - Subversion 61 (0x003d)
>           Manufacturer: Zeevo, Inc. (18)
> 
> The module reports only the support for one IAC at a time. And that
> is totally acceptable according to the Bluetooth core specification
> since the minimum supported IAC is only one.
> 
>   < HCI Command: Read Number of Supported IAC (0x03|0x0038) plen 0
>   > HCI Event: Command Complete (0x0e) plen 5
>         Read Number of Supported IAC (0x03|0x0038) ncmd 1
>           Status: Success (0x00)
>           Number of IAC: 1
> 
> The problem arises when trying to program two IAC into the module
> on a controller that only supports one.
> 
>   < HCI Command: Write Current IAC LAP (0x03|0x003a) plen 7
>           Number of IAC: 2
>           Access code: 0x9e8b00 (Limited Inquiry)
>           Access code: 0x9e8b33 (General Inquiry)
>   > HCI Event: Command Status (0x0f) plen 4
>         Write Current IAC LAP (0x03|0x003a) ncmd 1
>           Status: Unknown HCI Command (0x01)
> 
> While this looks strange, but according to the Bluetooth core
> specification it is a legal operation. The controller has to
> ignore the other values and only program as many as it supports.
> 
>   This command shall clear any existing IACs and stores Num_Current_IAC
>   and the IAC_LAPs in to the controller. If Num_Current_IAC is greater
>   than Num_Support_IAC then only the first Num_Support_IAC shall be
>   stored in the controller, and a Command Complete event with error
>   code Success (0x00) shall be generated.
> 
> This specific controller has a bug here and just returns an error. So
> in case the number of supported IAC is less than two and the limited
> discoverable mode is requested, now only the LIAC is written to
> the controller.
> 
>   < HCI Command: Write Current IAC LAP (0x03|0x003a) plen 4
>           Number of IAC: 1
>           Access code: 0x9e8b00 (Limited Inquiry)
>   > HCI Event: Command Complete (0x0e) plen 4
>         Write Current IAC LAP (0x03|0x003a) ncmd 1
>           Status: Success (0x00)
> 
> All other controllers that only support one IAC seem to handle this
> perfectly fine, but this fix will only write the LIAC for these
> controllers as well.
> 
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  net/bluetooth/mgmt.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Applied to bluetooth-next. Thanks.

Johan

^ permalink raw reply

* Re: [PATCH] android: Add calls to av methods in haltest
From: Johan Hedberg @ 2013-10-23 16:35 UTC (permalink / raw)
  To: Jerzy Kasenberg; +Cc: linux-bluetooth
In-Reply-To: <1382539105-10811-1-git-send-email-jerzy.kasenberg@tieto.com>

Hi Jerzy,

On Wed, Oct 23, 2013, Jerzy Kasenberg wrote:
> This patch adds calls to av interface in haltest.
> ---
>  Makefile.android         |    2 +
>  android/Android.mk       |    1 +
>  android/client/haltest.c |    1 +
>  android/client/if-av.c   |  130 ++++++++++++++++++++++++++++++++++++++++++++++
>  android/client/if-main.h |    2 +
>  5 files changed, 136 insertions(+)
>  create mode 100644 android/client/if-av.c

Applied. Thanks.

Johan

^ permalink raw reply

* Re: [PATCH 1/6] android: Add missing adapter state values to IPC documentation
From: Johan Hedberg @ 2013-10-23 16:34 UTC (permalink / raw)
  To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <1382535986-30684-1-git-send-email-szymon.janc@tieto.com>

Hi Szymon,

On Wed, Oct 23, 2013, Szymon Janc wrote:
> ---
>  android/hal-ipc-api.txt | 3 +++
>  1 file changed, 3 insertions(+)

All six patches have been applied. Thanks.

Johan

^ permalink raw reply

* [PATCH] Bluetooth: Fix limited discoverable mode for Zeevo modules
From: Marcel Holtmann @ 2013-10-23 15:28 UTC (permalink / raw)
  To: linux-bluetooth

There is an old Panasonic module with a Zeevo chip in there that is
not really operating according to Bluetooth core specification when
it comes to setting the IAC LAP for limited discoverable mode.

For reference, this is the vendor information about this module:

  < HCI Command: Read Local Version Information (0x04|0x0001) plen 0
  > HCI Event: Command Complete (0x0e) plen 12
        Read Local Version Information (0x04|0x0001) ncmd 1
          Status: Success (0x00)
          HCI version: Bluetooth 1.2 (0x02) - Revision 196 (0x00c4)
          LMP version: Bluetooth 1.2 (0x02) - Subversion 61 (0x003d)
          Manufacturer: Zeevo, Inc. (18)

The module reports only the support for one IAC at a time. And that
is totally acceptable according to the Bluetooth core specification
since the minimum supported IAC is only one.

  < HCI Command: Read Number of Supported IAC (0x03|0x0038) plen 0
  > HCI Event: Command Complete (0x0e) plen 5
        Read Number of Supported IAC (0x03|0x0038) ncmd 1
          Status: Success (0x00)
          Number of IAC: 1

The problem arises when trying to program two IAC into the module
on a controller that only supports one.

  < HCI Command: Write Current IAC LAP (0x03|0x003a) plen 7
          Number of IAC: 2
          Access code: 0x9e8b00 (Limited Inquiry)
          Access code: 0x9e8b33 (General Inquiry)
  > HCI Event: Command Status (0x0f) plen 4
        Write Current IAC LAP (0x03|0x003a) ncmd 1
          Status: Unknown HCI Command (0x01)

While this looks strange, but according to the Bluetooth core
specification it is a legal operation. The controller has to
ignore the other values and only program as many as it supports.

  This command shall clear any existing IACs and stores Num_Current_IAC
  and the IAC_LAPs in to the controller. If Num_Current_IAC is greater
  than Num_Support_IAC then only the first Num_Support_IAC shall be
  stored in the controller, and a Command Complete event with error
  code Success (0x00) shall be generated.

This specific controller has a bug here and just returns an error. So
in case the number of supported IAC is less than two and the limited
discoverable mode is requested, now only the LIAC is written to
the controller.

  < HCI Command: Write Current IAC LAP (0x03|0x003a) plen 4
          Number of IAC: 1
          Access code: 0x9e8b00 (Limited Inquiry)
  > HCI Event: Command Complete (0x0e) plen 4
        Write Current IAC LAP (0x03|0x003a) ncmd 1
          Status: Success (0x00)

All other controllers that only support one IAC seem to handle this
perfectly fine, but this fix will only write the LIAC for these
controllers as well.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 net/bluetooth/mgmt.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 074d836..22cf547 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -1264,7 +1264,7 @@ static int set_discoverable(struct sock *sk, struct hci_dev *hdev, void *data,
 
 		if (cp->val == 0x02) {
 			/* Limited discoverable mode */
-			hci_cp.num_iac = 2;
+			hci_cp.num_iac = min_t(u8, hdev->num_iac, 2);
 			hci_cp.iac_lap[0] = 0x00;	/* LIAC */
 			hci_cp.iac_lap[1] = 0x8b;
 			hci_cp.iac_lap[2] = 0x9e;
-- 
1.8.3.1


^ permalink raw reply related

* Re: [PATCH] android: Use helper function for finding headers
From: Luiz Augusto von Dentz @ 2013-10-23 14:41 UTC (permalink / raw)
  To: Andrei Emeltchenko; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <1382535737-9757-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

Hi Andrei,

On Wed, Oct 23, 2013 at 4:42 PM, Andrei Emeltchenko
<andrei.emeltchenko@gmail.com> wrote:
> From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
>
> Using helper function allows us to overcome possible location
> change in future Android releases. This was inspired by
> Szymon Janc's comment to my previous patch.
> ---
>  android/Android.mk | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/android/Android.mk b/android/Android.mk
> index dd9c36d..1f20e57 100644
> --- a/android/Android.mk
> +++ b/android/Android.mk
> @@ -75,7 +75,7 @@ LOCAL_SRC_FILES := \
>         hal-av.c \
>
>  LOCAL_C_INCLUDES += \
> -       system/core/include \
> +       $(call include-path-for, system-core) \
>
>  LOCAL_SHARED_LIBRARIES := \
>         libcutils \
> --
> 1.8.1.2

Pushed, thanks.

-- 
Luiz Augusto von Dentz

^ permalink raw reply

* [PATCH] android: Add calls to av methods in haltest
From: Jerzy Kasenberg @ 2013-10-23 14:38 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jerzy Kasenberg

This patch adds calls to av interface in haltest.
---
 Makefile.android         |    2 +
 android/Android.mk       |    1 +
 android/client/haltest.c |    1 +
 android/client/if-av.c   |  130 ++++++++++++++++++++++++++++++++++++++++++++++
 android/client/if-main.h |    2 +
 5 files changed, 136 insertions(+)
 create mode 100644 android/client/if-av.c

diff --git a/Makefile.android b/Makefile.android
index a398537..8e09a78 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -49,6 +49,7 @@ android_haltest_SOURCES = android/client/haltest.c \
 				android/client/history.c \
 				android/client/textconv.c \
 				android/client/tabcompletion.c \
+				android/client/if-av.c \
 				android/client/if-bt.c \
 				android/client/if-hh.c \
 				android/client/if-pan.c \
@@ -79,6 +80,7 @@ EXTRA_DIST += android/client/terminal.c \
 		android/client/hwmodule.c \
 		android/client/pollhandler.c \
 		android/client/history.c \
+		android/client/if-av.c \
 		android/client/if-bt.c \
 		android/client/if-hh.c \
 		android/client/if-pan.c \
diff --git a/android/Android.mk b/android/Android.mk
index dd9c36d..6c73ecb 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -100,6 +100,7 @@ LOCAL_SRC_FILES := \
 	client/history.c \
 	client/textconv.c \
 	client/tabcompletion.c \
+	client/if-av.c \
 	client/if-bt.c \
 	client/if-hh.c \
 	client/if-pan.c \
diff --git a/android/client/haltest.c b/android/client/haltest.c
index 7168dfd..19e81b8 100644
--- a/android/client/haltest.c
+++ b/android/client/haltest.c
@@ -31,6 +31,7 @@
 
 const struct interface *interfaces[] = {
 	&bluetooth_if,
+	&av_if,
 	&hh_if,
 	&pan_if,
 	&sock_if,
diff --git a/android/client/if-av.c b/android/client/if-av.c
new file mode 100644
index 0000000..3f133eb
--- /dev/null
+++ b/android/client/if-av.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2013 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"
+
+const btav_interface_t *if_av = NULL;
+
+SINTMAP(btav_connection_state_t, -1, "(unknown)")
+	DELEMENT(BTAV_CONNECTION_STATE_DISCONNECTED),
+	DELEMENT(BTAV_CONNECTION_STATE_CONNECTING),
+	DELEMENT(BTAV_CONNECTION_STATE_CONNECTED),
+	DELEMENT(BTAV_CONNECTION_STATE_DISCONNECTING),
+ENDMAP
+
+SINTMAP(btav_audio_state_t, -1, "(unknown)")
+	DELEMENT(BTAV_AUDIO_STATE_REMOTE_SUSPEND),
+	DELEMENT(BTAV_AUDIO_STATE_STOPPED),
+	DELEMENT(BTAV_AUDIO_STATE_STARTED),
+ENDMAP
+
+static char last_addr[MAX_ADDR_STR_LEN];
+
+static void connection_state(btav_connection_state_t state,
+							bt_bdaddr_t *bd_addr)
+{
+	haltest_info("%s: connection_state=%s remote_bd_addr=%s\n", __func__,
+					btav_connection_state_t2str(state),
+					bt_bdaddr_t2str(bd_addr, last_addr));
+}
+
+static void audio_state(btav_audio_state_t state, bt_bdaddr_t *bd_addr)
+{
+	haltest_info("%s: audio_state=%s remote_bd_addr=%s\n", __func__,
+					btav_audio_state_t2str(state),
+					bt_bdaddr_t2str(bd_addr, last_addr));
+}
+
+static btav_callbacks_t av_cbacks = {
+	.size = sizeof(av_cbacks),
+	.connection_state_cb = connection_state,
+	.audio_state_cb = audio_state
+};
+
+/* init */
+
+static void init_p(int argc, const char **argv)
+{
+	RETURN_IF_NULL(if_av);
+
+	EXEC(if_av->init, &av_cbacks);
+}
+
+/* connect */
+
+static void connect_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
+{
+	if (argc == 3) {
+		*user = NULL;
+		*enum_func = enum_devices;
+	}
+}
+
+static void connect_p(int argc, const char **argv)
+{
+	bt_bdaddr_t addr;
+
+	RETURN_IF_NULL(if_hh);
+	VERIFY_ADDR_ARG(2, &addr);
+
+	EXEC(if_av->connect, &addr);
+}
+
+/* disconnect */
+
+static void disconnect_c(int argc, const char **argv, enum_func *enum_func,
+								void **user)
+{
+	if (argc == 3) {
+		*user = last_addr;
+		*enum_func = enum_one_string;
+	}
+}
+
+static void disconnect_p(int argc, const char **argv)
+{
+	bt_bdaddr_t addr;
+
+	RETURN_IF_NULL(if_hh);
+	VERIFY_ADDR_ARG(2, &addr);
+
+	EXEC(if_av->disconnect, &addr);
+}
+
+/* cleanup */
+
+static void cleanup_p(int argc, const char **argv)
+{
+	RETURN_IF_NULL(if_av);
+
+	EXECV(if_av->cleanup);
+	if_av = NULL;
+}
+
+static struct method methods[] = {
+	STD_METHOD(init),
+	STD_METHODCH(connect, "<addr>"),
+	STD_METHODCH(disconnect, "<addr>"),
+	STD_METHOD(cleanup),
+	END_METHOD
+};
+
+const struct interface av_if = {
+	.name = "av",
+	.methods = methods
+};
diff --git a/android/client/if-main.h b/android/client/if-main.h
index e214ed0..f2d35d9 100644
--- a/android/client/if-main.h
+++ b/android/client/if-main.h
@@ -44,6 +44,7 @@
 
 /* Interfaces from hal that can be populated during application lifetime */
 extern const bt_interface_t *if_bluetooth;
+extern const btav_interface_t *if_av;
 extern const bthh_interface_t *if_hh;
 extern const btpan_interface_t *if_pan;
 extern const btsock_interface_t *if_sock;
@@ -58,6 +59,7 @@ struct interface {
 };
 
 extern const struct interface bluetooth_if;
+extern const struct interface av_if;
 extern const struct interface pan_if;
 extern const struct interface sock_if;
 extern const struct interface hh_if;
-- 
1.7.9.5


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox