194 lines
7.9 KiB
C
194 lines
7.9 KiB
C
/* -*- 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) 2008 - 2009 Novell, Inc.
|
|
* Copyright (C) 2009 - 2012 Red Hat, Inc.
|
|
* Copyright (C) 2012 Google, Inc.
|
|
*/
|
|
|
|
#ifndef MM_MODEM_HELPERS_H
|
|
#define MM_MODEM_HELPERS_H
|
|
|
|
#include <ModemManager.h>
|
|
|
|
#include "glib-object.h"
|
|
#include "mm-charsets.h"
|
|
|
|
/* NOTE:
|
|
* We will use the following nomenclature for the different AT commands referred
|
|
* - AT+SOMETHING --> "Exec" command
|
|
* - AT+SOMETHING? --> "Read" command
|
|
* - AT+SOMETHING=X,X --> "Write" command
|
|
* - AT+SOMETHING=? --> "Test" command
|
|
*/
|
|
|
|
|
|
/*****************************************************************************/
|
|
/* Common utilities */
|
|
/*****************************************************************************/
|
|
|
|
#define MM_MODEM_CAPABILITY_3GPP_LTE \
|
|
(MM_MODEM_CAPABILITY_LTE | \
|
|
MM_MODEM_CAPABILITY_LTE_ADVANCED)
|
|
|
|
#define MM_MODEM_CAPABILITY_3GPP \
|
|
(MM_MODEM_CAPABILITY_GSM_UMTS | \
|
|
MM_MODEM_CAPABILITY_3GPP_LTE)
|
|
|
|
const gchar *mm_strip_tag (const gchar *str,
|
|
const gchar *cmd);
|
|
|
|
guint mm_count_bits_set (gulong number);
|
|
|
|
gchar *mm_create_device_identifier (guint vid,
|
|
guint pid,
|
|
const gchar *ati,
|
|
const gchar *ati1,
|
|
const gchar *gsn,
|
|
const gchar *revision,
|
|
const gchar *model,
|
|
const gchar *manf);
|
|
|
|
/*****************************************************************************/
|
|
/* 3GPP specific helpers and utilities */
|
|
/*****************************************************************************/
|
|
|
|
/* Common Regex getters */
|
|
GPtrArray *mm_3gpp_creg_regex_get (gboolean solicited);
|
|
void mm_3gpp_creg_regex_destroy (GPtrArray *array);
|
|
GRegex *mm_3gpp_ciev_regex_get (void);
|
|
GRegex *mm_3gpp_cusd_regex_get (void);
|
|
GRegex *mm_3gpp_cmti_regex_get (void);
|
|
|
|
|
|
/* AT+COPS=? (network scan) response parser */
|
|
typedef struct {
|
|
MMModem3gppNetworkAvailability status;
|
|
gchar *operator_long;
|
|
gchar *operator_short;
|
|
gchar *operator_code; /* mandatory */
|
|
MMModemAccessTechnology access_tech;
|
|
} MM3gppNetworkInfo;
|
|
void mm_3gpp_network_info_list_free (GList *info_list);
|
|
GList *mm_3gpp_parse_cops_test_response (const gchar *reply,
|
|
GError **error);
|
|
|
|
/* AT+CGDCONT? (PDP context query) response parser */
|
|
typedef struct {
|
|
guint cid;
|
|
MMBearerIpFamily pdp_type;
|
|
gchar *apn;
|
|
} MM3gppPdpContext;
|
|
void mm_3gpp_pdp_context_list_free (GList *pdp_list);
|
|
GList *mm_3gpp_parse_cgdcont_read_response (const gchar *reply,
|
|
GError **error);
|
|
|
|
/* CREG/CGREG response/unsolicited message parser */
|
|
gboolean mm_3gpp_parse_creg_response (GMatchInfo *info,
|
|
MMModem3gppRegistrationState *out_reg_state,
|
|
gulong *out_lac,
|
|
gulong *out_ci,
|
|
MMModemAccessTechnology *out_act,
|
|
gboolean *out_cgreg,
|
|
GError **error);
|
|
|
|
/* AT+CMGF=? (SMS message format) response parser */
|
|
gboolean mm_3gpp_parse_cmgf_test_response (const gchar *reply,
|
|
gboolean *sms_pdu_supported,
|
|
gboolean *sms_text_supported,
|
|
GError **error);
|
|
|
|
/* AT+CPMS=? (Preferred SMS storage) response parser */
|
|
gboolean mm_3gpp_parse_cpms_test_response (const gchar *reply,
|
|
GArray **mem1,
|
|
GArray **mem2,
|
|
GArray **mem3);
|
|
|
|
/* AT+CSCS=? (Supported charsets) response parser */
|
|
gboolean mm_3gpp_parse_cscs_test_response (const gchar *reply,
|
|
MMModemCharset *out_charsets);
|
|
|
|
/* AT+CLCK=? (Supported locks) response parser */
|
|
gboolean mm_3gpp_parse_clck_test_response (const gchar *reply,
|
|
MMModem3gppFacility *out_facilities);
|
|
|
|
/* AT+CLCK=X,X,X... (Current locks) response parser */
|
|
gboolean mm_3gpp_parse_clck_write_response (const gchar *reply,
|
|
gboolean *enabled);
|
|
|
|
/* AT+CNUM (Own numbers) response parser */
|
|
GStrv mm_3gpp_parse_cnum_exec_response (const gchar *reply,
|
|
GError **error);
|
|
|
|
/* AT+CIND=? (Supported indicators) response parser */
|
|
typedef struct MM3gppCindResponse MM3gppCindResponse;
|
|
GHashTable *mm_3gpp_parse_cind_test_response (const gchar *reply,
|
|
GError **error);
|
|
const gchar *mm_3gpp_cind_response_get_desc (MM3gppCindResponse *r);
|
|
guint mm_3gpp_cind_response_get_index (MM3gppCindResponse *r);
|
|
gint mm_3gpp_cind_response_get_min (MM3gppCindResponse *r);
|
|
gint mm_3gpp_cind_response_get_max (MM3gppCindResponse *r);
|
|
|
|
/* AT+CIND? (Current indicators) response parser */
|
|
GByteArray *mm_3gpp_parse_cind_read_response (const gchar *reply,
|
|
GError **error);
|
|
|
|
/* Additional 3GPP-specific helpers */
|
|
|
|
MMModem3gppFacility mm_3gpp_acronym_to_facility (const gchar *str);
|
|
gchar *mm_3gpp_facility_to_acronym (MMModem3gppFacility facility);
|
|
|
|
MMModemAccessTechnology mm_string_to_access_tech (const gchar *string);
|
|
|
|
gchar *mm_3gpp_parse_operator (const gchar *reply,
|
|
MMModemCharset cur_charset);
|
|
|
|
const gchar *mm_3gpp_get_pdp_type_from_ip_family (MMBearerIpFamily family);
|
|
MMBearerIpFamily mm_3gpp_get_ip_family_from_pdp_type (const gchar *pdp_type);
|
|
|
|
/*****************************************************************************/
|
|
/* CDMA specific helpers and utilities */
|
|
/*****************************************************************************/
|
|
|
|
/* AT+SPSERVICE? response parser */
|
|
gboolean mm_cdma_parse_spservice_read_response (const gchar *reply,
|
|
MMModemCdmaRegistrationState *out_cdma_1x_state,
|
|
MMModemCdmaRegistrationState *out_evdo_state);
|
|
|
|
/* Generic ERI response parser */
|
|
gboolean mm_cdma_parse_eri (const gchar *reply,
|
|
gboolean *out_roaming,
|
|
guint32 *out_ind,
|
|
const gchar **out_desc);
|
|
|
|
/* AT+CRM=? response parser */
|
|
gboolean mm_cdma_parse_crm_test_response (const gchar *reply,
|
|
MMModemCdmaRmProtocol *min,
|
|
MMModemCdmaRmProtocol *max,
|
|
GError **error);
|
|
|
|
/* Additional CDMA-specific helpers */
|
|
|
|
#define MM_MODEM_CDMA_SID_UNKNOWN 99999
|
|
#define MM_MODEM_CDMA_NID_UNKNOWN 99999
|
|
|
|
MMModemCdmaRmProtocol mm_cdma_get_rm_protocol_from_index (guint index,
|
|
GError **error);
|
|
guint mm_cdma_get_index_from_rm_protocol (MMModemCdmaRmProtocol protocol,
|
|
GError **error);
|
|
|
|
gint mm_cdma_normalize_class (const gchar *orig_class);
|
|
gchar mm_cdma_normalize_band (const gchar *long_band,
|
|
gint *out_class);
|
|
|
|
#endif /* MM_MODEM_HELPERS_H */
|