aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGiacinto Cifelli <gciofono@gmail.com>2020-05-18 16:50:33 +0200
committerGiacinto Cifelli <gciofono@gmail.com>2020-05-18 16:50:33 +0200
commit8e033ba331647435bab95a071a450b9be977b295 (patch)
tree30df22cdcc9db88d79ce8cb7e01fd2e0d3be0096 /src
parent503581a3ac07e74fa9f31bb2d681750e8f577f96 (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.c206
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;