mirror of git://git.sysmocom.de/ofono
atmodem: sms: add quectel m95 quirks
CNMA isn't mentioned in the m95 documentation, but trial'n'error has revealed some details: * the CSMS query returns the list (0,128) instead of a range * CNMA is enabled by setting 128 as CSMS service * once enabled, SMS deliveries are acked by sending AT+CNMA without a value setting Add m95 quirks to the atmodem driver, so that CNMA is correctly detected, configured, and used.
This commit is contained in:
parent
47021f9950
commit
46616a52d9
|
@ -339,6 +339,9 @@ static inline void at_ack_delivery(struct ofono_sms *sms)
|
||||||
case OFONO_VENDOR_GEMALTO:
|
case OFONO_VENDOR_GEMALTO:
|
||||||
snprintf(buf, sizeof(buf), "AT+CNMA=1");
|
snprintf(buf, sizeof(buf), "AT+CNMA=1");
|
||||||
break;
|
break;
|
||||||
|
case OFONO_VENDOR_QUECTEL_M95:
|
||||||
|
snprintf(buf, sizeof(buf), "AT+CNMA");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
snprintf(buf, sizeof(buf), "AT+CNMA=1,%d\r%s",
|
snprintf(buf, sizeof(buf), "AT+CNMA=1,%d\r%s",
|
||||||
data->cnma_ack_pdu_len,
|
data->cnma_ack_pdu_len,
|
||||||
|
@ -1238,7 +1241,7 @@ static void at_csms_status_cb(gboolean ok, GAtResult *result,
|
||||||
if (!g_at_result_iter_next_number(&iter, &mo))
|
if (!g_at_result_iter_next_number(&iter, &mo))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (service == 1)
|
if (service == 1 || service == 128)
|
||||||
data->cnma_enabled = TRUE;
|
data->cnma_enabled = TRUE;
|
||||||
|
|
||||||
if (mt == 1 && mo == 1)
|
if (mt == 1 && mo == 1)
|
||||||
|
@ -1269,10 +1272,10 @@ static void at_csms_query_cb(gboolean ok, GAtResult *result,
|
||||||
{
|
{
|
||||||
struct ofono_sms *sms = user_data;
|
struct ofono_sms *sms = user_data;
|
||||||
struct sms_data *data = ofono_sms_get_data(sms);
|
struct sms_data *data = ofono_sms_get_data(sms);
|
||||||
gboolean cnma_supported = FALSE;
|
|
||||||
GAtResultIter iter;
|
GAtResultIter iter;
|
||||||
int status_min, status_max;
|
int status_min, status_max;
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
int csms = 0;
|
||||||
|
|
||||||
if (!ok)
|
if (!ok)
|
||||||
return at_sms_not_supported(sms);
|
return at_sms_not_supported(sms);
|
||||||
|
@ -1285,14 +1288,25 @@ static void at_csms_query_cb(gboolean ok, GAtResult *result,
|
||||||
if (!g_at_result_iter_open_list(&iter))
|
if (!g_at_result_iter_open_list(&iter))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
while (g_at_result_iter_next_range(&iter, &status_min, &status_max))
|
switch (data->vendor) {
|
||||||
|
case OFONO_VENDOR_QUECTEL_M95:
|
||||||
|
g_at_result_iter_next_number(&iter, &status_min);
|
||||||
|
g_at_result_iter_next_number(&iter, &status_max);
|
||||||
if (status_min <= 1 && 1 <= status_max)
|
if (status_min <= 1 && 1 <= status_max)
|
||||||
cnma_supported = TRUE;
|
csms = 128;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
while (g_at_result_iter_next_range(&iter, &status_min,
|
||||||
|
&status_max))
|
||||||
|
if (status_min <= 1 && 1 <= status_max)
|
||||||
|
csms = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
DBG("CSMS query parsed successfully");
|
DBG("CSMS query parsed successfully");
|
||||||
|
|
||||||
out:
|
out:
|
||||||
snprintf(buf, sizeof(buf), "AT+CSMS=%d", cnma_supported ? 1 : 0);
|
snprintf(buf, sizeof(buf), "AT+CSMS=%d", csms);
|
||||||
g_at_chat_send(data->chat, buf, csms_prefix,
|
g_at_chat_send(data->chat, buf, csms_prefix,
|
||||||
at_csms_set_cb, sms, NULL);
|
at_csms_set_cb, sms, NULL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue