summaryrefslogtreecommitdiffstats
path: root/drivers/atmodem
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-06-10 20:06:26 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-06-10 20:06:26 -0500
commit1b36d1cd43a035ab865ef56d366f8729d7e1b70d (patch)
treecbbfa5f775af9516b40a1f648e8a5560a9f666cc /drivers/atmodem
parent5a883d1c760fc3d64bdc87ebba7ef7ed4e3fceea (diff)
downloadofono-1b36d1cd43a035ab865ef56d366f8729d7e1b70d.tar.bz2
atmodem: Add utility for parsing CMTI/CDSI/CBMI
Diffstat (limited to 'drivers/atmodem')
-rw-r--r--drivers/atmodem/atutil.c40
-rw-r--r--drivers/atmodem/atutil.h12
2 files changed, 52 insertions, 0 deletions
diff --git a/drivers/atmodem/atutil.c b/drivers/atmodem/atutil.c
index e238f456..5dad679b 100644
--- a/drivers/atmodem/atutil.c
+++ b/drivers/atmodem/atutil.c
@@ -287,3 +287,43 @@ out:
return FALSE;
}
+
+gboolean at_util_parse_sms_index_delivery(GAtResult *result, const char *prefix,
+ enum at_util_sms_store *out_st,
+ int *out_index)
+{
+ GAtResultIter iter;
+ const char *strstore;
+ enum at_util_sms_store st;
+ int index;
+
+ g_at_result_iter_init(&iter, result);
+
+ if (!g_at_result_iter_next(&iter, prefix))
+ return FALSE;
+
+ if (!g_at_result_iter_next_string(&iter, &strstore))
+ return FALSE;
+
+ if (g_str_equal(strstore, "ME"))
+ st = AT_UTIL_SMS_STORE_ME;
+ else if (g_str_equal(strstore, "SM"))
+ st = AT_UTIL_SMS_STORE_SM;
+ else if (g_str_equal(strstore, "SR"))
+ st = AT_UTIL_SMS_STORE_SR;
+ else if (g_str_equal(strstore, "BM"))
+ st = AT_UTIL_SMS_STORE_BM;
+ else
+ return FALSE;
+
+ if (!g_at_result_iter_next_number(&iter, &index))
+ return FALSE;
+
+ if (out_index)
+ *out_index = index;
+
+ if (out_st)
+ *out_st = st;
+
+ return TRUE;
+}
diff --git a/drivers/atmodem/atutil.h b/drivers/atmodem/atutil.h
index 265a5ad4..9e0a84bf 100644
--- a/drivers/atmodem/atutil.h
+++ b/drivers/atmodem/atutil.h
@@ -19,6 +19,14 @@
*
*/
+enum at_util_sms_store {
+ AT_UTIL_SMS_STORE_SM = 0,
+ AT_UTIL_SMS_STORE_ME = 1,
+ AT_UTIL_SMS_STORE_MT = 2,
+ AT_UTIL_SMS_STORE_SR = 3,
+ AT_UTIL_SMS_STORE_BM = 4,
+};
+
void decode_at_error(struct ofono_error *error, const char *final);
gint at_util_call_compare_by_status(gconstpointer a, gconstpointer b);
gint at_util_call_compare_by_phone_number(gconstpointer a, gconstpointer b);
@@ -34,6 +42,10 @@ gboolean at_util_parse_reg_unsolicited(GAtResult *result, const char *prefix,
int *ci, int *tech,
unsigned int vendor);
+gboolean at_util_parse_sms_index_delivery(GAtResult *result, const char *prefix,
+ enum at_util_sms_store *store,
+ int *index);
+
struct cb_data {
void *cb;
void *data;