diff options
Diffstat (limited to 'src/mm-iface-modem-3gpp-ussd.c')
-rw-r--r-- | src/mm-iface-modem-3gpp-ussd.c | 88 |
1 files changed, 68 insertions, 20 deletions
diff --git a/src/mm-iface-modem-3gpp-ussd.c b/src/mm-iface-modem-3gpp-ussd.c index 7c88affc..e89e8e0a 100644 --- a/src/mm-iface-modem-3gpp-ussd.c +++ b/src/mm-iface-modem-3gpp-ussd.c @@ -48,6 +48,7 @@ static void interface_disabling_step (DisablingContext *ctx); typedef enum { DISABLING_STEP_FIRST, DISABLING_STEP_DISABLE_UNSOLICITED_RESULT_CODES, + DISABLING_STEP_CLEANUP_UNSOLICITED_RESULT_CODES, DISABLING_STEP_LAST } DisablingStep; @@ -123,6 +124,27 @@ disable_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self, } static void +cleanup_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self, + GAsyncResult *res, + DisablingContext *ctx) +{ + GError *error = NULL; + + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (self)->cleanup_unsolicited_result_codes_finish (self, + res, + &error); + if (error) { + /* This error shouldn't be treated as critical */ + mm_dbg ("Couldn't cleanup unsolicited result codes: '%s'", error->message); + g_error_free (error); + } + + /* Go on to next step */ + ctx->step++; + interface_disabling_step (ctx); +} + +static void interface_disabling_step (DisablingContext *ctx) { switch (ctx->step) { @@ -131,16 +153,18 @@ interface_disabling_step (DisablingContext *ctx) ctx->step++; case DISABLING_STEP_DISABLE_UNSOLICITED_RESULT_CODES: - if (MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes && - MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes_finish) { - MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes ( - ctx->self, - (GAsyncReadyCallback)disable_unsolicited_result_codes_ready, - ctx); - return; - } - /* Fall down to next step */ - ctx->step++; + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->disable_unsolicited_result_codes ( + ctx->self, + (GAsyncReadyCallback)disable_unsolicited_result_codes_ready, + ctx); + return; + + case DISABLING_STEP_CLEANUP_UNSOLICITED_RESULT_CODES: + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->cleanup_unsolicited_result_codes ( + ctx->self, + (GAsyncReadyCallback)cleanup_unsolicited_result_codes_ready, + ctx); + return; case DISABLING_STEP_LAST: /* We are done without errors! */ @@ -169,6 +193,7 @@ static void interface_enabling_step (EnablingContext *ctx); typedef enum { ENABLING_STEP_FIRST, + ENABLING_STEP_SETUP_UNSOLICITED_RESULT_CODES, ENABLING_STEP_ENABLE_UNSOLICITED_RESULT_CODES, ENABLING_STEP_LAST } EnablingStep; @@ -224,6 +249,27 @@ mm_iface_modem_3gpp_ussd_enable_finish (MMIfaceModem3gppUssd *self, } static void +setup_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self, + GAsyncResult *res, + EnablingContext *ctx) +{ + GError *error = NULL; + + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (self)->setup_unsolicited_result_codes_finish (self, + res, + &error); + if (error) { + /* This error shouldn't be treated as critical */ + mm_dbg ("Couldn't setup unsolicited result codes: '%s'", error->message); + g_error_free (error); + } + + /* Go on to next step */ + ctx->step++; + interface_enabling_step (ctx); +} + +static void enable_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self, GAsyncResult *res, EnablingContext *ctx) @@ -252,17 +298,19 @@ interface_enabling_step (EnablingContext *ctx) /* Fall down to next step */ ctx->step++; + case ENABLING_STEP_SETUP_UNSOLICITED_RESULT_CODES: + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->setup_unsolicited_result_codes ( + ctx->self, + (GAsyncReadyCallback)setup_unsolicited_result_codes_ready, + ctx); + return; + case ENABLING_STEP_ENABLE_UNSOLICITED_RESULT_CODES: - if (MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes && - MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes_finish) { - MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes ( - ctx->self, - (GAsyncReadyCallback)enable_unsolicited_result_codes_ready, - ctx); - return; - } - /* Fall down to next step */ - ctx->step++; + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (ctx->self)->enable_unsolicited_result_codes ( + ctx->self, + (GAsyncReadyCallback)enable_unsolicited_result_codes_ready, + ctx); + return; case ENABLING_STEP_LAST: /* We are done without errors! */ |