diff options
author | Giacinto Cifelli <gciofono@gmail.com> | 2020-05-18 16:50:33 +0200 |
---|---|---|
committer | Giacinto Cifelli <gciofono@gmail.com> | 2020-05-18 16:50:33 +0200 |
commit | 8e033ba331647435bab95a071a450b9be977b295 (patch) | |
tree | 30df22cdcc9db88d79ce8cb7e01fd2e0d3be0096 /src | |
parent | 503581a3ac07e74fa9f31bb2d681750e8f577f96 (diff) |
AT modem: charset definition in init
Charset definition moved from enable state machine to init state machine,
so that the right current charset is available also during further
initialization steps
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-iface-modem.c | 206 |
1 files changed, 103 insertions, 103 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 14e64ec3..5b18484a 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -3804,15 +3804,11 @@ typedef enum { ENABLING_STEP_SET_POWER_STATE, ENABLING_STEP_CHECK_FOR_SIM_SWAP, ENABLING_STEP_FLOW_CONTROL, - ENABLING_STEP_SUPPORTED_CHARSETS, - ENABLING_STEP_CHARSET, ENABLING_STEP_LAST } EnablingStep; struct _EnablingContext { EnablingStep step; - MMModemCharset supported_charsets; - const MMModemCharset *current_charset; MmGdbusModem *skeleton; }; @@ -3892,52 +3888,6 @@ setup_flow_control_ready (MMIfaceModem *self, interface_enabling_step (task); } -static void -load_supported_charsets_ready (MMIfaceModem *self, - GAsyncResult *res, - GTask *task) -{ - EnablingContext *ctx; - GError *error = NULL; - - ctx = g_task_get_task_data (task); - - ctx->supported_charsets = - MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets_finish (self, res, &error); - if (error) { - mm_obj_warn (self, "couldn't load supported charsets: %s", error->message); - g_error_free (error); - } - - /* Go on to next step */ - ctx->step++; - interface_enabling_step (task); -} - -static void -setup_charset_ready (MMIfaceModem *self, - GAsyncResult *res, - GTask *task) -{ - EnablingContext *ctx; - GError *error = NULL; - - ctx = g_task_get_task_data (task); - - if (!MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset_finish (self, res, &error)) { - mm_obj_dbg (self, "couldn't set charset '%s': %s", - mm_modem_charset_to_string (*ctx->current_charset), - error->message); - g_error_free (error); - - /* Will retry step with some other charset type */ - } else - /* Done, Go on to next step */ - ctx->step++; - - interface_enabling_step (task); -} - static const MMModemCharset best_charsets[] = { MM_MODEM_CHARSET_UTF8, MM_MODEM_CHARSET_UCS2, @@ -3998,59 +3948,6 @@ interface_enabling_step (GTask *task) ctx->step++; /* fall-through */ - case ENABLING_STEP_SUPPORTED_CHARSETS: - if (MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets && - MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets_finish) { - MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets ( - self, - (GAsyncReadyCallback)load_supported_charsets_ready, - task); - return; - } - ctx->step++; - /* fall-through */ - - case ENABLING_STEP_CHARSET: - /* Only try to set charsets if we were able to load supported ones */ - if (ctx->supported_charsets > 0 && - MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset && - MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset_finish) { - gboolean next_to_try = FALSE; - - while (!next_to_try) { - if (!ctx->current_charset) - /* Switch the device's charset; we prefer UTF-8, but UCS2 will do too */ - ctx->current_charset = &best_charsets[0]; - else - /* Try with the next one */ - ctx->current_charset++; - - if (*ctx->current_charset == MM_MODEM_CHARSET_UNKNOWN) - break; - - if (ctx->supported_charsets & (*ctx->current_charset)) - next_to_try = TRUE; - } - - if (next_to_try) { - MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset ( - self, - *ctx->current_charset, - (GAsyncReadyCallback)setup_charset_ready, - task); - return; - } - - g_task_return_new_error (task, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Failed to find a usable modem character set"); - g_object_unref (task); - return; - } - ctx->step++; - /* fall-through */ - case ENABLING_STEP_LAST: /* We are done without errors! */ g_task_return_boolean (task, TRUE); @@ -4104,6 +4001,8 @@ typedef enum { INITIALIZATION_STEP_FIRST, INITIALIZATION_STEP_CURRENT_CAPABILITIES, INITIALIZATION_STEP_SUPPORTED_CAPABILITIES, + INITIALIZATION_STEP_SUPPORTED_CHARSETS, + INITIALIZATION_STEP_CHARSET, INITIALIZATION_STEP_BEARERS, INITIALIZATION_STEP_MANUFACTURER, INITIALIZATION_STEP_MODEL, @@ -4129,6 +4028,8 @@ typedef enum { struct _InitializationContext { InitializationStep step; MmGdbusModem *skeleton; + MMModemCharset supported_charsets; + const MMModemCharset *current_charset; GError *fatal_error; }; @@ -4344,6 +4245,52 @@ STR_REPLY_READY_FN (equipment_identifier, "equipment identifier") STR_REPLY_READY_FN (device_identifier, "device identifier") static void +load_supported_charsets_ready (MMIfaceModem *self, + GAsyncResult *res, + GTask *task) +{ + InitializationContext *ctx; + GError *error = NULL; + + ctx = g_task_get_task_data (task); + + ctx->supported_charsets = + MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets_finish (self, res, &error); + if (error) { + mm_obj_warn (self, "couldn't load supported charsets: %s", error->message); + g_error_free (error); + } + + /* Go on to next step */ + ctx->step++; + interface_initialization_step (task); +} + +static void +setup_charset_ready (MMIfaceModem *self, + GAsyncResult *res, + GTask *task) +{ + InitializationContext *ctx; + GError *error = NULL; + + ctx = g_task_get_task_data (task); + + if (!MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset_finish (self, res, &error)) { + mm_obj_dbg (self, "couldn't set charset '%s': %s", + mm_modem_charset_to_string (*ctx->current_charset), + error->message); + g_error_free (error); + + /* Will retry step with some other charset type */ + } else + /* Done, Go on to next step */ + ctx->step++; + + interface_initialization_step (task); +} + +static void load_supported_modes_ready (MMIfaceModem *self, GAsyncResult *res, GTask *task) @@ -4834,6 +4781,59 @@ interface_initialization_step (GTask *task) ctx->step++; } /* fall-through */ + case INITIALIZATION_STEP_SUPPORTED_CHARSETS: + if (MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets && + MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets_finish) { + MM_IFACE_MODEM_GET_INTERFACE (self)->load_supported_charsets ( + self, + (GAsyncReadyCallback)load_supported_charsets_ready, + task); + return; + } + ctx->step++; + /* fall-through */ + + case INITIALIZATION_STEP_CHARSET: + /* Only try to set charsets if we were able to load supported ones */ + if (ctx->supported_charsets > 0 && + MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset && + MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset_finish) { + gboolean next_to_try = FALSE; + + while (!next_to_try) { + if (!ctx->current_charset) + /* Switch the device's charset; we prefer UTF-8, but UCS2 will do too */ + ctx->current_charset = &best_charsets[0]; + else + /* Try with the next one */ + ctx->current_charset++; + + if (*ctx->current_charset == MM_MODEM_CHARSET_UNKNOWN) + break; + + if (ctx->supported_charsets & (*ctx->current_charset)) + next_to_try = TRUE; + } + + if (next_to_try) { + MM_IFACE_MODEM_GET_INTERFACE (self)->setup_charset ( + self, + *ctx->current_charset, + (GAsyncReadyCallback)setup_charset_ready, + task); + return; + } + + g_task_return_new_error (task, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "Failed to find a usable modem character set"); + g_object_unref (task); + return; + } + ctx->step++; + /* fall-through */ + case INITIALIZATION_STEP_BEARERS: { MMBearerList *list = NULL; |