summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-06-10 20:21:33 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-06-10 20:21:33 -0500
commita128cbff8ba835638b185d872b3858e81ea07a9d (patch)
tree891367078b338c3ef6191c39d50fb9e9b0ad15ee
parentd8e7a7b5e310ac0663ef163e2d95e44a11a5c621 (diff)
downloadofono-a128cbff8ba835638b185d872b3858e81ea07a9d.tar.bz2
atmodem: Force CDSI delivery for Novatel devices
-rw-r--r--drivers/atmodem/sms.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c
index 7b2c08c3..82cf6348 100644
--- a/drivers/atmodem/sms.c
+++ b/drivers/atmodem/sms.c
@@ -719,8 +719,22 @@ static gboolean build_cnmi_string(char *buf, int *cnmi_opts,
if (!append_cnmi_element(buf, &len, cnmi_opts[2], "20", FALSE))
return FALSE;
+ /*
+ * Some manufacturers seem to have trouble with delivery via +CDS.
+ * They report the status report properly, however refuse to +CNMA
+ * ack it with error "CNMA not expected." However, not acking it
+ * sends the device into la-la land.
+ */
+ if (data->vendor == OFONO_VENDOR_NOVATEL)
+ /* MSM devices advertise support for mode 2, but return an
+ * error if we attempt to actually use it. */
+ mode = "2";
+ else
+ /* Sounds like 2 is the sanest mode */
+ mode = data->cnma_enabled ? "10" : "20";
+
/* Always deliver Status-Reports via +CDS or don't deliver at all */
- if (!append_cnmi_element(buf, &len, cnmi_opts[3], "10", FALSE))
+ if (!append_cnmi_element(buf, &len, cnmi_opts[3], mode, FALSE))
return FALSE;
/* Don't care about buffering, 0 seems safer */