/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details: * * Copyright (C) 2014 Aleksander Morgado * Copyright (C) 2016 Trimble Navigation Limited * Copyright (C) 2016 Matthew Stanger * Copyright (C) 2019 Purism SPC */ #ifndef MM_MODEM_HELPERS_CINTERION_H #define MM_MODEM_HELPERS_CINTERION_H #include #include #include #define _LIBMM_INSIDE_MM #include typedef enum { MM_CINTERION_MODEM_FAMILY_DEFAULT = 0, MM_CINTERION_MODEM_FAMILY_IMT = 1, } MMCinterionModemFamily; typedef enum { MM_CINTERION_RADIO_BAND_FORMAT_SINGLE = 0, MM_CINTERION_RADIO_BAND_FORMAT_MULTIPLE = 1, } MMCinterionRadioBandFormat; typedef enum { MM_CINTERION_RB_BLOCK_LEGACY = 0, MM_CINTERION_RB_BLOCK_GSM = 0, MM_CINTERION_RB_BLOCK_UMTS = 1, MM_CINTERION_RB_BLOCK_LTE_LOW = 2, MM_CINTERION_RB_BLOCK_LTE_HIGH = 3, MM_CINTERION_RB_BLOCK_N = 4 } MMCinterionRbBlock; typedef enum { MM_CINTERION_RADIO_GEN_NONE = 0, MM_CINTERION_RADIO_GEN_2G = 2, MM_CINTERION_RADIO_GEN_3G = 3, MM_CINTERION_RADIO_GEN_4G = 4, } MMCinterionRadioGen; /*****************************************************************************/ /* ^SCFG test parser */ gboolean mm_cinterion_parse_scfg_test (const gchar *response, MMCinterionModemFamily modem_family, MMModemCharset charset, GArray **supported_bands, MMCinterionRadioBandFormat *format, GError **error); /*****************************************************************************/ /* ^SCFG response parser */ gboolean mm_cinterion_parse_scfg_response (const gchar *response, MMCinterionModemFamily modem_family, MMModemCharset charset, GArray **bands, MMCinterionRadioBandFormat format, GError **error); /*****************************************************************************/ /* ^SCFG response sim parser */ gboolean mm_cinterion_parse_scfg_sim_response (const gchar *response, guint *sim_count, GError **error); /*****************************************************************************/ /* ^SIND simlocal helper */ gboolean mm_cinterion_get_available_from_simlocal (const gchar *response, GArray **available, GError **error); /*****************************************************************************/ /* ^SIND response simlocal parser */ gboolean mm_cinterion_parse_sind_simlocal_response (const gchar *response, GArray **available, GError **error); /*****************************************************************************/ /* +CNMI test parser */ gboolean mm_cinterion_parse_cnmi_test (const gchar *response, GArray **supported_mode, GArray **supported_mt, GArray **supported_bm, GArray **supported_ds, GArray **supported_bfr, GError **error); /*****************************************************************************/ /* ^SXRAT test parser */ gboolean mm_cinterion_parse_sxrat_test (const gchar *response, GArray **supported_rat, GArray **supported_pref1, GArray **supported_pref2, GError **error); /*****************************************************************************/ /* Build Cinterion-specific band value */ gboolean mm_cinterion_build_band (GArray *bands, guint *supported, gboolean only_2g, MMCinterionRadioBandFormat format, MMCinterionModemFamily modem_family, guint *out_band, GError **error); /*****************************************************************************/ /* Single ^SIND response parser */ gboolean mm_cinterion_parse_sind_response (const gchar *response, gchar **description, guint *mode, guint *value, GError **error); /*****************************************************************************/ /* ^SWWAN response parser */ MMBearerConnectionStatus mm_cinterion_parse_swwan_response (const gchar *response, guint swwan_index, gpointer log_object, GError **error); /*****************************************************************************/ /* ^SGAUTH response parser */ gboolean mm_cinterion_parse_sgauth_response (const gchar *response, guint cid, MMBearerAllowedAuth *out_auth, gchar **out_username, GError **error); /*****************************************************************************/ /* ^SMONG response parser */ gboolean mm_cinterion_parse_smong_response (const gchar *response, MMModemAccessTechnology *access_tech, GError **error); /*****************************************************************************/ /* ^SIND psinfo helper */ MMModemAccessTechnology mm_cinterion_get_access_technology_from_sind_psinfo (guint val, gpointer log_object); /*****************************************************************************/ /* ^SLCC URC helpers */ GRegex *mm_cinterion_get_slcc_regex (void); /* MMCallInfo list management */ gboolean mm_cinterion_parse_slcc_list (const gchar *str, gpointer log_object, GList **out_list, GError **error); void mm_cinterion_call_info_list_free (GList *call_info_list); /*****************************************************************************/ /* +CTZU URC helpers */ GRegex *mm_cinterion_get_ctzu_regex (void); gboolean mm_cinterion_parse_ctzu_urc (GMatchInfo *match_info, gchar **iso8601p, MMNetworkTimezone **tzp, GError **error); /*****************************************************************************/ /* ^SMONI helper */ gboolean mm_cinterion_parse_smoni_query_response (const gchar *response, MMCinterionRadioGen *out_tech, gdouble *out_rssi, gdouble *out_ecn0, gdouble *out_rscp, gdouble *out_rsrp, gdouble *out_rsrq, GError **error); gboolean mm_cinterion_smoni_response_to_signal_info (const gchar *response, MMSignal **out_gsm, MMSignal **out_umts, MMSignal **out_lte, GError **error); /*****************************************************************************/ /* ^SCFG="MEopMode/Prov/Cfg" helper */ gboolean mm_cinterion_provcfg_response_to_cid (const gchar *response, MMCinterionModemFamily modem_family, MMModemCharset charset, gpointer log_object, gint *cid, GError **error); /*****************************************************************************/ /* Auth related helpers */ MMBearerAllowedAuth mm_auth_type_from_cinterion_auth_type (guint cinterion_auth); gchar *mm_cinterion_build_auth_string (gpointer log_object, MMCinterionModemFamily modem_family, MMBearerProperties *config, guint cid); /*****************************************************************************/ /* ^SXRAT set command helper */ gchar *mm_cinterion_build_sxrat_set_command (MMModemMode allowed, MMModemMode preferred, GError **error); /*****************************************************************************/ /* +COPS command helper */ gboolean mm_cinterion_build_cops_set_command (MMModemMode mode, const gchar *operator_code, gchar **out, GError **error); /*****************************************************************************/ /* +WS46 response parser */ gboolean mm_cinterion_parse_ws46_response (const gchar *response, MMModemMode *result, GError **error); #endif /* MM_MODEM_HELPERS_CINTERION_H */