summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-06-10 18:41:29 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-06-10 18:41:29 -0500
commit150c1e753ffe8f632be3cc5fdfb3043a22f82d55 (patch)
treeff97ce46c439ffac495d1a9ce2c5a354ed483ab8
parent160161e6bc383c237da5f6be564bef3bc57a6072 (diff)
downloadofono-150c1e753ffe8f632be3cc5fdfb3043a22f82d55.tar.bz2
atmodem: Split out the +CPMS sender
Just before sending a CMGR for +CMTI notification, use need to optionally send a CPMS to select the proper storage. This should be done in a separate function for potential re-use by CDSI
-rw-r--r--drivers/atmodem/sms.c57
1 files changed, 31 insertions, 26 deletions
diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c
index 29759b13..22129cf1 100644
--- a/drivers/atmodem/sms.c
+++ b/drivers/atmodem/sms.c
@@ -397,7 +397,7 @@ static void at_cmgd_cb(gboolean ok, GAtResult *result, gpointer user_data)
ofono_error("Unable to delete received SMS");
}
-static void at_cmti_cpms_cb(gboolean ok, GAtResult *result, gpointer user_data)
+static void at_cmgr_cpms_cb(gboolean ok, GAtResult *result, gpointer user_data)
{
struct cpms_request *req = user_data;
struct ofono_sms *sms = req->sms;
@@ -419,10 +419,38 @@ static void at_cmti_cpms_cb(gboolean ok, GAtResult *result, gpointer user_data)
g_at_chat_send(data->chat, buf, none_prefix, at_cmgd_cb, NULL, NULL);
}
+static void at_send_cmgr_cpms(struct ofono_sms *sms, int store, int index)
+{
+ struct sms_data *data = ofono_sms_get_data(sms);
+
+ if (store == data->store) {
+ struct cpms_request req;
+
+ req.sms = sms;
+ req.store = store;
+ req.index = index;
+
+ at_cmgr_cpms_cb(TRUE, NULL, &req);
+ } else {
+ char buf[128];
+ const char *incoming = storages[data->incoming];
+ struct cpms_request *req = g_new(struct cpms_request, 1);
+
+ req->sms = sms;
+ req->store = store;
+ req->index = index;
+
+ snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"",
+ storages[store], storages[store], incoming);
+
+ g_at_chat_send(data->chat, buf, cpms_prefix, at_cmgr_cpms_cb,
+ req, g_free);
+ }
+}
+
static void at_cmti_notify(GAtResult *result, gpointer user_data)
{
struct ofono_sms *sms = user_data;
- struct sms_data *data = ofono_sms_get_data(sms);
const char *strstore;
int store;
GAtResultIter iter;
@@ -448,30 +476,7 @@ static void at_cmti_notify(GAtResult *result, gpointer user_data)
DBG("Got a CMTI indication at %s, index: %d", strstore, index);
- if (store == data->store) {
- struct cpms_request req;
-
- req.sms = sms;
- req.store = store;
- req.index = index;
-
- at_cmti_cpms_cb(TRUE, NULL, &req);
- } else {
- char buf[128];
- const char *incoming = storages[data->incoming];
- struct cpms_request *req = g_new(struct cpms_request, 1);
-
- req->sms = sms;
- req->store = store;
- req->index = index;
-
- snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"",
- strstore, strstore, incoming);
-
- g_at_chat_send(data->chat, buf, cpms_prefix, at_cmti_cpms_cb,
- req, g_free);
- }
-
+ at_send_cmgr_cpms(sms, store, index);
return;
err: