---
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 d0f4853..9bd88df 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);
-}
-
-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);
}
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);
@@ -492,6 +482,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 };
@@ -509,8 +500,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;
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)
--
2.9.3