summaryrefslogtreecommitdiffstats
path: root/src/common.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-10-19 12:09:30 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-10-19 12:09:30 -0500
commitb75a5574f5a5652880ab2fe4760c2f3272815496 (patch)
tree6ef09bac42f1b1f108734c888ab10c26dc5903a1 /src/common.c
parent96c04a744b248347ff4bbbfa4a52bf88ea14545c (diff)
downloadofono-b75a5574f5a5652880ab2fe4760c2f3272815496.tar.bz2
common: Fix mmi code to bearer class mappings
MMI services 22, 21, 20 and 26 were mapped incorrectly. See the comment in the code for more information and the thread 'Call Barring and MMI Supplementary Service codes' on the oFono mailing list.
Diffstat (limited to 'src/common.c')
-rw-r--r--src/common.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/common.c b/src/common.c
index d19c7f17..b5b9a6f2 100644
--- a/src/common.c
+++ b/src/common.c
@@ -336,27 +336,39 @@ int mmi_service_code_to_bearer_class(int code)
case 19:
cls = BEARER_CLASS_VOICE | BEARER_CLASS_FAX;
break;
-
- /* 22.030: 7-11 */
- /* 22.004 only defines BS 7 (Data Sync) & BS 8 (Data Async) */
+ /*
+ * 22.030: 7-11
+ * 22.004 only defines BS 7 (Data Sync) & BS 8 (Data Async)
+ * and PAD and Packet bearer services are deprecated. Still,
+ * AT modems rely on these to differentiate between sending
+ * a 'All Sync' or 'All Data Sync' message types. In theory
+ * both message types cover the same bearer services, but we
+ * must still send these for conformance reasons.
+ */
case 20:
- cls = BEARER_CLASS_DATA_ASYNC | BEARER_CLASS_DATA_SYNC;
+ cls = BEARER_CLASS_DATA_ASYNC | BEARER_CLASS_DATA_SYNC |
+ BEARER_CLASS_PAD | BEARER_CLASS_PACKET;
break;
/* According to 22.030: All Async (7) */
case 21:
+ cls = BEARER_CLASS_DATA_ASYNC | BEARER_CLASS_PAD;
+ break;
/* According to 22.030: All Data Async (7)*/
case 25:
cls = BEARER_CLASS_DATA_ASYNC;
break;
/* According to 22.030: All Sync (8) */
case 22:
+ cls = BEARER_CLASS_DATA_SYNC | BEARER_CLASS_PACKET;
+ break;
/* According to 22.030: All Data Sync (8) */
case 24:
cls = BEARER_CLASS_DATA_SYNC;
break;
/* According to 22.030: Telephony & All Sync services (1, 8) */
case 26:
- cls = BEARER_CLASS_VOICE | BEARER_CLASS_DATA_SYNC;
+ cls = BEARER_CLASS_VOICE | BEARER_CLASS_DATA_SYNC |
+ BEARER_CLASS_PACKET;
break;
default:
break;