diff options
author | Aki Niemi <aki.niemi@nokia.com> | 2011-04-14 15:24:19 +0300 |
---|---|---|
committer | Aki Niemi <aki.niemi@nokia.com> | 2011-04-14 15:30:24 +0300 |
commit | 0b627c8e1e5aa0c5d626c7f4bd71a8eca6d2b382 (patch) | |
tree | 9ac59c88f7de6e72495bbf12f6ee8cb464def56c | |
parent | 27046f9505ff100b2e76ee6e021daba0a8e98a21 (diff) | |
download | ofono-0b627c8e1e5aa0c5d626c7f4bd71a8eca6d2b382.tar.bz2 |
isimodem: Add SCA support to wgmodem2.5 driver
-rw-r--r-- | drivers/isimodem/debug.c | 1 | ||||
-rw-r--r-- | drivers/isimodem/sms.c | 38 | ||||
-rw-r--r-- | drivers/isimodem/sms.h | 1 |
3 files changed, 27 insertions, 13 deletions
diff --git a/drivers/isimodem/debug.c b/drivers/isimodem/debug.c index 5deba498..f72dfe1b 100644 --- a/drivers/isimodem/debug.c +++ b/drivers/isimodem/debug.c @@ -483,6 +483,7 @@ const char *sms_subblock_name(enum sms_subblock value) _(SMS_SB_SMS_PARAMETERS); _(SMS_COMMON_DATA); _(SMS_ADDRESS); + /* _(SMS_SB_ADDRESS); */ } return "SMS_<UNKNOWN>"; } diff --git a/drivers/isimodem/sms.c b/drivers/isimodem/sms.c index 6ffee982..c652ca42 100644 --- a/drivers/isimodem/sms.c +++ b/drivers/isimodem/sms.c @@ -463,37 +463,49 @@ static gboolean submit_tpdu(GIsiClient *client, unsigned char *pdu, int pdu_len, int tpdu_len, int mms, void *data, GDestroyNotify notify) { + uint8_t use_sca = (pdu_len - tpdu_len) > 1; + size_t sca_sb_len = use_sca ? 18 : 0; size_t tpdu_sb_len = ALIGN4(6 + tpdu_len); size_t tpdu_pad_len = tpdu_sb_len - (6 + tpdu_len); - uint8_t hdr[] = { + uint8_t msg[] = { SMS_MESSAGE_SEND_REQ, - mms, /* More messages to send */ - SMS_ROUTE_ANY, /* Use any (default) route */ - 0, /* Repeated message */ - 0, 0, /* Filler */ - 2, /* Subblock count */ + mms, /* More messages to send */ + SMS_ROUTE_ANY, /* Use any (default) route */ + 0, /* Repeated message */ + 0, 0, /* Filler */ + use_sca ? 3 : 2, /* Subblock count */ ISI_16BIT(SMS_SB_SMS_PARAMETERS), - ISI_16BIT(8), /* Subblock length */ + ISI_16BIT(8), /* Subblock length */ SMS_PARAMETER_LOCATION_DEFAULT, SMS_PI_SERVICE_CENTER_ADDRESS, - 0, 0, /* Filler */ + 0, 0, /* Filler */ ISI_16BIT(SMS_SB_TPDU), ISI_16BIT(tpdu_sb_len), tpdu_len, - 0, /* Filler */ + 0, /* Filler */ /* Databytes aligned to next 32bit boundary */ }; + uint8_t sca_sb[18] = { + ISI_16BIT(SMS_SB_ADDRESS), + ISI_16BIT(18), + SMS_SMSC_ADDRESS, + 0, /* Filled in later */ + }; uint8_t padding[4] = { 0 }; - struct iovec iov[3] = { - { hdr, sizeof(hdr) }, + struct iovec iov[4] = { + { msg, sizeof(msg) }, { pdu + pdu_len - tpdu_len, tpdu_len }, { padding, tpdu_pad_len }, + { sca_sb, sca_sb_len }, }; - /* FIXME: Missing SB for SCA if provided */ + if (use_sca) { + sca_sb[5] = pdu_len - tpdu_len; + memcpy(sca_sb + 6, pdu, pdu_len - tpdu_len); + } - return g_isi_client_vsend_with_timeout(client, iov, 3, SMS_TIMEOUT, + return g_isi_client_vsend_with_timeout(client, iov, 4, SMS_TIMEOUT, submit_tpdu_resp_cb, data, notify); } diff --git a/drivers/isimodem/sms.h b/drivers/isimodem/sms.h index ab29463d..49003576 100644 --- a/drivers/isimodem/sms.h +++ b/drivers/isimodem/sms.h @@ -152,6 +152,7 @@ enum sms_subblock { SMS_SB_SMS_PARAMETERS = 0x0031, SMS_COMMON_DATA = 0x80, SMS_ADDRESS = 0x82, + SMS_SB_ADDRESS = 0x0082, }; enum sms_routing_command { |