Merge lp:~phablet-team/ofono/midori-support into lp:~phablet-team/ofono/ubuntu

Proposed by Alfonso Sanchez-Beato
Status: Merged
Approved by: Jim Hodapp
Approved revision: 6919
Merged at revision: 6916
Proposed branch: lp:~phablet-team/ofono/midori-support
Merge into: lp:~phablet-team/ofono/ubuntu
Diff against target: 3276 lines (+1954/-264)
48 files modified
Makefile.am (+14/-1)
debian/changelog (+17/-0)
drivers/mtk2modem/gprs.c (+88/-0)
drivers/mtk2modem/mtk2_constants.h (+148/-0)
drivers/mtk2modem/mtk2modem.c (+55/-0)
drivers/mtk2modem/mtk2modem.h (+28/-0)
drivers/mtk2modem/mtk2util.c (+275/-0)
drivers/mtk2modem/mtk2util.h (+39/-0)
drivers/mtk2modem/voicecall.c (+149/-0)
drivers/mtkmodem/mtkunsol.c (+17/-7)
drivers/qcommsimmodem/gprs.c (+118/-0)
drivers/qcommsimmodem/qcom_msim_constants.h (+2/-1)
drivers/qcommsimmodem/qcom_msim_modem.c (+2/-0)
drivers/qcommsimmodem/qcom_msim_modem.h (+3/-0)
drivers/rilmodem/call-barring.c (+1/-0)
drivers/rilmodem/call-forwarding.c (+1/-0)
drivers/rilmodem/call-settings.c (+1/-0)
drivers/rilmodem/call-volume.c (+1/-0)
drivers/rilmodem/devinfo.c (+1/-0)
drivers/rilmodem/gprs.c (+139/-53)
drivers/rilmodem/gprs.h (+2/-0)
drivers/rilmodem/network-registration.c (+2/-0)
drivers/rilmodem/phonebook.c (+1/-0)
drivers/rilmodem/radio-settings.c (+56/-4)
drivers/rilmodem/rilmodem.h (+0/-2)
drivers/rilmodem/sim.c (+3/-1)
drivers/rilmodem/sms.c (+1/-0)
drivers/rilmodem/ussd.c (+6/-2)
drivers/rilmodem/vendor.h (+2/-1)
drivers/rilmodem/voicecall.c (+1/-0)
gril/grilreply.c (+106/-5)
gril/grilreply.h (+12/-0)
gril/grilrequest.c (+34/-13)
gril/grilunsol.c (+11/-1)
gril/grilutil.c (+107/-1)
gril/grilutil.h (+2/-0)
gril/ril_constants.h (+70/-0)
include/modem.h (+0/-5)
plugins/infineon.c (+2/-1)
plugins/mtk.c (+1/-6)
plugins/mtk2.c (+93/-0)
plugins/qcom-msim.c (+16/-1)
plugins/ril.c (+291/-139)
plugins/ril.h (+8/-1)
plugins/rildev.c (+9/-2)
src/gprs.c (+10/-3)
src/modem.c (+0/-8)
src/voicecall.c (+9/-6)
To merge this branch: bzr merge lp:~phablet-team/ofono/midori-support
Reviewer Review Type Date Requested Status
Jim Hodapp (community) Approve
Konrad Zapałowicz (community) code Needs Information
Review via email: mp+298542@code.launchpad.net

Description of the change

[ Ratchanan Srirattanamet ]
* qcommsimmodem: fix slot selection for cellular data
[ Alfonso Sanchez-Beato ]
* gril: update requests to M
* ril: refactor management of radio power states
* mtk2: new driver to support midori
* Fix cellular data switch in turbo (LP: #1592258)
* Fix ofono re-starts on boot in turbo (LP: #1580908)
[ Rex Tsai ]
voicecall: add emergency numbers required for China Market

To post a comment you must log in.
Revision history for this message
Konrad Zapałowicz (kzapalowicz) wrote :

LGTM however I have a few uncertainties - check the questions in comments.

review: Needs Information (code)
6917. By Alfonso Sanchez-Beato

Create radio settings atom in pre-sim state so we can set FastDormancy and
enter low power state even when there is no SIM.

Revision history for this message
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote :

@Konrad, thanks for the comments, I have answered them below. Note however that for historical reasons in ofono we do usually the reviews in our github repo, and import the code to bzr when merged there. For this branch, we had PR https://github.com/rilmodem/ofono/pull/240 . Usually here we just make sure that changelog and other contents in debian/ (which are not in github) are good.

6918. By Alfonso Sanchez-Beato

Fix turbo regressions

6919. By Alfonso Sanchez-Beato

[ Rex Tsai ]
voicecall: add emergency numbers required for China Market

Revision history for this message
Jim Hodapp (jhodapp) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Makefile.am'
--- Makefile.am 2016-03-14 08:16:40 +0000
+++ Makefile.am 2016-07-01 17:24:58 +0000
@@ -135,6 +135,9 @@
135builtin_modules += mtk135builtin_modules += mtk
136builtin_sources += plugins/mtk.c136builtin_sources += plugins/mtk.c
137137
138builtin_modules += mtk2
139builtin_sources += plugins/mtk2.c
140
138builtin_modules += infineon141builtin_modules += infineon
139builtin_sources += plugins/infineon.c142builtin_sources += plugins/infineon.c
140143
@@ -160,6 +163,15 @@
160 drivers/mtkmodem/radio-settings.c \163 drivers/mtkmodem/radio-settings.c \
161 drivers/mtkmodem/mtksettings.c164 drivers/mtkmodem/mtksettings.c
162165
166builtin_modules += mtk2modem
167builtin_sources += drivers/mtk2modem/mtk2modem.h \
168 drivers/mtk2modem/mtk2modem.c \
169 drivers/mtk2modem/mtk2_constants.h \
170 drivers/mtk2modem/mtk2util.h \
171 drivers/mtk2modem/mtk2util.c \
172 drivers/mtk2modem/voicecall.c \
173 drivers/mtk2modem/gprs.c
174
163builtin_modules += rilmodem175builtin_modules += rilmodem
164builtin_sources += drivers/rilmodem/rilmodem.h \176builtin_sources += drivers/rilmodem/rilmodem.h \
165 drivers/rilmodem/vendor.h \177 drivers/rilmodem/vendor.h \
@@ -183,7 +195,8 @@
183195
184builtin_modules += qcommsimmodem196builtin_modules += qcommsimmodem
185builtin_sources += drivers/qcommsimmodem/qcom_msim_modem.c \197builtin_sources += drivers/qcommsimmodem/qcom_msim_modem.c \
186 drivers/qcommsimmodem/radio-settings.c198 drivers/qcommsimmodem/radio-settings.c \
199 drivers/qcommsimmodem/gprs.c
187endif200endif
188201
189if ISIMODEM202if ISIMODEM
190203
=== modified file 'debian/changelog'
--- debian/changelog 2016-04-13 14:43:54 +0000
+++ debian/changelog 2016-07-01 17:24:58 +0000
@@ -1,3 +1,20 @@
1ofono (1.17.bzr6919+16.10.20160701.1-0ubuntu1) UNRELEASED; urgency=medium
2
3 [ Ratchanan Srirattanamet ]
4 * qcommsimmodem: fix slot selection for cellular data
5
6 [ Alfonso Sanchez-Beato ]
7 * gril: update requests to M
8 * ril: refactor management of radio power states
9 * mtk2: new driver to support midori
10 * Fix cellular data switch in turbo (LP: #1592258)
11 * Fix ofono re-starts on boot in turbo (LP: #1580908)
12
13 [ Rex Tsai ]
14 * voicecall: add emergency numbers required for China Market
15
16 -- Alfonso Sanchez-Beato (email Canonical) <alfonso.sanchez-beato@canonical.com> Fri, 01 Jul 2016 17:17:05 +0200
17
1ofono (1.17.bzr6914+16.04.20160413.1-0ubuntu1) xenial; urgency=medium18ofono (1.17.bzr6914+16.04.20160413.1-0ubuntu1) xenial; urgency=medium
219
3 [ Alfonso Sanchez-Beato (email Canonical) ]20 [ Alfonso Sanchez-Beato (email Canonical) ]
421
=== added directory 'drivers/mtk2modem'
=== added file 'drivers/mtk2modem/gprs.c'
--- drivers/mtk2modem/gprs.c 1970-01-01 00:00:00 +0000
+++ drivers/mtk2modem/gprs.c 2016-07-01 17:24:58 +0000
@@ -0,0 +1,88 @@
1/*
2 *
3 * oFono - Open Source Telephony
4 *
5 * Copyright (C) 2016 Canonical Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21
22#ifdef HAVE_CONFIG_H
23#include <config.h>
24#endif
25
26#define _GNU_SOURCE
27#include <errno.h>
28
29#include <glib.h>
30
31#include <ofono/modem.h>
32#include <ofono/gprs.h>
33
34#include "common.h"
35
36#include "mtk2util.h"
37#include "mtk2modem.h"
38#include "mtk2_constants.h"
39#include "drivers/mtkmodem/mtkunsol.h"
40#include "drivers/rilmodem/rilutil.h"
41#include "drivers/rilmodem/gprs.h"
42
43/*
44 * This module is the ofono_gprs_driver implementation for mtk2modem. Most of
45 * the implementation can be found in the rilmodem gprs atom. The main reason
46 * for creating a new atom is the need to handle specific MTK requests.
47 */
48
49static int mtk2_gprs_probe(struct ofono_gprs *gprs,
50 unsigned int vendor, void *data)
51{
52 struct ril_gprs_driver_data *driver_data = data;
53 struct ril_gprs_data *gd;
54
55 gd = g_try_new0(struct ril_gprs_data, 1);
56 if (gd == NULL)
57 return -ENOMEM;
58
59 ril_gprs_start(driver_data, gprs, gd);
60
61 /*
62 * In MTK the event emitted when the gprs state changes is different
63 * from the one in AOSP ril. Overwrite the one set in parent.
64 */
65 gd->state_changed_unsol =
66 MTK2_RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED;
67
68 return 0;
69}
70
71static struct ofono_gprs_driver driver = {
72 .name = MTK2MODEM,
73 .probe = mtk2_gprs_probe,
74 .remove = ril_gprs_remove,
75 .set_attached = ril_gprs_set_attached,
76 .attached_status = ril_gprs_registration_status,
77 .set_ia_apn = ril_gprs_set_ia_apn,
78};
79
80void mtk2_gprs_init(void)
81{
82 ofono_gprs_driver_register(&driver);
83}
84
85void mtk2_gprs_exit(void)
86{
87 ofono_gprs_driver_unregister(&driver);
88}
089
=== added file 'drivers/mtk2modem/mtk2_constants.h'
--- drivers/mtk2modem/mtk2_constants.h 1970-01-01 00:00:00 +0000
+++ drivers/mtk2modem/mtk2_constants.h 2016-07-01 17:24:58 +0000
@@ -0,0 +1,148 @@
1/*
2 *
3 * RIL constants for MTK modem
4 *
5 * Copyright (C) 2016 Canonical Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21
22#ifndef MTK2_CONSTANTS_H
23#define MTK2_CONSTANTS_H
24
25/* RIL Request Messages */
26#define MTK2_RIL_REQUEST_MODEM_POWEROFF 2010
27#define MTK2_RIL_REQUEST_DUAL_SIM_MODE_SWITCH 2011
28#define MTK2_RIL_REQUEST_SET_GPRS_CONNECT_TYPE 2015
29#define MTK2_RIL_REQUEST_SET_GPRS_TRANSFER_TYPE 2016
30#define MTK2_RIL_REQUEST_MODEM_POWERON 2028
31#define MTK2_RIL_REQUEST_SET_CALL_INDICATION 2086
32#define MTK2_RIL_REQUEST_GET_PHONE_CAPABILITY 2030
33#define MTK2_RIL_REQUEST_SET_PHONE_CAPABILITY 2031
34#define MTK2_RIL_REQUEST_SET_TRM 2043
35#define MTK2_RIL_REQUEST_SET_FD_MODE 2061
36#define MTK2_RIL_REQUEST_RESUME_REGISTRATION 2065
37#define MTK2_RIL_REQUEST_STORE_MODEM_TYPE 2066
38#define MTK2_RIL_REQUEST_QUERY_MODEM_TYPE 2067
39#define MTK2_RIL_REQUEST_SET_DATA_ON_TO_MD 2111
40
41/* RIL Unsolicited Messages */
42#define MTK2_RIL_UNSOL_MTK_BASE 3000
43
44#define MTK2_RIL_UNSOL_NEIGHBORING_CELL_INFO (MTK2_RIL_UNSOL_MTK_BASE + 0)
45#define MTK2_RIL_UNSOL_NETWORK_INFO (MTK2_RIL_UNSOL_MTK_BASE + 1)
46#define MTK2_RIL_UNSOL_PHB_READY_NOTIFICATION (MTK2_RIL_UNSOL_MTK_BASE + 2)
47#define MTK2_RIL_UNSOL_SIM_INSERTED_STATUS (MTK2_RIL_UNSOL_MTK_BASE + 3)
48#define MTK2_RIL_UNSOL_RADIO_TEMPORARILY_UNAVAILABLE (MTK2_RIL_UNSOL_MTK_BASE + 4)
49#define MTK2_RIL_UNSOL_ME_SMS_STORAGE_FULL (MTK2_RIL_UNSOL_MTK_BASE + 5)
50#define MTK2_RIL_UNSOL_SMS_READY_NOTIFICATION (MTK2_RIL_UNSOL_MTK_BASE + 6)
51#define MTK2_RIL_UNSOL_SCRI_RESULT (MTK2_RIL_UNSOL_MTK_BASE + 7)
52#define MTK2_RIL_UNSOL_SIM_MISSING (MTK2_RIL_UNSOL_MTK_BASE + 8)
53#define MTK2_RIL_UNSOL_GPRS_DETACH (MTK2_RIL_UNSOL_MTK_BASE + 9)
54#define MTK2_RIL_UNSOL_ATCI_RESPONSE (MTK2_RIL_UNSOL_MTK_BASE + 10)
55#define MTK2_RIL_UNSOL_SIM_RECOVERY (MTK2_RIL_UNSOL_MTK_BASE + 11)
56#define MTK2_RIL_UNSOL_VIRTUAL_SIM_ON (MTK2_RIL_UNSOL_MTK_BASE + 12)
57#define MTK2_RIL_UNSOL_VIRTUAL_SIM_OFF (MTK2_RIL_UNSOL_MTK_BASE + 13)
58#define MTK2_RIL_UNSOL_INVALID_SIM (MTK2_RIL_UNSOL_MTK_BASE + 14)
59#define MTK2_RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 15)
60#define MTK2_RIL_UNSOL_RESPONSE_ACMT (MTK2_RIL_UNSOL_MTK_BASE + 16)
61#define MTK2_RIL_UNSOL_EF_CSP_PLMN_MODE_BIT (MTK2_RIL_UNSOL_MTK_BASE + 17)
62#define MTK2_RIL_UNSOL_IMEI_LOCK (MTK2_RIL_UNSOL_MTK_BASE + 18)
63#define MTK2_RIL_UNSOL_RESPONSE_MMRR_STATUS_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 19)
64#define MTK2_RIL_UNSOL_SIM_PLUG_OUT (MTK2_RIL_UNSOL_MTK_BASE + 20)
65#define MTK2_RIL_UNSOL_SIM_PLUG_IN (MTK2_RIL_UNSOL_MTK_BASE + 21)
66#define MTK2_RIL_UNSOL_RESPONSE_ETWS_NOTIFICATION (MTK2_RIL_UNSOL_MTK_BASE + 22)
67#define MTK2_RIL_UNSOL_RESPONSE_PLMN_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 23)
68#define MTK2_RIL_UNSOL_RESPONSE_REGISTRATION_SUSPENDED (MTK2_RIL_UNSOL_MTK_BASE + 24)
69#define MTK2_RIL_UNSOL_STK_EVDL_CALL (MTK2_RIL_UNSOL_MTK_BASE + 25)
70#define MTK2_RIL_UNSOL_DATA_PACKETS_FLUSH (MTK2_RIL_UNSOL_MTK_BASE + 26)
71#define MTK2_RIL_UNSOL_FEMTOCELL_INFO (MTK2_RIL_UNSOL_MTK_BASE + 27)
72#define MTK2_RIL_UNSOL_STK_SETUP_MENU_RESET (MTK2_RIL_UNSOL_MTK_BASE + 28)
73#define MTK2_RIL_UNSOL_APPLICATION_SESSION_ID_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 29)
74#define MTK2_RIL_UNSOL_ECONF_SRVCC_INDICATION (MTK2_RIL_UNSOL_MTK_BASE + 30)
75#define MTK2_RIL_UNSOL_IMS_ENABLE_DONE (MTK2_RIL_UNSOL_MTK_BASE + 31)
76#define MTK2_RIL_UNSOL_IMS_DISABLE_DONE (MTK2_RIL_UNSOL_MTK_BASE + 32)
77#define MTK2_RIL_UNSOL_IMS_REGISTRATION_INFO (MTK2_RIL_UNSOL_MTK_BASE + 33)
78#define MTK2_RIL_UNSOL_DEDICATE_BEARER_ACTIVATED (MTK2_RIL_UNSOL_MTK_BASE + 34)
79#define MTK2_RIL_UNSOL_DEDICATE_BEARER_MODIFIED (MTK2_RIL_UNSOL_MTK_BASE + 35)
80#define MTK2_RIL_UNSOL_DEDICATE_BEARER_DEACTIVATED (MTK2_RIL_UNSOL_MTK_BASE + 36)
81#define MTK2_RIL_UNSOL_RAC_UPDATE (MTK2_RIL_UNSOL_MTK_BASE + 37)
82#define MTK2_RIL_UNSOL_ECONF_RESULT_INDICATION (MTK2_RIL_UNSOL_MTK_BASE + 38)
83#define MTK2_RIL_UNSOL_MELOCK_NOTIFICATION (MTK2_RIL_UNSOL_MTK_BASE + 39)
84#define MTK2_RIL_UNSOL_CALL_FORWARDING (MTK2_RIL_UNSOL_MTK_BASE + 40)
85#define MTK2_RIL_UNSOL_CRSS_NOTIFICATION (MTK2_RIL_UNSOL_MTK_BASE + 41)
86#define MTK2_RIL_UNSOL_INCOMING_CALL_INDICATION (MTK2_RIL_UNSOL_MTK_BASE + 42)
87#define MTK2_RIL_UNSOL_CIPHER_INDICATION (MTK2_RIL_UNSOL_MTK_BASE + 43)
88#define MTK2_RIL_UNSOL_CNAP (MTK2_RIL_UNSOL_MTK_BASE + 44)
89#define MTK2_RIL_UNSOL_SIM_COMMON_SLOT_NO_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 45)
90#define MTK2_RIL_UNSOL_DATA_ALLOWED (MTK2_RIL_UNSOL_MTK_BASE + 46)
91#define MTK2_RIL_UNSOL_STK_CALL_CTRL (MTK2_RIL_UNSOL_MTK_BASE + 47)
92#define MTK2_RIL_UNSOL_VOLTE_EPS_NETWORK_FEATURE_SUPPORT (MTK2_RIL_UNSOL_MTK_BASE + 48)
93#define MTK2_RIL_UNSOL_CALL_INFO_INDICATION (MTK2_RIL_UNSOL_MTK_BASE + 49)
94#define MTK2_RIL_UNSOL_VOLTE_EPS_NETWORK_FEATURE_INFO (MTK2_RIL_UNSOL_MTK_BASE + 50)
95#define MTK2_RIL_UNSOL_SRVCC_HANDOVER_INFO_INDICATION (MTK2_RIL_UNSOL_MTK_BASE + 51)
96#define MTK2_RIL_UNSOL_SPEECH_CODEC_INFO (MTK2_RIL_UNSOL_MTK_BASE + 52)
97#define MTK2_RIL_UNSOL_MD_STATE_CHANGE (MTK2_RIL_UNSOL_MTK_BASE + 53)
98#define MTK2_RIL_UNSOL_REMOVE_RESTRICT_EUTRAN (MTK2_RIL_UNSOL_MTK_BASE + 54)
99#define MTK2_RIL_UNSOL_MO_DATA_BARRING_INFO (MTK2_RIL_UNSOL_MTK_BASE + 55)
100#define MTK2_RIL_UNSOL_SSAC_BARRING_INFO (MTK2_RIL_UNSOL_MTK_BASE + 56)
101#define MTK2_RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR (MTK2_RIL_UNSOL_MTK_BASE + 57)
102#define MTK2_RIL_UNSOL_ABNORMAL_EVENT (MTK2_RIL_UNSOL_MTK_BASE + 58)
103#define MTK2_RIL_UNSOL_EMERGENCY_BEARER_SUPPORT_NOTIFY (MTK2_RIL_UNSOL_MTK_BASE + 59)
104#define MTK2_RIL_UNSOL_INTER_3GPP_IRAT_STATE_CHANGE (MTK2_RIL_UNSOL_MTK_BASE + 60)
105#define MTK2_RIL_UNSOL_LTE_BG_SEARCH_STATUS (MTK2_RIL_UNSOL_MTK_BASE + 61)
106#define MTK2_RIL_UNSOL_GMSS_RAT_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 62)
107#define MTK2_RIL_UNSOL_CDMA_CARD_TYPE (MTK2_RIL_UNSOL_MTK_BASE + 63)
108#define MTK2_RIL_UNSOL_IMS_ENABLE_START (MTK2_RIL_UNSOL_MTK_BASE + 64)
109#define MTK2_RIL_UNSOL_IMS_DISABLE_START (MTK2_RIL_UNSOL_MTK_BASE + 65)
110#define MTK2_RIL_UNSOL_IMSI_REFRESH_DONE (MTK2_RIL_UNSOL_MTK_BASE + 66)
111#define MTK2_RIL_UNSOL_EUSIM_READY (MTK2_RIL_UNSOL_MTK_BASE + 67)
112#define MTK2_RIL_UNSOL_STK_BIP_PROACTIVE_COMMAND (MTK2_RIL_UNSOL_MTK_BASE + 68)
113#define MTK2_RIL_UNSOL_WORLD_MODE_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 69)
114#define MTK2_RIL_UNSOL_VT_STATUS_INFO (MTK2_RIL_UNSOL_MTK_BASE + 70)
115#define MTK2_RIL_UNSOL_VT_RING_INFO (MTK2_RIL_UNSOL_MTK_BASE + 71)
116#define MTK2_RIL_UNSOL_VSIM_OPERATION_INDICATION (MTK2_RIL_UNSOL_MTK_BASE + 72)
117#define MTK2_RIL_UNSOL_SET_ATTACH_APN (MTK2_RIL_UNSOL_MTK_BASE + 73)
118#define MTK2_RIL_UNSOL_MAL_AT_INFO (MTK2_RIL_UNSOL_MTK_BASE + 74)
119#define MTK2_RIL_UNSOL_MAIN_SIM_INFO (MTK2_RIL_UNSOL_MTK_BASE + 75)
120#define MTK2_RIL_UNSOL_TRAY_PLUG_IN (MTK2_RIL_UNSOL_MTK_BASE + 76)
121#define MTK2_RIL_UNSOL_CALLMOD_CHANGE_INDICATOR (MTK2_RIL_UNSOL_MTK_BASE + 77)
122#define MTK2_RIL_UNSOL_VIDEO_CAPABILITY_INDICATOR (MTK2_RIL_UNSOL_MTK_BASE + 78)
123#define MTK2_RIL_UNSOL_LTE_ACCESS_STRATUM_STATE_CHANGE (MTK2_RIL_UNSOL_MTK_BASE + 79)
124#define MTK2_RIL_UNSOL_SETUP_DATA_CALL_RESPONSE (MTK2_RIL_UNSOL_MTK_BASE + 80)
125#define MTK2_RIL_UNSOL_ON_USSI (MTK2_RIL_UNSOL_MTK_BASE + 81)
126#define MTK2_RIL_UNSOL_CDMA_CALL_ACCEPTED (MTK2_RIL_UNSOL_MTK_BASE + 82)
127#define MTK2_RIL_UNSOL_UTK_SESSION_END (MTK2_RIL_UNSOL_MTK_BASE + 83)
128#define MTK2_RIL_UNSOL_UTK_PROACTIVE_COMMAND (MTK2_RIL_UNSOL_MTK_BASE + 84)
129#define MTK2_RIL_UNSOL_UTK_EVENT_NOTIFY (MTK2_RIL_UNSOL_MTK_BASE + 85)
130#define MTK2_RIL_UNSOL_VIA_GPS_EVENT (MTK2_RIL_UNSOL_MTK_BASE + 86)
131#define MTK2_RIL_UNSOL_VIA_NETWORK_TYPE_CHANGE (MTK2_RIL_UNSOL_MTK_BASE + 87)
132#define MTK2_RIL_UNSOL_CDMA_PLMN_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 88)
133#define MTK2_RIL_UNSOL_VIA_INVALID_SIM_DETECTED (MTK2_RIL_UNSOL_MTK_BASE + 89)
134#define MTK2_RIL_UNSOL_ENG_MODE_NETWORK_INFO (MTK2_RIL_UNSOL_MTK_BASE + 90)
135#define MTK2_RIL_UNSOL_RESPONSE_DATA_NETWORK_TYPE_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 91)
136#define MTK2_RIL_UNSOL_LTE_EARFCN_INFO (MTK2_RIL_UNSOL_MTK_BASE + 92)
137#define MTK2_RIL_UNSOL_CDMA_IMSI_READY (MTK2_RIL_UNSOL_MTK_BASE + 93)
138#define MTK2_RIL_UNSOL_CDMA_SIGNAL_FADE (MTK2_RIL_UNSOL_MTK_BASE + 94)
139#define MTK2_RIL_UNSOL_CDMA_TONE_SIGNALS (MTK2_RIL_UNSOL_MTK_BASE + 95)
140#define MTK2_RIL_UNSOL_NETWORK_EXIST (MTK2_RIL_UNSOL_MTK_BASE + 96)
141#define MTK2_RIL_UNSOL_MODULATION_INFO (MTK2_RIL_UNSOL_MTK_BASE + 97)
142#define MTK2_RIL_UNSOL_NETWORK_EVENT (MTK2_RIL_UNSOL_MTK_BASE + 98)
143#define MTK2_RIL_UNSOL_MBIM_RESPONSE (MTK2_RIL_UNSOL_MTK_BASE + 99)
144#define MTK2_RIL_UNSOL_MAL_DATA_CALL_LIST_CHANGED (MTK2_RIL_UNSOL_MTK_BASE + 100)
145#define MTK2_RIL_UNSOL_EMBMS_AT_INFO (MTK2_RIL_UNSOL_MTK_BASE + 101)
146#define MTK2_RIL_UNSOL_RADIO_CAPABILITY_SWITCH_START (MTK2_RIL_UNSOL_MTK_BASE + 102)
147
148#endif /* MTK2_CONSTANTS_H */
0149
=== added file 'drivers/mtk2modem/mtk2modem.c'
--- drivers/mtk2modem/mtk2modem.c 1970-01-01 00:00:00 +0000
+++ drivers/mtk2modem/mtk2modem.c 2016-07-01 17:24:58 +0000
@@ -0,0 +1,55 @@
1/*
2 *
3 * oFono - Open Source Telephony - RIL Modem Support
4 *
5 * Copyright (C) 2016 Canonical, Ltd. All rights reserved.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21
22#ifdef HAVE_CONFIG_H
23#include <config.h>
24#endif
25
26#include <glib.h>
27#include <gril.h>
28
29#define OFONO_API_SUBJECT_TO_CHANGE
30#include <ofono/plugin.h>
31#include <ofono/log.h>
32#include <ofono/types.h>
33
34#include "mtk2modem.h"
35
36static int mtk2modem_init(void)
37{
38 DBG("");
39
40 mtk2_voicecall_init();
41 mtk2_gprs_init();
42
43 return 0;
44}
45
46static void mtk2modem_exit(void)
47{
48 DBG("");
49
50 mtk2_voicecall_exit();
51 mtk2_gprs_exit();
52}
53
54OFONO_PLUGIN_DEFINE(mtk2modem, "MTK2 modem driver", VERSION,
55 OFONO_PLUGIN_PRIORITY_DEFAULT, mtk2modem_init, mtk2modem_exit)
056
=== added file 'drivers/mtk2modem/mtk2modem.h'
--- drivers/mtk2modem/mtk2modem.h 1970-01-01 00:00:00 +0000
+++ drivers/mtk2modem/mtk2modem.h 2016-07-01 17:24:58 +0000
@@ -0,0 +1,28 @@
1/*
2 *
3 * oFono - Open Source Telephony - RIL Modem Support
4 *
5 * Copyright (C) 2016 Canonical Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21
22#define MTK2MODEM "mtk2modem"
23
24extern void mtk2_voicecall_init(void);
25extern void mtk2_voicecall_exit(void);
26
27extern void mtk2_gprs_init(void);
28extern void mtk2_gprs_exit(void);
029
=== added file 'drivers/mtk2modem/mtk2util.c'
--- drivers/mtk2modem/mtk2util.c 1970-01-01 00:00:00 +0000
+++ drivers/mtk2modem/mtk2util.c 2016-07-01 17:24:58 +0000
@@ -0,0 +1,275 @@
1/*
2 *
3 * MTK2 driver for ofono/rilmodem
4 *
5 * Copyright (C) 2016 Canonical Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21
22#include <stddef.h>
23
24#include "mtk2util.h"
25#include "mtk2_constants.h"
26
27const char *mtk2_request_id_to_string(int req)
28{
29 switch (req) {
30 case MTK2_RIL_REQUEST_MODEM_POWEROFF:
31 return "MTK2_RIL_REQUEST_MODEM_POWEROFF";
32 case MTK2_RIL_REQUEST_DUAL_SIM_MODE_SWITCH:
33 return "MTK2_RIL_REQUEST_DUAL_SIM_MODE_SWITCH";
34 case MTK2_RIL_REQUEST_SET_GPRS_CONNECT_TYPE:
35 return "MTK2_RIL_REQUEST_SET_GPRS_CONNECT_TYPE";
36 case MTK2_RIL_REQUEST_SET_GPRS_TRANSFER_TYPE:
37 return "MTK2_RIL_REQUEST_SET_GPRS_TRANSFER_TYPE";
38 case MTK2_RIL_REQUEST_MODEM_POWERON:
39 return "MTK2_RIL_REQUEST_MODEM_POWERON";
40 case MTK2_RIL_REQUEST_SET_CALL_INDICATION:
41 return "MTK2_RIL_REQUEST_SET_CALL_INDICATION";
42 case MTK2_RIL_REQUEST_GET_PHONE_CAPABILITY:
43 return "MTK2_RIL_REQUEST_GET_PHONE_CAPABILITY";
44 case MTK2_RIL_REQUEST_SET_PHONE_CAPABILITY:
45 return "MTK2_RIL_REQUEST_SET_PHONE_CAPABILITY";
46 case MTK2_RIL_REQUEST_SET_TRM:
47 return "MTK2_RIL_REQUEST_SET_TRM";
48 case MTK2_RIL_REQUEST_SET_FD_MODE:
49 return "MTK2_RIL_REQUEST_SET_FD_MODE";
50 case MTK2_RIL_REQUEST_STORE_MODEM_TYPE:
51 return "MTK2_RIL_REQUEST_STORE_MODEM_TYPE";
52 case MTK2_RIL_REQUEST_RESUME_REGISTRATION:
53 return "MTK2_RIL_REQUEST_RESUME_REGISTRATION";
54 case MTK2_RIL_REQUEST_QUERY_MODEM_TYPE:
55 return "MTK2_RIL_REQUEST_QUERY_MODEM_TYPE";
56 case MTK2_RIL_REQUEST_SET_DATA_ON_TO_MD:
57 return "MTK2_RIL_REQUEST_SET_DATA_ON_TO_MD";
58 default:
59 return NULL;
60 }
61}
62
63const char *mtk2_unsol_request_to_string(int req)
64{
65 switch (req) {
66 case MTK2_RIL_UNSOL_NEIGHBORING_CELL_INFO:
67 return "MTK2_RIL_UNSOL_NEIGHBORING_CELL_INFO";
68 case MTK2_RIL_UNSOL_NETWORK_INFO:
69 return "MTK2_RIL_UNSOL_NETWORK_INFO";
70 case MTK2_RIL_UNSOL_PHB_READY_NOTIFICATION:
71 return "MTK2_RIL_UNSOL_PHB_READY_NOTIFICATION";
72 case MTK2_RIL_UNSOL_SIM_INSERTED_STATUS:
73 return "MTK2_RIL_UNSOL_SIM_INSERTED_STATUS";
74 case MTK2_RIL_UNSOL_RADIO_TEMPORARILY_UNAVAILABLE:
75 return "MTK2_RIL_UNSOL_RADIO_TEMPORARILY_UNAVAILABLE";
76 case MTK2_RIL_UNSOL_ME_SMS_STORAGE_FULL:
77 return "MTK2_RIL_UNSOL_ME_SMS_STORAGE_FULL";
78 case MTK2_RIL_UNSOL_SMS_READY_NOTIFICATION:
79 return "MTK2_RIL_UNSOL_SMS_READY_NOTIFICATION";
80 case MTK2_RIL_UNSOL_SCRI_RESULT:
81 return "MTK2_RIL_UNSOL_SCRI_RESULT";
82 case MTK2_RIL_UNSOL_SIM_MISSING:
83 return "MTK2_RIL_UNSOL_SIM_MISSING";
84 case MTK2_RIL_UNSOL_GPRS_DETACH:
85 return "MTK2_RIL_UNSOL_GPRS_DETACH";
86 case MTK2_RIL_UNSOL_ATCI_RESPONSE:
87 return "MTK2_RIL_UNSOL_ATCI_RESPONSE";
88 case MTK2_RIL_UNSOL_SIM_RECOVERY:
89 return "MTK2_RIL_UNSOL_SIM_RECOVERY";
90 case MTK2_RIL_UNSOL_VIRTUAL_SIM_ON:
91 return "MTK2_RIL_UNSOL_VIRTUAL_SIM_ON";
92 case MTK2_RIL_UNSOL_VIRTUAL_SIM_OFF:
93 return "MTK2_RIL_UNSOL_VIRTUAL_SIM_OFF";
94 case MTK2_RIL_UNSOL_INVALID_SIM:
95 return "MTK2_RIL_UNSOL_INVALID_SIM";
96 case MTK2_RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
97 return "MTK2_RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED";
98 case MTK2_RIL_UNSOL_RESPONSE_ACMT:
99 return "MTK2_RIL_UNSOL_RESPONSE_ACMT";
100 case MTK2_RIL_UNSOL_EF_CSP_PLMN_MODE_BIT:
101 return "MTK2_RIL_UNSOL_EF_CSP_PLMN_MODE_BIT";
102 case MTK2_RIL_UNSOL_IMEI_LOCK:
103 return "MTK2_RIL_UNSOL_IMEI_LOCK";
104 case MTK2_RIL_UNSOL_RESPONSE_MMRR_STATUS_CHANGED:
105 return "MTK2_RIL_UNSOL_RESPONSE_MMRR_STATUS_CHANGED";
106 case MTK2_RIL_UNSOL_SIM_PLUG_OUT:
107 return "MTK2_RIL_UNSOL_SIM_PLUG_OUT";
108 case MTK2_RIL_UNSOL_SIM_PLUG_IN:
109 return "MTK2_RIL_UNSOL_SIM_PLUG_IN";
110 case MTK2_RIL_UNSOL_RESPONSE_ETWS_NOTIFICATION:
111 return "MTK2_RIL_UNSOL_RESPONSE_ETWS_NOTIFICATION";
112 case MTK2_RIL_UNSOL_RESPONSE_PLMN_CHANGED:
113 return "MTK2_RIL_UNSOL_RESPONSE_PLMN_CHANGED";
114 case MTK2_RIL_UNSOL_RESPONSE_REGISTRATION_SUSPENDED:
115 return "MTK2_RIL_UNSOL_RESPONSE_REGISTRATION_SUSPENDED";
116 case MTK2_RIL_UNSOL_STK_EVDL_CALL:
117 return "MTK2_RIL_UNSOL_STK_EVDL_CALL";
118 case MTK2_RIL_UNSOL_DATA_PACKETS_FLUSH:
119 return "MTK2_RIL_UNSOL_DATA_PACKETS_FLUSH";
120 case MTK2_RIL_UNSOL_FEMTOCELL_INFO:
121 return "MTK2_RIL_UNSOL_FEMTOCELL_INFO";
122 case MTK2_RIL_UNSOL_STK_SETUP_MENU_RESET:
123 return "MTK2_RIL_UNSOL_STK_SETUP_MENU_RESET";
124 case MTK2_RIL_UNSOL_APPLICATION_SESSION_ID_CHANGED:
125 return "MTK2_RIL_UNSOL_APPLICATION_SESSION_ID_CHANGED";
126 case MTK2_RIL_UNSOL_ECONF_SRVCC_INDICATION:
127 return "MTK2_RIL_UNSOL_ECONF_SRVCC_INDICATION";
128 case MTK2_RIL_UNSOL_IMS_ENABLE_DONE:
129 return "MTK2_RIL_UNSOL_IMS_ENABLE_DONE";
130 case MTK2_RIL_UNSOL_IMS_DISABLE_DONE:
131 return "MTK2_RIL_UNSOL_IMS_DISABLE_DONE";
132 case MTK2_RIL_UNSOL_IMS_REGISTRATION_INFO:
133 return "MTK2_RIL_UNSOL_IMS_REGISTRATION_INFO";
134 case MTK2_RIL_UNSOL_DEDICATE_BEARER_ACTIVATED:
135 return "MTK2_RIL_UNSOL_DEDICATE_BEARER_ACTIVATED";
136 case MTK2_RIL_UNSOL_DEDICATE_BEARER_MODIFIED:
137 return "MTK2_RIL_UNSOL_DEDICATE_BEARER_MODIFIED";
138 case MTK2_RIL_UNSOL_DEDICATE_BEARER_DEACTIVATED:
139 return "MTK2_RIL_UNSOL_DEDICATE_BEARER_DEACTIVATED";
140 case MTK2_RIL_UNSOL_RAC_UPDATE:
141 return "MTK2_RIL_UNSOL_RAC_UPDATE";
142 case MTK2_RIL_UNSOL_ECONF_RESULT_INDICATION:
143 return "MTK2_RIL_UNSOL_ECONF_RESULT_INDICATION";
144 case MTK2_RIL_UNSOL_MELOCK_NOTIFICATION:
145 return "MTK2_RIL_UNSOL_MELOCK_NOTIFICATION";
146 case MTK2_RIL_UNSOL_CALL_FORWARDING:
147 return "MTK2_RIL_UNSOL_CALL_FORWARDING";
148 case MTK2_RIL_UNSOL_CRSS_NOTIFICATION:
149 return "MTK2_RIL_UNSOL_CRSS_NOTIFICATION";
150 case MTK2_RIL_UNSOL_INCOMING_CALL_INDICATION:
151 return "MTK2_RIL_UNSOL_INCOMING_CALL_INDICATION";
152 case MTK2_RIL_UNSOL_CIPHER_INDICATION:
153 return "MTK2_RIL_UNSOL_CIPHER_INDICATION";
154 case MTK2_RIL_UNSOL_CNAP:
155 return "MTK2_RIL_UNSOL_CNAP";
156 case MTK2_RIL_UNSOL_SIM_COMMON_SLOT_NO_CHANGED:
157 return "MTK2_RIL_UNSOL_SIM_COMMON_SLOT_NO_CHANGED";
158 case MTK2_RIL_UNSOL_DATA_ALLOWED:
159 return "MTK2_RIL_UNSOL_DATA_ALLOWED";
160 case MTK2_RIL_UNSOL_STK_CALL_CTRL:
161 return "MTK2_RIL_UNSOL_STK_CALL_CTRL";
162 case MTK2_RIL_UNSOL_VOLTE_EPS_NETWORK_FEATURE_SUPPORT:
163 return "MTK2_RIL_UNSOL_VOLTE_EPS_NETWORK_FEATURE_SUPPORT";
164 case MTK2_RIL_UNSOL_CALL_INFO_INDICATION:
165 return "MTK2_RIL_UNSOL_CALL_INFO_INDICATION";
166 case MTK2_RIL_UNSOL_VOLTE_EPS_NETWORK_FEATURE_INFO:
167 return "MTK2_RIL_UNSOL_VOLTE_EPS_NETWORK_FEATURE_INFO";
168 case MTK2_RIL_UNSOL_SRVCC_HANDOVER_INFO_INDICATION:
169 return "MTK2_RIL_UNSOL_SRVCC_HANDOVER_INFO_INDICATION";
170 case MTK2_RIL_UNSOL_SPEECH_CODEC_INFO:
171 return "MTK2_RIL_UNSOL_SPEECH_CODEC_INFO";
172 case MTK2_RIL_UNSOL_MD_STATE_CHANGE:
173 return "MTK2_RIL_UNSOL_MD_STATE_CHANGE";
174 case MTK2_RIL_UNSOL_REMOVE_RESTRICT_EUTRAN:
175 return "MTK2_RIL_UNSOL_REMOVE_RESTRICT_EUTRAN";
176 case MTK2_RIL_UNSOL_MO_DATA_BARRING_INFO:
177 return "MTK2_RIL_UNSOL_MO_DATA_BARRING_INFO";
178 case MTK2_RIL_UNSOL_SSAC_BARRING_INFO:
179 return "MTK2_RIL_UNSOL_SSAC_BARRING_INFO";
180 case MTK2_RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR:
181 return "MTK2_RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR";
182 case MTK2_RIL_UNSOL_ABNORMAL_EVENT:
183 return "MTK2_RIL_UNSOL_ABNORMAL_EVENT";
184 case MTK2_RIL_UNSOL_EMERGENCY_BEARER_SUPPORT_NOTIFY:
185 return "MTK2_RIL_UNSOL_EMERGENCY_BEARER_SUPPORT_NOTIFY";
186 case MTK2_RIL_UNSOL_INTER_3GPP_IRAT_STATE_CHANGE:
187 return "MTK2_RIL_UNSOL_INTER_3GPP_IRAT_STATE_CHANGE";
188 case MTK2_RIL_UNSOL_LTE_BG_SEARCH_STATUS:
189 return "MTK2_RIL_UNSOL_LTE_BG_SEARCH_STATUS";
190 case MTK2_RIL_UNSOL_GMSS_RAT_CHANGED:
191 return "MTK2_RIL_UNSOL_GMSS_RAT_CHANGED";
192 case MTK2_RIL_UNSOL_CDMA_CARD_TYPE:
193 return "MTK2_RIL_UNSOL_CDMA_CARD_TYPE";
194 case MTK2_RIL_UNSOL_IMS_ENABLE_START:
195 return "MTK2_RIL_UNSOL_IMS_ENABLE_START";
196 case MTK2_RIL_UNSOL_IMS_DISABLE_START:
197 return "MTK2_RIL_UNSOL_IMS_DISABLE_START";
198 case MTK2_RIL_UNSOL_IMSI_REFRESH_DONE:
199 return "MTK2_RIL_UNSOL_IMSI_REFRESH_DONE";
200 case MTK2_RIL_UNSOL_EUSIM_READY:
201 return "MTK2_RIL_UNSOL_EUSIM_READY";
202 case MTK2_RIL_UNSOL_STK_BIP_PROACTIVE_COMMAND:
203 return "MTK2_RIL_UNSOL_STK_BIP_PROACTIVE_COMMAND";
204 case MTK2_RIL_UNSOL_WORLD_MODE_CHANGED:
205 return "MTK2_RIL_UNSOL_WORLD_MODE_CHANGED";
206 case MTK2_RIL_UNSOL_VT_STATUS_INFO:
207 return "MTK2_RIL_UNSOL_VT_STATUS_INFO";
208 case MTK2_RIL_UNSOL_VT_RING_INFO:
209 return "MTK2_RIL_UNSOL_VT_RING_INFO";
210 case MTK2_RIL_UNSOL_VSIM_OPERATION_INDICATION:
211 return "MTK2_RIL_UNSOL_VSIM_OPERATION_INDICATION";
212 case MTK2_RIL_UNSOL_SET_ATTACH_APN:
213 return "MTK2_RIL_UNSOL_SET_ATTACH_APN";
214 case MTK2_RIL_UNSOL_MAL_AT_INFO:
215 return "MTK2_RIL_UNSOL_MAL_AT_INFO";
216 case MTK2_RIL_UNSOL_MAIN_SIM_INFO:
217 return "MTK2_RIL_UNSOL_MAIN_SIM_INFO";
218 case MTK2_RIL_UNSOL_TRAY_PLUG_IN:
219 return "MTK2_RIL_UNSOL_TRAY_PLUG_IN";
220 case MTK2_RIL_UNSOL_CALLMOD_CHANGE_INDICATOR:
221 return "MTK2_RIL_UNSOL_CALLMOD_CHANGE_INDICATOR";
222 case MTK2_RIL_UNSOL_VIDEO_CAPABILITY_INDICATOR:
223 return "MTK2_RIL_UNSOL_VIDEO_CAPABILITY_INDICATOR";
224 case MTK2_RIL_UNSOL_LTE_ACCESS_STRATUM_STATE_CHANGE:
225 return "MTK2_RIL_UNSOL_LTE_ACCESS_STRATUM_STATE_CHANGE";
226 case MTK2_RIL_UNSOL_SETUP_DATA_CALL_RESPONSE:
227 return "MTK2_RIL_UNSOL_SETUP_DATA_CALL_RESPONSE";
228 case MTK2_RIL_UNSOL_ON_USSI:
229 return "MTK2_RIL_UNSOL_ON_USSI";
230 case MTK2_RIL_UNSOL_CDMA_CALL_ACCEPTED:
231 return "MTK2_RIL_UNSOL_CDMA_CALL_ACCEPTED";
232 case MTK2_RIL_UNSOL_UTK_SESSION_END:
233 return "MTK2_RIL_UNSOL_UTK_SESSION_END";
234 case MTK2_RIL_UNSOL_UTK_PROACTIVE_COMMAND:
235 return "MTK2_RIL_UNSOL_UTK_PROACTIVE_COMMAND";
236 case MTK2_RIL_UNSOL_UTK_EVENT_NOTIFY:
237 return "MTK2_RIL_UNSOL_UTK_EVENT_NOTIFY";
238 case MTK2_RIL_UNSOL_VIA_GPS_EVENT:
239 return "MTK2_RIL_UNSOL_VIA_GPS_EVENT";
240 case MTK2_RIL_UNSOL_VIA_NETWORK_TYPE_CHANGE:
241 return "MTK2_RIL_UNSOL_VIA_NETWORK_TYPE_CHANGE";
242 case MTK2_RIL_UNSOL_CDMA_PLMN_CHANGED:
243 return "MTK2_RIL_UNSOL_CDMA_PLMN_CHANGED";
244 case MTK2_RIL_UNSOL_VIA_INVALID_SIM_DETECTED:
245 return "MTK2_RIL_UNSOL_VIA_INVALID_SIM_DETECTED";
246 case MTK2_RIL_UNSOL_ENG_MODE_NETWORK_INFO:
247 return "MTK2_RIL_UNSOL_ENG_MODE_NETWORK_INFO";
248 case MTK2_RIL_UNSOL_RESPONSE_DATA_NETWORK_TYPE_CHANGED:
249 return "MTK2_RIL_UNSOL_RESPONSE_DATA_NETWORK_TYPE_CHANGED";
250 case MTK2_RIL_UNSOL_LTE_EARFCN_INFO:
251 return "MTK2_RIL_UNSOL_LTE_EARFCN_INFO";
252 case MTK2_RIL_UNSOL_CDMA_IMSI_READY:
253 return "MTK2_RIL_UNSOL_CDMA_IMSI_READY";
254 case MTK2_RIL_UNSOL_CDMA_SIGNAL_FADE:
255 return "MTK2_RIL_UNSOL_CDMA_SIGNAL_FADE";
256 case MTK2_RIL_UNSOL_CDMA_TONE_SIGNALS:
257 return "MTK2_RIL_UNSOL_CDMA_TONE_SIGNALS";
258 case MTK2_RIL_UNSOL_NETWORK_EXIST:
259 return "MTK2_RIL_UNSOL_NETWORK_EXIST";
260 case MTK2_RIL_UNSOL_MODULATION_INFO:
261 return "MTK2_RIL_UNSOL_MODULATION_INFO";
262 case MTK2_RIL_UNSOL_NETWORK_EVENT:
263 return "MTK2_RIL_UNSOL_NETWORK_EVENT";
264 case MTK2_RIL_UNSOL_MBIM_RESPONSE:
265 return "MTK2_RIL_UNSOL_MBIM_RESPONSE";
266 case MTK2_RIL_UNSOL_MAL_DATA_CALL_LIST_CHANGED:
267 return "MTK2_RIL_UNSOL_MAL_DATA_CALL_LIST_CHANGED";
268 case MTK2_RIL_UNSOL_EMBMS_AT_INFO :
269 return "MTK2_RIL_UNSOL_EMBMS_AT_INFO ";
270 case MTK2_RIL_UNSOL_RADIO_CAPABILITY_SWITCH_START:
271 return "MTK2_RIL_UNSOL_RADIO_CAPABILITY_SWITCH_START";
272 default:
273 return NULL;
274 }
275}
0276
=== added file 'drivers/mtk2modem/mtk2util.h'
--- drivers/mtk2modem/mtk2util.h 1970-01-01 00:00:00 +0000
+++ drivers/mtk2modem/mtk2util.h 2016-07-01 17:24:58 +0000
@@ -0,0 +1,39 @@
1/*
2 *
3 * MTK2 driver for ofono/rilmodem
4 *
5 * Copyright (C) 2016 Canonical Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21
22#ifndef MTK2UTIL_H
23#define MTK2UTIL_H
24
25#include <ofono/types.h>
26#include <gril.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32const char *mtk2_request_id_to_string(int req);
33const char *mtk2_unsol_request_to_string(int req);
34
35#ifdef __cplusplus
36}
37#endif
38
39#endif /* MTK2UTIL_H */
040
=== added file 'drivers/mtk2modem/voicecall.c'
--- drivers/mtk2modem/voicecall.c 1970-01-01 00:00:00 +0000
+++ drivers/mtk2modem/voicecall.c 2016-07-01 17:24:58 +0000
@@ -0,0 +1,149 @@
1/*
2 *
3 * oFono - Open Source Telephony
4 *
5 * Copyright (C) 2016 Canonical Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21#ifdef HAVE_CONFIG_H
22#include <config.h>
23#endif
24
25#define _GNU_SOURCE
26#include <string.h>
27#include <stdlib.h>
28#include <stdio.h>
29#include <errno.h>
30
31#include <glib.h>
32
33#include <ofono/log.h>
34#include <ofono/modem.h>
35#include <ofono/voicecall.h>
36
37#include "mtk2_constants.h"
38#include "drivers/mtkmodem/mtkunsol.h"
39#include "drivers/mtkmodem/mtkrequest.h"
40
41#include "common.h"
42#include "mtk2modem.h"
43#include "drivers/rilmodem/rilutil.h"
44#include "drivers/rilmodem/voicecall.h"
45
46/*
47 * This is the voicecall atom implementation for mtk2modem. Most of the
48 * implementation can be found in the rilmodem atom. The main reason for
49 * creating a new atom is the need to handle specific MTK requests and
50 * unsolicited events.
51 */
52
53static void mtk2_set_indication_cb(struct ril_msg *message, gpointer user_data)
54{
55 struct ofono_voicecall *vc = user_data;
56 struct ril_voicecall_data *vd = ofono_voicecall_get_data(vc);
57
58 if (message->error == RIL_E_SUCCESS)
59 g_ril_print_response_no_args(vd->ril, message);
60 else
61 ofono_error("%s: RIL error %s", __func__,
62 ril_error_to_string(message->error));
63}
64
65static void mtk2_incoming_notify(struct ril_msg *message, gpointer user_data)
66{
67 struct ofono_voicecall *vc = user_data;
68 struct ril_voicecall_data *vd = ofono_voicecall_get_data(vc);
69 struct parcel rilp;
70 struct unsol_call_indication *call_ind;
71
72 call_ind = g_mtk_unsol_parse_incoming_call_indication(vd->ril, message);
73 if (call_ind == NULL) {
74 ofono_error("%s: error parsing event", __func__);
75 return;
76 }
77
78 g_mtk_request_set_call_indication(vd->ril, MTK_CALL_INDIC_MODE_AVAIL,
79 call_ind->call_id,
80 call_ind->seq_number, &rilp);
81
82 if (g_ril_send(vd->ril, MTK2_RIL_REQUEST_SET_CALL_INDICATION,
83 &rilp, mtk2_set_indication_cb, vc, NULL) == 0)
84 ofono_error("%s: cannot send indication", __func__);
85
86 g_mtk_unsol_free_call_indication(call_ind);
87}
88
89static gboolean mtk2_delayed_register(gpointer user_data)
90{
91 struct ofono_voicecall *vc = user_data;
92 struct ril_voicecall_data *vd = ofono_voicecall_get_data(vc);
93
94 /* Indicates incoming call, before telling the network our state */
95 g_ril_register(vd->ril, MTK2_RIL_UNSOL_INCOMING_CALL_INDICATION,
96 mtk2_incoming_notify, vc);
97
98 /* This makes the timeout a single-shot */
99 return FALSE;
100}
101
102static int mtk2_voicecall_probe(struct ofono_voicecall *vc, unsigned int vendor,
103 void *data)
104{
105 struct ril_voicecall_driver_data *driver_data = data;
106 struct ril_voicecall_data *vd;
107
108 vd = g_try_new0(struct ril_voicecall_data, 1);
109 if (vd == NULL)
110 return -ENOMEM;
111
112 ril_voicecall_start(driver_data, vc, vendor, vd);
113
114 /*
115 * Register events after ofono_voicecall_register() is called from
116 * ril_delayed_register().
117 */
118 g_idle_add(mtk2_delayed_register, vc);
119
120 return 0;
121}
122
123static struct ofono_voicecall_driver driver = {
124 .name = MTK2MODEM,
125 .probe = mtk2_voicecall_probe,
126 .remove = ril_voicecall_remove,
127 .dial = ril_dial,
128 .answer = ril_answer,
129 .hangup_all = ril_hangup_all,
130 .release_specific = ril_hangup_specific,
131 .send_tones = ril_send_dtmf,
132 .create_multiparty = ril_create_multiparty,
133 .private_chat = ril_private_chat,
134 .swap_without_accept = ril_swap_without_accept,
135 .hold_all_active = ril_hold_all_active,
136 .release_all_held = ril_release_all_held,
137 .set_udub = ril_set_udub,
138 .release_all_active = ril_release_all_active,
139};
140
141void mtk2_voicecall_init(void)
142{
143 ofono_voicecall_driver_register(&driver);
144}
145
146void mtk2_voicecall_exit(void)
147{
148 ofono_voicecall_driver_unregister(&driver);
149}
0150
=== modified file 'drivers/mtkmodem/mtkunsol.c'
--- drivers/mtkmodem/mtkunsol.c 2015-03-30 09:50:34 +0000
+++ drivers/mtkmodem/mtkunsol.c 2016-07-01 17:24:58 +0000
@@ -45,7 +45,8 @@
45 struct parcel rilp;45 struct parcel rilp;
46 int numstr;46 int numstr;
47 struct unsol_call_indication *unsol;47 struct unsol_call_indication *unsol;
48 char *call_id, *phone, *mystery, *call_mode, *seq_num;48 char *call_id, *phone, *address_type, *call_mode, *seq_num;
49 char *fw_address = NULL;
49 char *endp;50 char *endp;
5051
51 unsol = g_try_malloc0(sizeof(*unsol));52 unsol = g_try_malloc0(sizeof(*unsol));
@@ -57,19 +58,26 @@
57 g_ril_init_parcel(message, &rilp);58 g_ril_init_parcel(message, &rilp);
5859
59 numstr = parcel_r_int32(&rilp);60 numstr = parcel_r_int32(&rilp);
60 if (numstr != 5) {61 if (numstr < 5) {
61 ofono_error("%s: wrong array size (%d)", __func__, numstr);62 ofono_error("%s: wrong array size (%d)", __func__, numstr);
62 goto error;63 goto error;
63 }64 }
6465
65 call_id = parcel_r_string(&rilp);66 call_id = parcel_r_string(&rilp);
66 phone = parcel_r_string(&rilp);67 phone = parcel_r_string(&rilp);
67 mystery = parcel_r_string(&rilp);68 address_type = parcel_r_string(&rilp);
68 call_mode = parcel_r_string(&rilp);69 call_mode = parcel_r_string(&rilp);
69 seq_num = parcel_r_string(&rilp);70 seq_num = parcel_r_string(&rilp);
71 if (numstr > 5)
72 fw_address = parcel_r_string(&rilp);
7073
71 g_ril_append_print_buf(gril, "{%s,%s,%s,%s,%s}", call_id, phone,74 g_ril_append_print_buf(gril, "{%s,%s,%s,%s,%s,%s}",
72 mystery, call_mode, seq_num);75 PRINTABLE_STR(call_id),
76 PRINTABLE_STR(phone),
77 PRINTABLE_STR(address_type),
78 PRINTABLE_STR(call_mode),
79 PRINTABLE_STR(seq_num),
80 PRINTABLE_STR(fw_address));
7381
74 g_ril_print_unsol(gril, message);82 g_ril_print_unsol(gril, message);
7583
@@ -113,18 +121,20 @@
113121
114 g_free(call_id);122 g_free(call_id);
115 g_free(phone);123 g_free(phone);
116 g_free(mystery);124 g_free(address_type);
117 g_free(call_mode);125 g_free(call_mode);
118 g_free(seq_num);126 g_free(seq_num);
127 g_free(fw_address);
119128
120 return unsol;129 return unsol;
121130
122err_conv:131err_conv:
123 g_free(call_id);132 g_free(call_id);
124 g_free(phone);133 g_free(phone);
125 g_free(mystery);134 g_free(address_type);
126 g_free(call_mode);135 g_free(call_mode);
127 g_free(seq_num);136 g_free(seq_num);
137 g_free(fw_address);
128138
129error:139error:
130 g_free(unsol);140 g_free(unsol);
131141
=== added file 'drivers/qcommsimmodem/gprs.c'
--- drivers/qcommsimmodem/gprs.c 1970-01-01 00:00:00 +0000
+++ drivers/qcommsimmodem/gprs.c 2016-07-01 17:24:58 +0000
@@ -0,0 +1,118 @@
1/*
2 *
3 * oFono - Open Source Telephony
4 *
5 * Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
6 * Copyright (C) 2010 ST-Ericsson AB.
7 * Copyright (C) 2013-2014 Canonical Ltd.
8 * Copyright (C) 2013 Jolla Ltd.
9 * Copyright (C) 2016 Ratchanan Srirattanamet.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 *
24 */
25
26#include <glib.h>
27
28#include <ofono/log.h>
29#include <ofono/modem.h>
30#include <ofono/gprs.h>
31
32#include "gril.h"
33
34#include "drivers/rilmodem/rilutil.h"
35#include "drivers/rilmodem/gprs.h"
36#include "qcom_msim_modem.h"
37#include "qcom_msim_constants.h"
38
39static void set_data_sub_cb(struct ril_msg *message, gpointer user_data)
40{
41 struct cb_data *cbd = user_data;
42 ofono_gprs_cb_t cb = cbd->cb;
43 struct ril_gprs_data *gd = cbd->user;
44
45 if (message->error == RIL_E_SUCCESS) {
46 g_ril_print_response_no_args(gd->ril, message);
47
48 gd->ofono_attached = 1;
49
50 CALLBACK_WITH_SUCCESS(cb, cbd->data);
51 } else {
52 ofono_error("%s: RIL error %s", __func__,
53 ril_error_to_string(message->error));
54 CALLBACK_WITH_FAILURE(cb, cbd->data);
55 }
56}
57
58static void qcom_msim_gprs_set_attached(struct ofono_gprs *gprs, int attached,
59 ofono_gprs_cb_t cb, void *data)
60{
61 struct ril_gprs_data *gd = ofono_gprs_get_data(gprs);
62 struct cb_data *cbd = cb_data_new(cb, data, gd);
63
64 DBG("attached: %d", attached);
65
66 /*
67 * This modem use RIL_REQUEST_SET_DATA_SUBSCRIPTION to select which SIM
68 * is used for data connection. We still doesn't have actual control
69 * over 'attached' state. So, we still use the same trick as rilmodem's
70 * gprs atom (save the desired state, and use it to override the actual
71 * modem's state in the 'attached_status' function).
72 *
73 * The core gprs code calls driver->set_attached() when a netreg
74 * notificaiton is received and any configured roaming conditions
75 * are met.
76 */
77
78 if (attached) {
79 /*
80 * We don't have a request to see if we're a selected SIM slot.
81 * So, we just send this request. There's no harm sending this
82 * repeatedly anyway.
83 */
84 g_ril_send(gd->ril, QCOM_MSIM_RIL_REQUEST_SET_DATA_SUBSCRIPTION
85 , NULL, set_data_sub_cb, cbd, NULL);
86 } else {
87 /*
88 * We don't actually have a request to unselect the slot.
89 * So, just do nothing.
90 */
91 gd->ofono_attached = attached;
92
93 /*
94 * Call from idle loop, so core can set driver_attached before
95 * the callback is invoked.
96 */
97 g_idle_add(ril_gprs_set_attached_cb, cbd);
98 }
99}
100
101static struct ofono_gprs_driver driver = {
102 .name = QCOMMSIMMODEM,
103 .probe = ril_gprs_probe,
104 .remove = ril_gprs_remove,
105 .set_attached = qcom_msim_gprs_set_attached,
106 .attached_status = ril_gprs_registration_status,
107 .set_ia_apn = ril_gprs_set_ia_apn,
108};
109
110void qcom_msim_gprs_init(void)
111{
112 ofono_gprs_driver_register(&driver);
113}
114
115void qcom_msim_gprs_exit(void)
116{
117 ofono_gprs_driver_unregister(&driver);
118}
0119
=== modified file 'drivers/qcommsimmodem/qcom_msim_constants.h'
--- drivers/qcommsimmodem/qcom_msim_constants.h 2015-06-11 16:14:06 +0000
+++ drivers/qcommsimmodem/qcom_msim_constants.h 2016-07-01 17:24:58 +0000
@@ -24,6 +24,7 @@
2424
25#define QCOMMSIM_NUM_SLOTS_MAX 225#define QCOMMSIM_NUM_SLOTS_MAX 2
2626
27#define QCOM_MSIM_RIL_REQUEST_SET_UICC_SUBSCRIPTION 11527#define QCOM_MSIM_RIL_REQUEST_SET_UICC_SUBSCRIPTION 115
28#define QCOM_MSIM_RIL_REQUEST_SET_DATA_SUBSCRIPTION 116
2829
29#endif /* QCOM_MSIM_CONSTANTS_H */30#endif /* QCOM_MSIM_CONSTANTS_H */
3031
=== modified file 'drivers/qcommsimmodem/qcom_msim_modem.c'
--- drivers/qcommsimmodem/qcom_msim_modem.c 2015-06-11 16:14:06 +0000
+++ drivers/qcommsimmodem/qcom_msim_modem.c 2016-07-01 17:24:58 +0000
@@ -40,6 +40,7 @@
40 DBG("");40 DBG("");
4141
42 qcom_msim_radio_settings_init();42 qcom_msim_radio_settings_init();
43 qcom_msim_gprs_init();
4344
44 return 0;45 return 0;
45}46}
@@ -49,6 +50,7 @@
49 DBG("");50 DBG("");
5051
51 qcom_msim_radio_settings_exit();52 qcom_msim_radio_settings_exit();
53 qcom_msim_gprs_exit();
52}54}
5355
54OFONO_PLUGIN_DEFINE(qcommsimmodem, "Qualcomm multi-sim modem driver", VERSION,56OFONO_PLUGIN_DEFINE(qcommsimmodem, "Qualcomm multi-sim modem driver", VERSION,
5557
=== modified file 'drivers/qcommsimmodem/qcom_msim_modem.h'
--- drivers/qcommsimmodem/qcom_msim_modem.h 2015-06-11 16:14:06 +0000
+++ drivers/qcommsimmodem/qcom_msim_modem.h 2016-07-01 17:24:58 +0000
@@ -23,3 +23,6 @@
2323
24extern void qcom_msim_radio_settings_init(void);24extern void qcom_msim_radio_settings_init(void);
25extern void qcom_msim_radio_settings_exit(void);25extern void qcom_msim_radio_settings_exit(void);
26
27extern void qcom_msim_gprs_init(void);
28extern void qcom_msim_gprs_exit(void);
2629
=== modified file 'drivers/rilmodem/call-barring.c'
--- drivers/rilmodem/call-barring.c 2016-01-05 14:42:38 +0000
+++ drivers/rilmodem/call-barring.c 2016-07-01 17:24:58 +0000
@@ -33,6 +33,7 @@
33#include "call-barring.h"33#include "call-barring.h"
34#include "rilmodem.h"34#include "rilmodem.h"
35#include "ril_constants.h"35#include "ril_constants.h"
36#include "rilutil.h"
3637
37struct barring_data {38struct barring_data {
38 GRil *ril;39 GRil *ril;
3940
=== modified file 'drivers/rilmodem/call-forwarding.c'
--- drivers/rilmodem/call-forwarding.c 2015-09-29 08:46:51 +0000
+++ drivers/rilmodem/call-forwarding.c 2016-07-01 17:24:58 +0000
@@ -42,6 +42,7 @@
42#include "grilreply.h"42#include "grilreply.h"
43#include "grilunsol.h"43#include "grilunsol.h"
4444
45#include "rilutil.h"
45#include "rilmodem.h"46#include "rilmodem.h"
4647
47#include "common.h"48#include "common.h"
4849
=== modified file 'drivers/rilmodem/call-settings.c'
--- drivers/rilmodem/call-settings.c 2013-12-10 09:44:10 +0000
+++ drivers/rilmodem/call-settings.c 2016-07-01 17:24:58 +0000
@@ -44,6 +44,7 @@
44#include "grilreply.h"44#include "grilreply.h"
4545
46#include "rilmodem.h"46#include "rilmodem.h"
47#include "rilutil.h"
47#include "ril_constants.h"48#include "ril_constants.h"
48#include "common.h"49#include "common.h"
4950
5051
=== modified file 'drivers/rilmodem/call-volume.c'
--- drivers/rilmodem/call-volume.c 2013-12-09 17:09:20 +0000
+++ drivers/rilmodem/call-volume.c 2016-07-01 17:24:58 +0000
@@ -41,6 +41,7 @@
41#include "common.h"41#include "common.h"
4242
43#include "rilmodem.h"43#include "rilmodem.h"
44#include "rilutil.h"
44#include "parcel.h"45#include "parcel.h"
45#include "grilrequest.h"46#include "grilrequest.h"
46#include "grilreply.h"47#include "grilreply.h"
4748
=== modified file 'drivers/rilmodem/devinfo.c'
--- drivers/rilmodem/devinfo.c 2013-12-09 17:09:20 +0000
+++ drivers/rilmodem/devinfo.c 2016-07-01 17:24:58 +0000
@@ -39,6 +39,7 @@
39#include "gril.h"39#include "gril.h"
4040
41#include "rilmodem.h"41#include "rilmodem.h"
42#include "rilutil.h"
42#include "grilreply.h"43#include "grilreply.h"
4344
44/*45/*
4546
=== modified file 'drivers/rilmodem/gprs.c'
--- drivers/rilmodem/gprs.c 2016-04-13 14:35:57 +0000
+++ drivers/rilmodem/gprs.c 2016-07-01 17:24:58 +0000
@@ -38,6 +38,7 @@
38#include <ofono/modem.h>38#include <ofono/modem.h>
39#include <ofono/gprs.h>39#include <ofono/gprs.h>
40#include <ofono/types.h>40#include <ofono/types.h>
41#include <ofono.h>
4142
42#include "gril.h"43#include "gril.h"
43#include "grilutil.h"44#include "grilutil.h"
@@ -49,9 +50,13 @@
49#include "grilunsol.h"50#include "grilunsol.h"
50#include "gprs.h"51#include "gprs.h"
5152
53#include "plugins/ril.h"
54
52/* Time between get data status retries */55/* Time between get data status retries */
53#define GET_STATUS_TIMER_MS 500056#define GET_STATUS_TIMER_MS 5000
5457
58static void send_allow_data(struct cb_data *cbd, GRil *ril, int attached);
59
55/*60/*
56 * This module is the ofono_gprs_driver implementation for rilmodem.61 * This module is the ofono_gprs_driver implementation for rilmodem.
57 *62 *
@@ -78,6 +83,7 @@
78 case RADIO_TECH_EDGE:83 case RADIO_TECH_EDGE:
79 return PACKET_BEARER_EGPRS;84 return PACKET_BEARER_EGPRS;
80 case RADIO_TECH_UMTS:85 case RADIO_TECH_UMTS:
86 case RADIO_TECH_TD_SCDMA:
81 return PACKET_BEARER_UMTS;87 return PACKET_BEARER_UMTS;
82 case RADIO_TECH_HSDPA:88 case RADIO_TECH_HSDPA:
83 return PACKET_BEARER_HSDPA;89 return PACKET_BEARER_HSDPA;
@@ -162,6 +168,75 @@
162 ril_gprs_registration_status(gprs, NULL, NULL);168 ril_gprs_registration_status(gprs, NULL, NULL);
163}169}
164170
171struct gprs_attach_data {
172 struct ril_gprs_data *gd;
173 GRil *ril;
174 gboolean set_attached;
175 gboolean detaching_other_slot;
176};
177
178static void free_attach_cbd(struct cb_data *cbd)
179{
180 g_free(cbd->user);
181 g_free(cbd);
182}
183
184static void gprs_allow_data_cb(struct ril_msg *message, gpointer user_data)
185{
186 struct cb_data *cbd = user_data;
187 ofono_gprs_cb_t cb = cbd->cb;
188 struct gprs_attach_data *attach_data = cbd->user;
189 struct ril_gprs_data *gd = attach_data->gd;
190
191 g_ril_print_response_no_args(attach_data->ril, message);
192
193 /*
194 * We do not care if detaching the other slot fails. This happens in
195 * turbo when the other slot is empty, for instance.
196 */
197 if (attach_data->detaching_other_slot) {
198 attach_data->ril = gd->ril;
199 attach_data->detaching_other_slot = FALSE;
200
201 send_allow_data(cbd, gd->ril, attach_data->set_attached);
202 return;
203 }
204
205 if (message->error != RIL_E_SUCCESS) {
206 ofono_error("%s: RIL error %s", __func__,
207 ril_error_to_string(message->error));
208 CALLBACK_WITH_FAILURE(cb, cbd->data);
209 free_attach_cbd(cbd);
210 return;
211 }
212
213 gd->ofono_attached = attach_data->set_attached;
214
215 CALLBACK_WITH_SUCCESS(cb, cbd->data);
216
217 free_attach_cbd(cbd);
218}
219
220static void send_allow_data(struct cb_data *cbd, GRil *ril, int attached)
221{
222 ofono_gprs_cb_t cb = cbd->cb;
223 struct parcel rilp;
224
225 /* ALLOW_DATA payload: int[] with attach value */
226 parcel_init(&rilp);
227 parcel_w_int32(&rilp, 1);
228 parcel_w_int32(&rilp, attached);
229
230 g_ril_append_print_buf(ril, "(%d)", attached);
231
232 if (g_ril_send(ril, RIL_REQUEST_ALLOW_DATA, &rilp,
233 gprs_allow_data_cb, cbd, NULL) == 0) {
234 ofono_error("%s: send failed", __func__);
235 free_attach_cbd(cbd);
236 CALLBACK_WITH_FAILURE(cb, cbd->data);
237 }
238}
239
165gboolean ril_gprs_set_attached_cb(gpointer user_data)240gboolean ril_gprs_set_attached_cb(gpointer user_data)
166{241{
167 struct cb_data *cbd = user_data;242 struct cb_data *cbd = user_data;
@@ -176,44 +251,55 @@
176 return FALSE;251 return FALSE;
177}252}
178253
179static void ril_gprs_set_attached(struct ofono_gprs *gprs, int attached,254void ril_gprs_set_attached(struct ofono_gprs *gprs, int attached,
180 ofono_gprs_cb_t cb, void *data)255 ofono_gprs_cb_t cb, void *data)
181{256{
182 struct cb_data *cbd = cb_data_new(cb, data, NULL);257 struct cb_data *cbd = cb_data_new(cb, data, NULL);
183 struct ril_gprs_data *gd = ofono_gprs_get_data(gprs);258 struct ril_gprs_data *gd = ofono_gprs_get_data(gprs);
259 struct gprs_attach_data *attach_data;
260 int attach_aux = attached;
184261
185 DBG("attached: %d", attached);262 DBG("attached: %d", attached);
186263
187 /*264 if (g_ril_get_version(gd->ril) < 10) {
188 * As RIL offers no actual control over the GPRS 'attached'265 /*
189 * state, we save the desired state, and use it to override266 * Older RILs offer no actual control over the GPRS 'attached'
190 * the actual modem's state in the 'attached_status' function.267 * state, we save the desired state, and use it to override
191 * This is similar to the way the core ofono gprs code handles268 * the actual modem's state in the 'attached_status' function.
192 * data roaming ( see src/gprs.c gprs_netreg_update().269 * This is similar to the way the core ofono gprs code handles
193 *270 * data roaming ( see src/gprs.c gprs_netreg_update() ).
194 * The core gprs code calls driver->set_attached() when a netreg271 *
195 * notificaiton is received and any configured roaming conditions272 * The core gprs code calls driver->set_attached() when a netreg
196 * are met.273 * notificaiton is received and any configured roaming
197 */274 * conditions are met.
198 gd->ofono_attached = attached;275 */
199276 gd->ofono_attached = attached;
200 /*277
201 * Call from idle loop, so core can set driver_attached before278 /*
202 * the callback is invoked.279 * Call from idle loop, so core can set driver_attached before
203 */280 * the callback is invoked.
204 g_idle_add(ril_gprs_set_attached_cb, cbd);281 */
205}282 g_idle_add(ril_gprs_set_attached_cb, cbd);
206283 return;
207static gboolean ril_get_status_retry(gpointer user_data)284 }
208{285
209 struct ofono_gprs *gprs = user_data;286 attach_data = g_new0(struct gprs_attach_data, 1);
210 struct ril_gprs_data *gd = ofono_gprs_get_data(gprs);287 attach_data->gd = gd;
211288 attach_data->ril = gd->ril;
212 gd->status_retry_cb_id = 0;289 attach_data->set_attached = attached;
213290 attach_data->detaching_other_slot = FALSE;
214 ril_gprs_registration_status(gprs, NULL, NULL);291
215292 /* If we want to attach we have to detach the other slot */
216 return FALSE;293 if (attached && ril_get_gril_complement(gd->modem)) {
294 attach_data->ril = ril_get_gril_complement(gd->modem);
295 attach_data->detaching_other_slot = TRUE;
296
297 attach_aux = !attached;
298 }
299
300 cbd = cb_data_new(cb, data, attach_data);
301
302 send_allow_data(cbd, attach_data->ril, attach_aux);
217}303}
218304
219static void ril_data_reg_cb(struct ril_msg *message, gpointer user_data)305static void ril_data_reg_cb(struct ril_msg *message, gpointer user_data)
@@ -229,17 +315,32 @@
229315
230 old_status = gd->rild_status;316 old_status = gd->rild_status;
231317
232 if (message->error != RIL_E_SUCCESS) {318 if (message->error == RIL_E_SUCCESS) {
319 reply = g_ril_reply_parse_data_reg_state(gd->ril, message);
320 if (reply == NULL) {
321 if (cb)
322 CALLBACK_WITH_FAILURE(cb, -1, cbd->data);
323 return;
324 }
325 } else {
326 /*
327 * If we get a RIL error (say, radio not available) it is better
328 * to return unknown values than to call cb with failure status.
329 * If we do the last, ConnectionManager would not be created if
330 * this is the first time we retrieve data status, or we can
331 * even create infinite loops as the status in gprs atom would
332 * not be refreshed. When we finally register we will get events
333 * so we will try to retrieve data state again.
334 */
233 ofono_error("%s: DATA_REGISTRATION_STATE reply failure: %s",335 ofono_error("%s: DATA_REGISTRATION_STATE reply failure: %s",
234 __func__,336 __func__,
235 ril_error_to_string(message->error));337 ril_error_to_string(message->error));
236 goto error;338
339 reply = g_malloc0(sizeof(*reply));
340 reply->reg_state.status = NETWORK_REGISTRATION_STATUS_UNKNOWN;
341 reply->reg_state.tech = RADIO_TECH_UNKNOWN;
237 }342 }
238343
239 reply = g_ril_reply_parse_data_reg_state(gd->ril, message);
240 if (reply == NULL)
241 goto error;
242
243 /*344 /*
244 * There are three cases that can result in this callback345 * There are three cases that can result in this callback
245 * running:346 * running:
@@ -344,21 +445,6 @@
344 CALLBACK_WITH_SUCCESS(cb, reply->reg_state.status, cbd->data);445 CALLBACK_WITH_SUCCESS(cb, reply->reg_state.status, cbd->data);
345446
346 g_free(reply);447 g_free(reply);
347
348 return;
349error:
350
351 /*
352 * For some modems DATA_REGISTRATION_STATE will return an error until we
353 * are registered in the voice network.
354 */
355 if (old_status == -1 && message->error == RIL_E_GENERIC_FAILURE)
356 gd->status_retry_cb_id =
357 g_timeout_add(GET_STATUS_TIMER_MS,
358 ril_get_status_retry, gprs);
359
360 if (cb)
361 CALLBACK_WITH_FAILURE(cb, -1, cbd->data);
362}448}
363449
364void ril_gprs_registration_status(struct ofono_gprs *gprs,450void ril_gprs_registration_status(struct ofono_gprs *gprs,
365451
=== modified file 'drivers/rilmodem/gprs.h'
--- drivers/rilmodem/gprs.h 2015-01-29 14:50:30 +0000
+++ drivers/rilmodem/gprs.h 2016-07-01 17:24:58 +0000
@@ -38,6 +38,8 @@
38void ril_gprs_start(struct ril_gprs_driver_data *driver_data,38void ril_gprs_start(struct ril_gprs_driver_data *driver_data,
39 struct ofono_gprs *gprs, struct ril_gprs_data *gd);39 struct ofono_gprs *gprs, struct ril_gprs_data *gd);
40gboolean ril_gprs_set_attached_cb(gpointer user_data);40gboolean ril_gprs_set_attached_cb(gpointer user_data);
41void ril_gprs_set_attached(struct ofono_gprs *gprs, int attached,
42 ofono_gprs_cb_t cb, void *data);
41void ril_gprs_registration_status(struct ofono_gprs *gprs,43void ril_gprs_registration_status(struct ofono_gprs *gprs,
42 ofono_gprs_status_cb_t cb, void *data);44 ofono_gprs_status_cb_t cb, void *data);
43void ril_gprs_set_ia_apn(struct ofono_gprs *gprs, const char *apn,45void ril_gprs_set_ia_apn(struct ofono_gprs *gprs, const char *apn,
4446
=== modified file 'drivers/rilmodem/network-registration.c'
--- drivers/rilmodem/network-registration.c 2015-09-29 08:46:51 +0000
+++ drivers/rilmodem/network-registration.c 2016-07-01 17:24:58 +0000
@@ -40,6 +40,7 @@
4040
41#include "common.h"41#include "common.h"
42#include "gril.h"42#include "gril.h"
43#include "rilutil.h"
43#include "rilmodem.h"44#include "rilmodem.h"
4445
45#include "grilreply.h"46#include "grilreply.h"
@@ -81,6 +82,7 @@
81 case RADIO_TECH_EDGE:82 case RADIO_TECH_EDGE:
82 return ACCESS_TECHNOLOGY_GSM_EGPRS;83 return ACCESS_TECHNOLOGY_GSM_EGPRS;
83 case RADIO_TECH_UMTS:84 case RADIO_TECH_UMTS:
85 case RADIO_TECH_TD_SCDMA:
84 return ACCESS_TECHNOLOGY_UTRAN;86 return ACCESS_TECHNOLOGY_UTRAN;
85 case RADIO_TECH_HSDPA:87 case RADIO_TECH_HSDPA:
86 return ACCESS_TECHNOLOGY_UTRAN_HSDPA;88 return ACCESS_TECHNOLOGY_UTRAN_HSDPA;
8789
=== modified file 'drivers/rilmodem/phonebook.c'
--- drivers/rilmodem/phonebook.c 2015-09-10 07:16:24 +0000
+++ drivers/rilmodem/phonebook.c 2016-07-01 17:24:58 +0000
@@ -48,6 +48,7 @@
48#include "simutil.h"48#include "simutil.h"
49#include "common.h"49#include "common.h"
5050
51#include "rilutil.h"
51#include "rilmodem.h"52#include "rilmodem.h"
5253
53#define UNUSED 0xFF54#define UNUSED 0xFF
5455
=== modified file 'drivers/rilmodem/radio-settings.c'
--- drivers/rilmodem/radio-settings.c 2015-09-29 08:46:51 +0000
+++ drivers/rilmodem/radio-settings.c 2016-07-01 17:24:58 +0000
@@ -39,6 +39,7 @@
3939
40#include "gril.h"40#include "gril.h"
4141
42#include "rilutil.h"
42#include "rilmodem.h"43#include "rilmodem.h"
4344
44#include "grilrequest.h"45#include "grilrequest.h"
@@ -229,23 +230,74 @@
229 return FALSE;230 return FALSE;
230}231}
231232
233static void get_radio_caps_cb(struct ril_msg *message, gpointer user_data)
234{
235 unsigned int available_rats = 0;
236 struct cb_data *cbd = user_data;
237 ofono_radio_settings_available_rats_query_cb_t cb = cbd->cb;
238 struct ofono_radio_settings *rs = cbd->user;
239 struct radio_data *rd = ofono_radio_settings_get_data(rs);
240 struct reply_radio_capability *caps;
241
242 if (message->error != RIL_E_SUCCESS) {
243 ofono_error("%s: error %s", __func__,
244 ril_error_to_string(message->error));
245 CALLBACK_WITH_FAILURE(cb, 0, cbd->data);
246 return;
247 }
248
249 caps = g_ril_reply_parse_get_radio_capability(rd->ril, message);
250 if (caps == NULL) {
251 ofono_error("%s: parse error", __func__);
252 CALLBACK_WITH_FAILURE(cb, 0, cbd->data);
253 return;
254 }
255
256 if (caps->rat & RIL_RAF_GSM)
257 available_rats |= OFONO_RADIO_ACCESS_MODE_GSM;
258
259 if (caps->rat & (RIL_RAF_UMTS | RIL_RAF_TD_SCDMA))
260 available_rats |= OFONO_RADIO_ACCESS_MODE_UMTS;
261
262 if (caps->rat & RIL_RAF_LTE)
263 available_rats |= OFONO_RADIO_ACCESS_MODE_LTE;
264
265 g_free(caps);
266
267 CALLBACK_WITH_SUCCESS(cb, available_rats, cbd->data);
268}
269
232void ril_query_available_rats(struct ofono_radio_settings *rs,270void ril_query_available_rats(struct ofono_radio_settings *rs,
233 ofono_radio_settings_available_rats_query_cb_t cb,271 ofono_radio_settings_available_rats_query_cb_t cb,
234 void *data)272 void *data)
235{273{
274 struct radio_data *rd = ofono_radio_settings_get_data(rs);
236 struct cb_data *cbd = cb_data_new(cb, data, rs);275 struct cb_data *cbd = cb_data_new(cb, data, rs);
237276
238 g_idle_add(query_available_rats_cb, cbd);277 if (g_ril_get_version(rd->ril) < 11) {
278 g_idle_add(query_available_rats_cb, cbd);
279 return;
280 }
281
282 if (g_ril_send(rd->ril, RIL_REQUEST_GET_RADIO_CAPABILITY, NULL,
283 get_radio_caps_cb, cbd, g_free) <= 0) {
284 g_free(cbd);
285 CALLBACK_WITH_FAILURE(cb, 0, data);
286 }
239}287}
240288
241void ril_delayed_register(const struct ofono_error *error, void *user_data)289void ril_delayed_register(const struct ofono_error *error, void *user_data)
242{290{
243 struct ofono_radio_settings *rs = user_data;291 struct ofono_radio_settings *rs = user_data;
244292
245 if (error->type == OFONO_ERROR_TYPE_NO_ERROR)293 if (error->type != OFONO_ERROR_TYPE_NO_ERROR)
246 ofono_radio_settings_register(rs);
247 else
248 ofono_error("%s: cannot set default fast dormancy", __func__);294 ofono_error("%s: cannot set default fast dormancy", __func__);
295
296 /*
297 * We register in all cases, setting FD some times fails until radio is
298 * available (this happens on turbo and maybe in other devices).
299 */
300 ofono_radio_settings_register(rs);
249}301}
250302
251static int ril_radio_settings_probe(struct ofono_radio_settings *rs,303static int ril_radio_settings_probe(struct ofono_radio_settings *rs,
252304
=== modified file 'drivers/rilmodem/rilmodem.h'
--- drivers/rilmodem/rilmodem.h 2014-10-29 15:59:10 +0000
+++ drivers/rilmodem/rilmodem.h 2016-07-01 17:24:58 +0000
@@ -20,8 +20,6 @@
20 *20 *
21 */21 */
2222
23#include "rilutil.h"
24
25#define RILMODEM "rilmodem"23#define RILMODEM "rilmodem"
2624
27/* Shared constants */25/* Shared constants */
2826
=== modified file 'drivers/rilmodem/sim.c'
--- drivers/rilmodem/sim.c 2016-03-14 08:16:40 +0000
+++ drivers/rilmodem/sim.c 2016-07-01 17:24:58 +0000
@@ -46,6 +46,7 @@
46#include "grilutil.h"46#include "grilutil.h"
47#include "parcel.h"47#include "parcel.h"
48#include "ril_constants.h"48#include "ril_constants.h"
49#include "rilutil.h"
49#include "rilmodem.h"50#include "rilmodem.h"
5051
51#include "grilreply.h"52#include "grilreply.h"
@@ -943,7 +944,8 @@
943 g_free(cbd);944 g_free(cbd);
944 CALLBACK_WITH_FAILURE(cb, NULL, data);945 CALLBACK_WITH_FAILURE(cb, NULL, data);
945 }946 }
946 } else if (sd->vendor == OFONO_RIL_VENDOR_MTK) {947 } else if (sd->vendor == OFONO_RIL_VENDOR_MTK ||
948 sd->vendor == OFONO_RIL_VENDOR_MTK2) {
947 struct cb_data *cbd = cb_data_new(cb, data, sd);949 struct cb_data *cbd = cb_data_new(cb, data, sd);
948 struct parcel rilp;950 struct parcel rilp;
949 const char *at_epinc[] = { "AT+EPINC", "+EPINC:" };951 const char *at_epinc[] = { "AT+EPINC", "+EPINC:" };
950952
=== modified file 'drivers/rilmodem/sms.c'
--- drivers/rilmodem/sms.c 2016-03-14 08:16:40 +0000
+++ drivers/rilmodem/sms.c 2016-07-01 17:24:58 +0000
@@ -42,6 +42,7 @@
42#include "util.h"42#include "util.h"
4343
44#include "rilmodem.h"44#include "rilmodem.h"
45#include "rilutil.h"
45#include "grilrequest.h"46#include "grilrequest.h"
46#include "grilreply.h"47#include "grilreply.h"
47#include "grilunsol.h"48#include "grilunsol.h"
4849
=== modified file 'drivers/rilmodem/ussd.c'
--- drivers/rilmodem/ussd.c 2014-05-12 14:21:13 +0000
+++ drivers/rilmodem/ussd.c 2016-07-01 17:24:58 +0000
@@ -43,6 +43,7 @@
43#include "grilrequest.h"43#include "grilrequest.h"
44#include "grilunsol.h"44#include "grilunsol.h"
4545
46#include "rilutil.h"
46#include "rilmodem.h"47#include "rilmodem.h"
4748
48#include "ril_constants.h"49#include "ril_constants.h"
@@ -170,6 +171,7 @@
170 struct ofono_ussd *ussd = user_data;171 struct ofono_ussd *ussd = user_data;
171 struct ussd_data *ud = ofono_ussd_get_data(ussd);172 struct ussd_data *ud = ofono_ussd_get_data(ussd);
172 struct unsol_ussd *unsol;173 struct unsol_ussd *unsol;
174 enum ofono_ril_vendor vendor;
173175
174 unsol = g_ril_unsol_parse_ussd(ud->ril, message);176 unsol = g_ril_unsol_parse_ussd(ud->ril, message);
175 if (unsol == NULL) {177 if (unsol == NULL) {
@@ -178,8 +180,10 @@
178 }180 }
179181
180 /* To fix bug in MTK: USSD-Notify arrive with type 2 instead of 0 */182 /* To fix bug in MTK: USSD-Notify arrive with type 2 instead of 0 */
181 if (g_ril_vendor(ud->ril) == OFONO_RIL_VENDOR_MTK &&183 vendor = g_ril_vendor(ud->ril);
182 unsol->message != NULL && unsol->type == 2)184 if ((vendor == OFONO_RIL_VENDOR_MTK ||
185 vendor == OFONO_RIL_VENDOR_MTK2)
186 && unsol->message != NULL && unsol->type == 2)
183 unsol->type = 0;187 unsol->type = 0;
184188
185 /*189 /*
186190
=== modified file 'drivers/rilmodem/vendor.h'
--- drivers/rilmodem/vendor.h 2015-04-23 13:08:30 +0000
+++ drivers/rilmodem/vendor.h 2016-07-01 17:24:58 +0000
@@ -26,7 +26,8 @@
26 OFONO_RIL_VENDOR_AOSP = 0,26 OFONO_RIL_VENDOR_AOSP = 0,
27 OFONO_RIL_VENDOR_MTK,27 OFONO_RIL_VENDOR_MTK,
28 OFONO_RIL_VENDOR_INFINEON,28 OFONO_RIL_VENDOR_INFINEON,
29 OFONO_RIL_VENDOR_QCOM_MSIM29 OFONO_RIL_VENDOR_QCOM_MSIM,
30 OFONO_RIL_VENDOR_MTK2
30};31};
3132
32#endif /* RILMODEM_VENDOR_H */33#endif /* RILMODEM_VENDOR_H */
3334
=== modified file 'drivers/rilmodem/voicecall.c'
--- drivers/rilmodem/voicecall.c 2015-10-07 07:14:11 +0000
+++ drivers/rilmodem/voicecall.c 2016-07-01 17:24:58 +0000
@@ -45,6 +45,7 @@
45#include "grilunsol.h"45#include "grilunsol.h"
4646
47#include "common.h"47#include "common.h"
48#include "rilutil.h"
48#include "rilmodem.h"49#include "rilmodem.h"
49#include "voicecall.h"50#include "voicecall.h"
5051
5152
=== modified file 'gril/grilreply.c'
--- gril/grilreply.c 2016-03-14 08:16:40 +0000
+++ gril/grilreply.c 2016-07-01 17:24:58 +0000
@@ -84,8 +84,9 @@
84 unsigned int num_ops, num_strings;84 unsigned int num_ops, num_strings;
85 unsigned int i;85 unsigned int i;
86 int strings_per_opt;86 int strings_per_opt;
87 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
8788
88 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)89 if (vendor == OFONO_RIL_VENDOR_MTK)
89 strings_per_opt = 5;90 strings_per_opt = 5;
90 else91 else
91 strings_per_opt = 4;92 strings_per_opt = 4;
@@ -142,7 +143,7 @@
142 * MTK: additional string with technology: 2G/3G are the only143 * MTK: additional string with technology: 2G/3G are the only
143 * valid values currently.144 * valid values currently.
144 */145 */
145 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK) {146 if (vendor == OFONO_RIL_VENDOR_MTK) {
146 char *tech = parcel_r_string(&rilp);147 char *tech = parcel_r_string(&rilp);
147 if (strcmp(tech, "3G") == 0)148 if (strcmp(tech, "3G") == 0)
148 operator->tech = RADIO_TECH_UMTS;149 operator->tech = RADIO_TECH_UMTS;
@@ -336,7 +337,8 @@
336 g_ril_append_print_buf(gril, "%s%s", print_buf,337 g_ril_append_print_buf(gril, "%s%s", print_buf,
337 ril_radio_tech_to_string(val));338 ril_radio_tech_to_string(val));
338339
339 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK) {340 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK ||
341 g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK2) {
340 switch (val) {342 switch (val) {
341 case MTK_RADIO_TECH_HSDPAP:343 case MTK_RADIO_TECH_HSDPAP:
342 case MTK_RADIO_TECH_HSDPAP_UPA:344 case MTK_RADIO_TECH_HSDPAP_UPA:
@@ -452,7 +454,8 @@
452 * MTK modem does not return max_cids, string for this index454 * MTK modem does not return max_cids, string for this index
453 * actually contains the maximum data bearer capability.455 * actually contains the maximum data bearer capability.
454 */456 */
455 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)457 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK ||
458 g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK2)
456 reply->max_cids = MTK_MODEM_MAX_CIDS;459 reply->max_cids = MTK_MODEM_MAX_CIDS;
457 else460 else
458 reply->max_cids = val;461 reply->max_cids = val;
@@ -1182,7 +1185,8 @@
1182 net_type = parcel_net_type;1185 net_type = parcel_net_type;
11831186
1184 /* Try to translate special MTK settings */1187 /* Try to translate special MTK settings */
1185 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK) {1188 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK ||
1189 g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK2) {
1186 switch (net_type) {1190 switch (net_type) {
1187 /* 4G preferred */1191 /* 4G preferred */
1188 case MTK_PREF_NET_TYPE_LTE_GSM_WCDMA:1192 case MTK_PREF_NET_TYPE_LTE_GSM_WCDMA:
@@ -1325,6 +1329,7 @@
1325 g_ril_append_print_buf(gril, "{%d}", retries[passwd_type]);1329 g_ril_append_print_buf(gril, "{%d}", retries[passwd_type]);
1326 break;1330 break;
1327 case OFONO_RIL_VENDOR_MTK:1331 case OFONO_RIL_VENDOR_MTK:
1332 case OFONO_RIL_VENDOR_MTK2:
1328 /*1333 /*
1329 * Some versions of MTK modem return just the retries for the1334 * Some versions of MTK modem return just the retries for the
1330 * password just entered while others return the retries for all1335 * password just entered while others return the retries for all
@@ -1456,3 +1461,99 @@
1456out:1461out:
1457 return str_arr;1462 return str_arr;
1458}1463}
1464
1465struct reply_radio_capability *g_ril_reply_parse_get_radio_capability(
1466 GRil *gril, const struct ril_msg *message)
1467{
1468 struct reply_radio_capability *reply;
1469 struct parcel rilp;
1470 char *modem_uuid;
1471
1472 reply = g_new0(struct reply_radio_capability, 1);
1473 g_ril_init_parcel(message, &rilp);
1474
1475 reply->version = parcel_r_int32(&rilp);
1476 reply->session = parcel_r_int32(&rilp);
1477 reply->phase = parcel_r_int32(&rilp);
1478 reply->rat = parcel_r_int32(&rilp);
1479 modem_uuid = parcel_r_string(&rilp);
1480 if (modem_uuid != NULL)
1481 strcpy(reply->modem_uuid, modem_uuid);
1482
1483 reply->status = parcel_r_int32(&rilp);
1484
1485 if (rilp.malformed) {
1486 ofono_error("%s: malformed parcel", __func__);
1487 g_free(reply);
1488 reply = NULL;
1489 goto end;
1490 }
1491
1492 g_ril_append_print_buf(gril, "{%d,%d,%s,[",
1493 reply->version, reply->session,
1494 ril_rc_phase_to_string(reply->phase));
1495
1496 if (reply->rat & RIL_RAF_UNKNOWN)
1497 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1498 ril_radio_tech_to_string(RADIO_TECH_UNKNOWN));
1499 if (reply->rat & RIL_RAF_GPRS)
1500 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1501 ril_radio_tech_to_string(RADIO_TECH_GPRS));
1502 if (reply->rat & RIL_RAF_EDGE)
1503 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1504 ril_radio_tech_to_string(RADIO_TECH_EDGE));
1505 if (reply->rat & RIL_RAF_UMTS)
1506 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1507 ril_radio_tech_to_string(RADIO_TECH_UMTS));
1508 if (reply->rat & RIL_RAF_IS95A)
1509 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1510 ril_radio_tech_to_string(RADIO_TECH_IS95A));
1511 if (reply->rat & RIL_RAF_IS95B)
1512 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1513 ril_radio_tech_to_string(RADIO_TECH_IS95B));
1514 if (reply->rat & RIL_RAF_1xRTT)
1515 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1516 ril_radio_tech_to_string(RADIO_TECH_1xRTT));
1517 if (reply->rat & RIL_RAF_EVDO_0)
1518 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1519 ril_radio_tech_to_string(RADIO_TECH_EVDO_0));
1520 if (reply->rat & RIL_RAF_EVDO_A)
1521 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1522 ril_radio_tech_to_string(RADIO_TECH_EVDO_A));
1523 if (reply->rat & RIL_RAF_HSDPA)
1524 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1525 ril_radio_tech_to_string(RADIO_TECH_HSDPA));
1526 if (reply->rat & RIL_RAF_HSUPA)
1527 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1528 ril_radio_tech_to_string(RADIO_TECH_HSUPA));
1529 if (reply->rat & RIL_RAF_HSPA)
1530 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1531 ril_radio_tech_to_string(RADIO_TECH_HSPA));
1532 if (reply->rat & RIL_RAF_EVDO_B)
1533 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1534 ril_radio_tech_to_string(RADIO_TECH_EVDO_B));
1535 if (reply->rat & RIL_RAF_EHRPD)
1536 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1537 ril_radio_tech_to_string(RADIO_TECH_EHRPD));
1538 if (reply->rat & RIL_RAF_LTE)
1539 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1540 ril_radio_tech_to_string(RADIO_TECH_LTE));
1541 if (reply->rat & RIL_RAF_HSPAP)
1542 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1543 ril_radio_tech_to_string(RADIO_TECH_HSPAP));
1544 if (reply->rat & RIL_RAF_GSM)
1545 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1546 ril_radio_tech_to_string(RADIO_TECH_GSM));
1547 if (reply->rat & RIL_RAF_TD_SCDMA)
1548 g_ril_append_print_buf(gril, "%s%s,", print_buf,
1549 ril_radio_tech_to_string(RADIO_TECH_TD_SCDMA));
1550
1551 g_ril_append_print_buf(gril, "%s],%s,%s}", print_buf,
1552 reply->modem_uuid,
1553 ril_rc_status_to_string(reply->status));
1554
1555 g_ril_print_response(gril, message);
1556
1557end:
1558 return reply;
1559}
14591560
=== modified file 'gril/grilreply.h'
--- gril/grilreply.h 2015-03-18 14:05:58 +0000
+++ gril/grilreply.h 2016-07-01 17:24:58 +0000
@@ -97,6 +97,15 @@
97 void *data;97 void *data;
98};98};
9999
100struct reply_radio_capability {
101 int version;
102 int session;
103 int phase;
104 int rat;
105 char modem_uuid[RIL_MAX_UUID_LENGTH];
106 int status;
107};
108
100void g_ril_reply_free_avail_ops(struct reply_avail_ops *reply);109void g_ril_reply_free_avail_ops(struct reply_avail_ops *reply);
101110
102struct reply_avail_ops *g_ril_reply_parse_avail_ops(GRil *gril,111struct reply_avail_ops *g_ril_reply_parse_avail_ops(GRil *gril,
@@ -178,6 +187,9 @@
178struct parcel_str_array *g_ril_reply_oem_hook_strings(GRil *gril,187struct parcel_str_array *g_ril_reply_oem_hook_strings(GRil *gril,
179 const struct ril_msg *message);188 const struct ril_msg *message);
180189
190struct reply_radio_capability *g_ril_reply_parse_get_radio_capability(
191 GRil *gril, const struct ril_msg *message);
192
181#ifdef __cplusplus193#ifdef __cplusplus
182}194}
183#endif195#endif
184196
=== modified file 'gril/grilrequest.c'
--- gril/grilrequest.c 2015-09-29 08:47:19 +0000
+++ gril/grilrequest.c 2016-07-01 17:24:58 +0000
@@ -112,6 +112,7 @@
112 unsigned char *comm_path = db_path;112 unsigned char *comm_path = db_path;
113 char *hex_path = NULL;113 char *hex_path = NULL;
114 int len = 0;114 int len = 0;
115 enum ofono_ril_vendor vendor = g_ril_vendor(ril);
115116
116 if (path_len > 0 && path_len < 7) {117 if (path_len > 0 && path_len < 7) {
117 memcpy(db_path, path, path_len);118 memcpy(db_path, path, path_len);
@@ -133,7 +134,8 @@
133 * ETSI TS 102 221, section 8.4.2 (we are accessing the card in mode134 * ETSI TS 102 221, section 8.4.2 (we are accessing the card in mode
134 * "select by path from MF", see 3gpp 27.007, +CRSM).135 * "select by path from MF", see 3gpp 27.007, +CRSM).
135 */136 */
136 if (g_ril_vendor(ril) == OFONO_RIL_VENDOR_MTK && len >= (int) ROOTMF_SZ137 if ((vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2)
138 && len >= (int) ROOTMF_SZ
137 && memcmp(db_path, ROOTMF, ROOTMF_SZ) == 0) {139 && memcmp(db_path, ROOTMF, ROOTMF_SZ) == 0) {
138 comm_path = db_path + ROOTMF_SZ;140 comm_path = db_path + ROOTMF_SZ;
139 len -= ROOTMF_SZ;141 len -= ROOTMF_SZ;
@@ -242,10 +244,11 @@
242 gchar *auth_str;244 gchar *auth_str;
243 gchar *profile_str;245 gchar *profile_str;
244 int num_param = SETUP_DATA_CALL_PARAMS;246 int num_param = SETUP_DATA_CALL_PARAMS;
247 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
245248
246 DBG("");249 DBG("");
247250
248 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)251 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2)
249 num_param = SETUP_DATA_CALL_PARAMS + 1;252 num_param = SETUP_DATA_CALL_PARAMS + 1;
250253
251 /*254 /*
@@ -281,7 +284,7 @@
281 profile_str = DATA_PROFILE_CBS_STR;284 profile_str = DATA_PROFILE_CBS_STR;
282 break;285 break;
283 case RIL_DATA_PROFILE_MTK_MMS:286 case RIL_DATA_PROFILE_MTK_MMS:
284 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK) {287 if (vendor == OFONO_RIL_VENDOR_MTK) {
285 profile_str = DATA_PROFILE_MTK_MMS_STR;288 profile_str = DATA_PROFILE_MTK_MMS_STR;
286 break;289 break;
287 }290 }
@@ -335,7 +338,7 @@
335 auth_str,338 auth_str,
336 protocol_str);339 protocol_str);
337340
338 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK) {341 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2) {
339 /* MTK request_cid parameter */342 /* MTK request_cid parameter */
340 char cid_str[MAX_CID_DIGITS + 1];343 char cid_str[MAX_CID_DIGITS + 1];
341344
@@ -361,6 +364,8 @@
361 const struct req_sim_read_info *req,364 const struct req_sim_read_info *req,
362 struct parcel *rilp)365 struct parcel *rilp)
363{366{
367 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
368
364 parcel_init(rilp);369 parcel_init(rilp);
365370
366 parcel_w_int32(rilp, CMD_GET_RESPONSE);371 parcel_w_int32(rilp, CMD_GET_RESPONSE);
@@ -396,7 +401,7 @@
396 * It looks like this field selects one or another SIM application, but401 * It looks like this field selects one or another SIM application, but
397 * we use only one at a time so using zero here seems safe.402 * we use only one at a time so using zero here seems safe.
398 */403 */
399 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)404 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2)
400 parcel_w_int32(rilp, 0);405 parcel_w_int32(rilp, 0);
401406
402 return TRUE;407 return TRUE;
@@ -409,6 +414,8 @@
409 const struct req_sim_read_binary *req,414 const struct req_sim_read_binary *req,
410 struct parcel *rilp)415 struct parcel *rilp)
411{416{
417 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
418
412 g_ril_append_print_buf(gril,419 g_ril_append_print_buf(gril,
413 "(cmd=0x%.2X,efid=0x%.4X,",420 "(cmd=0x%.2X,efid=0x%.4X,",
414 CMD_READ_BINARY,421 CMD_READ_BINARY,
@@ -430,7 +437,7 @@
430 parcel_w_string(rilp, req->aid_str);437 parcel_w_string(rilp, req->aid_str);
431438
432 /* sessionId, specific to latest MTK modems (harmless for older ones) */439 /* sessionId, specific to latest MTK modems (harmless for older ones) */
433 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)440 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2)
434 parcel_w_int32(rilp, 0);441 parcel_w_int32(rilp, 0);
435442
436 return TRUE;443 return TRUE;
@@ -443,6 +450,8 @@
443 const struct req_sim_read_record *req,450 const struct req_sim_read_record *req,
444 struct parcel *rilp)451 struct parcel *rilp)
445{452{
453 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
454
446 parcel_init(rilp);455 parcel_init(rilp);
447 parcel_w_int32(rilp, CMD_READ_RECORD);456 parcel_w_int32(rilp, CMD_READ_RECORD);
448 parcel_w_int32(rilp, req->fileid);457 parcel_w_int32(rilp, req->fileid);
@@ -464,7 +473,7 @@
464 parcel_w_string(rilp, req->aid_str); /* AID (Application ID) */473 parcel_w_string(rilp, req->aid_str); /* AID (Application ID) */
465474
466 /* sessionId, specific to latest MTK modems (harmless for older ones) */475 /* sessionId, specific to latest MTK modems (harmless for older ones) */
467 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)476 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2)
468 parcel_w_int32(rilp, 0);477 parcel_w_int32(rilp, 0);
469478
470 return TRUE;479 return TRUE;
@@ -477,6 +486,7 @@
477 const struct req_sim_write_binary *req,486 const struct req_sim_write_binary *req,
478 struct parcel *rilp)487 struct parcel *rilp)
479{488{
489 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
480 char *hex_data;490 char *hex_data;
481 int p1, p2;491 int p1, p2;
482492
@@ -503,7 +513,7 @@
503 parcel_w_string(rilp, req->aid_str); /* AID (Application ID) */513 parcel_w_string(rilp, req->aid_str); /* AID (Application ID) */
504514
505 /* sessionId, specific to latest MTK modems (harmless for older ones) */515 /* sessionId, specific to latest MTK modems (harmless for older ones) */
506 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)516 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2)
507 parcel_w_int32(rilp, 0);517 parcel_w_int32(rilp, 0);
508518
509 g_ril_append_print_buf(gril,519 g_ril_append_print_buf(gril,
@@ -543,6 +553,7 @@
543 const struct req_sim_write_record *req,553 const struct req_sim_write_record *req,
544 struct parcel *rilp)554 struct parcel *rilp)
545{555{
556 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
546 char *hex_data;557 char *hex_data;
547 int p2;558 int p2;
548559
@@ -568,7 +579,7 @@
568 parcel_w_string(rilp, req->aid_str); /* AID (Application ID) */579 parcel_w_string(rilp, req->aid_str); /* AID (Application ID) */
569580
570 /* sessionId, specific to latest MTK modems (harmless for older ones) */581 /* sessionId, specific to latest MTK modems (harmless for older ones) */
571 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)582 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2)
572 parcel_w_int32(rilp, 0);583 parcel_w_int32(rilp, 0);
573584
574 g_ril_append_print_buf(gril,585 g_ril_append_print_buf(gril,
@@ -1103,6 +1114,7 @@
1103 const char *mccmnc,1114 const char *mccmnc,
1104 struct parcel *rilp)1115 struct parcel *rilp)
1105{1116{
1117 enum ofono_ril_vendor vendor = g_ril_vendor(gril);
1106 const char *proto_str;1118 const char *proto_str;
1107 const int auth_type = RIL_AUTH_ANY;1119 const int auth_type = RIL_AUTH_ANY;
11081120
@@ -1121,12 +1133,21 @@
1121 ril_authtype_to_string(auth_type),1133 ril_authtype_to_string(auth_type),
1122 user, passwd);1134 user, passwd);
11231135
1124 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK) {1136 if (vendor == OFONO_RIL_VENDOR_MTK || vendor == OFONO_RIL_VENDOR_MTK2) {
1125 parcel_w_string(rilp, mccmnc);1137 parcel_w_string(rilp, mccmnc);
1126 g_ril_append_print_buf(gril, "%s,%s)", print_buf, mccmnc);1138 g_ril_append_print_buf(gril, "%s,%s", print_buf, mccmnc);
1127 } else {1139 if (vendor == OFONO_RIL_VENDOR_MTK2) {
1128 g_ril_append_print_buf(gril, "%s)", print_buf);1140 int can_handle_ims = 0;
1141
1142 parcel_w_int32(rilp, can_handle_ims);
1143 /* dualApnPlmnList */
1144 parcel_w_string(rilp, NULL);
1145 g_ril_append_print_buf(gril, "%s,%d,(null)", print_buf,
1146 can_handle_ims);
1147 }
1129 }1148 }
1149
1150 g_ril_append_print_buf(gril, "%s)", print_buf);
1130}1151}
11311152
1132void g_ril_request_set_uicc_subscription(GRil *gril, int slot_id,1153void g_ril_request_set_uicc_subscription(GRil *gril, int slot_id,
11331154
=== modified file 'gril/grilunsol.c'
--- gril/grilunsol.c 2016-03-11 04:20:17 +0000
+++ gril/grilunsol.c 2016-07-01 17:24:58 +0000
@@ -61,12 +61,22 @@
61 size = parcel_r_int32(&rilp);61 size = parcel_r_int32(&rilp);
62 version = parcel_r_int32(&rilp);62 version = parcel_r_int32(&rilp);
6363
64 /*
65 * For something that looks like a bug we get an extra int in mtk2
66 * modems. RIL version is the second integer in this case. This
67 * happens when we get duplicated connected events, which should
68 * not happen either. In these cases the first event has the right
69 * size, but not those appearing after.
70 */
71 if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK2 && size > 1)
72 version = parcel_r_int32(&rilp);
73
64 if (rilp.malformed) {74 if (rilp.malformed) {
65 ofono_error("%s: malformed parcel", __func__);75 ofono_error("%s: malformed parcel", __func__);
66 version = RIL_VERSION_UNSPECIFIED;76 version = RIL_VERSION_UNSPECIFIED;
67 }77 }
6878
69 g_ril_append_print_buf(gril, "{size:%d, [%d, ...]}", size, version);79 g_ril_append_print_buf(gril, "{size: %d, [%d]}", size, version);
70 g_ril_print_unsol(gril, message);80 g_ril_print_unsol(gril, message);
7181
72 return version;82 return version;
7383
=== modified file 'gril/grilutil.c'
--- gril/grilutil.c 2015-11-10 09:12:03 +0000
+++ gril/grilutil.c 2016-07-01 17:24:58 +0000
@@ -268,6 +268,10 @@
268 return "HSPAP";268 return "HSPAP";
269 case RADIO_TECH_GSM:269 case RADIO_TECH_GSM:
270 return "GSM";270 return "GSM";
271 case RADIO_TECH_TD_SCDMA:
272 return "TD_SCDMA";
273 case RADIO_TECH_IWLAN:
274 return "IWLAN";
271 case MTK_RADIO_TECH_HSDPAP:275 case MTK_RADIO_TECH_HSDPAP:
272 return "MTK_HSDPAP";276 return "MTK_HSDPAP";
273 case MTK_RADIO_TECH_HSDPAP_UPA:277 case MTK_RADIO_TECH_HSDPAP_UPA:
@@ -517,6 +521,54 @@
517 return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";521 return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
518 case RIL_REQUEST_SET_INITIAL_ATTACH_APN:522 case RIL_REQUEST_SET_INITIAL_ATTACH_APN:
519 return "RIL_REQUEST_SET_INITIAL_ATTACH_APN";523 return "RIL_REQUEST_SET_INITIAL_ATTACH_APN";
524 case RIL_REQUEST_IMS_REGISTRATION_STATE:
525 return "RIL_REQUEST_IMS_REGISTRATION_STATE";
526 case RIL_REQUEST_IMS_SEND_SMS:
527 return "RIL_REQUEST_IMS_SEND_SMS";
528 case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC:
529 return "RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC";
530 case RIL_REQUEST_SIM_OPEN_CHANNEL:
531 return "RIL_REQUEST_SIM_OPEN_CHANNEL";
532 case RIL_REQUEST_SIM_CLOSE_CHANNEL:
533 return "RIL_REQUEST_SIM_CLOSE_CHANNEL";
534 case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL:
535 return "RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL";
536 case RIL_REQUEST_NV_READ_ITEM:
537 return "RIL_REQUEST_NV_READ_ITEM";
538 case RIL_REQUEST_NV_WRITE_ITEM:
539 return "RIL_REQUEST_NV_WRITE_ITEM";
540 case RIL_REQUEST_NV_WRITE_CDMA_PRL:
541 return "RIL_REQUEST_NV_WRITE_CDMA_PRL";
542 case RIL_REQUEST_NV_RESET_CONFIG:
543 return "RIL_REQUEST_NV_RESET_CONFIG";
544 case RIL_REQUEST_SET_UICC_SUBSCRIPTION :
545 return "RIL_REQUEST_SET_UICC_SUBSCRIPTION ";
546 case RIL_REQUEST_ALLOW_DATA :
547 return "RIL_REQUEST_ALLOW_DATA ";
548 case RIL_REQUEST_GET_HARDWARE_CONFIG:
549 return "RIL_REQUEST_GET_HARDWARE_CONFIG";
550 case RIL_REQUEST_SIM_AUTHENTICATION:
551 return "RIL_REQUEST_SIM_AUTHENTICATION";
552 case RIL_REQUEST_GET_DC_RT_INFO:
553 return "RIL_REQUEST_GET_DC_RT_INFO";
554 case RIL_REQUEST_SET_DC_RT_INFO_RATE:
555 return "RIL_REQUEST_SET_DC_RT_INFO_RATE";
556 case RIL_REQUEST_SET_DATA_PROFILE:
557 return "RIL_REQUEST_SET_DATA_PROFILE";
558 case RIL_REQUEST_SHUTDOWN:
559 return "RIL_REQUEST_SHUTDOWN";
560 case RIL_REQUEST_GET_RADIO_CAPABILITY:
561 return "RIL_REQUEST_GET_RADIO_CAPABILITY";
562 case RIL_REQUEST_SET_RADIO_CAPABILITY:
563 return "RIL_REQUEST_SET_RADIO_CAPABILITY";
564 case RIL_REQUEST_START_LCE:
565 return "RIL_REQUEST_START_LCE";
566 case RIL_REQUEST_STOP_LCE:
567 return "RIL_REQUEST_STOP_LCE";
568 case RIL_REQUEST_PULL_LCEDATA:
569 return "RIL_REQUEST_PULL_LCEDATA";
570 case RIL_REQUEST_GET_ACTIVITY_INFO:
571 return "RIL_REQUEST_GET_ACTIVITY_INFO";
520 default:572 default:
521 return "<INVALID>";573 return "<INVALID>";
522 }574 }
@@ -595,8 +647,30 @@
595 return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";647 return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
596 case RIL_UNSOL_RIL_CONNECTED:648 case RIL_UNSOL_RIL_CONNECTED:
597 return "UNSOL_RIL_CONNECTED";649 return "UNSOL_RIL_CONNECTED";
650 case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
651 return "RIL_UNSOL_VOICE_RADIO_TECH_CHANGED";
652 case RIL_UNSOL_CELL_INFO_LIST:
653 return "RIL_UNSOL_CELL_INFO_LIST";
654 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
655 return "RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED";
656 case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED:
657 return "RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED";
658 case RIL_UNSOL_SRVCC_STATE_NOTIFY:
659 return "RIL_UNSOL_SRVCC_STATE_NOTIFY";
660 case RIL_UNSOL_HARDWARE_CONFIG_CHANGED:
661 return "RIL_UNSOL_HARDWARE_CONFIG_CHANGED";
662 case RIL_UNSOL_DC_RT_INFO_CHANGED:
663 return "RIL_UNSOL_DC_RT_INFO_CHANGED";
664 case RIL_UNSOL_RADIO_CAPABILITY:
665 return "RIL_UNSOL_RADIO_CAPABILITY";
666 case RIL_UNSOL_ON_SS:
667 return "RIL_UNSOL_ON_SS";
668 case RIL_UNSOL_STK_CC_ALPHA_NOTIFY:
669 return "RIL_UNSOL_STK_CC_ALPHA_NOTIFY";
670 case RIL_UNSOL_LCEDATA_RECV:
671 return "RIL_UNSOL_LCEDATA_RECV";
598 default:672 default:
599 return "<unknown request>";673 return "<unknown event>";
600 }674 }
601}675}
602676
@@ -660,6 +734,38 @@
660 }734 }
661}735}
662736
737const char *ril_rc_phase_to_string(int phase)
738{
739 switch (phase) {
740 case RIL_RC_PHASE_CONFIGURED:
741 return "RIL_RC_PHASE_CONFIGURED";
742 case RIL_RC_PHASE_START:
743 return "RIL_RC_PHASE_START";
744 case RIL_RC_PHASE_APPLY:
745 return "RIL_RC_PHASE_APPLY";
746 case RIL_RC_PHASE_UNSOL_RSP:
747 return "RIL_RC_PHASE_UNSOL_RSP";
748 case RIL_RC_PHASE_FINISH:
749 return "RIL_RC_PHASE_FINISH";
750 default:
751 return "<UNKNOWN RC PHASE>";
752 }
753}
754
755const char *ril_rc_status_to_string(int status)
756{
757 switch (status) {
758 case RIL_RC_STATUS_NONE:
759 return "RC_STATUS_NONE";
760 case RIL_RC_STATUS_SUCCESS:
761 return "RC_STATUS_SUCCESS";
762 case RIL_RC_STATUS_FAIL:
763 return "RC_STATUS_FAIL";
764 default:
765 return "<UNKNOWN RC STATUS>";
766 }
767}
768
663void g_ril_util_debug_hexdump(gboolean in, const unsigned char *buf, gsize len,769void g_ril_util_debug_hexdump(gboolean in, const unsigned char *buf, gsize len,
664 GRilDebugFunc debugf, gpointer user_data)770 GRilDebugFunc debugf, gpointer user_data)
665{771{
666772
=== modified file 'gril/grilutil.h'
--- gril/grilutil.h 2015-11-10 09:11:52 +0000
+++ gril/grilutil.h 2016-07-01 17:24:58 +0000
@@ -44,6 +44,8 @@
44const char *ril_request_id_to_string(int req);44const char *ril_request_id_to_string(int req);
45const char *ril_unsol_request_to_string(int request);45const char *ril_unsol_request_to_string(int request);
46const char *ril_pdp_fail_to_string(int status);46const char *ril_pdp_fail_to_string(int status);
47const char *ril_rc_phase_to_string(int phase);
48const char *ril_rc_status_to_string(int status);
4749
48void g_ril_util_debug_hexdump(gboolean in, const unsigned char *buf, gsize len,50void g_ril_util_debug_hexdump(gboolean in, const unsigned char *buf, gsize len,
49 GRilDebugFunc debugf, gpointer user_data);51 GRilDebugFunc debugf, gpointer user_data);
5052
=== modified file 'gril/ril_constants.h'
--- gril/ril_constants.h 2016-03-11 04:20:17 +0000
+++ gril/ril_constants.h 2016-07-01 17:24:58 +0000
@@ -26,6 +26,8 @@
2626
27#define RIL_VERSION_UNSPECIFIED 027#define RIL_VERSION_UNSPECIFIED 0
2828
29#define RIL_MAX_UUID_LENGTH 64
30
29/* Error Codes */31/* Error Codes */
30#define RIL_E_SUCCESS 032#define RIL_E_SUCCESS 0
31#define RIL_E_RADIO_NOT_AVAILABLE 133#define RIL_E_RADIO_NOT_AVAILABLE 1
@@ -140,6 +142,8 @@
140#define RADIO_TECH_LTE 14142#define RADIO_TECH_LTE 14
141#define RADIO_TECH_HSPAP 15143#define RADIO_TECH_HSPAP 15
142#define RADIO_TECH_GSM 16144#define RADIO_TECH_GSM 16
145#define RADIO_TECH_TD_SCDMA 17
146#define RADIO_TECH_IWLAN 18
143/* MTK specific values for radio technologies */147/* MTK specific values for radio technologies */
144#define MTK_RADIO_TECH_BASE 128148#define MTK_RADIO_TECH_BASE 128
145#define MTK_RADIO_TECH_HSDPAP (MTK_RADIO_TECH_BASE + 1)149#define MTK_RADIO_TECH_HSDPAP (MTK_RADIO_TECH_BASE + 1)
@@ -372,6 +376,30 @@
372#define RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS 107376#define RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS 107
373#define RIL_REQUEST_VOICE_RADIO_TECH 108377#define RIL_REQUEST_VOICE_RADIO_TECH 108
374#define RIL_REQUEST_SET_INITIAL_ATTACH_APN 111378#define RIL_REQUEST_SET_INITIAL_ATTACH_APN 111
379#define RIL_REQUEST_IMS_REGISTRATION_STATE 112
380#define RIL_REQUEST_IMS_SEND_SMS 113
381#define RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC 114
382#define RIL_REQUEST_SIM_OPEN_CHANNEL 115
383#define RIL_REQUEST_SIM_CLOSE_CHANNEL 116
384#define RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL 117
385#define RIL_REQUEST_NV_READ_ITEM 118
386#define RIL_REQUEST_NV_WRITE_ITEM 119
387#define RIL_REQUEST_NV_WRITE_CDMA_PRL 120
388#define RIL_REQUEST_NV_RESET_CONFIG 121
389#define RIL_REQUEST_SET_UICC_SUBSCRIPTION 122
390#define RIL_REQUEST_ALLOW_DATA 123
391#define RIL_REQUEST_GET_HARDWARE_CONFIG 124
392#define RIL_REQUEST_SIM_AUTHENTICATION 125
393#define RIL_REQUEST_GET_DC_RT_INFO 126
394#define RIL_REQUEST_SET_DC_RT_INFO_RATE 127
395#define RIL_REQUEST_SET_DATA_PROFILE 128
396#define RIL_REQUEST_SHUTDOWN 129
397#define RIL_REQUEST_GET_RADIO_CAPABILITY 130
398#define RIL_REQUEST_SET_RADIO_CAPABILITY 131
399#define RIL_REQUEST_START_LCE 132
400#define RIL_REQUEST_STOP_LCE 133
401#define RIL_REQUEST_PULL_LCEDATA 134
402#define RIL_REQUEST_GET_ACTIVITY_INFO 135
375403
376/* RIL Unsolicited Messages */404/* RIL Unsolicited Messages */
377#define RIL_UNSOL_RESPONSE_BASE 1000405#define RIL_UNSOL_RESPONSE_BASE 1000
@@ -411,6 +439,16 @@
411#define RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE 1033439#define RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE 1033
412#define RIL_UNSOL_RIL_CONNECTED 1034440#define RIL_UNSOL_RIL_CONNECTED 1034
413#define RIL_UNSOL_VOICE_RADIO_TECH_CHANGED 1035441#define RIL_UNSOL_VOICE_RADIO_TECH_CHANGED 1035
442#define RIL_UNSOL_CELL_INFO_LIST 1036
443#define RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED 1037
444#define RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED 1038
445#define RIL_UNSOL_SRVCC_STATE_NOTIFY 1039
446#define RIL_UNSOL_HARDWARE_CONFIG_CHANGED 1040
447#define RIL_UNSOL_DC_RT_INFO_CHANGED 1041
448#define RIL_UNSOL_RADIO_CAPABILITY 1042
449#define RIL_UNSOL_ON_SS 1043
450#define RIL_UNSOL_STK_CC_ALPHA_NOTIFY 1044
451#define RIL_UNSOL_LCEDATA_RECV 1045
414452
415/* Suplementary services Service class*/453/* Suplementary services Service class*/
416#define SERVICE_CLASS_NONE 0454#define SERVICE_CLASS_NONE 0
@@ -427,4 +465,36 @@
427#define RIL_REG_STATE_EMERGENCY_DENIED 13465#define RIL_REG_STATE_EMERGENCY_DENIED 13
428#define RIL_REG_STATE_EMERGENCY_UNKNOWN 14466#define RIL_REG_STATE_EMERGENCY_UNKNOWN 14
429467
468/* Radio capability phases */
469#define RIL_RC_PHASE_CONFIGURED 0
470#define RIL_RC_PHASE_START 1
471#define RIL_RC_PHASE_APPLY 2
472#define RIL_RC_PHASE_UNSOL_RSP 3
473#define RIL_RC_PHASE_FINISH 4
474
475/* Radio access family, as flag */
476#define RIL_RAF_UNKNOWN (1 << RADIO_TECH_UNKNOWN)
477#define RIL_RAF_GPRS (1 << RADIO_TECH_GPRS)
478#define RIL_RAF_EDGE (1 << RADIO_TECH_EDGE)
479#define RIL_RAF_UMTS (1 << RADIO_TECH_UMTS)
480#define RIL_RAF_IS95A (1 << RADIO_TECH_IS95A)
481#define RIL_RAF_IS95B (1 << RADIO_TECH_IS95B)
482#define RIL_RAF_1xRTT (1 << RADIO_TECH_1xRTT)
483#define RIL_RAF_EVDO_0 (1 << RADIO_TECH_EVDO_0)
484#define RIL_RAF_EVDO_A (1 << RADIO_TECH_EVDO_A)
485#define RIL_RAF_HSDPA (1 << RADIO_TECH_HSDPA)
486#define RIL_RAF_HSUPA (1 << RADIO_TECH_HSUPA)
487#define RIL_RAF_HSPA (1 << RADIO_TECH_HSPA)
488#define RIL_RAF_EVDO_B (1 << RADIO_TECH_EVDO_B)
489#define RIL_RAF_EHRPD (1 << RADIO_TECH_EHRPD)
490#define RIL_RAF_LTE (1 << RADIO_TECH_LTE)
491#define RIL_RAF_HSPAP (1 << RADIO_TECH_HSPAP)
492#define RIL_RAF_GSM (1 << RADIO_TECH_GSM)
493#define RIL_RAF_TD_SCDMA (1 << RADIO_TECH_TD_SCDMA)
494
495/* Radio capability status */
496#define RIL_RC_STATUS_NONE 0
497#define RIL_RC_STATUS_SUCCESS 1
498#define RIL_RC_STATUS_FAIL 2
499
430#endif /*__RIL_CONSTANTS_H*/500#endif /*__RIL_CONSTANTS_H*/
431501
=== modified file 'include/modem.h'
--- include/modem.h 2015-07-31 12:37:46 +0000
+++ include/modem.h 2016-07-01 17:24:58 +0000
@@ -72,9 +72,6 @@
7272
73 /* Populate the atoms available online */73 /* Populate the atoms available online */
74 void (*post_online)(struct ofono_modem *modem);74 void (*post_online)(struct ofono_modem *modem);
75
76 /* Is it a multi-SIM standby modem? */
77 ofono_bool_t (*is_standby)(struct ofono_modem *modem);
78};75};
7976
80void ofono_modem_add_interface(struct ofono_modem *modem,77void ofono_modem_add_interface(struct ofono_modem *modem,
@@ -122,8 +119,6 @@
122 ofono_bool_t value);119 ofono_bool_t value);
123ofono_bool_t ofono_modem_get_driver_watches_sim(struct ofono_modem *modem);120ofono_bool_t ofono_modem_get_driver_watches_sim(struct ofono_modem *modem);
124121
125ofono_bool_t ofono_modem_is_standby(struct ofono_modem *modem);
126
127int ofono_modem_driver_register(const struct ofono_modem_driver *);122int ofono_modem_driver_register(const struct ofono_modem_driver *);
128void ofono_modem_driver_unregister(const struct ofono_modem_driver *);123void ofono_modem_driver_unregister(const struct ofono_modem_driver *);
129124
130125
=== modified file 'plugins/infineon.c'
--- plugins/infineon.c 2015-09-29 08:48:01 +0000
+++ plugins/infineon.c 2016-07-01 17:24:58 +0000
@@ -32,11 +32,12 @@
32#include "ofono.h"32#include "ofono.h"
3333
34#include "drivers/rilmodem/vendor.h"34#include "drivers/rilmodem/vendor.h"
35#include "gril.h"
35#include "ril.h"36#include "ril.h"
3637
37static int inf_probe(struct ofono_modem *modem)38static int inf_probe(struct ofono_modem *modem)
38{39{
39 return ril_create(modem, OFONO_RIL_VENDOR_INFINEON);40 return ril_create(modem, OFONO_RIL_VENDOR_INFINEON, NULL, NULL, NULL);
40}41}
4142
42static struct ofono_modem_driver infineon_driver = {43static struct ofono_modem_driver infineon_driver = {
4344
=== modified file 'plugins/mtk.c'
--- plugins/mtk.c 2015-09-29 08:48:01 +0000
+++ plugins/mtk.c 2016-07-01 17:24:58 +0000
@@ -62,6 +62,7 @@
62#include <grilrequest.h>62#include <grilrequest.h>
63#include <grilunsol.h>63#include <grilunsol.h>
6464
65#include "drivers/rilmodem/rilutil.h"
65#include "drivers/rilmodem/rilmodem.h"66#include "drivers/rilmodem/rilmodem.h"
66#include "drivers/rilmodem/vendor.h"67#include "drivers/rilmodem/vendor.h"
6768
@@ -1669,11 +1670,6 @@
1669 return 0;1670 return 0;
1670}1671}
16711672
1672static ofono_bool_t mtk_is_standby(struct ofono_modem *modem)
1673{
1674 return TRUE;
1675}
1676
1677static struct ofono_modem_driver mtk_driver = {1673static struct ofono_modem_driver mtk_driver = {
1678 .name = "mtk",1674 .name = "mtk",
1679 .probe = mtk_probe,1675 .probe = mtk_probe,
@@ -1684,7 +1680,6 @@
1684 .post_sim = mtk_post_sim,1680 .post_sim = mtk_post_sim,
1685 .post_online = mtk_post_online,1681 .post_online = mtk_post_online,
1686 .set_online = mtk_set_online,1682 .set_online = mtk_set_online,
1687 .is_standby = mtk_is_standby,
1688};1683};
16891684
1690static int mtk_init(void)1685static int mtk_init(void)
16911686
=== added file 'plugins/mtk2.c'
--- plugins/mtk2.c 1970-01-01 00:00:00 +0000
+++ plugins/mtk2.c 2016-07-01 17:24:58 +0000
@@ -0,0 +1,93 @@
1/*
2 *
3 * oFono - Open Source Telephony - RIL-based devices
4 *
5 * Copyright (C) 2016 Canonical Ltd.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21
22#ifdef HAVE_CONFIG_H
23#include <config.h>
24#endif
25
26#define OFONO_API_SUBJECT_TO_CHANGE
27
28#include <ofono/plugin.h>
29#include <ofono/log.h>
30#include <ofono/modem.h>
31
32#include "ofono.h"
33
34#include "drivers/rilmodem/rilmodem.h"
35#include "drivers/rilmodem/vendor.h"
36#include "drivers/mtk2modem/mtk2modem.h"
37#include "drivers/mtk2modem/mtk2util.h"
38#include "gril.h"
39#include "ril.h"
40
41static const char *mtk2_get_driver_type(enum ofono_atom_type atom)
42{
43 switch (atom) {
44 case OFONO_ATOM_TYPE_VOICECALL:
45 case OFONO_ATOM_TYPE_GPRS:
46 return MTK2MODEM;
47 default:
48 return RILMODEM;
49 }
50}
51
52static int mtk2_probe(struct ofono_modem *modem)
53{
54 return ril_create(modem, OFONO_RIL_VENDOR_MTK2,
55 mtk2_request_id_to_string,
56 mtk2_unsol_request_to_string,
57 mtk2_get_driver_type);
58}
59
60static struct ofono_modem_driver mtk2_driver = {
61 .name = "mtk2",
62 .probe = mtk2_probe,
63 .remove = ril_remove,
64 .enable = ril_enable,
65 .disable = ril_disable,
66 .pre_sim = ril_pre_sim,
67 .post_sim = ril_post_sim,
68 .post_online = ril_post_online,
69 .set_online = ril_set_online,
70};
71
72/*
73 * This plugin is a device plugin for MTK modems. It can handle newer modems
74 * than those that use the old mtk.c plugin, therefore the name mtk2.
75 */
76static int mtk2_init(void)
77{
78 int retval = ofono_modem_driver_register(&mtk2_driver);
79
80 if (retval)
81 DBG("ofono_modem_driver_register returned: %d", retval);
82
83 return retval;
84}
85
86static void mtk2_exit(void)
87{
88 DBG("");
89 ofono_modem_driver_unregister(&mtk2_driver);
90}
91
92OFONO_PLUGIN_DEFINE(mtk2, "MTK v2 modem plugin",
93 VERSION, OFONO_PLUGIN_PRIORITY_DEFAULT, mtk2_init, mtk2_exit)
094
=== modified file 'plugins/qcom-msim.c'
--- plugins/qcom-msim.c 2016-03-10 10:15:39 +0000
+++ plugins/qcom-msim.c 2016-07-01 17:24:58 +0000
@@ -31,9 +31,23 @@
3131
32#include "ofono.h"32#include "ofono.h"
3333
34#include "drivers/rilmodem/rilmodem.h"
34#include "drivers/rilmodem/vendor.h"35#include "drivers/rilmodem/vendor.h"
36#include "drivers/qcommsimmodem/qcom_msim_modem.h"
37#include "gril.h"
35#include "ril.h"38#include "ril.h"
3639
40static const char *qcom_msim_get_driver_type(enum ofono_atom_type atom)
41{
42 switch (atom) {
43 case OFONO_ATOM_TYPE_GPRS:
44 case OFONO_ATOM_TYPE_RADIO_SETTINGS:
45 return QCOMMSIMMODEM;
46 default:
47 return RILMODEM;
48 }
49}
50
37static int qcom_msim_probe(struct ofono_modem *modem)51static int qcom_msim_probe(struct ofono_modem *modem)
38{52{
39 int slot_id = ofono_modem_get_integer(modem, "Slot");53 int slot_id = ofono_modem_get_integer(modem, "Slot");
@@ -48,7 +62,8 @@
48 g_free(socket);62 g_free(socket);
49 }63 }
5064
51 return ril_create(modem, OFONO_RIL_VENDOR_QCOM_MSIM);65 return ril_create(modem, OFONO_RIL_VENDOR_QCOM_MSIM, NULL, NULL,
66 qcom_msim_get_driver_type);
52}67}
5368
54static struct ofono_modem_driver qcom_msim_driver = {69static struct ofono_modem_driver qcom_msim_driver = {
5570
=== modified file 'plugins/ril.c'
--- plugins/ril.c 2016-03-14 08:16:40 +0000
+++ plugins/ril.c 2016-07-01 17:24:58 +0000
@@ -64,9 +64,13 @@
6464
65#include "ril.h"65#include "ril.h"
66#include "drivers/rilmodem/rilmodem.h"66#include "drivers/rilmodem/rilmodem.h"
67#include "drivers/rilmodem/rilutil.h"
67#include "drivers/rilmodem/vendor.h"68#include "drivers/rilmodem/vendor.h"
68#include "drivers/qcommsimmodem/qcom_msim_modem.h"69#include "drivers/qcommsimmodem/qcom_msim_modem.h"
6970
71#define MULTISIM_SLOT_0 0
72#define MULTISIM_SLOT_1 1
73
70#define MAX_SIM_STATUS_RETRIES 1574#define MAX_SIM_STATUS_RETRIES 15
7175
72/* this gives 30s for rild to initialize */76/* this gives 30s for rild to initialize */
@@ -77,14 +81,37 @@
77 GRil *ril;81 GRil *ril;
78 enum ofono_ril_vendor vendor;82 enum ofono_ril_vendor vendor;
79 int sim_status_retries;83 int sim_status_retries;
80 ofono_bool_t connected;84 ofono_bool_t init_state;
81 ofono_bool_t ofono_online;85 ofono_bool_t ofono_online;
82 int radio_state;86 int radio_state;
83 struct ofono_sim *sim;87 struct ofono_sim *sim;
84 struct ofono_radio_settings *radio_settings;
85 int rild_connect_retries;88 int rild_connect_retries;
89 GRilMsgIdToStrFunc request_id_to_string;
90 GRilMsgIdToStrFunc unsol_request_to_string;
91 ril_get_driver_type_func get_driver_type;
92 struct cb_data *set_online_cbd;
86};93};
8794
95/*
96 * Some times we need to access slot B from slot A in dual-SIM modems, so we
97 * need these global variables.
98 */
99static struct ril_data *ril_data_0;
100static struct ril_data *ril_data_1;
101
102/* Get complementary GRil */
103GRil *ril_get_gril_complement(struct ofono_modem *modem)
104{
105 struct ril_data *rd = ofono_modem_get_data(modem);
106
107 if (rd == ril_data_0 && ril_data_1 != NULL)
108 return ril_data_1->ril;
109 else if (rd == ril_data_1 && ril_data_0 != NULL)
110 return ril_data_0->ril;
111
112 return NULL;
113}
114
88static void ril_debug(const char *str, void *user_data)115static void ril_debug(const char *str, void *user_data)
89{116{
90 struct ril_data *rd = user_data;117 struct ril_data *rd = user_data;
@@ -92,6 +119,46 @@
92 ofono_info("Device %d: %s", g_ril_get_slot(rd->ril), str);119 ofono_info("Device %d: %s", g_ril_get_slot(rd->ril), str);
93}120}
94121
122static const char *get_driver_type(struct ril_data *rd,
123 enum ofono_atom_type atom)
124{
125 if (rd->get_driver_type != NULL)
126 return rd->get_driver_type(atom);
127
128 return RILMODEM;
129}
130
131static void ril_send_power(struct ril_data *rd, ofono_bool_t online,
132 GRilResponseFunc func, gpointer user_data)
133{
134 struct parcel rilp;
135
136 DBG("(online = 1, offline = 0)): %d", online);
137
138 g_ril_request_power(rd->ril, (const gboolean) online, &rilp);
139
140 if (g_ril_send(rd->ril, RIL_REQUEST_RADIO_POWER, &rilp,
141 func, user_data, NULL) == 0 && func != NULL) {
142 ofono_error("%s: could not set radio to %d", __func__, online);
143 func(NULL, user_data);
144 }
145}
146
147static void ril_set_powered_off_cb(struct ril_msg *message, gpointer user_data)
148{
149 struct ofono_modem *modem = user_data;
150 struct ril_data *rd = ofono_modem_get_data(modem);
151
152 if (message == NULL)
153 return;
154
155 if (message->error == RIL_E_SUCCESS)
156 g_ril_print_response_no_args(rd->ril, message);
157 else
158 ofono_error("%s: RIL error %s", __func__,
159 ril_error_to_string(message->error));
160}
161
95static void ril_radio_state_changed(struct ril_msg *message, gpointer user_data)162static void ril_radio_state_changed(struct ril_msg *message, gpointer user_data)
96{163{
97 struct ofono_modem *modem = user_data;164 struct ofono_modem *modem = user_data;
@@ -99,63 +166,76 @@
99 int radio_state = g_ril_unsol_parse_radio_state_changed(rd->ril,166 int radio_state = g_ril_unsol_parse_radio_state_changed(rd->ril,
100 message);167 message);
101168
102 if (radio_state != rd->radio_state) {169 ofono_info("%s: state: %s, init: %d, rd->ofono_online: %d",
103170 __func__, ril_radio_state_to_string(radio_state),
104 ofono_info("%s: state: %s rd->ofono_online: %d",171 rd->init_state, rd->ofono_online);
105 __func__,172
106 ril_radio_state_to_string(radio_state),173 rd->radio_state = radio_state;
107 rd->ofono_online);174
108175 /*
109 rd->radio_state = radio_state;176 * Before showing the modem as powered we make sure the radio is off so
110177 * we start in a sane state (as in AOSP). Note that we must always
111 switch (radio_state) {178 * receive an event with the current radio state on initialization
112 case RADIO_STATE_ON:179 * and also that power state has changed effectively when the event with
113180 * the new radio state has been received (we cannot rely on the reply to
114 if (rd->radio_settings == NULL) {181 * RIL_REQUEST_RADIO_POWER). Finally, note that powering off on start is
115 char *rs_driver;182 * a must for turbo devices (otherwise radio state never moves from
116 struct ril_radio_settings_driver_data183 * unavailable).
117 rs_data = { rd->ril, modem };184 */
118185 if (rd->init_state) {
119 if (rd->vendor == OFONO_RIL_VENDOR_QCOM_MSIM)186 if (radio_state != RADIO_STATE_OFF) {
120 rs_driver = QCOMMSIMMODEM;187 DBG("powering off radio on init");
121 else188
122 rs_driver = RILMODEM;189 ril_send_power(rd, FALSE, ril_set_powered_off_cb, modem);
123190 } else {
124 rd->radio_settings =191 DBG("calling set_powered(TRUE)");
125 ofono_radio_settings_create(modem,192 rd->init_state = FALSE;
126 rd->vendor, rs_driver,193
127 &rs_data);194 /* Note that modem hw is powered, but radio is off */
128 }195 ofono_modem_set_powered(modem, TRUE);
129
130 break;
131
132 case RADIO_STATE_UNAVAILABLE:
133 case RADIO_STATE_OFF:
134
135 /*
136 * Unexpected radio state change, as we are supposed to
137 * be online. UNAVAILABLE has been seen occassionally
138 * when powering off the phone. We wait 5 secs to avoid
139 * too fast re-spawns, then exit with error to make
140 * upstart re-start ofono.
141 */
142 if (rd->ofono_online) {
143 ofono_error("%s: radio self-powered off!",
144 __func__);
145 sleep(5);
146 exit(1);
147 }
148 break;
149 default:
150 /* Malformed parcel; no radio state == broken rild */
151 g_assert(FALSE);
152 }196 }
197 return;
198 }
199
200 /* We process pending callbacks */
201 if (rd->set_online_cbd != NULL && (
202 (rd->ofono_online && radio_state == RADIO_STATE_ON) ||
203 (!rd->ofono_online && radio_state == RADIO_STATE_OFF))
204 ) {
205 ofono_modem_online_cb_t cb = rd->set_online_cbd->cb;
206
207 DBG("%s: set_online OK: rd->ofono_online: %d",
208 __func__, rd->ofono_online);
209 CALLBACK_WITH_SUCCESS(cb, rd->set_online_cbd->data);
210
211 g_free(rd->set_online_cbd);
212 rd->set_online_cbd = NULL;
213 }
214
215 if ((radio_state == RADIO_STATE_UNAVAILABLE ||
216 radio_state == RADIO_STATE_OFF)
217 && rd->ofono_online
218 && rd->vendor != OFONO_RIL_VENDOR_MTK2) {
219 /*
220 * Unexpected radio state change, as we are supposed to
221 * be online. UNAVAILABLE has been seen occassionally
222 * when powering off the phone. We wait 5 secs to avoid
223 * too fast re-spawns, then exit with error to make
224 * upstart re-start ofono. In midori we receive an OFF
225 * event and immediately after that an ON event when we
226 * enter the SIM PIN, so do nothing for that device.
227 */
228 ofono_error("%s: radio self-powered off!", __func__);
229 sleep(5);
230 exit(1);
153 }231 }
154}232}
155233
156int ril_create(struct ofono_modem *modem, enum ofono_ril_vendor vendor)234int ril_create(struct ofono_modem *modem, enum ofono_ril_vendor vendor,
235 GRilMsgIdToStrFunc request_id_to_string,
236 GRilMsgIdToStrFunc unsol_request_to_string,
237 ril_get_driver_type_func get_driver_type)
157{238{
158 ofono_bool_t lte_cap;
159 struct ril_data *rd = g_try_new0(struct ril_data, 1);239 struct ril_data *rd = g_try_new0(struct ril_data, 1);
160 if (rd == NULL) {240 if (rd == NULL) {
161 errno = ENOMEM;241 errno = ENOMEM;
@@ -167,9 +247,10 @@
167 rd->vendor = vendor;247 rd->vendor = vendor;
168 rd->ofono_online = FALSE;248 rd->ofono_online = FALSE;
169 rd->radio_state = RADIO_STATE_UNAVAILABLE;249 rd->radio_state = RADIO_STATE_UNAVAILABLE;
170250 rd->request_id_to_string = request_id_to_string;
171 lte_cap = getenv("OFONO_RIL_RAT_LTE") ? TRUE : FALSE;251 rd->unsol_request_to_string = unsol_request_to_string;
172 ofono_modem_set_boolean(modem, MODEM_PROP_LTE_CAPABLE, lte_cap);252 rd->get_driver_type = get_driver_type;
253 rd->init_state = TRUE;
173254
174 ofono_modem_set_data(modem, rd);255 ofono_modem_set_data(modem, rd);
175256
@@ -183,7 +264,7 @@
183264
184static int ril_probe(struct ofono_modem *modem)265static int ril_probe(struct ofono_modem *modem)
185{266{
186 return ril_create(modem, OFONO_RIL_VENDOR_AOSP);267 return ril_create(modem, OFONO_RIL_VENDOR_AOSP, NULL, NULL, NULL);
187}268}
188269
189void ril_remove(struct ofono_modem *modem)270void ril_remove(struct ofono_modem *modem)
@@ -205,42 +286,84 @@
205 struct ril_data *rd = ofono_modem_get_data(modem);286 struct ril_data *rd = ofono_modem_get_data(modem);
206 struct ril_voicecall_driver_data vc_data = { rd->ril, modem };287 struct ril_voicecall_driver_data vc_data = { rd->ril, modem };
207 struct ril_sim_data sim_data;288 struct ril_sim_data sim_data;
289 struct ril_radio_settings_driver_data rs_data = { rd->ril, modem };
208290
209 DBG("");291 DBG("");
210292
211 ofono_devinfo_create(modem, rd->vendor, RILMODEM, rd->ril);293 ofono_devinfo_create(modem, rd->vendor,
212 ofono_voicecall_create(modem, rd->vendor, RILMODEM, &vc_data);294 get_driver_type(rd, OFONO_ATOM_TYPE_DEVINFO),
213 ofono_call_volume_create(modem, rd->vendor, RILMODEM, rd->ril);295 rd->ril);
296 ofono_voicecall_create(modem, rd->vendor,
297 get_driver_type(rd, OFONO_ATOM_TYPE_VOICECALL),
298 &vc_data);
299 ofono_call_volume_create(modem, rd->vendor,
300 get_driver_type(rd, OFONO_ATOM_TYPES_CALL_VOLUME),
301 rd->ril);
214302
215 sim_data.gril = rd->ril;303 sim_data.gril = rd->ril;
216 sim_data.modem = modem;304 sim_data.modem = modem;
217 sim_data.ril_state_watch = NULL;305 sim_data.ril_state_watch = NULL;
218306
219 rd->sim = ofono_sim_create(modem, rd->vendor, RILMODEM, &sim_data);307 rd->sim = ofono_sim_create(modem, rd->vendor,
220 g_assert(rd->sim != NULL);308 get_driver_type(rd, OFONO_ATOM_TYPE_SIM), &sim_data);
309
310 /*
311 * We need to create radio settings here so FastDormancy property is
312 * available even when there is no SIM (no SIM -> post_sim and
313 * post_online are not called) so we can make the modem enter low power
314 * state in that case.
315 */
316 ofono_radio_settings_create(modem, rd->vendor,
317 get_driver_type(rd, OFONO_ATOM_TYPE_RADIO_SETTINGS),
318 &rs_data);
221}319}
222320
223void ril_post_sim(struct ofono_modem *modem)321void ril_post_sim(struct ofono_modem *modem)
224{322{
225 struct ril_data *rd = ofono_modem_get_data(modem);323 struct ril_data *rd = ofono_modem_get_data(modem);
324 struct ofono_message_waiting *mw;
325
326 ofono_sms_create(modem, rd->vendor,
327 get_driver_type(rd, OFONO_ATOM_TYPE_SMS), rd->ril);
328
329 mw = ofono_message_waiting_create(modem);
330 if (mw)
331 ofono_message_waiting_register(mw);
332
333 ofono_phonebook_create(modem, rd->vendor,
334 get_driver_type(rd, OFONO_ATOM_TYPE_PHONEBOOK), modem);
335}
336
337static void create_post_online_atoms(struct ofono_modem *modem)
338{
339 struct ril_data *rd = ofono_modem_get_data(modem);
226 struct ofono_gprs *gprs;340 struct ofono_gprs *gprs;
227 struct ofono_gprs_context *gc;341 struct ofono_gprs_context *gc;
228 struct ofono_message_waiting *mw;
229 struct ril_gprs_driver_data gprs_data = { rd->ril, modem };342 struct ril_gprs_driver_data gprs_data = { rd->ril, modem };
230 struct ril_gprs_context_data343 struct ril_gprs_context_data
231 inet_ctx = { rd->ril, modem, OFONO_GPRS_CONTEXT_TYPE_INTERNET };344 inet_ctx = { rd->ril, modem, OFONO_GPRS_CONTEXT_TYPE_INTERNET };
232 struct ril_gprs_context_data345 struct ril_gprs_context_data
233 mms_ctx = { rd->ril, modem, OFONO_GPRS_CONTEXT_TYPE_MMS };346 mms_ctx = { rd->ril, modem, OFONO_GPRS_CONTEXT_TYPE_MMS };
234347
235 /* TODO: this function should setup:348 ofono_netreg_create(modem, rd->vendor,
236 * - phonebook349 get_driver_type(rd, OFONO_ATOM_TYPE_NETREG), rd->ril);
237 * - stk ( SIM toolkit )350 ofono_ussd_create(modem, rd->vendor,
238 * - radio_settings351 get_driver_type(rd, OFONO_ATOM_TYPE_USSD), rd->ril);
239 */352 ofono_call_settings_create(modem, rd->vendor,
240 ofono_sms_create(modem, rd->vendor, RILMODEM, rd->ril);353 get_driver_type(rd, OFONO_ATOM_TYPE_CALL_SETTINGS),
241354 rd->ril);
242 gprs = ofono_gprs_create(modem, rd->vendor, RILMODEM, &gprs_data);355 ofono_call_barring_create(modem, rd->vendor,
243 gc = ofono_gprs_context_create(modem, rd->vendor, RILMODEM, &inet_ctx);356 get_driver_type(rd, OFONO_ATOM_TYPE_CALL_BARRING),
357 rd->ril);
358 ofono_call_forwarding_create(modem, rd->vendor,
359 get_driver_type(rd, OFONO_ATOM_TYPE_CALL_FORWARDING),
360 rd->ril);
361 gprs = ofono_gprs_create(modem, rd->vendor,
362 get_driver_type(rd, OFONO_ATOM_TYPE_GPRS),
363 &gprs_data);
364 gc = ofono_gprs_context_create(modem, rd->vendor,
365 get_driver_type(rd, OFONO_ATOM_TYPE_GPRS_CONTEXT),
366 &inet_ctx);
244367
245 if (gc) {368 if (gc) {
246 ofono_gprs_context_set_type(gc,369 ofono_gprs_context_set_type(gc,
@@ -248,69 +371,93 @@
248 ofono_gprs_add_context(gprs, gc);371 ofono_gprs_add_context(gprs, gc);
249 }372 }
250373
251 gc = ofono_gprs_context_create(modem, rd->vendor, RILMODEM, &mms_ctx);374 gc = ofono_gprs_context_create(modem, rd->vendor,
375 get_driver_type(rd, OFONO_ATOM_TYPE_GPRS_CONTEXT),
376 &mms_ctx);
252377
253 if (gc) {378 if (gc) {
254 ofono_gprs_context_set_type(gc,379 ofono_gprs_context_set_type(gc,
255 OFONO_GPRS_CONTEXT_TYPE_MMS);380 OFONO_GPRS_CONTEXT_TYPE_MMS);
256 ofono_gprs_add_context(gprs, gc);381 ofono_gprs_add_context(gprs, gc);
257 }382 }
258383}
259 mw = ofono_message_waiting_create(modem);384
260 if (mw)385static void get_radio_caps_cb(struct ril_msg *message, gpointer user_data)
261 ofono_message_waiting_register(mw);386{
262387 struct ofono_modem *modem = user_data;
263 ofono_call_forwarding_create(modem, rd->vendor, RILMODEM, rd->ril);388 struct ril_data *rd = ofono_modem_get_data(modem);
264389 struct reply_radio_capability *caps;
265 ofono_phonebook_create(modem, rd->vendor, RILMODEM, modem);390
391 if (message->error == RIL_E_SUCCESS) {
392 caps = g_ril_reply_parse_get_radio_capability(rd->ril, message);
393 if (caps != NULL && (caps->rat & RIL_RAF_LTE)) {
394 ofono_modem_set_boolean(modem,
395 MODEM_PROP_LTE_CAPABLE, TRUE);
396 g_free(caps);
397 }
398 } else {
399 ofono_error("%s: RIL error %s", __func__,
400 ril_error_to_string(message->error));
401 }
402
403 create_post_online_atoms(modem);
266}404}
267405
268void ril_post_online(struct ofono_modem *modem)406void ril_post_online(struct ofono_modem *modem)
269{407{
270 struct ril_data *rd = ofono_modem_get_data(modem);408 struct ril_data *rd = ofono_modem_get_data(modem);
271409 ofono_bool_t lte_cap;
272 ofono_netreg_create(modem, rd->vendor, RILMODEM, rd->ril);410
273 ofono_ussd_create(modem, rd->vendor, RILMODEM, rd->ril);411 /* Radio ON -> we can ask for capabilities */
274 ofono_call_settings_create(modem, rd->vendor, RILMODEM, rd->ril);412 if (g_ril_get_version(rd->ril) >= 11) {
275 ofono_call_barring_create(modem, rd->vendor, RILMODEM, rd->ril);413 if (g_ril_send(rd->ril, RIL_REQUEST_GET_RADIO_CAPABILITY, NULL,
414 get_radio_caps_cb, modem, NULL))
415 return;
416
417 ofono_error("%s: error sending GET_RADIO_CAPABILITY", __func__);
418 }
419
420 lte_cap = getenv("OFONO_RIL_RAT_LTE") ? TRUE : FALSE;
421 ofono_modem_set_boolean(modem, MODEM_PROP_LTE_CAPABLE, lte_cap);
422
423 create_post_online_atoms(modem);
276}424}
277425
278static void ril_set_online_cb(struct ril_msg *message, gpointer user_data)426static void ril_set_online_cb(struct ril_msg *message, gpointer user_data)
279{427{
428 struct ril_data *rd = user_data;
429
430 if (message != NULL && message->error == RIL_E_SUCCESS) {
431 g_ril_print_response_no_args(rd->ril, message);
432
433 /*
434 * Wait for radio state change event now, as that is the real
435 * moment when radio state changes.
436 */
437 } else {
438 ofono_modem_online_cb_t cb = rd->set_online_cbd->cb;
439
440 ofono_error("%s: set_online: %d failed", __func__,
441 rd->ofono_online);
442 CALLBACK_WITH_FAILURE(cb, rd->set_online_cbd->data);
443
444 g_free(rd->set_online_cbd);
445 rd->set_online_cbd = NULL;
446 }
447}
448
449static gboolean set_online_done_cb(gpointer user_data)
450{
280 struct cb_data *cbd = user_data;451 struct cb_data *cbd = user_data;
281 struct ril_data *rd = cbd->user;452 struct ril_data *rd = cbd->user;
282 ofono_modem_online_cb_t cb = cbd->cb;453 ofono_modem_online_cb_t cb = cbd->cb;
283454
284 if (message != NULL && message->error == RIL_E_SUCCESS) {455 DBG("%s: set_online OK: rd->ofono_online: %d",
285 g_ril_print_response_no_args(rd->ril, message);456 __func__, rd->ofono_online);
286457 CALLBACK_WITH_SUCCESS(cb, cbd->data);
287 DBG("%s: set_online OK: rd->ofono_online: %d", __func__,
288 rd->ofono_online);
289 CALLBACK_WITH_SUCCESS(cb, cbd->data);
290 } else {
291 ofono_error("%s: set_online: %d failed", __func__,
292 rd->ofono_online);
293 CALLBACK_WITH_FAILURE(cb, cbd->data);
294 }
295
296 g_free(cbd);458 g_free(cbd);
297}459
298460 return FALSE;
299static void ril_send_power(struct ril_data *rd, ofono_bool_t online,
300 GRilResponseFunc func,
301 gpointer user_data)
302{
303 struct parcel rilp;
304
305 DBG("(online = 1, offline = 0)): %i", online);
306
307 g_ril_request_power(rd->ril, (const gboolean) online, &rilp);
308
309 if (g_ril_send(rd->ril, RIL_REQUEST_RADIO_POWER, &rilp,
310 func, user_data, NULL) == 0 && func != NULL) {
311
312 func(NULL, user_data);
313 }
314}461}
315462
316void ril_set_online(struct ofono_modem *modem, ofono_bool_t online,463void ril_set_online(struct ofono_modem *modem, ofono_bool_t online,
@@ -323,20 +470,13 @@
323470
324 DBG("setting rd->ofono_online to: %d", online);471 DBG("setting rd->ofono_online to: %d", online);
325472
326 ril_send_power(rd, online, ril_set_online_cb, cbd);473 if ((online && rd->radio_state == RADIO_STATE_ON) ||
327}474 (!online && rd->radio_state == RADIO_STATE_OFF)) {
328475 g_idle_add(set_online_done_cb, cbd);
329static void ril_set_powered_off_cb(struct ril_msg *message, gpointer user_data)476 } else {
330{477 rd->set_online_cbd = cbd;
331 struct ofono_modem *modem = user_data;478 ril_send_power(rd, online, ril_set_online_cb, rd);
332 struct ril_data *rd = ofono_modem_get_data(modem);479 }
333
334 if (message != NULL && message->error == RIL_E_SUCCESS)
335 g_ril_print_response_no_args(rd->ril, message);
336
337 DBG("calling set_powered(TRUE)");
338
339 ofono_modem_set_powered(modem, TRUE);
340}480}
341481
342static void ril_connected(struct ril_msg *message, gpointer user_data)482static void ril_connected(struct ril_msg *message, gpointer user_data)
@@ -345,18 +485,21 @@
345 struct ril_data *rd = ofono_modem_get_data(modem);485 struct ril_data *rd = ofono_modem_get_data(modem);
346 int version;486 int version;
347487
488 /*
489 * We will use RIL version to check for presence of some features. The
490 * version is updated in AOSP after major changes. For instance:
491 *
492 * Version 9 -> AOSP 4.4
493 * Version 10 -> AOSP 5.0.0
494 * Version 11 -> AOSP 6.0.0
495 *
496 * Note that all Ubuntu phones are based on BSP >= 4.4.
497 */
348 version = g_ril_unsol_parse_connected(rd->ril, message);498 version = g_ril_unsol_parse_connected(rd->ril, message);
349 g_ril_set_version(rd->ril, version);499 g_ril_set_version(rd->ril, version);
350500
351 ofono_info("[%d,UNSOL]< %s, version %d", g_ril_get_slot(rd->ril),501 ofono_info("[%d,UNSOL]< %s, version %d", g_ril_get_slot(rd->ril),
352 g_ril_unsol_request_to_string(rd->ril, message->req), version);502 g_ril_unsol_request_to_string(rd->ril, message->req), version);
353
354 /* TODO: need a disconnect function to restart things! */
355 rd->connected = TRUE;
356
357 DBG("calling set_powered(FALSE) on connected");
358
359 ril_send_power(rd, FALSE, ril_set_powered_off_cb, modem);
360}503}
361504
362static int create_gril(struct ofono_modem *modem)505static int create_gril(struct ofono_modem *modem)
@@ -368,19 +511,28 @@
368 ofono_info("Using %s as socket for slot %d.", socket, slot_id);511 ofono_info("Using %s as socket for slot %d.", socket, slot_id);
369 rd->ril = g_ril_new(socket, rd->vendor);512 rd->ril = g_ril_new(socket, rd->vendor);
370513
371 /* NOTE: Since AT modems open a tty, and then call514 /*
515 * NOTE: Since AT modems open a tty, and then call
372 * g_at_chat_new(), they're able to return -EIO if516 * g_at_chat_new(), they're able to return -EIO if
373 * the first fails, and -ENOMEM if the second fails.517 * the first fails, and -ENOMEM if the second fails.
374 * in our case, we already return -EIO if the ril_new518 * in our case, we already return -EIO if the ril_new
375 * fails. If this is important, we can create a ril_socket519 * fails. If this is important, we can create a ril_socket
376 * abstraction... ( probaby not a bad idea ).520 * abstraction... ( probaby not a bad idea ).
377 */521 */
378
379 if (rd->ril == NULL) {522 if (rd->ril == NULL) {
380 ofono_error("g_ril_new() failed to create modem!");523 ofono_error("g_ril_new() failed to create modem!");
381 return -EIO;524 return -EIO;
382 }525 }
526
527 if (slot_id == MULTISIM_SLOT_0)
528 ril_data_0 = rd;
529 else
530 ril_data_1 = rd;
531
383 g_ril_set_slot(rd->ril, slot_id);532 g_ril_set_slot(rd->ril, slot_id);
533 g_ril_set_vendor_print_msg_id_funcs(rd->ril,
534 rd->request_id_to_string,
535 rd->unsol_request_to_string);
384536
385 if (getenv("OFONO_RIL_TRACE"))537 if (getenv("OFONO_RIL_TRACE"))
386 g_ril_set_trace(rd->ril, TRUE);538 g_ril_set_trace(rd->ril, TRUE);
387539
=== modified file 'plugins/ril.h'
--- plugins/ril.h 2014-07-14 12:47:48 +0000
+++ plugins/ril.h 2016-07-01 17:24:58 +0000
@@ -19,7 +19,12 @@
19 *19 *
20 */20 */
2121
22int ril_create(struct ofono_modem *modem, enum ofono_ril_vendor vendor);22typedef const char *(*ril_get_driver_type_func)(enum ofono_atom_type atom);
23
24int ril_create(struct ofono_modem *modem, enum ofono_ril_vendor vendor,
25 GRilMsgIdToStrFunc request_id_to_string,
26 GRilMsgIdToStrFunc unsol_request_to_string,
27 ril_get_driver_type_func get_driver_type);
23void ril_remove(struct ofono_modem *modem);28void ril_remove(struct ofono_modem *modem);
24int ril_enable(struct ofono_modem *modem);29int ril_enable(struct ofono_modem *modem);
25int ril_disable(struct ofono_modem *modem);30int ril_disable(struct ofono_modem *modem);
@@ -28,3 +33,5 @@
28void ril_post_online(struct ofono_modem *modem);33void ril_post_online(struct ofono_modem *modem);
29void ril_set_online(struct ofono_modem *modem, ofono_bool_t online,34void ril_set_online(struct ofono_modem *modem, ofono_bool_t online,
30 ofono_modem_online_cb_t callback, void *data);35 ofono_modem_online_cb_t callback, void *data);
36
37GRil *ril_get_gril_complement(struct ofono_modem *modem);
3138
=== modified file 'plugins/rildev.c'
--- plugins/rildev.c 2016-03-09 10:35:25 +0000
+++ plugins/rildev.c 2016-07-01 17:24:58 +0000
@@ -55,10 +55,14 @@
55 return -ENODEV;55 return -ENODEV;
56 }56 }
5757
58 modem_list = g_slist_prepend(modem_list, modem);
59
60 ofono_modem_set_integer(modem, "Slot", slot);58 ofono_modem_set_integer(modem, "Slot", slot);
6159
60 /*
61 * We assume all slots of this type belong to a single physical modem
62 * that works in standby mode.
63 */
64 ofono_modem_set_string(modem, "StandbyGroup", ril_type);
65
62 /* AOSP has socket path "rild", "rild2"..., while others may differ */66 /* AOSP has socket path "rild", "rild2"..., while others may differ */
63 if (slot != 0)67 if (slot != 0)
64 socket = g_strdup_printf("/dev/socket/rild%d", slot + 1);68 socket = g_strdup_printf("/dev/socket/rild%d", slot + 1);
@@ -73,9 +77,12 @@
73 if (retval != 0) {77 if (retval != 0) {
74 ofono_error("%s: ofono_modem_register returned: %d",78 ofono_error("%s: ofono_modem_register returned: %d",
75 __func__, retval);79 __func__, retval);
80 ofono_modem_remove(modem);
76 return retval;81 return retval;
77 }82 }
7883
84 modem_list = g_slist_prepend(modem_list, modem);
85
79 /*86 /*
80 * kickstart the modem:87 * kickstart the modem:
81 * causes core modem code to call88 * causes core modem code to call
8289
=== modified file 'src/gprs.c'
--- src/gprs.c 2016-04-13 14:35:57 +0000
+++ src/gprs.c 2016-07-01 17:24:58 +0000
@@ -1824,11 +1824,17 @@
1824 struct ofono_modem *modem_notif = data;1824 struct ofono_modem *modem_notif = data;
1825 DBusConnection *conn;1825 DBusConnection *conn;
1826 const char *path = ofono_modem_get_path(modem);1826 const char *path = ofono_modem_get_path(modem);
1827 const char *standby_group, *modem_group;
18271828
1828 if (strcmp(path, ofono_modem_get_path(modem_notif)) == 0)1829 if (strcmp(path, ofono_modem_get_path(modem_notif)) == 0)
1829 return;1830 return;
18301831
1831 if (!ofono_modem_is_standby(modem))1832 standby_group = ofono_modem_get_string(modem_notif, "StandbyGroup");
1833 if (standby_group == NULL)
1834 return;
1835
1836 modem_group = ofono_modem_get_string(modem, "StandbyGroup");
1837 if (g_strcmp0(standby_group, modem_group) != 0)
1832 return;1838 return;
18331839
1834 atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_GPRS);1840 atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_GPRS);
@@ -1984,9 +1990,10 @@
1984 gprs->settings);1990 gprs->settings);
1985 }1991 }
19861992
1987 gprs_netreg_update(gprs);
1988
1989 notify_powered_change(gprs);1993 notify_powered_change(gprs);
1994
1995 gprs_netreg_update(gprs);
1996
1990 } else {1997 } else {
1991 return __ofono_error_invalid_args(msg);1998 return __ofono_error_invalid_args(msg);
1992 }1999 }
19932000
=== modified file 'src/modem.c'
--- src/modem.c 2015-11-02 09:18:14 +0000
+++ src/modem.c 2016-07-01 17:24:58 +0000
@@ -2278,11 +2278,3 @@
2278out:2278out:
2279 modem->emergency--;2279 modem->emergency--;
2280}2280}
2281
2282ofono_bool_t ofono_modem_is_standby(struct ofono_modem *modem)
2283{
2284 if (modem->driver->is_standby == NULL)
2285 return FALSE;
2286
2287 return modem->driver->is_standby(modem);
2288}
22892281
=== modified file 'src/voicecall.c'
--- src/voicecall.c 2016-03-14 08:16:40 +0000
+++ src/voicecall.c 2016-07-01 17:24:58 +0000
@@ -118,7 +118,7 @@
118118
119static const char *default_en_list[] = { "911", "112", NULL };119static const char *default_en_list[] = { "911", "112", NULL };
120static const char *default_en_list_no_sim[] = { "119", "118", "999", "110",120static const char *default_en_list_no_sim[] = { "119", "118", "999", "110",
121 "08", "000", NULL };121 "08", "000", "120", "122", NULL };
122122
123static void send_ciev_after_swap_callback(const struct ofono_error *error,123static void send_ciev_after_swap_callback(const struct ofono_error *error,
124 void *data);124 void *data);
@@ -2504,10 +2504,6 @@
2504 vc->en_list = g_hash_table_new_full(g_str_hash, g_str_equal,2504 vc->en_list = g_hash_table_new_full(g_str_hash, g_str_equal,
2505 g_free, NULL);2505 g_free, NULL);
25062506
2507 /* Emergency numbers from modem/network */
2508 if (vc->nw_en_list)
2509 add_to_en_list(vc, vc->nw_en_list);
2510
2511 /* Emergency numbers read from SIM */2507 /* Emergency numbers read from SIM */
2512 if (vc->flags & VOICECALL_FLAG_SIM_ECC_READY) {2508 if (vc->flags & VOICECALL_FLAG_SIM_ECC_READY) {
2513 GSList *l;2509 GSList *l;
@@ -2515,9 +2511,16 @@
2515 for (l = vc->sim_en_list; l; l = l->next)2511 for (l = vc->sim_en_list; l; l = l->next)
2516 g_hash_table_insert(vc->en_list, g_strdup(l->data),2512 g_hash_table_insert(vc->en_list, g_strdup(l->data),
2517 NULL);2513 NULL);
2518 } else2514 }
2515
2516 /* add the default emergency number, if there no number from SIM */
2517 if (g_hash_table_size(vc->en_list) == 0)
2519 add_to_en_list(vc, (char **) default_en_list_no_sim);2518 add_to_en_list(vc, (char **) default_en_list_no_sim);
25202519
2520 /* Emergency numbers from modem/network */
2521 if (vc->nw_en_list)
2522 add_to_en_list(vc, vc->nw_en_list);
2523
2521 /* Default emergency numbers */2524 /* Default emergency numbers */
2522 add_to_en_list(vc, (char **) default_en_list);2525 add_to_en_list(vc, (char **) default_en_list);
25232526

Subscribers

People subscribed via source and target branches

to all changes: