diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-01-23 12:01:33 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:56 +0100 |
commit | b28af06d1cf09ec513c3564e4f7ead4f7f2721bf (patch) | |
tree | c57845b8252b520ac3583aa5066caddef31c4221 /src | |
parent | 1f01274a5fe9478d9cfbbe15d2971cbe033ce84b (diff) |
iface-modem-3gpp-ussd: implement logic to enable/disable URCs
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-iface-modem-3gpp-ussd.c | 68 | ||||
-rw-r--r-- | src/mm-iface-modem-3gpp-ussd.h | 16 |
2 files changed, 84 insertions, 0 deletions
diff --git a/src/mm-iface-modem-3gpp-ussd.c b/src/mm-iface-modem-3gpp-ussd.c index 6e4acffb..363d9417 100644 --- a/src/mm-iface-modem-3gpp-ussd.c +++ b/src/mm-iface-modem-3gpp-ussd.c @@ -47,6 +47,7 @@ static void interface_disabling_step (DisablingContext *ctx); typedef enum { DISABLING_STEP_FIRST, + DISABLING_STEP_DISABLE_UNSOLICITED_RESULT_CODES, DISABLING_STEP_LAST } DisablingStep; @@ -101,6 +102,27 @@ mm_iface_modem_3gpp_ussd_disable_finish (MMIfaceModem3gppUssd *self, } static void +disable_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self, + GAsyncResult *res, + DisablingContext *ctx) +{ + GError *error = NULL; + + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (self)->disable_unsolicited_result_codes_finish (self, + res, + &error); + if (error) { + /* This error shouldn't be treated as critical */ + mm_dbg ("Couldn't disable 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) { @@ -108,6 +130,18 @@ interface_disabling_step (DisablingContext *ctx) /* Fall down to next step */ 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++; + case DISABLING_STEP_LAST: /* We are done without errors! */ g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); @@ -135,6 +169,7 @@ static void interface_enabling_step (EnablingContext *ctx); typedef enum { ENABLING_STEP_FIRST, + ENABLING_STEP_ENABLE_UNSOLICITED_RESULT_CODES, ENABLING_STEP_LAST } EnablingStep; @@ -189,6 +224,27 @@ mm_iface_modem_3gpp_ussd_enable_finish (MMIfaceModem3gppUssd *self, } static void +enable_unsolicited_result_codes_ready (MMIfaceModem3gppUssd *self, + GAsyncResult *res, + EnablingContext *ctx) +{ + GError *error = NULL; + + MM_IFACE_MODEM_3GPP_USSD_GET_INTERFACE (self)->enable_unsolicited_result_codes_finish (self, + res, + &error); + if (error) { + /* This error shouldn't be treated as critical */ + mm_dbg ("Couldn't enable unsolicited result codes: '%s'", error->message); + g_error_free (error); + } + + /* Go on to next step */ + ctx->step++; + interface_enabling_step (ctx); +} + +static void interface_enabling_step (EnablingContext *ctx) { switch (ctx->step) { @@ -196,6 +252,18 @@ interface_enabling_step (EnablingContext *ctx) /* Fall down to next step */ ctx->step++; + 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++; + case ENABLING_STEP_LAST: /* We are done without errors! */ g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); diff --git a/src/mm-iface-modem-3gpp-ussd.h b/src/mm-iface-modem-3gpp-ussd.h index 868136ec..189b0ff8 100644 --- a/src/mm-iface-modem-3gpp-ussd.h +++ b/src/mm-iface-modem-3gpp-ussd.h @@ -42,6 +42,22 @@ struct _MMIfaceModem3gppUssd { gboolean (*check_support_finish) (MMIfaceModem3gppUssd *self, GAsyncResult *res, GError **error); + + /* Asynchronous enabling of unsolicited result codes */ + void (*enable_unsolicited_result_codes) (MMIfaceModem3gppUssd *self, + GAsyncReadyCallback callback, + gpointer user_data); + gboolean (*enable_unsolicited_result_codes_finish) (MMIfaceModem3gppUssd *self, + GAsyncResult *res, + GError **error); + + /* Asynchronous disabling of unsolicited result codes */ + void (*disable_unsolicited_result_codes) (MMIfaceModem3gppUssd *self, + GAsyncReadyCallback callback, + gpointer user_data); + gboolean (*disable_unsolicited_result_codes_finish) (MMIfaceModem3gppUssd *self, + GAsyncResult *res, + GError **error); }; GType mm_iface_modem_3gpp_ussd_get_type (void); |