Skip to content
Snippets Groups Projects
Verified Commit 73a5cace authored by Alexey Andreyev's avatar Alexey Andreyev Committed by Alexey Minnekhanov
Browse files

temp/ofono: implement USSD indication in qmimodem driver (MR 1976)

Handle USSD QMI indication messages.
Add support for UCS2 USS Data coding scheme.
Check for User Action TLV type.

Downstream the accepted ofono patch as temporary solution.
parent eceef705
Branches
No related tags found
No related merge requests found
Pipeline #202970 passed
From ce86a6c207222fd5c42b53bc6c4a39c545f543de Mon Sep 17 00:00:00 2001
From: Alexey Andreyev <aa13q@ya.ru>
Date: Fri, 19 Feb 2021 15:47:42 +0300
Subject: qmimodem: Add USSD indication support
Handle USSD QMI indication messages.
Add support for UCS2 USS Data coding scheme.
Check for User Action TLV type.
---
drivers/qmimodem/ussd.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/drivers/qmimodem/ussd.c b/drivers/qmimodem/ussd.c
index 1e613032..e5399b9d 100644
--- a/drivers/qmimodem/ussd.c
+++ b/drivers/qmimodem/ussd.c
@@ -67,6 +67,12 @@ static int convert_qmi_dcs_gsm_dcs(int qmi_dcs, int *gsm_dcs)
case QMI_USSD_DCS_ASCII:
*gsm_dcs = USSD_DCS_8BIT;
break;
+ case QMI_USSD_DCS_8BIT:
+ *gsm_dcs = USSD_DCS_8BIT;
+ break;
+ case QMI_USSD_DCS_UCS2:
+ *gsm_dcs = USSD_DCS_UCS2;
+ break;
default:
return 1;
}
@@ -74,6 +80,41 @@ static int convert_qmi_dcs_gsm_dcs(int qmi_dcs, int *gsm_dcs)
return 0;
}
+static void async_ind(struct qmi_result *result, void *user_data)
+{
+ struct ofono_ussd *ussd = user_data;
+ const struct qmi_ussd_data *qmi_ussd;
+ uint8_t user_action_required = 0;
+ int notify_status = OFONO_USSD_STATUS_NOTIFY;
+ uint16_t len;
+ int gsm_dcs;
+
+ DBG("");
+
+ qmi_ussd = qmi_result_get(result, QMI_VOICE_PARAM_USSD_IND_DATA, &len);
+ if (qmi_ussd == NULL)
+ return;
+
+ if (validate_ussd_data(qmi_ussd, len))
+ goto error;
+
+ if (convert_qmi_dcs_gsm_dcs(qmi_ussd->dcs, &gsm_dcs))
+ goto error;
+
+ if (qmi_result_get_uint8(result, QMI_VOICE_PARAM_USSD_IND_USER_ACTION,
+ &user_action_required)) {
+ if (user_action_required == QMI_USSD_USER_ACTION_REQUIRED)
+ notify_status = OFONO_USSD_STATUS_ACTION_REQUIRED;
+ }
+
+ ofono_ussd_notify(ussd, notify_status, gsm_dcs,
+ qmi_ussd->data, qmi_ussd->length);
+ return;
+
+error:
+ ofono_ussd_notify(ussd, OFONO_USSD_STATUS_TERMINATED, 0, NULL, 0);
+}
+
static void async_orig_ind(struct qmi_result *result, void *user_data)
{
struct ofono_ussd *ussd = user_data;
@@ -141,6 +182,9 @@ static void create_voice_cb(struct qmi_service *service, void *user_data)
data->voice = qmi_service_ref(service);
+ qmi_service_register(data->voice, QMI_VOICE_USSD_IND,
+ async_ind, ussd, NULL);
+
qmi_service_register(data->voice, QMI_VOICE_ASYNC_ORIG_USSD,
async_orig_ind, ussd, NULL);
--
cgit 1.2.3-1.el7
......@@ -3,7 +3,7 @@
pkgname=ofono
pkgver=9999
_pkgver=1.31
pkgrel=8
pkgrel=9
pkgdesc="Infrastructure for building mobile telephony (GSM/UMTS) applications [$_pkgver]"
url="https://01.org/ofono"
arch="armhf armv7 aarch64"
......@@ -25,6 +25,7 @@ source="https://www.kernel.org/pub/linux/network/ofono/ofono-$_pkgver.tar.xz
0005-qmimodem-implement-voice-calls.patch
0006-qmimodem-Fix-dialing-to-an-international-number.patch
0007-qmimodem-implement-dtmf.patch
0008-qmimodem-add-ussd-indication-support.patch
$pkgname.initd
$pkgname-auto-enable.initd
udev.rules
......@@ -85,6 +86,7 @@ ad25dcc34bf710287c9a03fdcd61f2f2fd675691f55be30dbe7c8421753aa857906dd23b2d4f7f75
72d0f63c091d4b1fc5b405ec67e73f377887ee3dffd4791272122462bf4feaeec207de9b177632756e1f973a7bf7bde119c6ec6556568a6307287ba43998b7a0 0005-qmimodem-implement-voice-calls.patch
6dd4d5f829d66b5b9a13aed6d5a991a2cd3dee6db04a122bcc1d87d0eddc37637468bec58f9fe6027c89eac3b14411201d324150e6be4b103622340da6a599fe 0006-qmimodem-Fix-dialing-to-an-international-number.patch
7d28bcec2dc8b13003c05d74202aced9c86efe35447fbcb0f444fb04447fab8e80a47fa20a662aa0148d42c25333b3261e3cd570991deee9cdfd76effd24af7e 0007-qmimodem-implement-dtmf.patch
6b3acab4124d029bf719e08cc783d46514501066d5ee487e88b37dfd4f7e2552f1f56ff6f80362ef0462c51f3799bba3d451b447e615e51df9860a24324b11f0 0008-qmimodem-add-ussd-indication-support.patch
bc76c404a7de626210dbd78f659444567a95b6e6d8db0661d5d67ea361e2941ad55242d43a5957995817145d4d5323476fbc42d1830b20608a5e90a7a4ba1194 ofono.initd
54a2cb55547e77c22a98c4260f2e94d9327d5d98e1b604f9413a7380ae4489247a97561cc2ab39476bc6e6fb5e673dca8053218b18ac4626addb51ecb29f0167 ofono-auto-enable.initd
28ba914e171ba7f0dcc4be24f2bd078a8db6b2c0fdbb29845b2702f00f9cf64d0e9ecb277e5d7f8113ef450eb9044e542e7093129ecd67bef1c9e9328756391c udev.rules
......
  • Administrator @root

    mentioned in commit bf5780b3

    By Alexey Andreyev on 2021-03-22T23:55:23

    · Imported

    mentioned in commit bf5780b3

    By Alexey Andreyev on 2021-03-22T23:55:23

    Edited by Ghost User
    Toggle commit list
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment