diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-09-24 16:08:47 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2019-10-17 08:31:46 +0000 |
commit | 1f6c006976211111c1ccdbe7cbbd146c8338ba38 (patch) | |
tree | 36a7504059cdabf445a604820db85e7ff9b57591 /src | |
parent | 45cf1ba20a59917fb43a60c9851cc89a75844c52 (diff) |
api,sim: new 'Emergency Numbers' property
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-base-sim.c | 43 | ||||
-rw-r--r-- | src/mm-base-sim.h | 8 |
2 files changed, 51 insertions, 0 deletions
diff --git a/src/mm-base-sim.c b/src/mm-base-sim.c index 1cb24592..1bd6a5c5 100644 --- a/src/mm-base-sim.c +++ b/src/mm-base-sim.c @@ -1341,6 +1341,7 @@ typedef enum { INITIALIZATION_STEP_IMSI, INITIALIZATION_STEP_OPERATOR_ID, INITIALIZATION_STEP_OPERATOR_NAME, + INITIALIZATION_STEP_EMERGENCY_NUMBERS, INITIALIZATION_STEP_LAST } InitializationStep; @@ -1414,6 +1415,32 @@ init_load_sim_identifier_ready (MMBaseSim *self, interface_initialization_step (task); } +static void +init_load_emergency_numbers_ready (MMBaseSim *self, + GAsyncResult *res, + GTask *task) +{ + InitAsyncContext *ctx; + GError *error = NULL; + GStrv str_list; + + str_list = MM_BASE_SIM_GET_CLASS (self)->load_emergency_numbers_finish (self, res, &error); + if (error) { + mm_warn ("couldn't load list of Emergency Numbers: '%s'", error->message); + g_error_free (error); + } + + if (str_list) { + mm_gdbus_sim_set_emergency_numbers (MM_GDBUS_SIM (self), (const gchar *const *) str_list); + g_strfreev (str_list); + } + + /* Go on to next step */ + ctx = g_task_get_task_data (task); + ctx->step++; + interface_initialization_step (task); +} + #undef STR_REPLY_READY_FN #define STR_REPLY_READY_FN(NAME,DISPLAY) \ static void \ @@ -1527,6 +1554,22 @@ interface_initialization_step (GTask *task) /* Fall down to next step */ ctx->step++; + case INITIALIZATION_STEP_EMERGENCY_NUMBERS: + /* Emergency Numbers are meant to be loaded only once during the whole + * lifetime of the modem. Therefore, if we already have them loaded, + * don't try to load them again. */ + if (mm_gdbus_sim_get_emergency_numbers (MM_GDBUS_SIM (self)) == NULL && + MM_BASE_SIM_GET_CLASS (self)->load_emergency_numbers && + MM_BASE_SIM_GET_CLASS (self)->load_emergency_numbers_finish) { + MM_BASE_SIM_GET_CLASS (self)->load_emergency_numbers ( + self, + (GAsyncReadyCallback)init_load_emergency_numbers_ready, + task); + return; + } + /* Fall down to next step */ + ctx->step++; + case INITIALIZATION_STEP_LAST: /* We are done without errors! */ g_task_return_boolean (task, TRUE); diff --git a/src/mm-base-sim.h b/src/mm-base-sim.h index 5e141f30..7b9ea158 100644 --- a/src/mm-base-sim.h +++ b/src/mm-base-sim.h @@ -83,6 +83,14 @@ struct _MMBaseSimClass { GAsyncResult *res, GError **error); + /* Load emergency numbers (async) */ + void (* load_emergency_numbers) (MMBaseSim *self, + GAsyncReadyCallback callback, + gpointer user_data); + GStrv (* load_emergency_numbers_finish) (MMBaseSim *self, + GAsyncResult *res, + GError **error); + /* Change PIN (async) */ void (* change_pin) (MMBaseSim *self, const gchar *old_pin, |