aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-01-04 22:42:47 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:45 +0100
commit9efabb8fcb9aa0c8e7d8afb3e313082fc9773e64 (patch)
tree304588d3d564ea47fa6078532942790904832235 /src
parent44289da5316d8a90d6016d181d828d754a4e2096 (diff)
modem-helpers: new CDMA helper parsers
Diffstat (limited to 'src')
-rw-r--r--src/mm-iface-modem-cdma.c4
-rw-r--r--src/mm-iface-modem-cdma.h3
-rw-r--r--src/mm-modem-helpers.c68
-rw-r--r--src/mm-modem-helpers.h8
4 files changed, 78 insertions, 5 deletions
diff --git a/src/mm-iface-modem-cdma.c b/src/mm-iface-modem-cdma.c
index 0bad7faa..b7f05a19 100644
--- a/src/mm-iface-modem-cdma.c
+++ b/src/mm-iface-modem-cdma.c
@@ -1174,8 +1174,8 @@ mm_iface_modem_cdma_initialize (MMIfaceModemCdma *self,
/* Set all initial property defaults */
mm_gdbus_modem_cdma_set_meid (skeleton, NULL);
mm_gdbus_modem_cdma_set_esn (skeleton, NULL);
- mm_gdbus_modem_cdma_set_sid (skeleton, MM_IFACE_MODEM_CDMA_SID_UNKNOWN);
- mm_gdbus_modem_cdma_set_nid (skeleton, MM_IFACE_MODEM_CDMA_NID_UNKNOWN);
+ mm_gdbus_modem_cdma_set_sid (skeleton, MM_MODEM_CDMA_SID_UNKNOWN);
+ mm_gdbus_modem_cdma_set_nid (skeleton, MM_MODEM_CDMA_NID_UNKNOWN);
/* Bind our Registration State properties */
g_object_bind_property (self, MM_IFACE_MODEM_CDMA_CDMA1X_REGISTRATION_STATE,
diff --git a/src/mm-iface-modem-cdma.h b/src/mm-iface-modem-cdma.h
index 83c346a1..fe0b6dca 100644
--- a/src/mm-iface-modem-cdma.h
+++ b/src/mm-iface-modem-cdma.h
@@ -34,9 +34,6 @@
#define MM_IFACE_MODEM_CDMA_EVDO_NETWORK_SUPPORTED "iface-modem-cdma-evdo-network-supported"
#define MM_IFACE_MODEM_CDMA_CDMA1X_NETWORK_SUPPORTED "iface-modem-cdma-cdma1x-network-supported"
-#define MM_IFACE_MODEM_CDMA_SID_UNKNOWN 99999
-#define MM_IFACE_MODEM_CDMA_NID_UNKNOWN 99999
-
typedef struct _MMIfaceModemCdma MMIfaceModemCdma;
struct _MMIfaceModemCdma {
diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c
index 780c8ded..53aebb82 100644
--- a/src/mm-modem-helpers.c
+++ b/src/mm-modem-helpers.c
@@ -1529,6 +1529,74 @@ done:
return array;
}
+gint
+mm_cdma_normalize_class (const gchar *orig_class)
+{
+ gchar class;
+
+ g_return_val_if_fail (orig_class != NULL, '0');
+
+ class = toupper (orig_class[0]);
+
+ /* Cellular (850MHz) */
+ if (class == '1' || class == 'C')
+ return 1;
+ /* PCS (1900MHz) */
+ if (class == '2' || class == 'P')
+ return 2;
+
+ /* Unknown/not registered */
+ return 0;
+}
+
+gchar
+mm_cdma_normalize_band (const gchar *long_band,
+ gint *out_class)
+{
+ gchar band;
+
+ g_return_val_if_fail (long_band != NULL, 'Z');
+
+ /* There are two response formats for the band; one includes the band
+ * class and the other doesn't. For modems that include the band class
+ * (ex Novatel S720) you'll see "Px" or "Cx" depending on whether the modem
+ * is registered on a PCS/1900 (P) or Cellular/850 (C) system.
+ */
+ band = toupper (long_band[0]);
+
+ /* Possible band class in first position; return it */
+ if (band == 'C' || band == 'P') {
+ gchar tmp[2] = { band, '\0' };
+
+ *out_class = mm_cdma_normalize_class (tmp);
+ band = toupper (long_band[1]);
+ }
+
+ /* normalize to A - F, and Z */
+ if (band >= 'A' && band <= 'F')
+ return band;
+
+ /* Unknown/not registered */
+ return 'Z';
+}
+
+gint
+mm_cdma_convert_sid (const gchar *sid)
+{
+ glong tmp_sid;
+
+ g_return_val_if_fail (sid != NULL, MM_MODEM_CDMA_SID_UNKNOWN);
+
+ errno = 0;
+ tmp_sid = strtol (sid, NULL, 10);
+ if ((errno == EINVAL) || (errno == ERANGE))
+ return MM_MODEM_CDMA_SID_UNKNOWN;
+ else if (tmp_sid < G_MININT || tmp_sid > G_MAXINT)
+ return MM_MODEM_CDMA_SID_UNKNOWN;
+
+ return (gint) tmp_sid;
+}
+
guint
mm_count_bits_set (gulong number)
{
diff --git a/src/mm-modem-helpers.h b/src/mm-modem-helpers.h
index 725eca3c..e0ae8b67 100644
--- a/src/mm-modem-helpers.h
+++ b/src/mm-modem-helpers.h
@@ -110,6 +110,14 @@ gint cind_response_get_max (CindResponse *r);
GByteArray *mm_parse_cind_query_response(const char *reply, GError **error);
+#define MM_MODEM_CDMA_SID_UNKNOWN 99999
+#define MM_MODEM_CDMA_NID_UNKNOWN 99999
+
+gint mm_cdma_normalize_class (const gchar *orig_class);
+gchar mm_cdma_normalize_band (const gchar *long_band,
+ gint *out_class);
+gint mm_cdma_convert_sid (const gchar *sid);
+
guint mm_count_bits_set (gulong number);
#endif /* MM_MODEM_HELPERS_H */