static void setup_ports (MMBroadbandModem *self) { MMAtSerialPort *ports[2]; guint i; /* Call parent's setup ports first always */ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_zte_icera_parent_class)->setup_ports (self); ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self)); /* Configure AT ports */ for (i = 0; i < 2; i++) { if (!ports[i]) continue; g_object_set (ports[i], MM_PORT_CARRIER_DETECT, FALSE, NULL); } /* Now reset the unsolicited messages we'll handle when enabled */ mm_common_zte_set_unsolicited_events_handlers (MM_BROADBAND_MODEM (self), MM_BROADBAND_MODEM_ZTE_ICERA (self)->priv->unsolicited_setup, FALSE); }
static void setup_ports (MMBroadbandModem *self) { gpointer parser; MMAtSerialPort *primary; GRegex *regex; /* Call parent's setup ports first always */ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_wavecom_parent_class)->setup_ports (self); /* Set 9600 baudrate by default in the AT port */ mm_dbg ("Baudrate will be set to 9600 bps..."); primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); if (!primary) return; /* AT+CPIN? replies will never have an OK appended */ parser = mm_serial_parser_v1_new (); regex = g_regex_new ("\\r\\n\\+CPIN: .*\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); mm_serial_parser_v1_set_custom_regex (parser, regex, NULL); g_regex_unref (regex); mm_at_serial_port_set_response_parser (MM_AT_SERIAL_PORT (primary), mm_serial_parser_v1_parse, parser, mm_serial_parser_v1_destroy); }
static void setup_ports (MMBroadbandModem *_self) { MMBroadbandModemMbm *self = MM_BROADBAND_MODEM_MBM (_self); MMPortSerialAt *ports[2]; guint i; /* Call parent's setup ports first always */ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_mbm_parent_class)->setup_ports (_self); ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self)); /* Setup unsolicited handlers which should be always on */ for (i = 0; i < 2; i++) { if (!ports[i]) continue; /* The Ericsson modems always have a free AT command port, so we * don't need to flash the ports when disconnecting to get back to * command mode. F5521gw R2A07 resets port properties like echo when * flashed, leading to confusion. bgo #650740 */ g_object_set (G_OBJECT (ports[i]), MM_PORT_SERIAL_FLASH_OK, FALSE, NULL); mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->emrdy_regex, (MMPortSerialAtUnsolicitedMsgFn)emrdy_received, self, NULL); /* Several unsolicited messages to always ignore... */ mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->pacsp_regex, NULL, NULL, NULL); mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->estksmenu_regex, NULL, NULL, NULL); mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->estksms_regex, NULL, NULL, NULL); mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->emwi_regex, NULL, NULL, NULL); } /* Now reset the unsolicited messages we'll handle when enabled */ set_unsolicited_events_handlers (MM_BROADBAND_MODEM_MBM (self), FALSE); }
static void run_enabling_init_sequence (EnablingModemInitContext *ctx) { mm_base_modem_at_sequence_full (MM_BASE_MODEM (ctx->self), mm_base_modem_peek_port_primary (MM_BASE_MODEM (ctx->self)), enabling_modem_init_sequence, NULL, /* response_processor_context */ NULL, /* response_processor_context_free */ NULL, /* cancellable */ (GAsyncReadyCallback)enabling_init_sequence_ready, ctx); }
static void set_unsolicited_events_handlers (MMBroadbandModemOption *self, gboolean enable) { MMPortSerialAt *ports[2]; guint i; ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self)); /* Enable unsolicited events in given port */ for (i = 0; i < 2; i++) { if (!ports[i]) continue; /* Access technology related */ mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->_ossysi_regex, enable ? (MMPortSerialAtUnsolicitedMsgFn)option_ossys_tech_changed : NULL, enable ? self : NULL, NULL); mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->_octi_regex, enable ? (MMPortSerialAtUnsolicitedMsgFn)option_2g_tech_changed : NULL, enable ? self : NULL, NULL); mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->_ouwcti_regex, enable ? (MMPortSerialAtUnsolicitedMsgFn)option_3g_tech_changed : NULL, enable ? self : NULL, NULL); /* Signal quality related */ mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->_osigq_regex, enable ? (MMPortSerialAtUnsolicitedMsgFn)option_signal_changed : NULL, enable ? self : NULL, NULL); /* Other unsolicited events to always ignore */ if (!enable) mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->ignore_regex, NULL, NULL, NULL); } }
static void load_allowed_modes (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *result; MMAtSerialPort *primary; result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, load_allowed_modes); if (!mm_iface_modem_is_3gpp (self)) { /* Cannot do this in CDMA modems */ g_simple_async_result_set_error (result, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, "Cannot load allowed modes in CDMA modems"); g_simple_async_result_complete_in_idle (result); g_object_unref (result); return; } /* Sierra secondary ports don't have full AT command interpreters */ primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); if (!primary || mm_port_get_connected (MM_PORT (primary))) { g_simple_async_result_set_error ( result, MM_CORE_ERROR, MM_CORE_ERROR_CONNECTED, "Cannot load allowed modes while connected"); g_simple_async_result_complete_in_idle (result); g_object_unref (result); return; } mm_base_modem_at_command_full (MM_BASE_MODEM (self), primary, "!SELRAT?", 3, FALSE, FALSE, /* raw */ NULL, /* cancellable */ (GAsyncReadyCallback)selrat_query_ready, result); }
static void setup_ports (MMBroadbandModem *self) { MMAtSerialPort *primary; /* Call parent's setup ports first always */ MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_iridium_parent_class)->setup_ports (self); /* Set 9600 baudrate by default in the AT port */ mm_dbg ("Baudrate will be set to 9600 bps..."); primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); if (!primary) return; g_object_set (G_OBJECT (primary), MM_SERIAL_PORT_BAUD, 9600, NULL); }
static void set_unsolicited_events_handlers (MMBroadbandModemMbm *self, gboolean enable) { MMPortSerialAt *ports[2]; guint i; ports[0] = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); ports[1] = mm_base_modem_peek_port_secondary (MM_BASE_MODEM (self)); /* Enable unsolicited events in given port */ for (i = 0; i < 2; i++) { if (!ports[i]) continue; /* Access technology related */ mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->erinfo_regex, enable ? (MMPortSerialAtUnsolicitedMsgFn)erinfo_received : NULL, enable ? self : NULL, NULL); /* Connection related */ mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->e2nap_regex, enable ? (MMPortSerialAtUnsolicitedMsgFn)e2nap_received : NULL, enable ? self : NULL, NULL); mm_port_serial_at_add_unsolicited_msg_handler ( ports[i], self->priv->e2nap_ext_regex, enable ? (MMPortSerialAtUnsolicitedMsgFn)e2nap_received : NULL, enable ? self : NULL, NULL); } }
static void modem_3gpp_disable_unsolicited_events (MMIfaceModem3gpp *self, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *result; result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, modem_3gpp_disable_unsolicited_events); /* Our own disable first */ mm_base_modem_at_sequence_full ( MM_BASE_MODEM (self), mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)), unsolicited_disable_sequence, NULL, /* response_processor_context */ NULL, /* response_processor_context_free */ NULL, /* cancellable */ (GAsyncReadyCallback)own_disable_unsolicited_events_ready, result); }
static void parent_enable_unsolicited_events_ready (MMIfaceModem3gpp *self, GAsyncResult *res, GSimpleAsyncResult *simple) { GError *error = NULL; if (!iface_modem_3gpp_parent->enable_unsolicited_events_finish (self, res, &error)) { g_simple_async_result_take_error (simple, error); g_simple_async_result_complete (simple); g_object_unref (simple); } /* Our own enable now */ mm_base_modem_at_sequence_full ( MM_BASE_MODEM (self), mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)), unsolicited_enable_sequence, NULL, /* response_processor_context */ NULL, /* response_processor_context_free */ NULL, /* cancellable */ (GAsyncReadyCallback)own_enable_unsolicited_events_ready, simple); }
static void set_allowed_modes (MMIfaceModem *self, MMModemMode allowed, MMModemMode preferred, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *result; MMAtSerialPort *primary; gint idx = -1; gchar *command; result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, load_allowed_modes); if (!mm_iface_modem_is_3gpp (self)) { /* Cannot do this in CDMA modems */ g_simple_async_result_set_error (result, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, "Cannot set allowed modes in CDMA modems"); g_simple_async_result_complete_in_idle (result); g_object_unref (result); return; } /* Sierra secondary ports don't have full AT command interpreters */ primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); if (!primary || mm_port_get_connected (MM_PORT (primary))) { g_simple_async_result_set_error ( result, MM_CORE_ERROR, MM_CORE_ERROR_CONNECTED, "Cannot set allowed modes while connected"); g_simple_async_result_complete_in_idle (result); g_object_unref (result); return; } if (allowed == MM_MODEM_MODE_3G) idx = 1; else if (allowed == MM_MODEM_MODE_2G) idx = 2; else if (allowed == (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G)) { /* in Sierra LTE devices, modes 3 and 4 are automatic, including LTE, no preference */ if (mm_iface_modem_is_3gpp_lte (self)) { if (preferred == MM_MODEM_MODE_NONE) idx = 5; /* GSM and UMTS Only */ } else if (preferred == MM_MODEM_MODE_3G) idx = 3; else if (preferred == MM_MODEM_MODE_2G) idx = 4; else if (preferred == MM_MODEM_MODE_NONE) idx = 0; } else if (allowed == MM_MODEM_MODE_4G) idx = 6; else if (allowed == (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G)) idx = 7; else if (allowed == MM_MODEM_MODE_ANY) idx = 0; if (idx < 0) { gchar *allowed_str; gchar *preferred_str; allowed_str = mm_modem_mode_build_string_from_mask (allowed); preferred_str = mm_modem_mode_build_string_from_mask (preferred); g_simple_async_result_set_error (result, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Requested mode (allowed: '%s', preferred: '%s') not " "supported by the modem.", allowed_str, preferred_str); g_free (allowed_str); g_free (preferred_str); g_simple_async_result_complete_in_idle (result); g_object_unref (result); return; } command = g_strdup_printf ("!SELRAT=%d", idx); mm_base_modem_at_command_full (MM_BASE_MODEM (self), primary, command, 3, FALSE, FALSE, /* raw */ NULL, /* cancellable */ (GAsyncReadyCallback)selrat_set_ready, result); g_free (command); }