Hi Jonas,

On 04/15/2017 10:34 AM, Jonas Bonn wrote:
---
 drivers/qmimodem/network-registration.c | 51 ++++++++++++++-------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/drivers/qmimodem/network-registration.c 
b/drivers/qmimodem/network-registration.c
index c29a733..72b76d9 100644
--- a/drivers/qmimodem/network-registration.c
+++ b/drivers/qmimodem/network-registration.c
@@ -135,42 +135,32 @@ static bool extract_ss_info(struct qmi_result *result, 
int *status,
        return true;
 }

-static void ss_info_notify(struct qmi_result *result, void *user_data)
+static void handle_ss_info(struct qmi_result *result, void *user_data)
 {
-       struct ofono_netreg *netreg = user_data;
+       struct cb_data *cbd = user_data;
+       struct ofono_netreg *netreg = cbd->user;
        struct netreg_data *data = ofono_netreg_get_data(netreg);
+       ofono_netreg_status_cb_t cb = cbd->cb;
        int status, lac, cellid, tech;

        DBG("");

-       if (!extract_ss_info(result, &status, &lac, &cellid, &tech,
-                                                       &data->operator))
-               return;
-
-       ofono_netreg_status_notify(netreg, status, lac, cellid, tech);
-}
-

Actually I prefer to have two separate callbacks.

-static void get_ss_info_cb(struct qmi_result *result, void *user_data)
-{
-       struct cb_data *cbd = user_data;
-       ofono_netreg_status_cb_t cb = cbd->cb;
-       struct netreg_data *data = cbd->user;
-       int status, lac, cellid, tech;
+       if (cb && qmi_result_set_error(result, NULL))
+               goto error;

-       DBG("");
+       if (!extract_ss_info(result, &status, &lac,
+                               &cellid, &tech, &data->operator))
+               goto error;

-       if (qmi_result_set_error(result, NULL)) {
-               CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data);
-               return;
-       }
+       if (cb)
+               CALLBACK_WITH_SUCCESS(cb, status,
+                                       lac, cellid, tech, cbd->data);
+       else
+               ofono_netreg_status_notify(netreg, status, lac, cellid, tech);

-       if (!extract_ss_info(result, &status, &lac, &cellid, &tech,
-                                                       &data->operator)) {
+error:
+       if (cb)
                CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data);
-               return;
-       }
-
-       CALLBACK_WITH_SUCCESS(cb, status, lac, cellid, tech, cbd->data);

The if (cb) stuff is just harder to read.

 }

 static void qmi_registration_status(struct ofono_netreg *netreg,
@@ -181,10 +171,10 @@ static void qmi_registration_status(struct ofono_netreg 
*netreg,

        DBG("");

-       cbd->user = data;
+       cbd->user = netreg;

        if (qmi_service_send(data->nas, QMI_NAS_GET_SS_INFO, NULL,
-                                       get_ss_info_cb, cbd, g_free) > 0)
+                                       handle_ss_info, cbd, g_free) > 0)
                return;

        CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data);
@@ -498,6 +488,7 @@ static void create_nas_cb(struct qmi_service *service, void 
*user_data)
        struct ofono_netreg *netreg = user_data;
        struct netreg_data *data = ofono_netreg_get_data(netreg);
        struct qmi_param *param;
+       struct cb_data *cbd;
        struct qmi_nas_param_event_signal_strength ss = { .report = 0x01,
                                .count = 5, .dbm[0] = -55, .dbm[1] = -65,
                                .dbm[2] = -75, .dbm[3] = -85, .dbm[4] = -95 };
@@ -515,8 +506,10 @@ static void create_nas_cb(struct qmi_service *service, 
void *user_data)
        qmi_service_register(data->nas, QMI_NAS_EVENT,
                                        event_notify, netreg, NULL);

+       cbd = cb_data_new(NULL, NULL);
+       cbd->user = netreg;

Please don't ever do this, it just looks weird and tells the reader you're abusing the system (e.g. its a crude hack).

        qmi_service_register(data->nas, QMI_NAS_SS_INFO_IND,
-                                       ss_info_notify, netreg, NULL);
+                                       handle_ss_info, cbd, g_free);

        param = qmi_param_new();
        if (!param)


Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to