linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: chengbo <515672508@qq.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ] src: Event callback registration optimization
Date: Fri, 24 Jul 2020 20:20:45 +0800	[thread overview]
Message-ID: <20200724122045.17245-1-515672508@qq.com> (raw)

After read info complete,too many event registration functions are
not conducive to subsequent expansion.
---
 ...ent-callback-registration-optimizati.patch | 187 ++++++++++++++++++
 src/adapter.c                                 | 143 ++++----------
 2 files changed, 229 insertions(+), 101 deletions(-)
 create mode 100644 0001-src-adapter.c-Event-callback-registration-optimizati.patch

diff --git a/0001-src-adapter.c-Event-callback-registration-optimizati.patch b/0001-src-adapter.c-Event-callback-registration-optimizati.patch
new file mode 100644
index 000000000..d0f4804c6
--- /dev/null
+++ b/0001-src-adapter.c-Event-callback-registration-optimizati.patch
@@ -0,0 +1,187 @@
+From c2bf3d643c8f2eb7b97c0ede4396f879ba6febf8 Mon Sep 17 00:00:00 2001
+From: mac fanqiang <macfqiang@gmail.com>
+Date: Fri, 24 Jul 2020 17:42:37 +0800
+Subject: [PATCH] src/adapter.c : Event callback registration optimization    
+ After read info complete,too many event registration functions are not
+ conducive to subsequent expansion.     If we want to add a new event,
+ according to the previous logic, we must add an event registration function,
+ the code is too redundant.     Therefore, I added a global time callback
+ registration in this submission.     If you want to add event registration
+ later, you only need to add the new event and event callback function to the
+ global table.
+
+---
+ src/adapter.c | 143 +++++++++++++++-----------------------------------
+ 1 file changed, 42 insertions(+), 101 deletions(-)
+
+diff --git a/src/adapter.c b/src/adapter.c
+index 5e896a9f0..7afb4509d 100644
+--- a/src/adapter.c
++++ b/src/adapter.c
+@@ -298,6 +298,11 @@ struct btd_adapter {
+ 	bool le_simult_roles_supported;
+ };
+ 
++struct mgmt_callback{
++		uint16_t event;
++		mgmt_notify_func_t callback;
++};
++
+ typedef enum {
+ 	ADAPTER_AUTHORIZE_DISCONNECTED = 0,
+ 	ADAPTER_AUTHORIZE_CHECK_CONNECTED
+@@ -9163,6 +9168,41 @@ static void read_exp_features(struct btd_adapter *adapter)
+ 	btd_error(adapter->dev_id, "Failed to read exp features info");
+ }
+ 
++static struct mgmt_callback g_mgmt_callback_table[] = {
++	{MGMT_EV_NEW_SETTINGS, new_settings_callback},
++	{MGMT_EV_CLASS_OF_DEV_CHANGED, dev_class_changed_callback},
++	{MGMT_EV_LOCAL_NAME_CHANGED, local_name_changed_callback},
++	{MGMT_EV_DISCOVERING, discovering_callback},
++	{MGMT_EV_DEVICE_FOUND, device_found_callback},
++	{MGMT_EV_DEVICE_DISCONNECTED, disconnected_callback},
++	{MGMT_EV_DEVICE_CONNECTED, connected_callback},
++	{MGMT_EV_CONNECT_FAILED, connect_failed_callback},
++	{MGMT_EV_DEVICE_UNPAIRED, unpaired_callback},
++	{MGMT_EV_AUTH_FAILED, auth_failed_callback},
++	{MGMT_EV_NEW_LINK_KEY, new_link_key_callback},
++	{MGMT_EV_NEW_LONG_TERM_KEY, new_long_term_key_callback},
++	{MGMT_EV_NEW_CSRK, new_csrk_callback},
++	{MGMT_EV_NEW_IRK, new_irk_callback},
++	{MGMT_EV_NEW_CONN_PARAM, new_conn_param},
++	{MGMT_EV_DEVICE_BLOCKED, device_blocked_callback},
++	{MGMT_EV_DEVICE_UNBLOCKED, device_unblocked_callback},
++	{MGMT_EV_PIN_CODE_REQUEST, pin_code_request_callback},
++	{MGMT_EV_USER_CONFIRM_REQUEST, user_confirm_request_callback},
++	{MGMT_EV_USER_PASSKEY_REQUEST, user_passkey_request_callback},
++	{MGMT_EV_PASSKEY_NOTIFY, user_passkey_notify_callback}
++};
++
++static void mgmt_event_register(struct btd_adapter *adapter)
++{
++	int len = sizeof(g_mgmt_callback_table)/sizeof(g_mgmt_callback_table[0]);
++
++	for (int i = 0; i < len; i++) {
++		mgmt_register(adapter->mgmt, g_mgmt_callback_table[i].event, 
++					adapter->dev_id, g_mgmt_callback_table[i].callback,
++					adapter, NULL);
++	}
++}
++
+ static void read_info_complete(uint8_t status, uint16_t length,
+ 					const void *param, void *user_data)
+ {
+@@ -9288,107 +9328,8 @@ static void read_info_complete(uint8_t status, uint16_t length,
+ 	 * controller info. From now on they can track updates and
+ 	 * notifications.
+ 	 */
+-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, adapter->dev_id,
+-					new_settings_callback, adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_CLASS_OF_DEV_CHANGED,
+-						adapter->dev_id,
+-						dev_class_changed_callback,
+-						adapter, NULL);
+-	mgmt_register(adapter->mgmt, MGMT_EV_LOCAL_NAME_CHANGED,
+-						adapter->dev_id,
+-						local_name_changed_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_DISCOVERING,
+-						adapter->dev_id,
+-						discovering_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_FOUND,
+-						adapter->dev_id,
+-						device_found_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_DISCONNECTED,
+-						adapter->dev_id,
+-						disconnected_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_CONNECTED,
+-						adapter->dev_id,
+-						connected_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_CONNECT_FAILED,
+-						adapter->dev_id,
+-						connect_failed_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNPAIRED,
+-						adapter->dev_id,
+-						unpaired_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_AUTH_FAILED,
+-						adapter->dev_id,
+-						auth_failed_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_LINK_KEY,
+-						adapter->dev_id,
+-						new_link_key_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_LONG_TERM_KEY,
+-						adapter->dev_id,
+-						new_long_term_key_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_CSRK,
+-						adapter->dev_id,
+-						new_csrk_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_IRK,
+-						adapter->dev_id,
+-						new_irk_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_CONN_PARAM,
+-						adapter->dev_id,
+-						new_conn_param,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_BLOCKED,
+-						adapter->dev_id,
+-						device_blocked_callback,
+-						adapter, NULL);
+-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNBLOCKED,
+-						adapter->dev_id,
+-						device_unblocked_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_PIN_CODE_REQUEST,
+-						adapter->dev_id,
+-						pin_code_request_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_USER_CONFIRM_REQUEST,
+-						adapter->dev_id,
+-						user_confirm_request_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_USER_PASSKEY_REQUEST,
+-						adapter->dev_id,
+-						user_passkey_request_callback,
+-						adapter, NULL);
+-
+-	mgmt_register(adapter->mgmt, MGMT_EV_PASSKEY_NOTIFY,
+-						adapter->dev_id,
+-						user_passkey_notify_callback,
+-						adapter, NULL);
+-
++	mgmt_event_register(adapter);
++	
+ 	set_dev_class(adapter);
+ 
+ 	set_name(adapter, btd_adapter_get_name(adapter));
+-- 
+2.20.1
+
diff --git a/src/adapter.c b/src/adapter.c
index 5e896a9f0..7afb4509d 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -298,6 +298,11 @@ struct btd_adapter {
 	bool le_simult_roles_supported;
 };
 
+struct mgmt_callback{
+		uint16_t event;
+		mgmt_notify_func_t callback;
+};
+
 typedef enum {
 	ADAPTER_AUTHORIZE_DISCONNECTED = 0,
 	ADAPTER_AUTHORIZE_CHECK_CONNECTED
@@ -9163,6 +9168,41 @@ static void read_exp_features(struct btd_adapter *adapter)
 	btd_error(adapter->dev_id, "Failed to read exp features info");
 }
 
+static struct mgmt_callback g_mgmt_callback_table[] = {
+	{MGMT_EV_NEW_SETTINGS, new_settings_callback},
+	{MGMT_EV_CLASS_OF_DEV_CHANGED, dev_class_changed_callback},
+	{MGMT_EV_LOCAL_NAME_CHANGED, local_name_changed_callback},
+	{MGMT_EV_DISCOVERING, discovering_callback},
+	{MGMT_EV_DEVICE_FOUND, device_found_callback},
+	{MGMT_EV_DEVICE_DISCONNECTED, disconnected_callback},
+	{MGMT_EV_DEVICE_CONNECTED, connected_callback},
+	{MGMT_EV_CONNECT_FAILED, connect_failed_callback},
+	{MGMT_EV_DEVICE_UNPAIRED, unpaired_callback},
+	{MGMT_EV_AUTH_FAILED, auth_failed_callback},
+	{MGMT_EV_NEW_LINK_KEY, new_link_key_callback},
+	{MGMT_EV_NEW_LONG_TERM_KEY, new_long_term_key_callback},
+	{MGMT_EV_NEW_CSRK, new_csrk_callback},
+	{MGMT_EV_NEW_IRK, new_irk_callback},
+	{MGMT_EV_NEW_CONN_PARAM, new_conn_param},
+	{MGMT_EV_DEVICE_BLOCKED, device_blocked_callback},
+	{MGMT_EV_DEVICE_UNBLOCKED, device_unblocked_callback},
+	{MGMT_EV_PIN_CODE_REQUEST, pin_code_request_callback},
+	{MGMT_EV_USER_CONFIRM_REQUEST, user_confirm_request_callback},
+	{MGMT_EV_USER_PASSKEY_REQUEST, user_passkey_request_callback},
+	{MGMT_EV_PASSKEY_NOTIFY, user_passkey_notify_callback}
+};
+
+static void mgmt_event_register(struct btd_adapter *adapter)
+{
+	int len = sizeof(g_mgmt_callback_table)/sizeof(g_mgmt_callback_table[0]);
+
+	for (int i = 0; i < len; i++) {
+		mgmt_register(adapter->mgmt, g_mgmt_callback_table[i].event, 
+					adapter->dev_id, g_mgmt_callback_table[i].callback,
+					adapter, NULL);
+	}
+}
+
 static void read_info_complete(uint8_t status, uint16_t length,
 					const void *param, void *user_data)
 {
@@ -9288,107 +9328,8 @@ static void read_info_complete(uint8_t status, uint16_t length,
 	 * controller info. From now on they can track updates and
 	 * notifications.
 	 */
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_SETTINGS, adapter->dev_id,
-					new_settings_callback, adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_CLASS_OF_DEV_CHANGED,
-						adapter->dev_id,
-						dev_class_changed_callback,
-						adapter, NULL);
-	mgmt_register(adapter->mgmt, MGMT_EV_LOCAL_NAME_CHANGED,
-						adapter->dev_id,
-						local_name_changed_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_DISCOVERING,
-						adapter->dev_id,
-						discovering_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_FOUND,
-						adapter->dev_id,
-						device_found_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_DISCONNECTED,
-						adapter->dev_id,
-						disconnected_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_CONNECTED,
-						adapter->dev_id,
-						connected_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_CONNECT_FAILED,
-						adapter->dev_id,
-						connect_failed_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNPAIRED,
-						adapter->dev_id,
-						unpaired_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_AUTH_FAILED,
-						adapter->dev_id,
-						auth_failed_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_LINK_KEY,
-						adapter->dev_id,
-						new_link_key_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_LONG_TERM_KEY,
-						adapter->dev_id,
-						new_long_term_key_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_CSRK,
-						adapter->dev_id,
-						new_csrk_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_IRK,
-						adapter->dev_id,
-						new_irk_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_NEW_CONN_PARAM,
-						adapter->dev_id,
-						new_conn_param,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_BLOCKED,
-						adapter->dev_id,
-						device_blocked_callback,
-						adapter, NULL);
-	mgmt_register(adapter->mgmt, MGMT_EV_DEVICE_UNBLOCKED,
-						adapter->dev_id,
-						device_unblocked_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_PIN_CODE_REQUEST,
-						adapter->dev_id,
-						pin_code_request_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_USER_CONFIRM_REQUEST,
-						adapter->dev_id,
-						user_confirm_request_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_USER_PASSKEY_REQUEST,
-						adapter->dev_id,
-						user_passkey_request_callback,
-						adapter, NULL);
-
-	mgmt_register(adapter->mgmt, MGMT_EV_PASSKEY_NOTIFY,
-						adapter->dev_id,
-						user_passkey_notify_callback,
-						adapter, NULL);
-
+	mgmt_event_register(adapter);
+	
 	set_dev_class(adapter);
 
 	set_name(adapter, btd_adapter_get_name(adapter));
-- 
2.20.1




             reply	other threads:[~2020-07-24 12:20 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-24 12:20 chengbo [this message]
2020-07-24 12:21 [PATCH BlueZ] src: Event callback registration optimization chengbo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200724122045.17245-1-515672508@qq.com \
    --to=515672508@qq.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).