summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Machek <pavel@ucw.cz>2020-09-15 15:23:13 +0200
committerDenis Kenzior <denkenz@gmail.com>2020-09-15 10:21:44 -0500
commitcb79f71ffe895630d790034d888d05dcafadfb24 (patch)
treec52ab354c687b2d63f9bcec5754cc6b1dc73a499
parent25fd00588adf40436a8c0eb124258ea530c83266 (diff)
downloadofono-cb79f71ffe895630d790034d888d05dcafadfb24.tar.gz
droid 4: special handling for SMSes
Droid 4 modem is "special" (aka broken) so and getting incoming SMSes to work is quite tricky. This should get it right.
-rw-r--r--drivers/atmodem/sms.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c
index ed3b1370..963c22eb 100644
--- a/drivers/atmodem/sms.c
+++ b/drivers/atmodem/sms.c
@@ -464,7 +464,8 @@ static void at_cmt_notify(GAtResult *result, gpointer user_data)
decode_hex_own_buf(hexpdu, -1, &pdu_len, 0, pdu);
ofono_sms_deliver_notify(sms, pdu, pdu_len, tpdu_len);
- if (data->vendor != OFONO_VENDOR_SIMCOM)
+ if (data->vendor != OFONO_VENDOR_SIMCOM &&
+ data->vendor != OFONO_VENDOR_DROID)
at_ack_delivery(sms);
return;
@@ -847,6 +848,7 @@ static gboolean build_cnmi_string(char *buf, int *cnmi_opts,
case OFONO_VENDOR_SIMCOM:
case OFONO_VENDOR_QUECTEL:
case OFONO_VENDOR_QUECTEL_EC2X:
+ case OFONO_VENDOR_DROID:
/* MSM devices advertise support for mode 2, but return an
* error if we attempt to actually use it. */
mode = "1";
@@ -860,9 +862,15 @@ static gboolean build_cnmi_string(char *buf, int *cnmi_opts,
if (!append_cnmi_element(buf, &len, cnmi_opts[0], mode, FALSE))
return FALSE;
+ mode = "21";
+ if (!data->cnma_enabled)
+ mode = "1";
+
+ if (data->vendor == OFONO_VENDOR_DROID)
+ mode = "2";
+
/* Prefer to deliver SMS via +CMT if CNMA is supported */
- if (!append_cnmi_element(buf, &len, cnmi_opts[1],
- data->cnma_enabled ? "21" : "1", FALSE))
+ if (!append_cnmi_element(buf, &len, cnmi_opts[1], mode, FALSE))
return FALSE;
switch (data->vendor) {
@@ -1292,6 +1300,8 @@ static void at_csms_query_cb(gboolean ok, GAtResult *result,
goto out;
switch (data->vendor) {
+ case OFONO_VENDOR_DROID:
+ break;
case OFONO_VENDOR_QUECTEL_SERIAL:
g_at_result_iter_next_number(&iter, &status_min);
g_at_result_iter_next_number(&iter, &status_max);