forked from sailfishos/ofono
Compare commits
1 Commits
1.29+git1
...
mer/1.23+g
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc696fc9fa |
16
ofono/.gitignore
vendored
16
ofono/.gitignore
vendored
@@ -9,7 +9,7 @@ Makefile.in
|
||||
aclocal.m4
|
||||
config.guess
|
||||
config.h
|
||||
config.h.in*
|
||||
config.h.in
|
||||
config.log
|
||||
config.status
|
||||
config.sub
|
||||
@@ -42,14 +42,9 @@ unit/test-sms-root
|
||||
unit/test-simutil
|
||||
unit/test-mux
|
||||
unit/test-caif
|
||||
unit/test-cell-info
|
||||
unit/test-cell-info-control
|
||||
unit/test-cell-info-dbus
|
||||
unit/test-stkutil
|
||||
unit/test-cdmasms
|
||||
unit/test-conf
|
||||
unit/test-dbus-access
|
||||
unit/test-dbus-clients
|
||||
unit/test-dbus-queue
|
||||
unit/test-gprs-filter
|
||||
unit/test-ril_config
|
||||
@@ -62,10 +57,13 @@ unit/test-rilmodem-cs
|
||||
unit/test-rilmodem-gprs
|
||||
unit/test-rilmodem-sms
|
||||
unit/test-sailfish_access
|
||||
unit/test-slot-manager
|
||||
unit/test-sailfish_cell_info
|
||||
unit/test-sailfish_cell_info_dbus
|
||||
unit/test-sailfish_manager
|
||||
unit/test-sailfish_sim_info
|
||||
unit/test-sailfish_sim_info_dbus
|
||||
unit/test-config
|
||||
unit/test-watch
|
||||
unit/test-sim-info
|
||||
unit/test-sim-info-dbus
|
||||
unit/test-sms-filter
|
||||
unit/test-voicecall-filter
|
||||
unit/test-*.log
|
||||
|
||||
@@ -130,14 +130,3 @@ Joey Hewitt <joey@joeyhewitt.com>
|
||||
Richard Röjfors <richard.rojfors@gmail.com>
|
||||
Philippe De Swert <philippe.deswert@nomovok.com>
|
||||
Gabriel Lucas <gabriel.lucas@smile.fr>
|
||||
Mariem Cherif <mariem.cherif@ardia.com.tn>
|
||||
Bassem Boubaker <bassem.boubaker@actia.fr>
|
||||
Bob Ham <bob.ham@puri.sm>
|
||||
Varun Gargi <varun.gargi@intel.com>
|
||||
Florent Beillonnet <florent.beillonnet@gmail.com>
|
||||
Martin Hundebøll <martin@geanix.com>
|
||||
Julien Tournier <tournier.julien@gmail.com>
|
||||
Nandini Rebello <nandini.rebello@intel.com>
|
||||
Giacinto Cifelli <gciofono@gmail.com>
|
||||
Khaled Romdhani <khaledromdhani216@gmail.com>
|
||||
Pavel Machek <pavel@ucw.cz>
|
||||
|
||||
@@ -1,50 +1,3 @@
|
||||
ver 1.29:
|
||||
Fix issue with QMI and SIM initialized notification.
|
||||
Add support for multiple PDP contexts and xmm7xxx modems.
|
||||
Add support for handling Dual SIM Single Active feature
|
||||
Add support for SIM PIN caching feature.
|
||||
|
||||
ver 1.28:
|
||||
Fix issue with SIM initialization and Gemalto modems.
|
||||
|
||||
ver 1.27:
|
||||
Add support for handling SIMCom based SIM800 modems.
|
||||
Add support for SIM lock state with xmm7xxx modems.
|
||||
Add support for coexistence feature with xmm7xxx modems.
|
||||
|
||||
ver 1.26:
|
||||
Fix issue with AT callback handler and GPRS.
|
||||
Fix issue with handling EUTRAN SMS only states.
|
||||
Fix issue with handling MBIM strings on big endian.
|
||||
Fix issue with missing char and SMS national language.
|
||||
Fix issue with unsolicited notifications of +CGAUTH/+CGDCONT.
|
||||
Add support for setting "none" authentication method.
|
||||
Add support for SMS and phonebook with xmm7xxx modems.
|
||||
Add support for voice features and Gemalto modems.
|
||||
Add support for Bengali and Gujrati SMS alphabets.
|
||||
Add support for 8 additional languages for GSM 7 bit
|
||||
Add support for using internal Embedded Linux library.
|
||||
|
||||
ver 1.25:
|
||||
Fix issue with handling GPRS context release.
|
||||
Fix issue with GPRS context shutdown and Huawei modems.
|
||||
Fix issue with roaming status report and QMI devices.
|
||||
Add support for voice call handling of U-Blox modems
|
||||
Add support for EUTRAN technology reporting.
|
||||
|
||||
ver 1.24:
|
||||
Fix issue with property changed signals and CDMA networks.
|
||||
Fix issue with handling SIM filesystem and SIM removal.
|
||||
Fix issue with handling PIN state and incorrect codes.
|
||||
Fix issue with handling of parsing AID type.
|
||||
Fix issue with SIM detection and QMI devices.
|
||||
Fix issue with PIN handling and QMI devices.
|
||||
Fix issue with USSD handling and QMI devices.
|
||||
Fix issue with handling USSD TERMINATED response.
|
||||
Fix issue with handling USSD reset and STK REFRESH.
|
||||
Add support for detecting Gemalto ALS3 modems.
|
||||
Add support for SIMCom based SIM7100E modems.
|
||||
|
||||
ver 1.23:
|
||||
Fix issue with handling SIM AID sessions.
|
||||
Add support for QMI LTE bearer handling.
|
||||
|
||||
@@ -26,11 +26,9 @@ pkginclude_HEADERS = include/log.h include/plugin.h include/history.h \
|
||||
include/sms-filter.h include/gprs-filter.h \
|
||||
include/voicecall-filter.h include/dbus-access.h \
|
||||
include/ril-constants.h include/ril-transport.h \
|
||||
include/watch.h gdbus/gdbus.h include/dbus-clients.h \
|
||||
include/watch.h gdbus/gdbus.h \
|
||||
include/netmon.h include/lte.h include/ims.h \
|
||||
include/slot.h include/cell-info.h \
|
||||
include/storage.h include/conf.h include/misc.h \
|
||||
include/mtu-limit.h
|
||||
include/storage.h
|
||||
|
||||
nodist_pkginclude_HEADERS = include/version.h
|
||||
|
||||
@@ -113,9 +111,6 @@ gril_sources = gril/gril.h gril/gril.c \
|
||||
|
||||
btio_sources = btio/btio.h btio/btio.c
|
||||
|
||||
builtin_modules += cellinfo_netmon generic_phonebook
|
||||
builtin_sources += plugins/cellinfo-netmon.c plugins/generic-phonebook.c
|
||||
|
||||
if UDEV
|
||||
builtin_cflags += @UDEV_CFLAGS@
|
||||
builtin_libadd += @UDEV_LIBS@
|
||||
@@ -124,12 +119,72 @@ builtin_modules += udevng
|
||||
builtin_sources += plugins/udevng.c
|
||||
endif
|
||||
|
||||
if SAILFISH_MANAGER
|
||||
builtin_modules += sailfish_manager
|
||||
builtin_sources += plugins/sailfish_manager/sailfish_cell_info.c \
|
||||
plugins/sailfish_manager/sailfish_cell_info_dbus.c \
|
||||
plugins/sailfish_manager/sailfish_manager.c \
|
||||
plugins/sailfish_manager/sailfish_manager_dbus.c \
|
||||
plugins/sailfish_manager/sailfish_sim_info.c \
|
||||
plugins/sailfish_manager/sailfish_sim_info_dbus.c
|
||||
endif
|
||||
|
||||
|
||||
if SAILFISH_ACCESS
|
||||
builtin_modules += sailfish_access
|
||||
builtin_sources += plugins/sailfish_access.c
|
||||
endif
|
||||
|
||||
if RILMODEM
|
||||
if SAILFISH_RILMODEM
|
||||
|
||||
builtin_modules += ril
|
||||
builtin_sources += drivers/ril/ril_call_barring.c \
|
||||
drivers/ril/ril_call_forward.c \
|
||||
drivers/ril/ril_call_settings.c \
|
||||
drivers/ril/ril_call_volume.c \
|
||||
drivers/ril/ril_cell_info.c \
|
||||
drivers/ril/ril_config.c \
|
||||
drivers/ril/ril_connman.c \
|
||||
drivers/ril/ril_cbs.c \
|
||||
drivers/ril/ril_data.c \
|
||||
drivers/ril/ril_devinfo.c \
|
||||
drivers/ril/ril_devmon.c \
|
||||
drivers/ril/ril_devmon_auto.c \
|
||||
drivers/ril/ril_devmon_ds.c \
|
||||
drivers/ril/ril_devmon_ss.c \
|
||||
drivers/ril/ril_ecclist.c \
|
||||
drivers/ril/ril_gprs.c \
|
||||
drivers/ril/ril_gprs_context.c \
|
||||
drivers/ril/ril_modem.c \
|
||||
drivers/ril/ril_netmon.c \
|
||||
drivers/ril/ril_netreg.c \
|
||||
drivers/ril/ril_network.c \
|
||||
drivers/ril/ril_oem_raw.c \
|
||||
drivers/ril/ril_phonebook.c \
|
||||
drivers/ril/ril_plugin.c \
|
||||
drivers/ril/ril_radio.c \
|
||||
drivers/ril/ril_radio_caps.c \
|
||||
drivers/ril/ril_radio_settings.c \
|
||||
drivers/ril/ril_sim.c \
|
||||
drivers/ril/ril_sim_card.c \
|
||||
drivers/ril/ril_sim_settings.c \
|
||||
drivers/ril/ril_sms.c \
|
||||
drivers/ril/ril_stk.c \
|
||||
drivers/ril/ril_ussd.c \
|
||||
drivers/ril/ril_util.c \
|
||||
drivers/ril/ril_vendor.c \
|
||||
drivers/ril/ril_voicecall.c
|
||||
|
||||
# Vendor specific extensions
|
||||
builtin_sources += drivers/ril/ril_vendor_mtk.c
|
||||
|
||||
if DATAFILES
|
||||
dist_conf_DATA += drivers/ril/ril_subscription.conf
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
builtin_sources += $(gril_sources)
|
||||
|
||||
builtin_modules += rildev
|
||||
@@ -170,6 +225,7 @@ builtin_sources += drivers/rilmodem/rilmodem.h \
|
||||
drivers/infineonmodem/infineon_constants.h \
|
||||
drivers/rilmodem/lte.c
|
||||
endif
|
||||
endif
|
||||
|
||||
if ISIMODEM
|
||||
builtin_modules += isimodem
|
||||
@@ -412,16 +468,14 @@ builtin_modules += gemaltomodem
|
||||
builtin_sources += drivers/atmodem/atutil.h \
|
||||
drivers/gemaltomodem/gemaltomodem.h \
|
||||
drivers/gemaltomodem/gemaltomodem.c \
|
||||
drivers/gemaltomodem/location-reporting.c \
|
||||
drivers/gemaltomodem/voicecall.c
|
||||
drivers/gemaltomodem/location-reporting.c
|
||||
|
||||
builtin_modules += xmm7modem
|
||||
builtin_sources += drivers/atmodem/atutil.h \
|
||||
drivers/xmm7modem/xmm7modem.h \
|
||||
drivers/xmm7modem/xmm7modem.c \
|
||||
drivers/xmm7modem/radio-settings.c \
|
||||
drivers/xmm7modem/ims.c \
|
||||
drivers/xmm7modem/netmon.c
|
||||
drivers/xmm7modem/ims.c
|
||||
|
||||
if PHONESIM
|
||||
builtin_modules += phonesim
|
||||
@@ -441,7 +495,7 @@ builtin_sources += drivers/cdmamodem/cdmamodem.h \
|
||||
drivers/cdmamodem/connman.c
|
||||
endif
|
||||
|
||||
if EXTRA_MODEMS
|
||||
if !RILMODEM
|
||||
builtin_modules += g1
|
||||
builtin_sources += plugins/g1.c
|
||||
|
||||
@@ -517,9 +571,6 @@ builtin_sources += plugins/samsung.c
|
||||
builtin_modules += sim900
|
||||
builtin_sources += plugins/sim900.c
|
||||
|
||||
builtin_modules += sim7100
|
||||
builtin_sources += plugins/sim7100.c
|
||||
|
||||
builtin_modules += telit
|
||||
builtin_sources += plugins/telit.c
|
||||
|
||||
@@ -669,7 +720,6 @@ builtin_libadd += @ELL_LIBS@
|
||||
if MBIMMODEM
|
||||
mbim_sources = drivers/mbimmodem/mbim.h \
|
||||
drivers/mbimmodem/mbim.c \
|
||||
drivers/mbimmodem/mbim-private.h \
|
||||
drivers/mbimmodem/mbim-desc.h \
|
||||
drivers/mbimmodem/mbim-desc.c \
|
||||
drivers/mbimmodem/mbim-message.h \
|
||||
@@ -696,6 +746,7 @@ endif
|
||||
sbin_PROGRAMS = src/ofonod
|
||||
|
||||
src_ofonod_SOURCES = $(builtin_sources) $(gatchat_sources) src/ofono.ver \
|
||||
src/mtu-watch.c \
|
||||
src/main.c src/ofono.h src/log.c src/plugin.c \
|
||||
src/modem.c src/common.h src/common.c \
|
||||
src/manager.c src/dbus.c src/util.h src/util.c \
|
||||
@@ -722,16 +773,11 @@ src_ofonod_SOURCES = $(builtin_sources) $(gatchat_sources) src/ofono.ver \
|
||||
src/handsfree-audio.c src/bluetooth.h \
|
||||
src/sim-mnclength.c src/voicecallagent.c \
|
||||
src/sms-filter.c src/gprs-filter.c \
|
||||
src/dbus-clients.c src/dbus-queue.c src/dbus-access.c \
|
||||
src/dbus-queue.c src/dbus-access.c src/config.c \
|
||||
src/voicecall-filter.c src/ril-transport.c \
|
||||
src/hfp.h src/siri.c src/watchlist.c \
|
||||
src/netmon.c src/lte.c src/ims.c \
|
||||
src/netmonagent.c src/netmonagent.h \
|
||||
src/slot-manager.c src/slot-manager-dbus.c \
|
||||
src/cell-info.c src/cell-info-dbus.c \
|
||||
src/cell-info-control.c \
|
||||
src/sim-info.c src/sim-info-dbus.c \
|
||||
src/conf.c src/mtu-limit.c
|
||||
src/netmonagent.c src/netmonagent.h
|
||||
|
||||
src_ofonod_LDADD = gdbus/libgdbus-internal.la $(builtin_libadd) \
|
||||
@GLIB_LIBS@ @DBUS_LIBS@ -ldl
|
||||
@@ -758,7 +804,8 @@ AM_CFLAGS = @DBUS_CFLAGS@ @GLIB_CFLAGS@ $(builtin_cflags) \
|
||||
|
||||
AM_CPPFLAGS = -I$(builddir)/include -I$(builddir)/src -I$(srcdir)/src \
|
||||
-I$(srcdir)/gdbus -I$(srcdir)/gisi -I$(srcdir)/gatchat \
|
||||
-I$(srcdir)/btio -I$(srcdir)/gril
|
||||
-I$(srcdir)/btio -I$(srcdir)/gril \
|
||||
-I$(srcdir)/plugins/sailfish_manager
|
||||
|
||||
doc_files = doc/overview.txt doc/ofono-paper.txt doc/release-faq.txt \
|
||||
doc/manager-api.txt doc/modem-api.txt doc/network-api.txt \
|
||||
@@ -895,8 +942,7 @@ test_scripts = test/backtrace \
|
||||
test/test-serving-cell-info \
|
||||
test/ims-register \
|
||||
test/ims-unregister \
|
||||
test/list-applications \
|
||||
test/set-sms-alphabet
|
||||
test/list-applications
|
||||
|
||||
|
||||
if TEST
|
||||
@@ -919,68 +965,63 @@ unit_tests = unit/test-common unit/test-util unit/test-idmap \
|
||||
unit/test-simutil unit/test-stkutil \
|
||||
unit/test-sms unit/test-cdmasms
|
||||
|
||||
unit_test_conf_SOURCES = unit/test-conf.c src/conf.c src/log.c
|
||||
unit_test_conf_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT)
|
||||
unit_test_conf_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_conf_OBJECTS)
|
||||
unit_tests += unit/test-conf
|
||||
if SAILFISH_MANAGER
|
||||
|
||||
unit_test_cell_info_SOURCES = unit/test-cell-info.c src/cell-info.c src/log.c
|
||||
unit_test_cell_info_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT)
|
||||
unit_test_cell_info_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_cell_info_OBJECTS)
|
||||
unit_tests += unit/test-cell-info
|
||||
unit_test_sailfish_cell_info_SOURCES = unit/test-sailfish_cell_info.c \
|
||||
plugins/sailfish_manager/sailfish_cell_info.c
|
||||
unit_test_sailfish_cell_info_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT)
|
||||
unit_test_sailfish_cell_info_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_sailfish_cell_info_OBJECTS)
|
||||
unit_tests += unit/test-sailfish_cell_info
|
||||
|
||||
unit_test_cell_info_control_SOURCES = unit/test-cell-info-control.c \
|
||||
unit/fake_cell_info.c src/cell-info.c \
|
||||
src/cell-info-control.c src/log.c
|
||||
unit_test_cell_info_control_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT)
|
||||
unit_test_cell_info_control_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_cell_info_control_OBJECTS)
|
||||
unit_tests += unit/test-cell-info-control
|
||||
|
||||
unit_test_cell_info_dbus_SOURCES = unit/test-dbus.c \
|
||||
unit/test-cell-info-dbus.c unit/fake_cell_info.c \
|
||||
src/cell-info.c src/cell-info-dbus.c \
|
||||
src/cell-info-control.c gdbus/object.c \
|
||||
src/dbus-clients.c src/dbus.c src/log.c
|
||||
unit_test_cell_info_dbus_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT) \
|
||||
unit_test_sailfish_cell_info_dbus_SOURCES = unit/test-dbus.c \
|
||||
unit/test-sailfish_cell_info_dbus.c \
|
||||
unit/fake_sailfish_cell_info.c \
|
||||
plugins/sailfish_manager/sailfish_cell_info.c \
|
||||
plugins/sailfish_manager/sailfish_cell_info_dbus.c \
|
||||
gdbus/object.c \
|
||||
src/dbus.c src/log.c
|
||||
unit_test_sailfish_cell_info_dbus_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT) \
|
||||
@DBUS_GLIB_CFLAGS@
|
||||
unit_test_cell_info_dbus_LDADD = @DBUS_GLIB_LIBS@ @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_cell_info_dbus_OBJECTS)
|
||||
unit_tests += unit/test-cell-info-dbus
|
||||
unit_test_sailfish_cell_info_dbus_LDADD = @DBUS_GLIB_LIBS@ @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_sailfish_cell_info_dbus_OBJECTS)
|
||||
unit_tests += unit/test-sailfish_cell_info_dbus
|
||||
|
||||
unit_test_sim_info_SOURCES = unit/test-sim-info.c unit/fake_watch.c \
|
||||
src/sim-info.c src/storage.c src/watchlist.c src/log.c
|
||||
unit_test_sim_info_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS) \
|
||||
unit_test_sailfish_sim_info_SOURCES = unit/test-sailfish_sim_info.c \
|
||||
unit/fake_watch.c \
|
||||
plugins/sailfish_manager/sailfish_sim_info.c \
|
||||
src/storage.c src/watchlist.c src/log.c
|
||||
unit_test_sailfish_sim_info_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS) \
|
||||
-DSTORAGEDIR='"/tmp/ofono"'
|
||||
unit_test_sim_info_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_sim_info_OBJECTS)
|
||||
unit_tests += unit/test-sim-info
|
||||
unit_test_sailfish_sim_info_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_sailfish_sim_info_OBJECTS)
|
||||
unit_tests += unit/test-sailfish_sim_info
|
||||
|
||||
unit_test_sim_info_dbus_SOURCES = unit/test-sim-info-dbus.c \
|
||||
unit_test_sailfish_sim_info_dbus_SOURCES = unit/test-sailfish_sim_info_dbus.c \
|
||||
unit/test-dbus.c unit/fake_watch.c \
|
||||
src/sim-info.c src/sim-info-dbus.c \
|
||||
plugins/sailfish_manager/sailfish_sim_info.c \
|
||||
plugins/sailfish_manager/sailfish_sim_info_dbus.c \
|
||||
gdbus/object.c \
|
||||
src/dbus.c src/storage.c src/watchlist.c src/log.c
|
||||
unit_test_sim_info_dbus_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS) \
|
||||
unit_test_sailfish_sim_info_dbus_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS) \
|
||||
@DBUS_GLIB_CFLAGS@ -DSTORAGEDIR='"/tmp/ofono"'
|
||||
unit_test_sim_info_dbus_LDADD = @DBUS_GLIB_LIBS@ @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_sim_info_dbus_OBJECTS)
|
||||
unit_tests += unit/test-sim-info-dbus
|
||||
unit_test_sailfish_sim_info_dbus_LDADD = @DBUS_GLIB_LIBS@ @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_sailfish_sim_info_dbus_OBJECTS)
|
||||
unit_tests += unit/test-sailfish_sim_info_dbus
|
||||
|
||||
unit_test_slot_manager_SOURCES = unit/test-slot-manager.c unit/fake_watch.c \
|
||||
unit/fake_cell_info.c src/slot-manager.c \
|
||||
src/cell-info.c src/cell-info-control.c \
|
||||
src/sim-info.c src/storage.c src/log.c
|
||||
unit_test_slot_manager_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT) \
|
||||
unit_test_sailfish_manager_SOURCES = unit/test-sailfish_manager.c \
|
||||
unit/fake_watch.c \
|
||||
plugins/sailfish_manager/sailfish_manager.c \
|
||||
plugins/sailfish_manager/sailfish_cell_info.c \
|
||||
plugins/sailfish_manager/sailfish_sim_info.c \
|
||||
src/storage.c src/log.c
|
||||
unit_test_sailfish_manager_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT) \
|
||||
-DSTORAGEDIR='"/tmp/ofono"'
|
||||
unit_test_slot_manager_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_slot_manager_OBJECTS)
|
||||
unit_tests += unit/test-slot-manager
|
||||
unit_test_sailfish_manager_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_sailfish_manager_OBJECTS)
|
||||
unit_tests += unit/test-sailfish_manager
|
||||
|
||||
unit_test_watch_SOURCES = unit/test-watch.c src/watch.c \
|
||||
src/cell-info.c src/cell-info-control.c \
|
||||
src/log.c src/watchlist.c
|
||||
unit_test_watch_CFLAGS = $(AM_CFLAGS) $(COVERAGE_OPT) \
|
||||
-DSTORAGEDIR='"/tmp/ofono"'
|
||||
@@ -988,6 +1029,15 @@ unit_test_watch_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_watch_OBJECTS)
|
||||
unit_tests += unit/test-watch
|
||||
|
||||
endif
|
||||
|
||||
unit_test_config_SOURCES = unit/test-config.c drivers/ril/ril_util.c \
|
||||
src/config.c src/log.c
|
||||
unit_test_config_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS)
|
||||
unit_test_config_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_config_OBJECTS)
|
||||
unit_tests += unit/test-config
|
||||
|
||||
if SAILFISH_ACCESS
|
||||
unit_test_sailfish_access_SOURCES = unit/test-sailfish_access.c \
|
||||
plugins/sailfish_access.c src/dbus-access.c src/log.c
|
||||
@@ -1005,6 +1055,38 @@ unit_objects += $(unit_test_dbus_access_OBJECTS)
|
||||
unit_tests += unit/test-dbus-access
|
||||
|
||||
if RILMODEM
|
||||
if SAILFISH_RILMODEM
|
||||
|
||||
unit_test_ril_config_SOURCES = unit/test-ril_config.c drivers/ril/ril_util.c \
|
||||
drivers/ril/ril_config.c src/log.c
|
||||
unit_test_ril_config_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS)
|
||||
unit_test_ril_config_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_ril_config_OBJECTS)
|
||||
unit_tests += unit/test-ril_config
|
||||
|
||||
unit_test_ril_ecclist_SOURCES = unit/test-ril_ecclist.c \
|
||||
drivers/ril/ril_ecclist.c src/log.c
|
||||
unit_test_ril_ecclist_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS)
|
||||
unit_test_ril_ecclist_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_ril_ecclist_OBJECTS)
|
||||
unit_tests += unit/test-ril_ecclist
|
||||
|
||||
unit_test_ril_util_SOURCES = unit/test-ril_util.c drivers/ril/ril_util.c \
|
||||
src/log.c
|
||||
unit_test_ril_util_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS)
|
||||
unit_test_ril_util_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_ril_util_OBJECTS)
|
||||
unit_tests += unit/test-ril_util
|
||||
|
||||
unit_test_ril_vendor_SOURCES = unit/test-ril_vendor.c unit/fake_watch.c \
|
||||
drivers/ril/ril_vendor.c drivers/ril/ril_vendor_mtk.c \
|
||||
drivers/ril/ril_util.c src/log.c
|
||||
unit_test_ril_vendor_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS)
|
||||
unit_test_ril_vendor_LDADD = @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_ril_vendor_OBJECTS)
|
||||
unit_tests += unit/test-ril_vendor
|
||||
|
||||
else
|
||||
unit_tests += unit/test-rilmodem-cs \
|
||||
unit/test-rilmodem-cs \
|
||||
unit/test-rilmodem-sms \
|
||||
@@ -1012,6 +1094,7 @@ unit_tests += unit/test-rilmodem-cs \
|
||||
unit/test-rilmodem-gprs
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
if ELL
|
||||
if MBIMMODEM
|
||||
@@ -1079,14 +1162,6 @@ unit_test_caif_CFLAGS = $(COVERAGE_OPT) $(AM_CFLAGS)
|
||||
unit_test_caif_LDADD = @GLIB_LIBS@
|
||||
unit_objects += $(unit_test_caif_OBJECTS)
|
||||
|
||||
unit_test_dbus_clients_SOURCES = unit/test-dbus-clients.c unit/test-dbus.c \
|
||||
src/dbus-clients.c gdbus/object.c \
|
||||
src/dbus.c src/log.c
|
||||
unit_test_dbus_clients_CFLAGS = @DBUS_GLIB_CFLAGS@ $(COVERAGE_OPT) $(AM_CFLAGS)
|
||||
unit_test_dbus_clients_LDADD = @DBUS_GLIB_LIBS@ @GLIB_LIBS@ -ldl
|
||||
unit_objects += $(unit_test_dbus_clients_OBJECTS)
|
||||
unit_tests += unit/test-dbus-clients
|
||||
|
||||
unit_test_dbus_queue_SOURCES = unit/test-dbus-queue.c unit/test-dbus.c \
|
||||
src/dbus-queue.c gdbus/object.c \
|
||||
src/dbus.c src/log.c
|
||||
|
||||
@@ -12,8 +12,7 @@ AC_DEFUN([AC_PROG_CC_PIE], [
|
||||
|
||||
AC_DEFUN([COMPILER_FLAGS], [
|
||||
if (test "${CFLAGS}" = ""); then
|
||||
CFLAGS="-Wall -O2 -fsigned-char -fno-exceptions"
|
||||
CFLAGS="$CFLAGS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
|
||||
CFLAGS="-Wall -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
|
||||
fi
|
||||
if (test "$USE_MAINTAINER_MODE" = "yes"); then
|
||||
CFLAGS="$CFLAGS -Werror -Wextra"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.60)
|
||||
AC_INIT(ofono, 1.29)
|
||||
AC_INIT(ofono, 1.23)
|
||||
|
||||
AM_INIT_AUTOMAKE([foreign subdir-objects color-tests])
|
||||
AC_CONFIG_HEADERS(config.h)
|
||||
@@ -55,6 +55,9 @@ AC_ARG_ENABLE(pie, AC_HELP_STRING([--enable-pie],
|
||||
fi
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads],
|
||||
[enable threading support]), [enable_threads=${enableval}])
|
||||
|
||||
AC_CHECK_FUNC(signalfd, dummy=yes,
|
||||
AC_MSG_ERROR(signalfd support is required))
|
||||
|
||||
@@ -76,6 +79,14 @@ PKG_CHECK_MODULES(GIO, gio-2.0, dummy=yes,
|
||||
GLIB_CFLAGS="$GLIB_CFLAGS $GIO_CFLAGS"
|
||||
GLIB_LIBS="$GLIB_LIBS $GIO_LIBS"
|
||||
|
||||
if (test "${enable_threads}" = "yes"); then
|
||||
AC_DEFINE(NEED_THREADS, 1, [Define if threading support is required])
|
||||
PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes,
|
||||
AC_MSG_ERROR(GThread >= 2.16 is required))
|
||||
GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
|
||||
GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
|
||||
fi
|
||||
|
||||
PKG_CHECK_MODULES(DBUS, dbus-1 >= 1.4, dummy=yes,
|
||||
AC_MSG_ERROR(D-Bus >= 1.4 is required))
|
||||
AC_SUBST(DBUS_CFLAGS)
|
||||
@@ -166,17 +177,33 @@ AC_ARG_ENABLE(rilmodem, AC_HELP_STRING([--disable-rilmodem],
|
||||
[enable_rilmodem=${enableval}])
|
||||
AM_CONDITIONAL(RILMODEM, test "${enable_rilmodem}" != "no")
|
||||
|
||||
AC_ARG_ENABLE(extra-modems,
|
||||
AC_HELP_STRING([--enable-extra-modems],
|
||||
[enable modems not used by Sailfish OS]),
|
||||
[enable_extra_modems=${enableval}])
|
||||
AM_CONDITIONAL(EXTRA_MODEMS, test "${enable_extra_modems}" = "yes")
|
||||
AC_ARG_ENABLE(sailfish-rilmodem, AC_HELP_STRING([--enable-sailfish-rilmodem],
|
||||
[enable Sailfish RIL modem]),
|
||||
[enable_sailfish_rilmodem=${enableval}],
|
||||
[enable_sailfish_rilmodem="no"])
|
||||
AM_CONDITIONAL(SAILFISH_RILMODEM, test "${enable_sailfish_rilmodem}" != "no")
|
||||
|
||||
PKG_CHECK_MODULES(GLIBUTIL, libglibutil >= 1.0.51, dummy=yes,
|
||||
AC_MSG_ERROR(libglibutil >= 1.0.51 is required))
|
||||
PKG_CHECK_MODULES(GLIBUTIL, libglibutil >= 1.0.35, dummy=yes,
|
||||
AC_MSG_ERROR(libglibutil >= 1.0.35 is required))
|
||||
CFLAGS="$CFLAGS $GLIBUTIL_CFLAGS"
|
||||
LIBS="$LIBS $GLIBUTIL_LIBS"
|
||||
|
||||
if (test "${enable_sailfish_rilmodem}" = "yes"); then
|
||||
PKG_CHECK_MODULES(GRILIO, libgrilio >= 1.0.35, dummy=yes,
|
||||
AC_MSG_ERROR(libgrilio >= 1.0.35 is required))
|
||||
PKG_CHECK_MODULES(LIBMCE, libmce-glib >= 1.0.6, dummy=yes,
|
||||
AC_MSG_ERROR(libmce-glib >= 1.0.6 is required))
|
||||
CFLAGS="$CFLAGS $GRILIO_CFLAGS $LIBMCE_CFLAGS"
|
||||
LIBS="$LIBS $GRILIO_LIBS $LIBMCE_LIBS"
|
||||
enable_sailfish_manager=yes
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(sailfish-manager,
|
||||
AC_HELP_STRING([--enable-sailfish-manager],
|
||||
[enable Sailfish OS modem manager plugin]),
|
||||
[enable_sailfish_manager=${enableval}])
|
||||
AM_CONDITIONAL(SAILFISH_MANAGER, test "${enable_sailfish_manager}" = "yes")
|
||||
|
||||
PKG_CHECK_MODULES(DBUS_GLIB, dbus-glib-1, dummy=yes,
|
||||
AC_MSG_ERROR(dbus-glib is required by unit tests))
|
||||
AC_SUBST(DBUS_GLIB_CFLAGS)
|
||||
|
||||
@@ -1,164 +0,0 @@
|
||||
Every project has its own recursive patterns, and oFono is not an exception.
|
||||
This document describes the most common ones found in the code.
|
||||
|
||||
Typical flow for atom <-> atom driver operations
|
||||
================================================
|
||||
Most of the time, the core atom for a given request calls a function in
|
||||
the atom driver, which generally executes some commands against the modem,
|
||||
and can then return the results to the core.
|
||||
|
||||
For example:
|
||||
|
||||
dbus call: lte/SetProperty(DefaultAPN)
|
||||
|
|
||||
v
|
||||
core: check APN validity, call the modem atom for execution in the modem
|
||||
|
|
||||
v
|
||||
atom driver: schedules 'AT+CGDCONT=0,"IP","MyNiceAPN"' for execution
|
||||
|
|
||||
[ break in the flow: the functions return back to the core, the dbus request ]
|
||||
[ is not answered at this time ]
|
||||
...
|
||||
[GLibMain event loop schedules the command, it is sent to the modem and the ]
|
||||
[ modem's reply is obtained ]
|
||||
|
|
||||
v
|
||||
atom driver: a callback function, optionally provided when AT command was
|
||||
scheduled is now called
|
||||
|
|
||||
v
|
||||
core: atom driver core callback function is now called. This was passed from
|
||||
the core as an argument, earlier, when the atom driver operation was invoked,
|
||||
along with some context data (opaque info for the atom driver containing core
|
||||
atom owned data)
|
||||
|
|
||||
v
|
||||
the core can now answer the dbus message
|
||||
|
||||
|
||||
In the code, it looks like this:
|
||||
|
||||
//core call:
|
||||
static DBusMessage *lte_set_property(DBusConnection *conn,
|
||||
DBusMessage *msg, void *data)
|
||||
{
|
||||
struct ofono_lte *lte = data;
|
||||
|
||||
/*
|
||||
* a block of code here processes the msg and fills the
|
||||
* lte->pending_info structure
|
||||
*/
|
||||
|
||||
lte->driver->set_default_attach_info(lte, <e->pending_info,
|
||||
lte_set_default_attach_info_cb, lte);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
// lte_set_default_attach_info_cb is the core callback function,
|
||||
// the lte structure is the parameter that it takes
|
||||
|
||||
//atom:
|
||||
static void at_lte_set_default_attach_info(const struct ofono_lte *lte,
|
||||
const struct ofono_lte_default_attach_info *info,
|
||||
ofono_lte_cb_t cb, void *data)
|
||||
{
|
||||
struct lte_driver_data *ldd = ofono_lte_get_data(lte);
|
||||
|
||||
// next line creates a structure for the in-atom callback
|
||||
struct cb_data *cbd = cb_data_new(cb, data);
|
||||
|
||||
if (g_at_chat_send(ldd->chat, "AT", NULL,
|
||||
at_lte_set_default_attach_info_cb,
|
||||
cbd, g_free) > 0)
|
||||
return;
|
||||
|
||||
g_free(cbd);
|
||||
CALLBACK_WITH_FAILURE(cb, data);
|
||||
}
|
||||
// here the structure is allocate dynamically, and since it is quite common,
|
||||
// the function g_at_chat_send accepts the last 3 parameters:
|
||||
// - in-atom callback function
|
||||
// - in-atom callback data
|
||||
// - destroy function for dynamically-allocated callback data
|
||||
// NOTE: if g_at_chat_send fails, it does not free the memory, so it must be
|
||||
// done after the call.
|
||||
// Note also the callback to the core directly here if the g_at_chat_send fails.
|
||||
|
||||
//atom callback:
|
||||
|
||||
static void at_lte_set_default_attach_info_cb(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
|
||||
if (result == NULL) {
|
||||
CALLBACK_WITH_FAILURE(cbd->cb, cbd->data);
|
||||
return;
|
||||
}
|
||||
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
cbd->cb(&error, cbd->data);
|
||||
}
|
||||
// note that here cbd must not be released, it will be done by the GAtChat
|
||||
// after invoking the callback (at_lte_set_default_attach_info_cb)
|
||||
// note also that the core function will be executed before cbd is released,
|
||||
// so the last line of the code is ok.
|
||||
|
||||
|
||||
Use of the cb_data in AT command based atom drivers
|
||||
===================================================
|
||||
|
||||
the cb_data can be used by creating the structure with cb_data_new,
|
||||
and then there are two possibilities:
|
||||
- use it in a single callback function, and destroy it with a call to
|
||||
g_free.
|
||||
Example:
|
||||
- calling function:
|
||||
struct cb_data *cbd = cb_data_new(cb, data);
|
||||
if (g_at_chat_send(chat, buf, NULL, at_cgatt_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
g_free(cbd);
|
||||
- called function (here at_cgatt_cb):
|
||||
static void at_cgatt_cb(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
ofono_gprs_cb_t cb = cbd->cb;
|
||||
struct ofono_error error;
|
||||
|
||||
decode_at_error(&error,
|
||||
g_at_result_final_response(result));
|
||||
|
||||
cb(&error, cbd->data);
|
||||
}
|
||||
note the absence of explicit g_free(cbd);
|
||||
|
||||
- pass it through a train of callback functions, adding a reference at
|
||||
each pass cb_data_ref, and removing it with cb_data_unref.
|
||||
the use of cb_data_ref would replace a new object creation, while the
|
||||
use of cb_data_unref the use of g_free.
|
||||
Example:
|
||||
- calling function:
|
||||
struct cb_data *cbd = cb_data_new(cb, data);
|
||||
// no cb_ref at the creation
|
||||
if (g_at_chat_send(chat, buf, NULL,
|
||||
at_lte_set_default_attach_info_cb,
|
||||
cbd, cb_data_unref) > 0)
|
||||
goto end;
|
||||
cb_data_unref(cbd);
|
||||
- called function 1 (at_lte_set_default_attach_info_cb):
|
||||
static void at_lte_set_default_attach_info_cb(gboolean ok,
|
||||
GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
|
||||
cbd = cb_data_ref(cbd);
|
||||
if (g_at_chat_send(chat, buf, NULL,
|
||||
at_cgatt_cb, cbd, cb_data_unref) > 0)
|
||||
return;
|
||||
cb_data_unref(cbd);
|
||||
}
|
||||
- called function 2 (at_cgatt_cb):
|
||||
like above. no call to g_free or cb_data_unref. The terminal function
|
||||
doesn't need to know about the reference scheme.
|
||||
@@ -201,8 +201,7 @@ Properties boolean Active [readwrite]
|
||||
|
||||
string AuthenticationMethod [readwrite]
|
||||
Holds the PPP authentication method to use. Valid
|
||||
values are "pap", "chap" and "none".
|
||||
Defaults to "chap".
|
||||
values are "pap" and "chap". Defaults to "chap".
|
||||
|
||||
string Username [readwrite]
|
||||
|
||||
@@ -279,13 +278,6 @@ Properties boolean Active [readwrite]
|
||||
via this proxy. All other values are left
|
||||
out in this case.
|
||||
|
||||
array{string} ProxyCSCF [readonly, optional]
|
||||
|
||||
Holds the list of P-CSCF (SIP proxy) for this
|
||||
context. Only used by IMS connections.
|
||||
|
||||
This is a Sailfish OS specific extension.
|
||||
|
||||
dict IPv6.Settings [readonly, optional]
|
||||
|
||||
Holds all the IPv6 network settings
|
||||
@@ -312,13 +304,6 @@ Properties boolean Active [readwrite]
|
||||
|
||||
Holds the gateway IP for this connection.
|
||||
|
||||
array{string} ProxyCSCF [readonly, optional]
|
||||
|
||||
Holds the list of P-CSCF (SIP proxy) for this
|
||||
context. Only used by IMS connections.
|
||||
|
||||
This is a Sailfish OS specific extension.
|
||||
|
||||
string MessageProxy [readwrite, MMS only]
|
||||
|
||||
Holds the MMS Proxy setting.
|
||||
|
||||
@@ -14,7 +14,7 @@ What oFono will do:
|
||||
- Post online atoms will be created.
|
||||
- Upon reception of Dial request, Emergency mode is activated.
|
||||
- Once the call is ended, Emergency mode is deactivated.
|
||||
- Modem remains in online mode with full functionality.
|
||||
- Modem remains in online mode with full funcationality.
|
||||
|
||||
Case 2: Call in SIM Present and PIN required state
|
||||
|
||||
|
||||
@@ -1,137 +0,0 @@
|
||||
LTE Coexistence hierarchy
|
||||
=========================
|
||||
|
||||
Service org.ofono
|
||||
Interface org.ofono.intel.LteCoexistence
|
||||
Object path [variable prefix]/{modem0,modem1,...}
|
||||
|
||||
Methods dict GetProperties()
|
||||
|
||||
Returns all coexistence configuration properties.
|
||||
|
||||
void SetProperty(string property, variant value)
|
||||
|
||||
Changes the value of the specified property. Only
|
||||
properties that are listed as Read-write are changeable.
|
||||
On success a PropertyChanged signal will be emitted.
|
||||
|
||||
Possible Errors: [service].Error.InProgress
|
||||
[service].Error.InvalidArguments
|
||||
[service].Error.Failed
|
||||
|
||||
void RegisterAgent(object path)
|
||||
|
||||
Registers an agent which will be called whenever the
|
||||
modem initiates LTE Coexistence information.
|
||||
|
||||
Possible Errors: [service].Error.InProgress
|
||||
[service].Error.InvalidArguments
|
||||
[service].Error.InvalidFormat
|
||||
[service].Error.Failed
|
||||
|
||||
void UnregisterAgent(object path)
|
||||
|
||||
Unregisters an agent.
|
||||
|
||||
Possible Errors: [service].Error.InvalidArguments
|
||||
[service].Error.Failed
|
||||
|
||||
a(a{sv}) GetPlmnHistory()
|
||||
Requests for LTE Plmn history list stored in NVM to
|
||||
retrieve geo location history like MobileNetworkCode,
|
||||
MobileCountryCode, LteBandsFDD, LteBandsTDD,
|
||||
ChannelBandwidth.
|
||||
|
||||
Refer to the sections below for which property types
|
||||
are available, their valid value ranges and
|
||||
applicability to different cell types.
|
||||
|
||||
Signals PropertyChanged(string property, variant value)
|
||||
|
||||
This signal indicates a changed value of the given
|
||||
property.
|
||||
|
||||
Properties string Band [readwrite]
|
||||
|
||||
Frequency band in which the modem is operating when
|
||||
using "lte" mode.
|
||||
|
||||
boolean BTActive [readwrite]
|
||||
|
||||
Contains whether BT Coex is activated or not.
|
||||
|
||||
boolean WLANActive [readwrite]
|
||||
|
||||
Contains whether WLAN Coex is activated or not.
|
||||
|
||||
string WLANBandwidth [readwrite]
|
||||
|
||||
Contains the frequency WLAN Coex is activated on, when
|
||||
"CoexWLANActive" is active.
|
||||
|
||||
The possible values are:
|
||||
- "20MHz"
|
||||
- "40MHz"
|
||||
- "80MHz"
|
||||
|
||||
LTECoexistenceAgent Hierarchy [experimental]
|
||||
=============================
|
||||
|
||||
Service unique name
|
||||
Interface org.ofono.intel.LteCoexistenceAgent
|
||||
Object path freely definable
|
||||
|
||||
Methods void ReceiveBluetoothNotification(array{byte} notification,
|
||||
dict info) [noreply]
|
||||
|
||||
Requests the agent to process Bluetooth related LTE
|
||||
Coexistence information. The dictionary info contains
|
||||
vector table with modem recommended Safe Tx/Rx band and
|
||||
range information.The properties involved are
|
||||
'SafeTxMin', 'SafeRxMin', 'SafeTxMax', 'SafeRxMax' and
|
||||
'SafeVector'.
|
||||
|
||||
Possible Errors: None
|
||||
|
||||
void ReceiveWiFiNotification(array{byte} notification,
|
||||
dict info) [noreply]
|
||||
|
||||
Requests the agent to process WiFi related LTE
|
||||
Coexistence information. The dictionary info contains
|
||||
vector table with modem recommended SafeTx/Rx band and
|
||||
range information. The properties involved are
|
||||
'SafeTxMin', 'SafeRxMin', 'SafeTxMax', 'SafeRxMax' and
|
||||
'SafeVector'.
|
||||
|
||||
Possible Errors: None
|
||||
|
||||
void Release() [noreply]
|
||||
|
||||
Agent is being released, possibly because of oFono
|
||||
terminating, Coex interface is being torn down or modem
|
||||
off. No UnregisterAgent call is needed.
|
||||
|
||||
LTE Plmn history params
|
||||
=======================
|
||||
uint16 MobileNetworkCode [readonly, optional]
|
||||
|
||||
Contains the MNC of the cell.
|
||||
|
||||
uint16 MobileCountryCode [readonly, optional]
|
||||
|
||||
Contains the MCC of the cell.
|
||||
|
||||
uint32 LteBandsFDD [readonly, optional]
|
||||
|
||||
Contains the Lte FDD band. Valid range of values is 1 to 32 as per
|
||||
3GPP 36.101 Section 5.5.
|
||||
|
||||
uint32 LteBandsTDD [readonly, optional]
|
||||
|
||||
Contains the Lte TDD band. Valid range of values is 33 to 64 as per
|
||||
3GPP 36.101 Section 5.5.
|
||||
|
||||
byte ChannelBandwidth [readonly, optional]
|
||||
|
||||
Contains the Channel bandwidth. Valid range of values is 0 to 6 as per
|
||||
3GPP 36.101 Section 5.6.
|
||||
@@ -13,7 +13,7 @@ Methods dict GetProperties()
|
||||
filedescriptor Request()
|
||||
|
||||
Asks to turn ON the NMEA stream and supplies the
|
||||
gps device file descriptor. The external client should
|
||||
gps device file descriptor. The external cliend should
|
||||
use the file descriptor to receive the NMEA data.
|
||||
|
||||
Possible Errors: [service].Error.InProgress
|
||||
|
||||
@@ -33,39 +33,3 @@ Properties string DefaultAccessPointName [readwrite]
|
||||
|
||||
Setting this property to an empty string clears the
|
||||
default APN from the modem.
|
||||
|
||||
string Protocol [readwrite, experimental]
|
||||
|
||||
Holds the protocol for this context. Valid values
|
||||
are: "ip", "ipv6" and "dual". Default value is "ip".
|
||||
|
||||
string AuthenticationMethod [readwrite, experimental]
|
||||
|
||||
Sets the Method used for the authentication
|
||||
for the default APN.
|
||||
|
||||
Available values are "none", "pap" and "chap".
|
||||
Default is "none".
|
||||
|
||||
If the AuthenticationMethod is set to 'none',
|
||||
no authentication is performed for the default attach
|
||||
APN. Username and Password properties are ignored,
|
||||
even if containing a valid value. If Username or
|
||||
Password are empty, AuthenticationMethod is implicitly
|
||||
assumed to be set to 'none'.
|
||||
|
||||
If the default APN supports authentication and it
|
||||
fails, then it is up to the network how to proceed.
|
||||
In general LTE access is denied and the modem can
|
||||
fallback to a legacy technology if capable and another
|
||||
radio technology is available.
|
||||
|
||||
string Username [readwrite, experimental]
|
||||
|
||||
Holds the username to be used for authentication
|
||||
purposes.
|
||||
|
||||
string Password [readwrite, experimental]
|
||||
|
||||
Holds the password to be used for authentication
|
||||
purposes.
|
||||
|
||||
@@ -104,16 +104,6 @@ Properties string ServiceCenterAddress
|
||||
"turkish" - Turkish alphabet
|
||||
"spanish" - Spanish alphabet
|
||||
"portuguese" - Portuguese alphabet
|
||||
"bengali" - Bengali alphabet
|
||||
"gujarati" - Gujarati alphabet
|
||||
"hindi" - Hindi alphabet
|
||||
"kannada" - Kannada alphabet
|
||||
"malayalam" - Malayalam alphabet
|
||||
"oriya" - Oriya alphabet
|
||||
"punjabi"- Punjabi alphabet
|
||||
"tamil" - Tamil alphabet
|
||||
"telugu" - Telugu alphabet
|
||||
"urdu" - Urdu alphabet
|
||||
|
||||
The standard, language-specific alphabets are defined
|
||||
in 3GPP TS23.038, Annex A. By default, oFono uses
|
||||
|
||||
@@ -82,9 +82,7 @@ Properties string Mode [readonly]
|
||||
|
||||
string Status [readonly]
|
||||
|
||||
The current registration status of a modem. In case
|
||||
technology is 'lte', 'registered' and 'roaming' may
|
||||
not necessarily mean voice calling available.
|
||||
The current registration status of a modem.
|
||||
|
||||
The possible values are:
|
||||
"unregistered" Not registered to any network
|
||||
|
||||
@@ -205,15 +205,3 @@ Properties boolean Present [readonly]
|
||||
|
||||
Contains the SIM's ImsPrivateIdentity, read from the
|
||||
ISIM.
|
||||
|
||||
uint32 CardSlotCount [readonly, experimental]
|
||||
|
||||
Contains the count of number of SIM card slots available.
|
||||
|
||||
uint32 ActiveCardSlot [readwrite, experimental]
|
||||
|
||||
Contains the index of the currently active SIM card slot
|
||||
for dual SIM single active mode.
|
||||
|
||||
This property will range from 1 (default) to
|
||||
CardSlotCount (max) value.
|
||||
|
||||
@@ -10,13 +10,3 @@ On the i-Tetra tracking device, the SIM900 is accessed
|
||||
via N_GSM mux device. We use ofono as SMS message
|
||||
service and incoming voice calls service, so we
|
||||
use /dev/gsmtty1 provided by N_GSM mux.
|
||||
|
||||
SIM800 modem usage
|
||||
==================
|
||||
|
||||
When using sim800 modem, the udev rule is the same as the
|
||||
sim900 rule :
|
||||
|
||||
KERNEL=="ttyS3", ENV{OFONO_DRIVER}="sim900"
|
||||
|
||||
Because the SIM800 and SIM900 code are the merged into one driver.
|
||||
@@ -3,7 +3,6 @@
|
||||
* oFono - Open Source Telephony
|
||||
*
|
||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||
* Copyright (C) 2018 Gemalto M2M
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -655,46 +654,3 @@ int at_util_get_ipv4_address_and_netmask(const char *addrnetmask,
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int at_util_gprs_auth_method_to_auth_prot(
|
||||
enum ofono_gprs_auth_method auth_method)
|
||||
{
|
||||
switch (auth_method) {
|
||||
case OFONO_GPRS_AUTH_METHOD_ANY:
|
||||
case OFONO_GPRS_AUTH_METHOD_PAP:
|
||||
return 1;
|
||||
case OFONO_GPRS_AUTH_METHOD_CHAP:
|
||||
return 2;
|
||||
case OFONO_GPRS_AUTH_METHOD_NONE:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *at_util_gprs_proto_to_pdp_type(enum ofono_gprs_proto proto)
|
||||
{
|
||||
switch (proto) {
|
||||
case OFONO_GPRS_PROTO_IPV6:
|
||||
return "IPV6";
|
||||
case OFONO_GPRS_PROTO_IPV4V6:
|
||||
return "IPV4V6";
|
||||
break;
|
||||
case OFONO_GPRS_PROTO_IP:
|
||||
return "IP";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *at_util_get_cgdcont_command(guint cid, enum ofono_gprs_proto proto,
|
||||
const char *apn)
|
||||
{
|
||||
const char *pdp_type = at_util_gprs_proto_to_pdp_type(proto);
|
||||
|
||||
if (!apn)
|
||||
return g_strdup_printf("AT+CGDCONT=%u", cid);
|
||||
|
||||
return g_strdup_printf("AT+CGDCONT=%u,\"%s\",\"%s\"", cid, pdp_type,
|
||||
apn);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* oFono - Open Source Telephony
|
||||
*
|
||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||
* Copyright (C) 2018 Gemalto M2M
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -87,24 +86,7 @@ void at_util_sim_state_query_free(struct at_util_sim_state_query *req);
|
||||
int at_util_get_ipv4_address_and_netmask(const char *addrnetmask,
|
||||
char *address, char *netmask);
|
||||
|
||||
int at_util_gprs_auth_method_to_auth_prot(
|
||||
enum ofono_gprs_auth_method auth_method);
|
||||
|
||||
const char *at_util_gprs_proto_to_pdp_type(enum ofono_gprs_proto proto);
|
||||
|
||||
/*
|
||||
* at_util_get_cgdcont_command
|
||||
* if the apn pointer is NULL, the context will be removed: the resulting
|
||||
* string will be like: AT+CGDCONT=7
|
||||
* but if apn pointer is not NULL and the string is empty, then
|
||||
* this function will create a normal context with empty apn, like:
|
||||
* AT+CGDCONT=4,"IPV6",""
|
||||
*/
|
||||
char *at_util_get_cgdcont_command(guint cid, enum ofono_gprs_proto proto,
|
||||
const char *apn);
|
||||
|
||||
struct cb_data {
|
||||
gint ref_count;
|
||||
void *cb;
|
||||
void *data;
|
||||
void *user;
|
||||
@@ -115,29 +97,12 @@ static inline struct cb_data *cb_data_new(void *cb, void *data)
|
||||
struct cb_data *ret;
|
||||
|
||||
ret = g_new0(struct cb_data, 1);
|
||||
ret->ref_count = 1;
|
||||
ret->cb = cb;
|
||||
ret->data = data;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline struct cb_data *cb_data_ref(struct cb_data *cbd)
|
||||
{
|
||||
cbd->ref_count++;
|
||||
return cbd;
|
||||
}
|
||||
|
||||
static inline void cb_data_unref(gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
|
||||
if (--cbd->ref_count)
|
||||
return;
|
||||
|
||||
g_free(cbd);
|
||||
}
|
||||
|
||||
static inline int at_util_convert_signal_strength(int strength)
|
||||
{
|
||||
int result;
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -211,7 +212,7 @@ static void at_call_barring_remove(struct ofono_call_barring *cb)
|
||||
ofono_call_barring_set_data(cb, NULL);
|
||||
}
|
||||
|
||||
static const struct ofono_call_barring_driver driver = {
|
||||
static struct ofono_call_barring_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_call_barring_probe,
|
||||
.remove = at_call_barring_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -263,7 +264,7 @@ static void at_ccfc_remove(struct ofono_call_forwarding *cf)
|
||||
ofono_call_forwarding_set_data(cf, NULL);
|
||||
}
|
||||
|
||||
static const struct ofono_call_forwarding_driver driver = {
|
||||
static struct ofono_call_forwarding_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_ccfc_probe,
|
||||
.remove = at_ccfc_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -330,7 +331,7 @@ static void at_caoc_remove(struct ofono_call_meter *cm)
|
||||
ofono_call_meter_set_data(cm, NULL);
|
||||
}
|
||||
|
||||
static const struct ofono_call_meter_driver driver = {
|
||||
static struct ofono_call_meter_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_caoc_probe,
|
||||
.remove = at_caoc_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -397,7 +398,7 @@ static void at_call_settings_remove(struct ofono_call_settings *cs)
|
||||
ofono_call_settings_set_data(cs, NULL);
|
||||
}
|
||||
|
||||
static const struct ofono_call_settings_driver driver = {
|
||||
static struct ofono_call_settings_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_call_settings_probe,
|
||||
.remove = at_call_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -206,7 +207,7 @@ static void at_call_volume_remove(struct ofono_call_volume *cv)
|
||||
g_free(cvd);
|
||||
}
|
||||
|
||||
static const struct ofono_call_volume_driver driver = {
|
||||
static struct ofono_call_volume_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_call_volume_probe,
|
||||
.remove = at_call_volume_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -47,51 +48,6 @@ struct cbs_data {
|
||||
unsigned int vendor;
|
||||
};
|
||||
|
||||
static void at_xmm_etw_sec_notify(GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_cbs *cbs = user_data;
|
||||
const char *hexpdu;
|
||||
int pdulen;
|
||||
GAtResultIter iter;
|
||||
unsigned char pdu[88];
|
||||
long hexpdulen;
|
||||
|
||||
DBG("");
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
if (!g_at_result_iter_next(&iter, "+XETWSECWARN:"))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &pdulen))
|
||||
return;
|
||||
|
||||
if (pdulen != 88) {
|
||||
ofono_error("Got a CBM message with invalid PDU size!");
|
||||
return;
|
||||
}
|
||||
|
||||
hexpdu = g_at_result_pdu(result);
|
||||
if (hexpdu == NULL) {
|
||||
ofono_error("Got a CBM, but no PDU. Are we in text mode?");
|
||||
return;
|
||||
}
|
||||
|
||||
DBG("Got new Cell Broadcast via XETWSECWARN: %s, %d", hexpdu, pdulen);
|
||||
|
||||
if (decode_hex_own_buf(hexpdu, -1, &hexpdulen, 0, pdu) == NULL) {
|
||||
ofono_error("Unable to hex-decode the PDU");
|
||||
return;
|
||||
}
|
||||
|
||||
if (hexpdulen != pdulen) {
|
||||
ofono_error("hexpdu length not equal to reported pdu length");
|
||||
return;
|
||||
}
|
||||
|
||||
ofono_cbs_notify(cbs, pdu, pdulen);
|
||||
}
|
||||
|
||||
static void at_cbm_notify(GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_cbs *cbs = user_data;
|
||||
@@ -165,14 +121,9 @@ static void at_cbs_set_topics(struct ofono_cbs *cbs, const char *topics,
|
||||
switch (data->vendor) {
|
||||
case OFONO_VENDOR_GOBI:
|
||||
case OFONO_VENDOR_QUALCOMM_MSM:
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
g_at_chat_send(data->chat, "AT+CSCB=0", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
break;
|
||||
case OFONO_VENDOR_XMM:
|
||||
g_at_chat_send(data->chat, "AT+XETWNTFYSTART=2", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -200,10 +151,6 @@ static void at_cbs_clear_topics(struct ofono_cbs *cbs,
|
||||
|
||||
DBG("");
|
||||
|
||||
if (data->vendor == OFONO_VENDOR_XMM)
|
||||
g_at_chat_send(data->chat, "AT+XETWNTFYSTOP=2", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
if (g_at_chat_send(data->chat, "AT+CSCB=0", none_prefix,
|
||||
at_cscb_set_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
@@ -228,10 +175,6 @@ static void at_cbs_register(gboolean ok, GAtResult *result, gpointer user)
|
||||
*/
|
||||
g_at_chat_register(data->chat, "+CBM:", at_cbm_notify, TRUE, cbs, NULL);
|
||||
|
||||
if (data->vendor == OFONO_VENDOR_XMM)
|
||||
g_at_chat_register(data->chat, "+XETWSECWARN:",
|
||||
at_xmm_etw_sec_notify, TRUE, cbs, NULL);
|
||||
|
||||
ofono_cbs_register(cbs);
|
||||
}
|
||||
|
||||
@@ -280,13 +223,6 @@ static int at_cbs_probe(struct ofono_cbs *cbs, unsigned int vendor,
|
||||
|
||||
ofono_cbs_set_data(cbs, data);
|
||||
|
||||
if (vendor == OFONO_VENDOR_XMM) {
|
||||
g_at_chat_send(data->chat, "AT+XCMAS=1", cscb_prefix,
|
||||
NULL, NULL, NULL);
|
||||
g_at_chat_send(data->chat, "AT+XETWCFG=1,1,0,0; ", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
g_at_chat_send(data->chat, "AT+CSCB=?", cscb_prefix,
|
||||
at_cscb_support_cb, cbs, NULL);
|
||||
|
||||
@@ -303,7 +239,7 @@ static void at_cbs_remove(struct ofono_cbs *cbs)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_cbs_driver driver = {
|
||||
static struct ofono_cbs_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_cbs_probe,
|
||||
.remove = at_cbs_remove,
|
||||
|
||||
@@ -153,7 +153,7 @@ static void at_devinfo_remove(struct ofono_devinfo *info)
|
||||
g_at_chat_unref(chat);
|
||||
}
|
||||
|
||||
static const struct ofono_devinfo_driver driver = {
|
||||
static struct ofono_devinfo_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_devinfo_probe,
|
||||
.remove = at_devinfo_remove,
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -262,7 +263,7 @@ static void at_gnss_remove(struct ofono_gnss *gnss)
|
||||
g_free(gd);
|
||||
}
|
||||
|
||||
static const struct ofono_gnss_driver driver = {
|
||||
static struct ofono_gnss_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_gnss_probe,
|
||||
.remove = at_gnss_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -464,19 +465,10 @@ static int at_gprs_context_probe(struct ofono_gprs_context *gc,
|
||||
static void at_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
{
|
||||
struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);
|
||||
GAtIO *io;
|
||||
|
||||
DBG("");
|
||||
|
||||
if (gcd->state != STATE_IDLE && gcd->ppp) {
|
||||
if ((gcd->vendor == OFONO_VENDOR_HUAWEI) && gcd->chat) {
|
||||
/* immediately send escape sequence */
|
||||
io = g_at_chat_get_io(gcd->chat);
|
||||
|
||||
if (io)
|
||||
g_at_io_write(io, "+++", 3);
|
||||
}
|
||||
|
||||
g_at_ppp_unref(gcd->ppp);
|
||||
g_at_chat_resume(gcd->chat);
|
||||
}
|
||||
@@ -487,7 +479,7 @@ static void at_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
g_free(gcd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_gprs_context_probe,
|
||||
.remove = at_gprs_context_remove,
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -455,6 +456,7 @@ static void gprs_initialized(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
FALSE, gprs, NULL);
|
||||
break;
|
||||
case OFONO_VENDOR_UBLOX:
|
||||
case OFONO_VENDOR_UBLOX_TOBY_L2:
|
||||
g_at_chat_register(gd->chat, "+UREG:", ublox_ureg_notify,
|
||||
FALSE, gprs, NULL);
|
||||
g_at_chat_send(gd->chat, "AT+UREG=1", none_prefix,
|
||||
@@ -640,7 +642,7 @@ static void at_gprs_remove(struct ofono_gprs *gprs)
|
||||
g_free(gd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_driver driver = {
|
||||
static struct ofono_gprs_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_gprs_probe,
|
||||
.remove = at_gprs_remove,
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* oFono - Open Source Telephony
|
||||
*
|
||||
* Copyright (C) 2017 Intel Corporation. All rights reserved.
|
||||
* Copyright (C) 2018 Gemalto M2M
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -24,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -41,66 +41,21 @@
|
||||
|
||||
#include "atmodem.h"
|
||||
|
||||
static const char *none_prefix[] = { NULL };
|
||||
|
||||
struct lte_driver_data {
|
||||
GAtChat *chat;
|
||||
struct ofono_lte_default_attach_info pending_info;
|
||||
};
|
||||
|
||||
static void at_lte_set_auth_cb(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
ofono_lte_cb_t cb = cbd->cb;
|
||||
struct ofono_error error;
|
||||
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
cb(&error, cbd->data);
|
||||
}
|
||||
|
||||
static void at_lte_set_default_attach_info_cb(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
ofono_lte_cb_t cb = cbd->cb;
|
||||
void *data = cbd->data;
|
||||
struct lte_driver_data *ldd = cbd->user;
|
||||
struct ofono_error error;
|
||||
char buf[32 + OFONO_GPRS_MAX_USERNAME_LENGTH +
|
||||
OFONO_GPRS_MAX_PASSWORD_LENGTH + 1];
|
||||
size_t buflen = sizeof(buf);
|
||||
size_t len;
|
||||
enum ofono_gprs_auth_method auth_method;
|
||||
|
||||
if (!ok) {
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
cb(&error, data);
|
||||
return;
|
||||
}
|
||||
DBG("ok %d", ok);
|
||||
|
||||
auth_method = ldd->pending_info.auth_method;
|
||||
|
||||
/* change the authentication method if the parameters are invalid */
|
||||
if (!*ldd->pending_info.username || !*ldd->pending_info.password)
|
||||
auth_method = OFONO_GPRS_AUTH_METHOD_NONE;
|
||||
|
||||
len = snprintf(buf, buflen, "AT+CGAUTH=0,%d",
|
||||
at_util_gprs_auth_method_to_auth_prot(auth_method));
|
||||
buflen -= len;
|
||||
|
||||
if (auth_method != OFONO_GPRS_AUTH_METHOD_NONE)
|
||||
snprintf(buf + len, buflen, ",\"%s\",\"%s\"",
|
||||
ldd->pending_info.username,
|
||||
ldd->pending_info.password);
|
||||
|
||||
cbd = cb_data_ref(cbd);
|
||||
if (g_at_chat_send(ldd->chat, buf, none_prefix,
|
||||
at_lte_set_auth_cb, cbd, cb_data_unref) > 0)
|
||||
return;
|
||||
|
||||
cb_data_unref(cbd);
|
||||
CALLBACK_WITH_FAILURE(cb, data);
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
cb(&error, cbd->data);
|
||||
}
|
||||
|
||||
static void at_lte_set_default_attach_info(const struct ofono_lte *lte,
|
||||
@@ -108,21 +63,23 @@ static void at_lte_set_default_attach_info(const struct ofono_lte *lte,
|
||||
ofono_lte_cb_t cb, void *data)
|
||||
{
|
||||
struct lte_driver_data *ldd = ofono_lte_get_data(lte);
|
||||
char buf[32 + OFONO_GPRS_MAX_APN_LENGTH + 1];
|
||||
struct cb_data *cbd = cb_data_new(cb, data);
|
||||
char *buf = at_util_get_cgdcont_command(0, info->proto, info->apn);
|
||||
|
||||
cbd->user = ldd;
|
||||
memcpy(&ldd->pending_info, info, sizeof(ldd->pending_info));
|
||||
DBG("LTE config with APN: %s", info->apn);
|
||||
|
||||
if (g_at_chat_send(ldd->chat, buf, none_prefix,
|
||||
at_lte_set_default_attach_info_cb,
|
||||
cbd, cb_data_unref) > 0)
|
||||
goto end;
|
||||
if (strlen(info->apn) > 0)
|
||||
snprintf(buf, sizeof(buf), "AT+CGDCONT=0,\"IP\",\"%s\"",
|
||||
info->apn);
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "AT+CGDCONT=0,\"IP\"");
|
||||
|
||||
/* We can't do much in case of failure so don't check response. */
|
||||
if (g_at_chat_send(ldd->chat, buf, NULL,
|
||||
at_lte_set_default_attach_info_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
|
||||
cb_data_unref(cbd);
|
||||
CALLBACK_WITH_FAILURE(cb, data);
|
||||
end:
|
||||
g_free(buf);
|
||||
}
|
||||
|
||||
static gboolean lte_delayed_register(gpointer user_data)
|
||||
@@ -134,7 +91,7 @@ static gboolean lte_delayed_register(gpointer user_data)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static int at_lte_probe(struct ofono_lte *lte, unsigned int vendor, void *data)
|
||||
static int at_lte_probe(struct ofono_lte *lte, void *data)
|
||||
{
|
||||
GAtChat *chat = data;
|
||||
struct lte_driver_data *ldd;
|
||||
@@ -167,7 +124,7 @@ static void at_lte_remove(struct ofono_lte *lte)
|
||||
g_free(ldd);
|
||||
}
|
||||
|
||||
static const struct ofono_lte_driver driver = {
|
||||
static struct ofono_lte_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_lte_probe,
|
||||
.remove = at_lte_remove,
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -47,7 +48,6 @@ static const char *cops_prefix[] = { "+COPS:", NULL };
|
||||
static const char *csq_prefix[] = { "+CSQ:", NULL };
|
||||
static const char *cind_prefix[] = { "+CIND:", NULL };
|
||||
static const char *cmer_prefix[] = { "+CMER:", NULL };
|
||||
static const char *smoni_prefix[] = { "^SMONI:", NULL };
|
||||
static const char *zpas_prefix[] = { "+ZPAS:", NULL };
|
||||
static const char *option_tech_prefix[] = { "_OCTI:", "_OUWCTI:", NULL };
|
||||
|
||||
@@ -178,31 +178,6 @@ static int option_parse_tech(GAtResult *result)
|
||||
return tech;
|
||||
}
|
||||
|
||||
static int gemalto_parse_tech(GAtResult *result)
|
||||
{
|
||||
int tech = -1;
|
||||
GAtResultIter iter;
|
||||
const char *technology;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
if (!g_at_result_iter_next(&iter, "^SMONI: "))
|
||||
return tech;
|
||||
|
||||
if (!g_at_result_iter_next_unquoted_string(&iter, &technology))
|
||||
return tech;
|
||||
|
||||
if (strcmp(technology, "2G") == 0) {
|
||||
tech = ACCESS_TECHNOLOGY_GSM_EGPRS;
|
||||
} else if (strcmp(technology, "3G") == 0) {
|
||||
tech = ACCESS_TECHNOLOGY_UTRAN;
|
||||
} else if (strcmp(technology, "4G") == 0) {
|
||||
tech = ACCESS_TECHNOLOGY_EUTRAN;
|
||||
}
|
||||
|
||||
return tech;
|
||||
}
|
||||
|
||||
static void at_creg_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
@@ -227,25 +202,9 @@ static void at_creg_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
if ((status == 1 || status == 5) && (tech == -1))
|
||||
tech = nd->tech;
|
||||
|
||||
/* 6-10 is EUTRAN, with 8 being emergency bearer case */
|
||||
if (status > 5 && tech == -1)
|
||||
tech = ACCESS_TECHNOLOGY_EUTRAN;
|
||||
|
||||
cb(&error, status, lac, ci, tech, cbd->data);
|
||||
}
|
||||
|
||||
static void gemalto_query_tech_cb(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct tech_query *tq = user_data;
|
||||
int tech;
|
||||
|
||||
tech = gemalto_parse_tech(result);
|
||||
|
||||
ofono_netreg_status_notify(tq->netreg,
|
||||
tq->status, tq->lac, tq->ci, tech);
|
||||
}
|
||||
|
||||
static void zte_tech_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
@@ -879,7 +838,7 @@ static void telit_ciev_notify(GAtResult *result, gpointer user_data)
|
||||
ofono_netreg_strength_notify(netreg, strength);
|
||||
}
|
||||
|
||||
static void gemalto_ciev_notify(GAtResult *result, gpointer user_data)
|
||||
static void cinterion_ciev_notify(GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_netreg *netreg = user_data;
|
||||
struct netreg_data *nd = ofono_netreg_get_data(netreg);
|
||||
@@ -1559,12 +1518,6 @@ static void creg_notify(GAtResult *result, gpointer user_data)
|
||||
option_query_tech_cb, tq, g_free) > 0)
|
||||
return;
|
||||
break;
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
if (g_at_chat_send(nd->chat, "AT^SMONI",
|
||||
smoni_prefix,
|
||||
gemalto_query_tech_cb, tq, g_free) > 0)
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
g_free(tq);
|
||||
@@ -1655,11 +1608,8 @@ static ofono_bool_t build_cmer_string(char *buf, int *cmer_opts,
|
||||
DBG("");
|
||||
|
||||
switch (nd->vendor) {
|
||||
case OFONO_VENDOR_UBLOX:
|
||||
/* For all u-blox models, mode 3 is equivalent to mode 1;
|
||||
* since some models do not support setting modes 2 nor 3
|
||||
* (see UBX-13002752), we prefer mode 1 for all models.
|
||||
*/
|
||||
case OFONO_VENDOR_UBLOX_TOBY_L2:
|
||||
/* UBX-13002752 R33: TOBY L2 doesn't support mode 2 and 3 */
|
||||
mode = "1";
|
||||
break;
|
||||
default:
|
||||
@@ -2034,12 +1984,12 @@ static void at_creg_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
g_at_chat_send(nd->chat, "AT*TLTS=1", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
break;
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
case OFONO_VENDOR_CINTERION:
|
||||
/*
|
||||
* We can't set rssi bounds from Gemalto responses
|
||||
* We can't set rssi bounds from Cinterion responses
|
||||
* so set them up to specified values here
|
||||
*
|
||||
* Gemalto rssi signal strength specified as:
|
||||
* Cinterion rssi signal strength specified as:
|
||||
* 0 <= -112dBm
|
||||
* 1 - 4 signal strengh in 15 dB steps
|
||||
* 5 >= -51 dBm
|
||||
@@ -2053,7 +2003,7 @@ static void at_creg_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
g_at_chat_send(nd->chat, "AT^SIND=\"rssi\",1", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
g_at_chat_register(nd->chat, "+CIEV:",
|
||||
gemalto_ciev_notify, FALSE, netreg, NULL);
|
||||
cinterion_ciev_notify, FALSE, netreg, NULL);
|
||||
break;
|
||||
case OFONO_VENDOR_NOKIA:
|
||||
case OFONO_VENDOR_SAMSUNG:
|
||||
@@ -2157,7 +2107,7 @@ static void at_netreg_remove(struct ofono_netreg *netreg)
|
||||
g_free(nd);
|
||||
}
|
||||
|
||||
static const struct ofono_netreg_driver driver = {
|
||||
static struct ofono_netreg_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_netreg_probe,
|
||||
.remove = at_netreg_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -592,7 +593,7 @@ static void at_phonebook_remove(struct ofono_phonebook *pb)
|
||||
g_free(pbd);
|
||||
}
|
||||
|
||||
static const struct ofono_phonebook_driver driver = {
|
||||
static struct ofono_phonebook_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_phonebook_probe,
|
||||
.remove = at_phonebook_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -65,17 +66,15 @@ static const char *oercn_prefix[] = { "_OERCN:", NULL };
|
||||
static const char *cpinr_prefixes[] = { "+CPINR:", "+CPINRE:", NULL };
|
||||
static const char *epin_prefix[] = { "*EPIN:", NULL };
|
||||
static const char *simcom_spic_prefix[] = { "+SPIC:", NULL };
|
||||
static const char *gemalto_spic_prefix[] = { "^SPIC:", NULL };
|
||||
static const char *cinterion_spic_prefix[] = { "^SPIC:", NULL };
|
||||
static const char *pct_prefix[] = { "#PCT:", NULL };
|
||||
static const char *pnnm_prefix[] = { "+PNNM:", NULL };
|
||||
static const char *qpinc_prefix[] = { "+QPINC:", NULL };
|
||||
static const char *qtrpin_prefix[] = { "+QTRPIN:", NULL };
|
||||
static const char *upincnt_prefix[] = { "+UPINCNT:", NULL };
|
||||
static const char *cuad_prefix[] = { "+CUAD:", NULL };
|
||||
static const char *ccho_prefix[] = { "+CCHO:", NULL };
|
||||
static const char *crla_prefix[] = { "+CRLA:", NULL };
|
||||
static const char *cgla_prefix[] = { "+CGLA:", NULL };
|
||||
static const char *xcmscsc_prefix[] = { "+XCMSCSC:", NULL};
|
||||
static const char *none_prefix[] = { NULL };
|
||||
|
||||
static void append_file_path(char *buf, const unsigned char *path,
|
||||
@@ -983,49 +982,6 @@ error:
|
||||
CALLBACK_WITH_FAILURE(cb, NULL, cbd->data);
|
||||
}
|
||||
|
||||
static void at_qtrpin_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
ofono_sim_pin_retries_cb_t cb = cbd->cb;
|
||||
const char *final = g_at_result_final_response(result);
|
||||
GAtResultIter iter;
|
||||
struct ofono_error error;
|
||||
int retries[OFONO_SIM_PASSWORD_INVALID];
|
||||
size_t i;
|
||||
|
||||
decode_at_error(&error, final);
|
||||
|
||||
if (!ok) {
|
||||
cb(&error, NULL, cbd->data);
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < OFONO_SIM_PASSWORD_INVALID; i++)
|
||||
retries[i] = -1;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
while (g_at_result_iter_next(&iter, "+QTRPIN:")) {
|
||||
int pin, pin2, puk, puk2;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &pin))
|
||||
continue;
|
||||
if (!g_at_result_iter_next_number(&iter, &pin2))
|
||||
continue;
|
||||
if (!g_at_result_iter_next_number(&iter, &puk))
|
||||
continue;
|
||||
if (!g_at_result_iter_next_number(&iter, &puk2))
|
||||
continue;
|
||||
|
||||
retries[OFONO_SIM_PASSWORD_SIM_PIN] = pin;
|
||||
retries[OFONO_SIM_PASSWORD_SIM_PUK] = puk;
|
||||
retries[OFONO_SIM_PASSWORD_SIM_PIN2] = pin2;
|
||||
retries[OFONO_SIM_PASSWORD_SIM_PUK2] = puk2;
|
||||
}
|
||||
|
||||
cb(&error, retries, cbd->data);
|
||||
}
|
||||
|
||||
static void at_qpinc_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
@@ -1110,7 +1066,7 @@ error:
|
||||
CALLBACK_WITH_FAILURE(cb, NULL, cbd->data);
|
||||
}
|
||||
|
||||
static void gemalto_spic_cb(gboolean ok, GAtResult *result,
|
||||
static void cinterion_spic_cb(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
@@ -1161,7 +1117,6 @@ static void at_pin_retries_query(struct ofono_sim *sim,
|
||||
DBG("");
|
||||
|
||||
switch (sd->vendor) {
|
||||
case OFONO_VENDOR_XMM:
|
||||
case OFONO_VENDOR_IFX:
|
||||
if (g_at_chat_send(sd->chat, "AT+XPINCNT", xpincnt_prefix,
|
||||
xpincnt_cb, cbd, g_free) > 0)
|
||||
@@ -1217,19 +1172,15 @@ static void at_pin_retries_query(struct ofono_sim *sim,
|
||||
at_qpinc_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
break;
|
||||
case OFONO_VENDOR_QUECTEL_M95:
|
||||
if (g_at_chat_send(sd->chat, "AT+QTRPIN", qtrpin_prefix,
|
||||
at_qtrpin_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
break;
|
||||
case OFONO_VENDOR_UBLOX:
|
||||
case OFONO_VENDOR_UBLOX_TOBY_L2:
|
||||
if (g_at_chat_send(sd->chat, "AT+UPINCNT", upincnt_prefix,
|
||||
upincnt_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
break;
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
if (g_at_chat_send(sd->chat, "AT^SPIC", gemalto_spic_prefix,
|
||||
gemalto_spic_cb, cbd, g_free) > 0)
|
||||
case OFONO_VENDOR_CINTERION:
|
||||
if (g_at_chat_send(sd->chat, "AT^SPIC", cinterion_spic_prefix,
|
||||
cinterion_spic_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
break;
|
||||
default:
|
||||
@@ -1354,7 +1305,6 @@ static void at_pin_send_cb(gboolean ok, GAtResult *result,
|
||||
case OFONO_VENDOR_HUAWEI:
|
||||
case OFONO_VENDOR_SIMCOM:
|
||||
case OFONO_VENDOR_SIERRA:
|
||||
case OFONO_VENDOR_QUECTEL_M95:
|
||||
/*
|
||||
* On ZTE modems, after pin is entered, SIM state is checked
|
||||
* by polling CPIN as their modem doesn't provide unsolicited
|
||||
@@ -1409,12 +1359,12 @@ static void at_pin_send_puk(struct ofono_sim *sim, const char *puk,
|
||||
char buf[64];
|
||||
int ret;
|
||||
|
||||
cbd->user = sim;
|
||||
cbd->user = sd;
|
||||
|
||||
snprintf(buf, sizeof(buf), "AT+CPIN=\"%s\",\"%s\"", puk, passwd);
|
||||
|
||||
ret = g_at_chat_send(sd->chat, buf, none_prefix,
|
||||
at_pin_send_cb, cbd, g_free);
|
||||
at_pin_send_cb, cbd, NULL);
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
|
||||
@@ -1922,83 +1872,6 @@ static void at_logical_access(struct ofono_sim *sim, int session_id,
|
||||
CALLBACK_WITH_FAILURE(cb, NULL, 0, data);
|
||||
}
|
||||
|
||||
static void xcmscsc_query_cb(gboolean ok, GAtResult *result, gpointer user)
|
||||
{
|
||||
struct ofono_sim *sim = user;
|
||||
struct sim_data *sd = ofono_sim_get_data(sim);
|
||||
GAtResultIter iter;
|
||||
int active_slot;
|
||||
|
||||
if (!ok)
|
||||
goto done;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
if (!g_at_result_iter_next(&iter, "+XCMSCSC:"))
|
||||
goto done;
|
||||
|
||||
g_at_result_iter_skip_next(&iter);
|
||||
g_at_result_iter_skip_next(&iter);
|
||||
|
||||
g_at_result_iter_next_number(&iter, &active_slot);
|
||||
|
||||
/* set active SIM slot */
|
||||
ofono_sim_set_active_card_slot(sim, active_slot + 1);
|
||||
|
||||
done:
|
||||
/* Query supported <fac>s */
|
||||
g_at_chat_send(sd->chat, "AT+CLCK=?", clck_prefix,
|
||||
at_clck_query_cb, sim, NULL);
|
||||
}
|
||||
|
||||
static void at_xcmscsc_test_cb(gboolean ok, GAtResult *result, gpointer user)
|
||||
{
|
||||
struct ofono_sim *sim = user;
|
||||
struct sim_data *sd = ofono_sim_get_data(sim);
|
||||
GAtResultIter iter;
|
||||
int card_slot_count;
|
||||
|
||||
if (!ok)
|
||||
goto done;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
if (!g_at_result_iter_next(&iter, "+XCMSCSC:"))
|
||||
goto done;
|
||||
|
||||
g_at_result_iter_skip_next(&iter);
|
||||
g_at_result_iter_skip_next(&iter);
|
||||
|
||||
if (!g_at_result_iter_open_list(&iter))
|
||||
goto done;
|
||||
|
||||
g_at_result_iter_skip_next(&iter);
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &card_slot_count))
|
||||
goto done;
|
||||
|
||||
/* Set num slots */
|
||||
ofono_sim_set_card_slot_count(sim, card_slot_count + 1);
|
||||
|
||||
/*
|
||||
* enable reporting of MSIM remap status information
|
||||
* and enable automatic acceptance of MSIM Remap
|
||||
* acknowledgement
|
||||
*/
|
||||
g_at_chat_send(sd->chat, "AT+XCMSRS=2", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
/* Query active card slot */
|
||||
g_at_chat_send(sd->chat, "AT+XCMSCSC?", xcmscsc_prefix,
|
||||
xcmscsc_query_cb, sim, NULL);
|
||||
return;
|
||||
|
||||
done:
|
||||
/* Query supported <fac>s */
|
||||
g_at_chat_send(sd->chat, "AT+CLCK=?", clck_prefix,
|
||||
at_clck_query_cb, sim, NULL);
|
||||
}
|
||||
|
||||
static int at_sim_probe(struct ofono_sim *sim, unsigned int vendor,
|
||||
void *data)
|
||||
{
|
||||
@@ -2017,10 +1890,6 @@ static int at_sim_probe(struct ofono_sim *sim, unsigned int vendor,
|
||||
if (at_clck_cpwd_fac[i])
|
||||
sd->passwd_type_mask |= (1 << i);
|
||||
|
||||
if (sd->vendor == OFONO_VENDOR_XMM)
|
||||
return g_at_chat_send(sd->chat, "AT+XCMSCSC=?", xcmscsc_prefix,
|
||||
at_xcmscsc_test_cb, sim, NULL) ? 0 : -1;
|
||||
|
||||
/* Query supported <fac>s */
|
||||
return g_at_chat_send(sd->chat, "AT+CLCK=?", clck_prefix,
|
||||
at_clck_query_cb, sim, NULL) ? 0 : -1;
|
||||
@@ -2040,47 +1909,7 @@ static void at_sim_remove(struct ofono_sim *sim)
|
||||
g_free(sd);
|
||||
}
|
||||
|
||||
static void xcmscsc_cb(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
ofono_sim_set_active_card_slot_cb_t cb = cbd->cb;
|
||||
struct ofono_error error;
|
||||
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
|
||||
if (cb)
|
||||
cb(&error, cbd->data);
|
||||
}
|
||||
|
||||
static void at_set_active_card_slot(struct ofono_sim *sim, unsigned int index,
|
||||
ofono_sim_set_active_card_slot_cb_t cb, void *data)
|
||||
{
|
||||
struct sim_data *sd = ofono_sim_get_data(sim);
|
||||
struct cb_data *cbd = cb_data_new(cb, data);
|
||||
char cmd[43];
|
||||
|
||||
if (sd->vendor != OFONO_VENDOR_XMM) {
|
||||
struct ofono_error error;
|
||||
error.type = OFONO_ERROR_TYPE_CME;
|
||||
error.error = 4;
|
||||
|
||||
cb(&error, data);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Enable single SIM mode for indicated card slot id */
|
||||
snprintf(cmd, sizeof(cmd), "AT+XCMSCSC=1,0,%u,1", index);
|
||||
|
||||
if (g_at_chat_send(sd->chat, cmd, none_prefix, xcmscsc_cb,
|
||||
cbd, g_free) > 0)
|
||||
return;
|
||||
|
||||
g_free(cbd);
|
||||
CALLBACK_WITH_FAILURE(cb, data);
|
||||
}
|
||||
|
||||
static const struct ofono_sim_driver driver = {
|
||||
static struct ofono_sim_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_sim_probe,
|
||||
.remove = at_sim_remove,
|
||||
@@ -2105,11 +1934,10 @@ static const struct ofono_sim_driver driver = {
|
||||
.session_read_binary = at_session_read_binary,
|
||||
.session_read_record = at_session_read_record,
|
||||
.session_read_info = at_session_read_info,
|
||||
.logical_access = at_logical_access,
|
||||
.set_active_card_slot = at_set_active_card_slot
|
||||
.logical_access = at_logical_access
|
||||
};
|
||||
|
||||
static const struct ofono_sim_driver driver_noef = {
|
||||
static struct ofono_sim_driver driver_noef = {
|
||||
.name = "atmodem-noef",
|
||||
.probe = at_sim_probe,
|
||||
.remove = at_sim_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -103,7 +104,7 @@ static void at_csca_set(struct ofono_sms *sms,
|
||||
{
|
||||
struct sms_data *data = ofono_sms_get_data(sms);
|
||||
struct cb_data *cbd = cb_data_new(cb, user_data);
|
||||
char buf[128];
|
||||
char buf[64];
|
||||
|
||||
snprintf(buf, sizeof(buf), "AT+CSCA=\"%s\",%d", sca->number, sca->type);
|
||||
|
||||
@@ -219,16 +220,9 @@ static void at_cmgs(struct ofono_sms *sms, const unsigned char *pdu,
|
||||
int len;
|
||||
|
||||
if (mms) {
|
||||
switch (data->vendor) {
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
/* no mms support */
|
||||
break;
|
||||
default:
|
||||
snprintf(buf, sizeof(buf), "AT+CMMS=%d", mms);
|
||||
g_at_chat_send(data->chat, buf, none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
break;
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "AT+CMMS=%d", mms);
|
||||
g_at_chat_send(data->chat, buf, none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
len = snprintf(buf, sizeof(buf), "AT+CMGS=%d\r", tpdu_len);
|
||||
@@ -335,7 +329,7 @@ static inline void at_ack_delivery(struct ofono_sms *sms)
|
||||
/* We must acknowledge the PDU using CNMA */
|
||||
if (data->cnma_ack_pdu) {
|
||||
switch (data->vendor) {
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
case OFONO_VENDOR_CINTERION:
|
||||
snprintf(buf, sizeof(buf), "AT+CNMA=1");
|
||||
break;
|
||||
default:
|
||||
@@ -417,25 +411,9 @@ static void at_cmt_notify(GAtResult *result, gpointer user_data)
|
||||
goto err;
|
||||
|
||||
switch (data->vendor) {
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
if (!g_at_result_iter_next_number(&iter, &tpdu_len)) {
|
||||
/*
|
||||
* Some Gemalto modems (ALS3,PLS8...), act in
|
||||
* accordance with 3GPP 27.005. So we need to skip
|
||||
* the first (<alpha>) field
|
||||
* \r\n+CMT: ,23\r\nCAFECAFECAFE... ...\r\n
|
||||
* ^------- PDU length
|
||||
*/
|
||||
DBG("Retrying to find the PDU length");
|
||||
|
||||
if (!g_at_result_iter_skip_next(&iter))
|
||||
goto err;
|
||||
|
||||
/* Next attempt at finding the PDU length. */
|
||||
if (!g_at_result_iter_next_number(&iter, &tpdu_len))
|
||||
goto err;
|
||||
}
|
||||
|
||||
case OFONO_VENDOR_CINTERION:
|
||||
if (!g_at_result_iter_next_number(&iter, &tpdu_len))
|
||||
goto err;
|
||||
break;
|
||||
default:
|
||||
if (!g_at_result_iter_skip_next(&iter))
|
||||
@@ -461,7 +439,6 @@ static void at_cmt_notify(GAtResult *result, gpointer user_data)
|
||||
|
||||
if (data->vendor != OFONO_VENDOR_SIMCOM)
|
||||
at_ack_delivery(sms);
|
||||
return;
|
||||
|
||||
err:
|
||||
ofono_error("Unable to parse CMT notification");
|
||||
@@ -858,18 +835,8 @@ static gboolean build_cnmi_string(char *buf, int *cnmi_opts,
|
||||
data->cnma_enabled ? "21" : "1", FALSE))
|
||||
return FALSE;
|
||||
|
||||
switch (data->vendor) {
|
||||
case OFONO_VENDOR_GEMALTO:
|
||||
mode = "0";
|
||||
break;
|
||||
default:
|
||||
/* Sounds like 2 is the sanest mode */
|
||||
mode = "20";
|
||||
break;
|
||||
}
|
||||
|
||||
/* Always deliver CB via +CBM, otherwise don't deliver at all */
|
||||
if (!append_cnmi_element(buf, &len, cnmi_opts[2], mode, FALSE))
|
||||
if (!append_cnmi_element(buf, &len, cnmi_opts[2], "20", FALSE))
|
||||
return FALSE;
|
||||
|
||||
/*
|
||||
@@ -1329,7 +1296,7 @@ static void at_sms_remove(struct ofono_sms *sms)
|
||||
ofono_sms_set_data(sms, NULL);
|
||||
}
|
||||
|
||||
static const struct ofono_sms_driver driver = {
|
||||
static struct ofono_sms_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_sms_probe,
|
||||
.remove = at_sms_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -222,7 +223,7 @@ static void at_stk_remove(struct ofono_stk *stk)
|
||||
g_free(sd);
|
||||
}
|
||||
|
||||
static const struct ofono_stk_driver driver = {
|
||||
static struct ofono_stk_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_stk_probe,
|
||||
.remove = at_stk_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -91,7 +92,7 @@ static const unsigned char *ucs2_gsm_to_packed(const char *content,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
packed = pack_7bit_own_buf(gsm, written, 0, true, msg_len, 0, msg);
|
||||
packed = pack_7bit_own_buf(gsm, written, 0, TRUE, msg_len, 0, msg);
|
||||
g_free(gsm);
|
||||
|
||||
return packed;
|
||||
@@ -136,7 +137,7 @@ static void cusd_parse(GAtResult *result, struct ofono_ussd *ussd)
|
||||
switch (data->charset) {
|
||||
case AT_UTIL_CHARSET_GSM:
|
||||
msg_ptr = pack_7bit_own_buf((const guint8 *) content,
|
||||
-1, 0, true, &msg_len,
|
||||
-1, 0, TRUE, &msg_len,
|
||||
0, msg);
|
||||
break;
|
||||
|
||||
@@ -200,7 +201,7 @@ static void at_ussd_request(struct ofono_ussd *ussd, int dcs,
|
||||
unsigned char unpacked_buf[182];
|
||||
long written;
|
||||
|
||||
unpack_7bit_own_buf(pdu, len, 0, true, sizeof(unpacked_buf),
|
||||
unpack_7bit_own_buf(pdu, len, 0, TRUE, sizeof(unpacked_buf),
|
||||
&written, 0, unpacked_buf);
|
||||
|
||||
if (written < 1)
|
||||
@@ -326,7 +327,7 @@ static void at_ussd_remove(struct ofono_ussd *ussd)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_ussd_driver driver = {
|
||||
static struct ofono_ussd_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_ussd_probe,
|
||||
.remove = at_ussd_remove,
|
||||
|
||||
@@ -44,8 +44,8 @@ enum ofono_vendor {
|
||||
OFONO_VENDOR_WAVECOM_Q2XXX,
|
||||
OFONO_VENDOR_ALCATEL,
|
||||
OFONO_VENDOR_QUECTEL,
|
||||
OFONO_VENDOR_QUECTEL_M95,
|
||||
OFONO_VENDOR_UBLOX,
|
||||
OFONO_VENDOR_UBLOX_TOBY_L2,
|
||||
OFONO_VENDOR_CINTERION,
|
||||
OFONO_VENDOR_XMM,
|
||||
OFONO_VENDOR_GEMALTO,
|
||||
};
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -1119,7 +1120,6 @@ static int at_voicecall_probe(struct ofono_voicecall *vc, unsigned int vendor,
|
||||
|
||||
switch (vd->vendor) {
|
||||
case OFONO_VENDOR_QUALCOMM_MSM:
|
||||
case OFONO_VENDOR_SIMCOM:
|
||||
g_at_chat_send(vd->chat, "AT+COLP=0", NULL, NULL, NULL, NULL);
|
||||
break;
|
||||
default:
|
||||
@@ -1154,7 +1154,7 @@ static void at_voicecall_remove(struct ofono_voicecall *vc)
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_voicecall_driver driver = {
|
||||
static struct ofono_voicecall_driver driver = {
|
||||
.name = "atmodem",
|
||||
.probe = at_voicecall_probe,
|
||||
.remove = at_voicecall_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -291,7 +292,7 @@ static void calypso_stk_remove(struct ofono_stk *stk)
|
||||
g_free(sd);
|
||||
}
|
||||
|
||||
static const struct ofono_stk_driver driver = {
|
||||
static struct ofono_stk_driver driver = {
|
||||
.name = "calypsomodem",
|
||||
.probe = calypso_stk_probe,
|
||||
.remove = calypso_stk_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -401,7 +402,7 @@ static void calypso_voicecall_remove(struct ofono_voicecall *vc)
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_voicecall_driver driver = {
|
||||
static struct ofono_voicecall_driver driver = {
|
||||
.name = "calypsomodem",
|
||||
.probe = calypso_voicecall_probe,
|
||||
.remove = calypso_voicecall_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -322,7 +323,7 @@ static void cdma_connman_remove(struct ofono_cdma_connman *cm)
|
||||
g_free(cd);
|
||||
}
|
||||
|
||||
static const struct ofono_cdma_connman_driver driver = {
|
||||
static struct ofono_cdma_connman_driver driver = {
|
||||
.name = "cdmamodem",
|
||||
.probe = cdma_connman_probe,
|
||||
.remove = cdma_connman_remove,
|
||||
|
||||
@@ -153,7 +153,7 @@ static void cdma_devinfo_remove(struct ofono_devinfo *info)
|
||||
ofono_devinfo_set_data(info, NULL);
|
||||
}
|
||||
|
||||
static const struct ofono_devinfo_driver driver = {
|
||||
static struct ofono_devinfo_driver driver = {
|
||||
.name = "cdmamodem",
|
||||
.probe = cdma_devinfo_probe,
|
||||
.remove = cdma_devinfo_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -142,7 +143,7 @@ static void cdma_voicecall_remove(struct ofono_cdma_voicecall *vc)
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_cdma_voicecall_driver driver = {
|
||||
static struct ofono_cdma_voicecall_driver driver = {
|
||||
.name = "cdmamodem",
|
||||
.probe = cdma_voicecall_probe,
|
||||
.remove = cdma_voicecall_remove,
|
||||
|
||||
@@ -73,7 +73,7 @@ static void dun_gprs_attached_status(struct ofono_gprs *gprs,
|
||||
CALLBACK_WITH_SUCCESS(cb, 1, data);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_driver driver = {
|
||||
static struct ofono_gprs_driver driver = {
|
||||
.name = "dunmodem",
|
||||
.probe = dun_gprs_probe,
|
||||
.remove = dun_gprs_remove,
|
||||
|
||||
@@ -107,7 +107,7 @@ static void dun_netreg_remove(struct ofono_netreg *netreg)
|
||||
g_free(nd);
|
||||
}
|
||||
|
||||
static const struct ofono_netreg_driver driver = {
|
||||
static struct ofono_netreg_driver driver = {
|
||||
.name = "dunmodem",
|
||||
.probe = dun_netreg_probe,
|
||||
.remove = dun_netreg_remove,
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* oFono - Open Source Telephony
|
||||
*
|
||||
* Copyright (C) 2017 Vincent Cesson. All rights reserved.
|
||||
* Copyright (C) 2018 Gemalto M2M
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -36,14 +35,12 @@
|
||||
static int gemaltomodem_init(void)
|
||||
{
|
||||
gemalto_location_reporting_init();
|
||||
gemalto_voicecall_init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void gemaltomodem_exit(void)
|
||||
{
|
||||
gemalto_voicecall_exit();
|
||||
gemalto_location_reporting_exit();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* oFono - Open Source Telephony
|
||||
*
|
||||
* Copyright (C) 2017 Vincent Cesson. All rights reserved.
|
||||
* Copyright (C) 2018 Gemalto M2M
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -24,6 +23,3 @@
|
||||
|
||||
extern void gemalto_location_reporting_init();
|
||||
extern void gemalto_location_reporting_exit();
|
||||
|
||||
extern void gemalto_voicecall_init();
|
||||
extern void gemalto_voicecall_exit();
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -216,7 +217,7 @@ static void gemalto_location_reporting_remove(struct ofono_location_reporting *l
|
||||
g_free(gd);
|
||||
}
|
||||
|
||||
static const struct ofono_location_reporting_driver driver = {
|
||||
static struct ofono_location_reporting_driver driver = {
|
||||
.name = "gemaltomodem",
|
||||
.type = OFONO_LOCATION_REPORTING_TYPE_NMEA,
|
||||
.probe = gemalto_location_reporting_probe,
|
||||
|
||||
@@ -1,576 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* oFono - Open Source Telephony
|
||||
*
|
||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||
* Copyright (C) 2018 Gemalto M2M
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <ofono/log.h>
|
||||
#include <ofono/modem.h>
|
||||
#include <ofono/voicecall.h>
|
||||
|
||||
#include "gatchat.h"
|
||||
#include "gatresult.h"
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include "gemaltomodem.h"
|
||||
|
||||
static const char *clcc_prefix[] = { "+CLCC:", NULL };
|
||||
static const char *none_prefix[] = { NULL };
|
||||
|
||||
struct voicecall_data {
|
||||
GAtChat *chat;
|
||||
GSList *calls;
|
||||
unsigned int local_release;
|
||||
GSList *new_calls;
|
||||
};
|
||||
|
||||
struct release_id_req {
|
||||
struct ofono_voicecall *vc;
|
||||
ofono_voicecall_cb_t cb;
|
||||
void *data;
|
||||
int id;
|
||||
};
|
||||
|
||||
struct change_state_req {
|
||||
struct ofono_voicecall *vc;
|
||||
ofono_voicecall_cb_t cb;
|
||||
void *data;
|
||||
int affected_types;
|
||||
};
|
||||
|
||||
static void generic_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct change_state_req *req = user_data;
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(req->vc);
|
||||
struct ofono_error error;
|
||||
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
|
||||
if (ok && req->affected_types) {
|
||||
GSList *l;
|
||||
struct ofono_call *call;
|
||||
|
||||
for (l = vd->calls; l; l = l->next) {
|
||||
call = l->data;
|
||||
|
||||
if (req->affected_types & (1 << call->status))
|
||||
vd->local_release |= (1 << call->id);
|
||||
}
|
||||
}
|
||||
|
||||
req->cb(&error, req->data);
|
||||
}
|
||||
|
||||
static void gemalto_call_common(const char *cmd, struct ofono_voicecall *vc,
|
||||
GAtResultFunc result_cb,
|
||||
unsigned int affected_types,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
|
||||
struct change_state_req *req = g_new0(struct change_state_req, 1);
|
||||
|
||||
req->vc = vc;
|
||||
req->cb = cb;
|
||||
req->data = data;
|
||||
req->affected_types = affected_types;
|
||||
|
||||
if (g_at_chat_send(vd->chat, cmd, none_prefix,
|
||||
result_cb, req, g_free) > 0)
|
||||
return;
|
||||
|
||||
g_free(req);
|
||||
CALLBACK_WITH_FAILURE(cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_answer(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
gemalto_call_common("ATA", vc, generic_cb, 0, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_hangup_all(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
unsigned int affected = (1 << CALL_STATUS_INCOMING) |
|
||||
(1 << CALL_STATUS_DIALING) |
|
||||
(1 << CALL_STATUS_ALERTING) |
|
||||
(1 << CALL_STATUS_WAITING) |
|
||||
(1 << CALL_STATUS_HELD) |
|
||||
(1 << CALL_STATUS_ACTIVE);
|
||||
|
||||
/* Hangup all calls */
|
||||
gemalto_call_common("AT+CHUP", vc, generic_cb, affected, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_hangup(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
unsigned int affected = (1 << CALL_STATUS_ACTIVE);
|
||||
|
||||
/* Hangup current active call */
|
||||
gemalto_call_common("AT+CHLD=1", vc, generic_cb, affected, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_hold_all_active(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
unsigned int affected = (1 << CALL_STATUS_ACTIVE);
|
||||
gemalto_call_common("AT+CHLD=2", vc, generic_cb, affected, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_release_all_held(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
unsigned int affected = (1 << CALL_STATUS_INCOMING) |
|
||||
(1 << CALL_STATUS_WAITING);
|
||||
|
||||
gemalto_call_common("AT+CHLD=0", vc, generic_cb, affected, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_set_udub(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
unsigned int affected = (1 << CALL_STATUS_INCOMING) |
|
||||
(1 << CALL_STATUS_WAITING);
|
||||
|
||||
gemalto_call_common("AT+CHLD=0", vc, generic_cb, affected, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_release_all_active(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
unsigned int affected = (1 << CALL_STATUS_ACTIVE);
|
||||
|
||||
gemalto_call_common("AT+CHLD=1", vc, generic_cb, affected, cb, data);
|
||||
}
|
||||
|
||||
static void release_id_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct release_id_req *req = user_data;
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(req->vc);
|
||||
struct ofono_error error;
|
||||
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
|
||||
if (ok)
|
||||
vd->local_release = 1 << req->id;
|
||||
|
||||
req->cb(&error, req->data);
|
||||
}
|
||||
|
||||
static void gemalto_release_specific(struct ofono_voicecall *vc, int id,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
|
||||
struct release_id_req *req = g_new0(struct release_id_req, 1);
|
||||
char buf[32];
|
||||
|
||||
req->vc = vc;
|
||||
req->cb = cb;
|
||||
req->data = data;
|
||||
req->id = id;
|
||||
|
||||
snprintf(buf, sizeof(buf), "AT+CHLD=1%d", id);
|
||||
|
||||
if (g_at_chat_send(vd->chat, buf, none_prefix,
|
||||
release_id_cb, req, g_free) > 0)
|
||||
return;
|
||||
|
||||
g_free(req);
|
||||
CALLBACK_WITH_FAILURE(cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_private_chat(struct ofono_voicecall *vc, int id,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
char buf[32];
|
||||
|
||||
snprintf(buf, sizeof(buf), "AT+CHLD=2%d", id);
|
||||
gemalto_call_common(buf, vc, generic_cb, 0, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_create_multiparty(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
gemalto_call_common("AT+CHLD=3", vc, generic_cb, 0, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_transfer(struct ofono_voicecall *vc,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
/* Held & Active */
|
||||
unsigned int affected = (1 << CALL_STATUS_ACTIVE) |
|
||||
(1 << CALL_STATUS_HELD);
|
||||
|
||||
/* Transfer can puts held & active calls together and disconnects
|
||||
* from both. However, some networks support transferring of
|
||||
* dialing/ringing calls as well.
|
||||
*/
|
||||
affected |= (1 << CALL_STATUS_DIALING) |
|
||||
(1 << CALL_STATUS_ALERTING);
|
||||
|
||||
gemalto_call_common("AT+CHLD=4", vc, generic_cb, affected, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_send_dtmf(struct ofono_voicecall *vc, const char *dtmf,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
struct ofono_modem *modem = ofono_voicecall_get_modem(vc);
|
||||
int use_quotes = ofono_modem_get_integer(modem, "GemaltoVtsQuotes");
|
||||
int len = strlen(dtmf);
|
||||
int s;
|
||||
int i;
|
||||
char *buf;
|
||||
|
||||
/* strlen("+VTS=\"T\";") = 9 + initial AT + null */
|
||||
buf = (char *)alloca(len * 9 + 3);
|
||||
|
||||
if (use_quotes)
|
||||
s = sprintf(buf, "AT+VTS=\"%c\"", dtmf[0]);
|
||||
else
|
||||
s = sprintf(buf, "AT+VTS=%c", dtmf[0]);
|
||||
|
||||
for (i = 1; i < len; i++) {
|
||||
if (use_quotes)
|
||||
s += sprintf(buf + s, ";+VTS=\"%c\"", dtmf[i]);
|
||||
else
|
||||
s += sprintf(buf + s, ";+VTS=%c", dtmf[i]);
|
||||
}
|
||||
|
||||
gemalto_call_common(buf, vc, generic_cb, 0, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_dial(struct ofono_voicecall *vc,
|
||||
const struct ofono_phone_number *ph,
|
||||
enum ofono_clir_option clir,
|
||||
ofono_voicecall_cb_t cb, void *data)
|
||||
{
|
||||
struct cb_data *cbd = cb_data_new(cb, data);
|
||||
char buf[256];
|
||||
size_t len;
|
||||
|
||||
cbd->user = vc;
|
||||
|
||||
if (ph->type == 145)
|
||||
len = snprintf(buf, sizeof(buf), "ATD+%s", ph->number);
|
||||
else
|
||||
len = snprintf(buf, sizeof(buf), "ATD%s", ph->number);
|
||||
|
||||
switch (clir) {
|
||||
case OFONO_CLIR_OPTION_INVOCATION:
|
||||
len += snprintf(buf+len, sizeof(buf)-len, "I");
|
||||
break;
|
||||
case OFONO_CLIR_OPTION_SUPPRESSION:
|
||||
len += snprintf(buf+len, sizeof(buf)-len, "i");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
snprintf(buf + len, sizeof(buf) - len, ";");
|
||||
|
||||
gemalto_call_common(buf, vc, generic_cb, 0, cb, data);
|
||||
}
|
||||
|
||||
static void gemalto_parse_slcc(GAtResult *result, GSList **l,
|
||||
ofono_bool_t *ret_mpty, gboolean *last)
|
||||
{
|
||||
GAtResultIter iter;
|
||||
int id, dir, status, type;
|
||||
ofono_bool_t mpty;
|
||||
struct ofono_call *call;
|
||||
const char *str = "";
|
||||
int number_type = 129;
|
||||
|
||||
if (last)
|
||||
*last = TRUE;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
g_at_result_iter_next(&iter, "^SLCC:");
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &id))
|
||||
return;
|
||||
|
||||
if (last)
|
||||
*last = FALSE;
|
||||
|
||||
if (id == 0)
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &dir))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &status))
|
||||
return;
|
||||
|
||||
if (status > 5)
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &type))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &mpty))
|
||||
return;
|
||||
|
||||
/* skip 'Reserved=0' parameter, only difference from CLCC */
|
||||
if (!g_at_result_iter_skip_next(&iter))
|
||||
return;
|
||||
|
||||
if (g_at_result_iter_next_string(&iter, &str))
|
||||
g_at_result_iter_next_number(&iter, &number_type);
|
||||
|
||||
call = g_new0(struct ofono_call, 1);
|
||||
ofono_call_init(call);
|
||||
call->id = id;
|
||||
call->direction = dir;
|
||||
call->status = status;
|
||||
call->type = type;
|
||||
strncpy(call->phone_number.number, str,
|
||||
OFONO_MAX_PHONE_NUMBER_LENGTH);
|
||||
call->phone_number.type = number_type;
|
||||
|
||||
if (strlen(str) > 0)
|
||||
call->clip_validity = 2;
|
||||
else
|
||||
call->clip_validity = 0;
|
||||
|
||||
*l = g_slist_insert_sorted(*l, call, at_util_call_compare);
|
||||
|
||||
if (ret_mpty)
|
||||
*ret_mpty = mpty;
|
||||
}
|
||||
|
||||
static void clcc_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_voicecall *vc = user_data;
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
|
||||
GSList *l;
|
||||
|
||||
if (!ok)
|
||||
return;
|
||||
|
||||
vd->calls = at_util_parse_clcc(result, NULL);
|
||||
|
||||
for (l = vd->calls; l; l = l->next)
|
||||
ofono_voicecall_notify(vc, l->data);
|
||||
}
|
||||
|
||||
/*
|
||||
* ^SLCC, except for one RFU parameter (see above in the parsing), is identical
|
||||
* to +CLCC, but as URC it is parsed line by line, and the last line is
|
||||
* indicated by an empty "^SLCC:" (equivalent to the "OK" for CLCC).
|
||||
*/
|
||||
static void slcc_notify(GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_voicecall *vc = user_data;
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
|
||||
GSList *n, *o;
|
||||
struct ofono_call *nc, *oc;
|
||||
gboolean last;
|
||||
|
||||
gemalto_parse_slcc(result, &vd->new_calls, NULL, &last);
|
||||
|
||||
if (!last)
|
||||
return;
|
||||
|
||||
n = vd->new_calls;
|
||||
o = vd->calls;
|
||||
|
||||
while (n || o) {
|
||||
nc = n ? n->data : NULL;
|
||||
oc = o ? o->data : NULL;
|
||||
|
||||
if (oc && (nc == NULL || (nc->id > oc->id))) {
|
||||
enum ofono_disconnect_reason reason;
|
||||
|
||||
if (vd->local_release & (1 << oc->id))
|
||||
reason = OFONO_DISCONNECT_REASON_LOCAL_HANGUP;
|
||||
else
|
||||
reason = OFONO_DISCONNECT_REASON_REMOTE_HANGUP;
|
||||
|
||||
if (!oc->type)
|
||||
ofono_voicecall_disconnected(vc, oc->id,
|
||||
reason, NULL);
|
||||
|
||||
o = o->next;
|
||||
} else if (nc && (oc == NULL || (nc->id < oc->id))) {
|
||||
|
||||
if (nc->type == 0) /* new call, signal it */
|
||||
ofono_voicecall_notify(vc, nc);
|
||||
|
||||
n = n->next;
|
||||
} else {
|
||||
|
||||
DBG("modify call part");
|
||||
|
||||
/* notify in case of changes */
|
||||
if (memcmp(nc, oc, sizeof(*nc)))
|
||||
ofono_voicecall_notify(vc, nc);
|
||||
|
||||
n = n->next;
|
||||
o = o->next;
|
||||
}
|
||||
}
|
||||
|
||||
g_slist_free_full(vd->calls, g_free);
|
||||
vd->calls = vd->new_calls;
|
||||
vd->new_calls = NULL;
|
||||
vd->local_release = 0;
|
||||
}
|
||||
|
||||
static void cssi_notify(GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_voicecall *vc = user_data;
|
||||
GAtResultIter iter;
|
||||
int code, index;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
if (!g_at_result_iter_next(&iter, "+CSSI:"))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &code))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &index))
|
||||
index = 0;
|
||||
|
||||
ofono_voicecall_ssn_mo_notify(vc, 0, code, index);
|
||||
}
|
||||
|
||||
static void cssu_notify(GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_voicecall *vc = user_data;
|
||||
GAtResultIter iter;
|
||||
int code;
|
||||
int index;
|
||||
const char *num;
|
||||
struct ofono_phone_number ph;
|
||||
|
||||
ph.number[0] = '\0';
|
||||
ph.type = 129;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
if (!g_at_result_iter_next(&iter, "+CSSU:"))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &code))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number_default(&iter, -1, &index))
|
||||
goto out;
|
||||
|
||||
if (!g_at_result_iter_next_string(&iter, &num))
|
||||
goto out;
|
||||
|
||||
strncpy(ph.number, num, OFONO_MAX_PHONE_NUMBER_LENGTH);
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &ph.type))
|
||||
return;
|
||||
|
||||
out:
|
||||
ofono_voicecall_ssn_mt_notify(vc, 0, code, index, &ph);
|
||||
}
|
||||
|
||||
static void gemalto_voicecall_initialized(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct ofono_voicecall *vc = user_data;
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
|
||||
|
||||
DBG("voicecall_init: registering to notifications");
|
||||
|
||||
/* NO CARRIER, NO ANSWER, BUSY, NO DIALTONE are handled through SLCC */
|
||||
g_at_chat_register(vd->chat, "^SLCC:", slcc_notify, FALSE, vc, NULL);
|
||||
g_at_chat_register(vd->chat, "+CSSI:", cssi_notify, FALSE, vc, NULL);
|
||||
g_at_chat_register(vd->chat, "+CSSU:", cssu_notify, FALSE, vc, NULL);
|
||||
|
||||
ofono_voicecall_register(vc);
|
||||
|
||||
/* Populate the call list */
|
||||
g_at_chat_send(vd->chat, "AT+CLCC", clcc_prefix, clcc_cb, vc, NULL);
|
||||
}
|
||||
|
||||
static int gemalto_voicecall_probe(struct ofono_voicecall *vc,
|
||||
unsigned int vendor, void *data)
|
||||
{
|
||||
GAtChat *chat = data;
|
||||
struct voicecall_data *vd;
|
||||
|
||||
vd = g_new0(struct voicecall_data, 1);
|
||||
vd->chat = g_at_chat_clone(chat);
|
||||
ofono_voicecall_set_data(vc, vd);
|
||||
g_at_chat_send(vd->chat, "AT+CSSN=1,1", NULL, NULL, NULL, NULL);
|
||||
g_at_chat_send(vd->chat, "AT^SLCC=1", NULL,
|
||||
gemalto_voicecall_initialized, vc, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void gemalto_voicecall_remove(struct ofono_voicecall *vc)
|
||||
{
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
|
||||
|
||||
ofono_voicecall_set_data(vc, NULL);
|
||||
|
||||
g_at_chat_unref(vd->chat);
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_voicecall_driver driver = {
|
||||
.name = "gemaltomodem",
|
||||
.probe = gemalto_voicecall_probe,
|
||||
.remove = gemalto_voicecall_remove,
|
||||
.dial = gemalto_dial,
|
||||
.answer = gemalto_answer,
|
||||
.hangup_all = gemalto_hangup_all,
|
||||
.hangup_active = gemalto_hangup,
|
||||
.hold_all_active = gemalto_hold_all_active,
|
||||
.release_all_held = gemalto_release_all_held,
|
||||
.set_udub = gemalto_set_udub,
|
||||
.release_all_active = gemalto_release_all_active,
|
||||
.release_specific = gemalto_release_specific,
|
||||
.private_chat = gemalto_private_chat,
|
||||
.create_multiparty = gemalto_create_multiparty,
|
||||
.transfer = gemalto_transfer,
|
||||
.send_tones = gemalto_send_dtmf
|
||||
};
|
||||
|
||||
void gemalto_voicecall_init(void)
|
||||
{
|
||||
ofono_voicecall_driver_register(&driver);
|
||||
}
|
||||
|
||||
void gemalto_voicecall_exit(void)
|
||||
{
|
||||
ofono_voicecall_driver_unregister(&driver);
|
||||
}
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -217,7 +218,7 @@ static void hfp_call_volume_remove(struct ofono_call_volume *cv)
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_call_volume_driver driver = {
|
||||
static struct ofono_call_volume_driver driver = {
|
||||
.name = "hfpmodem",
|
||||
.probe = hfp_call_volume_probe,
|
||||
.remove = hfp_call_volume_remove,
|
||||
|
||||
@@ -91,7 +91,7 @@ static void hfp_devinfo_remove(struct ofono_devinfo *info)
|
||||
g_free(dd);
|
||||
}
|
||||
|
||||
static const struct ofono_devinfo_driver driver = {
|
||||
static struct ofono_devinfo_driver driver = {
|
||||
.name = "hfpmodem",
|
||||
.probe = hfp_devinfo_probe,
|
||||
.remove = hfp_devinfo_remove,
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -410,7 +411,7 @@ static void hfp_hf_indicator(struct ofono_handsfree *hf,
|
||||
CALLBACK_WITH_FAILURE(cb, data);
|
||||
}
|
||||
|
||||
static const struct ofono_handsfree_driver driver = {
|
||||
static struct ofono_handsfree_driver driver = {
|
||||
.name = "hfpmodem",
|
||||
.probe = hfp_handsfree_probe,
|
||||
.remove = hfp_handsfree_remove,
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -342,7 +343,7 @@ static void hfp_netreg_remove(struct ofono_netreg *netreg)
|
||||
g_free(nd);
|
||||
}
|
||||
|
||||
static const struct ofono_netreg_driver driver = {
|
||||
static struct ofono_netreg_driver driver = {
|
||||
.name = "hfpmodem",
|
||||
.probe = hfp_netreg_probe,
|
||||
.remove = hfp_netreg_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -195,7 +196,7 @@ static void hfp_siri_set_eyes_free_mode(struct ofono_siri *siri,
|
||||
CALLBACK_WITH_FAILURE(cb, NULL);
|
||||
}
|
||||
|
||||
static const struct ofono_siri_driver driver = {
|
||||
static struct ofono_siri_driver driver = {
|
||||
.name = "hfpmodem",
|
||||
.probe = hfp_siri_probe,
|
||||
.remove = hfp_siri_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -1302,7 +1303,7 @@ static void hfp_voicecall_remove(struct ofono_voicecall *vc)
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_voicecall_driver driver = {
|
||||
static struct ofono_voicecall_driver driver = {
|
||||
.name = "hfpmodem",
|
||||
.probe = hfp_voicecall_probe,
|
||||
.remove = hfp_voicecall_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -378,7 +379,7 @@ static void hso_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
g_free(gcd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "hsomodem",
|
||||
.probe = hso_gprs_context_probe,
|
||||
.remove = hso_gprs_context_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -198,7 +199,7 @@ static void hso_radio_settings_remove(struct ofono_radio_settings *rs)
|
||||
g_free(rsd);
|
||||
}
|
||||
|
||||
static const struct ofono_radio_settings_driver driver = {
|
||||
static struct ofono_radio_settings_driver driver = {
|
||||
.name = "hsomodem",
|
||||
.probe = hso_radio_settings_probe,
|
||||
.remove = hso_radio_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -112,7 +113,7 @@ static void huawei_audio_settings_remove(struct ofono_audio_settings *as)
|
||||
g_free(asd);
|
||||
}
|
||||
|
||||
static const struct ofono_audio_settings_driver driver = {
|
||||
static struct ofono_audio_settings_driver driver = {
|
||||
.name = "huaweimodem",
|
||||
.probe = huawei_audio_settings_probe,
|
||||
.remove = huawei_audio_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <glib.h>
|
||||
#include <errno.h>
|
||||
|
||||
@@ -209,7 +210,7 @@ static void huawei_cdma_netreg_remove(struct ofono_cdma_netreg *netreg)
|
||||
g_at_chat_unref(chat);
|
||||
}
|
||||
|
||||
static const struct ofono_cdma_netreg_driver driver = {
|
||||
static struct ofono_cdma_netreg_driver driver = {
|
||||
.name = "huaweimodem",
|
||||
.probe = huawei_cdma_netreg_probe,
|
||||
.remove = huawei_cdma_netreg_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -338,7 +339,7 @@ static void huawei_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
g_free(gcd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "huaweimodem",
|
||||
.probe = huawei_gprs_context_probe,
|
||||
.remove = huawei_gprs_context_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -568,7 +569,7 @@ static void huawei_radio_settings_remove(struct ofono_radio_settings *rs)
|
||||
g_free(rsd);
|
||||
}
|
||||
|
||||
static const struct ofono_radio_settings_driver driver = {
|
||||
static struct ofono_radio_settings_driver driver = {
|
||||
.name = "huaweimodem",
|
||||
.probe = huawei_radio_settings_probe,
|
||||
.remove = huawei_radio_settings_remove,
|
||||
|
||||
@@ -204,7 +204,7 @@ static void huawei_ussd_remove(struct ofono_ussd *ussd)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_ussd_driver driver = {
|
||||
static struct ofono_ussd_driver driver = {
|
||||
.name = "huaweimodem",
|
||||
.probe = huawei_ussd_probe,
|
||||
.remove = huawei_ussd_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -496,7 +497,7 @@ static void huawei_voicecall_remove(struct ofono_voicecall *vc)
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_voicecall_driver driver = {
|
||||
static struct ofono_voicecall_driver driver = {
|
||||
.name = "huaweimodem",
|
||||
.probe = huawei_voicecall_probe,
|
||||
.remove = huawei_voicecall_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -402,7 +403,7 @@ static void icera_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
g_free(gcd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "iceramodem",
|
||||
.probe = icera_gprs_context_probe,
|
||||
.remove = icera_gprs_context_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -211,7 +212,7 @@ static void icera_radio_settings_remove(struct ofono_radio_settings *rs)
|
||||
g_free(rsd);
|
||||
}
|
||||
|
||||
static const struct ofono_radio_settings_driver driver = {
|
||||
static struct ofono_radio_settings_driver driver = {
|
||||
.name = "iceramodem",
|
||||
.probe = icera_radio_settings_probe,
|
||||
.remove = icera_radio_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -381,7 +382,7 @@ static void ifx_audio_settings_remove(struct ofono_audio_settings *as)
|
||||
g_free(asd);
|
||||
}
|
||||
|
||||
static const struct ofono_audio_settings_driver driver = {
|
||||
static struct ofono_audio_settings_driver driver = {
|
||||
.name = "ifxmodem",
|
||||
.probe = ifx_audio_settings_probe,
|
||||
.remove = ifx_audio_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -166,7 +167,7 @@ static void ifx_ctm_remove(struct ofono_ctm *ctm)
|
||||
g_free(ctmd);
|
||||
}
|
||||
|
||||
static const struct ofono_ctm_driver driver = {
|
||||
static struct ofono_ctm_driver driver = {
|
||||
.name = "ifxmodem",
|
||||
.probe = ifx_ctm_probe,
|
||||
.remove = ifx_ctm_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -260,45 +261,6 @@ error:
|
||||
failed_setup(gc, NULL, TRUE);
|
||||
}
|
||||
|
||||
static void cgdata_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_gprs_context *gc = user_data;
|
||||
struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);
|
||||
|
||||
DBG("ok %d", ok);
|
||||
|
||||
if (!ok) {
|
||||
ofono_error("Failed to establish session");
|
||||
failed_setup(gc, result, TRUE);
|
||||
return;
|
||||
}
|
||||
|
||||
CALLBACK_WITH_SUCCESS(gcd->cb, gcd->cb_data);
|
||||
}
|
||||
|
||||
static const char *get_datapath(struct ofono_modem *modem,
|
||||
const char *interface)
|
||||
{
|
||||
static char datapath[256];
|
||||
char n;
|
||||
|
||||
if (!strcmp(interface,
|
||||
ofono_modem_get_string(modem, "NetworkInterface")))
|
||||
n = '0';
|
||||
else if (!strcmp(interface,
|
||||
ofono_modem_get_string(modem, "NetworkInterface2")))
|
||||
n = '1';
|
||||
else if (!strcmp(interface,
|
||||
ofono_modem_get_string(modem, "NetworkInterface3")))
|
||||
n = '2';
|
||||
else
|
||||
return NULL;
|
||||
|
||||
snprintf(datapath, sizeof(datapath), "%s%c",
|
||||
ofono_modem_get_string(modem, "DataPath"), n);
|
||||
return datapath;
|
||||
}
|
||||
|
||||
static void cgcontrdp_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct ofono_gprs_context *gc = user_data;
|
||||
@@ -308,11 +270,8 @@ static void cgcontrdp_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
|
||||
const char *laddrnetmask = NULL;
|
||||
const char *gw = NULL;
|
||||
const char *dns[3];
|
||||
const char *ctrlpath;
|
||||
const char *datapath;
|
||||
char buf[512];
|
||||
const char *interface;
|
||||
const char *dns[3];
|
||||
|
||||
DBG("ok %d", ok);
|
||||
|
||||
@@ -369,10 +328,9 @@ static void cgcontrdp_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
DBG("DNS2: %s\n", gcd->dns2);
|
||||
DBG("Gateway: %s\n", gcd->gateway);
|
||||
|
||||
ctrlpath = ofono_modem_get_string(modem, "CtrlPath");
|
||||
interface = ofono_gprs_context_get_interface(gc);
|
||||
datapath = get_datapath(modem, interface);
|
||||
interface = ofono_modem_get_string(modem, "NetworkInterface");
|
||||
|
||||
ofono_gprs_context_set_interface(gc, interface);
|
||||
ofono_gprs_context_set_ipv4_address(gc, gcd->address, TRUE);
|
||||
|
||||
if (gcd->netmask[0])
|
||||
@@ -383,17 +341,7 @@ static void cgcontrdp_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
|
||||
ofono_gprs_context_set_ipv4_dns_servers(gc, dns);
|
||||
|
||||
snprintf(buf, sizeof(buf), "AT+XDATACHANNEL=1,1,\"%s\",\"%s\",2,%u",
|
||||
ctrlpath, datapath, gcd->active_context);
|
||||
g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL);
|
||||
snprintf(buf, sizeof(buf), "AT+CGDATA=\"M-RAW_IP\",%u",
|
||||
gcd->active_context);
|
||||
|
||||
if (g_at_chat_send(gcd->chat, buf, none_prefix, cgdata_cb,
|
||||
gc, NULL) > 0)
|
||||
return;
|
||||
|
||||
CALLBACK_WITH_FAILURE(gcd->cb, gcd->cb_data);
|
||||
CALLBACK_WITH_SUCCESS(gcd->cb, gcd->cb_data);
|
||||
}
|
||||
|
||||
static void ifx_read_settings(struct ofono_gprs_context *gc)
|
||||
@@ -566,9 +514,6 @@ static void deactivate_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
if (gcd->vendor != OFONO_VENDOR_XMM)
|
||||
g_at_chat_resume(gcd->chat);
|
||||
|
||||
if (!gcd->cb)
|
||||
return;
|
||||
|
||||
CALLBACK_WITH_SUCCESS(gcd->cb, gcd->cb_data);
|
||||
}
|
||||
|
||||
@@ -663,11 +608,9 @@ static int ifx_gprs_context_probe(struct ofono_gprs_context *gc,
|
||||
|
||||
DBG("");
|
||||
|
||||
if (vendor != OFONO_VENDOR_XMM) {
|
||||
if (stat(TUN_DEV, &st) < 0) {
|
||||
ofono_error("Missing support for TUN/TAP devices");
|
||||
return -ENODEV;
|
||||
}
|
||||
if (stat(TUN_DEV, &st) < 0) {
|
||||
ofono_error("Missing support for TUN/TAP devices");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (vendor != OFONO_VENDOR_XMM) {
|
||||
@@ -709,7 +652,7 @@ static void ifx_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
g_free(gcd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "ifxmodem",
|
||||
.probe = ifx_gprs_context_probe,
|
||||
.remove = ifx_gprs_context_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -200,7 +201,7 @@ static void ifx_radio_settings_remove(struct ofono_radio_settings *rs)
|
||||
g_free(rsd);
|
||||
}
|
||||
|
||||
static const struct ofono_radio_settings_driver driver = {
|
||||
static struct ofono_radio_settings_driver driver = {
|
||||
.name = "ifxmodem",
|
||||
.probe = ifx_radio_settings_probe,
|
||||
.remove = ifx_radio_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -306,7 +307,7 @@ static void ifx_stk_remove(struct ofono_stk *stk)
|
||||
g_free(sd);
|
||||
}
|
||||
|
||||
static const struct ofono_stk_driver driver = {
|
||||
static struct ofono_stk_driver driver = {
|
||||
.name = "ifxmodem",
|
||||
.probe = ifx_stk_probe,
|
||||
.remove = ifx_stk_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -1018,7 +1019,7 @@ static void ifx_voicecall_remove(struct ofono_voicecall *vc)
|
||||
g_free(vd);
|
||||
}
|
||||
|
||||
static const struct ofono_voicecall_driver driver = {
|
||||
static struct ofono_voicecall_driver driver = {
|
||||
.name = "ifxmodem",
|
||||
.probe = ifx_voicecall_probe,
|
||||
.remove = ifx_voicecall_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -116,7 +117,7 @@ static void isi_audio_settings_remove(struct ofono_audio_settings *as)
|
||||
g_free(asd);
|
||||
}
|
||||
|
||||
static const struct ofono_audio_settings_driver driver = {
|
||||
static struct ofono_audio_settings_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_audio_settings_probe,
|
||||
.remove = isi_audio_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -428,7 +429,7 @@ static void isi_call_barring_remove(struct ofono_call_barring *barr)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_call_barring_driver driver = {
|
||||
static struct ofono_call_barring_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_call_barring_probe,
|
||||
.remove = isi_call_barring_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -456,7 +457,7 @@ static void isi_call_forwarding_remove(struct ofono_call_forwarding *cf)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_call_forwarding_driver driver = {
|
||||
static struct ofono_call_forwarding_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_call_forwarding_probe,
|
||||
.remove = isi_call_forwarding_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -117,7 +118,7 @@ static void isi_call_meter_remove(struct ofono_call_meter *cm)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_call_meter_driver driver = {
|
||||
static struct ofono_call_meter_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_call_meter_probe,
|
||||
.remove = isi_call_meter_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -404,7 +405,7 @@ static void isi_call_settings_remove(struct ofono_call_settings *cs)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_call_settings_driver driver = {
|
||||
static struct ofono_call_settings_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_call_settings_probe,
|
||||
.remove = isi_call_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -228,7 +229,7 @@ static void isi_cbs_remove(struct ofono_cbs *cbs)
|
||||
g_free(cd);
|
||||
}
|
||||
|
||||
static const struct ofono_cbs_driver driver = {
|
||||
static struct ofono_cbs_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_cbs_probe,
|
||||
.remove = isi_cbs_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -251,7 +252,7 @@ static void isi_devinfo_remove(struct ofono_devinfo *info)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_devinfo_driver driver = {
|
||||
static struct ofono_devinfo_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_devinfo_probe,
|
||||
.remove = isi_devinfo_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -658,7 +659,7 @@ static void isi_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
g_free(cd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_gprs_context_probe,
|
||||
.remove = isi_gprs_context_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -489,7 +490,7 @@ error:
|
||||
g_free(cbd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_driver driver = {
|
||||
static struct ofono_gprs_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_gprs_probe,
|
||||
.remove = isi_gprs_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -1164,7 +1165,7 @@ static void isi_netreg_remove(struct ofono_netreg *netreg)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_netreg_driver isimodem = {
|
||||
static struct ofono_netreg_driver isimodem = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_netreg_probe,
|
||||
.remove = isi_netreg_remove,
|
||||
|
||||
@@ -340,7 +340,7 @@ static void isi_phonebook_remove(struct ofono_phonebook *pb)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_phonebook_driver driver = {
|
||||
static struct ofono_phonebook_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_phonebook_probe,
|
||||
.remove = isi_phonebook_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -364,7 +365,7 @@ static void isi_radio_settings_remove(struct ofono_radio_settings *rs)
|
||||
g_free(rd);
|
||||
}
|
||||
|
||||
static const struct ofono_radio_settings_driver driver = {
|
||||
static struct ofono_radio_settings_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_radio_settings_probe,
|
||||
.remove = isi_radio_settings_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -968,7 +969,7 @@ static void isi_sim_remove(struct ofono_sim *sim)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_sim_driver driver = {
|
||||
static struct ofono_sim_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_sim_probe,
|
||||
.remove = isi_sim_remove,
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -1120,7 +1121,7 @@ static void isi_sms_remove(struct ofono_sms *sms)
|
||||
g_free(sd);
|
||||
}
|
||||
|
||||
static const struct ofono_sms_driver driver = {
|
||||
static struct ofono_sms_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_sms_probe,
|
||||
.remove = isi_sms_remove,
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -1650,7 +1651,7 @@ static void uicc_sim_remove(struct ofono_sim *sim)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_sim_driver driver = {
|
||||
static struct ofono_sim_driver driver = {
|
||||
.name = "wgmodem2.5",
|
||||
.probe = uicc_sim_probe,
|
||||
.remove = uicc_sim_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -275,7 +276,7 @@ static void isi_ussd_remove(struct ofono_ussd *ussd)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_ussd_driver driver = {
|
||||
static struct ofono_ussd_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_ussd_probe,
|
||||
.remove = isi_ussd_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -1934,7 +1935,7 @@ static void isi_remove(struct ofono_voicecall *call)
|
||||
g_free(data);
|
||||
}
|
||||
|
||||
static const struct ofono_voicecall_driver driver = {
|
||||
static struct ofono_voicecall_driver driver = {
|
||||
.name = "isimodem",
|
||||
.probe = isi_probe,
|
||||
.remove = isi_remove,
|
||||
|
||||
@@ -88,7 +88,7 @@ static void mbim_devinfo_remove(struct ofono_devinfo *info)
|
||||
l_free(dd);
|
||||
}
|
||||
|
||||
static const struct ofono_devinfo_driver driver = {
|
||||
static struct ofono_devinfo_driver driver = {
|
||||
.name = "mbim",
|
||||
.probe = mbim_devinfo_probe,
|
||||
.remove = mbim_devinfo_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <errno.h>
|
||||
@@ -443,7 +444,7 @@ static void mbim_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
l_free(gcd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "mbim",
|
||||
.probe = mbim_gprs_context_probe,
|
||||
.remove = mbim_gprs_context_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <inttypes.h>
|
||||
@@ -279,7 +280,7 @@ static void mbim_gprs_remove(struct ofono_gprs *gprs)
|
||||
l_free(gd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_driver driver = {
|
||||
static struct ofono_gprs_driver driver = {
|
||||
.name = "mbim",
|
||||
.probe = mbim_gprs_probe,
|
||||
.remove = mbim_gprs_remove,
|
||||
|
||||
@@ -197,7 +197,7 @@ static bool _iter_copy_string(struct mbim_message_iter *iter,
|
||||
if (L_CPU_TO_LE16(0x8000) != 0x8000) {
|
||||
uint16_t *le = (uint16_t *) buf;
|
||||
|
||||
for (i = 0; i < len / 2; i++)
|
||||
for (i = 0; i < len; i+= 2)
|
||||
le[i] = __builtin_bswap16(le[i]);
|
||||
}
|
||||
|
||||
@@ -1131,7 +1131,7 @@ bool mbim_message_builder_append_basic(struct mbim_message_builder *builder,
|
||||
if (L_CPU_TO_LE16(0x8000) != 0x8000) {
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len / 2; i++)
|
||||
for (i = 0; i < len - 2; i += 2)
|
||||
utf16[i] = __builtin_bswap16(utf16[i]);
|
||||
}
|
||||
|
||||
|
||||
@@ -487,7 +487,7 @@ static bool command_write_handler(struct l_io *io, void *user_data)
|
||||
|
||||
written = TEMP_FAILURE_RETRY(write(fd, buf, pos));
|
||||
|
||||
l_info("n_iov: %zu, %zu", n_iov + 1, (size_t) written);
|
||||
l_info("n_iov: %lu, %lu", n_iov + 1, (size_t) written);
|
||||
|
||||
if (written < 0)
|
||||
return false;
|
||||
@@ -646,8 +646,8 @@ static bool command_read_handler(struct l_io *io, void *user_data)
|
||||
|
||||
l_info("hdr->len: %u", L_LE32_TO_CPU(hdr->len));
|
||||
l_info("header_size: %u", header_size);
|
||||
l_info("header_offset: %zu", device->header_offset);
|
||||
l_info("segment_bytes_remaining: %zu", device->segment_bytes_remaining);
|
||||
l_info("header_offset: %lu", device->header_offset);
|
||||
l_info("segment_bytes_remaining: %lu", device->segment_bytes_remaining);
|
||||
|
||||
iov[n_iov].iov_base = device->segment + L_LE32_TO_CPU(hdr->len) -
|
||||
device->header_offset -
|
||||
|
||||
@@ -33,7 +33,7 @@ static int mbimmodem_init(void)
|
||||
mbim_devinfo_init();
|
||||
mbim_sim_init();
|
||||
mbim_netreg_init();
|
||||
mbim_sms_init();
|
||||
mbim_sms_exit();
|
||||
mbim_gprs_init();
|
||||
mbim_gprs_context_init();
|
||||
return 0;
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
@@ -394,7 +395,7 @@ static void mbim_netreg_remove(struct ofono_netreg *netreg)
|
||||
l_free(nd);
|
||||
}
|
||||
|
||||
static const struct ofono_netreg_driver driver = {
|
||||
static struct ofono_netreg_driver driver = {
|
||||
.name = "mbim",
|
||||
.probe = mbim_netreg_probe,
|
||||
.remove = mbim_netreg_remove,
|
||||
|
||||
@@ -509,7 +509,7 @@ static void mbim_sim_remove(struct ofono_sim *sim)
|
||||
l_free(sd);
|
||||
}
|
||||
|
||||
static const struct ofono_sim_driver driver = {
|
||||
static struct ofono_sim_driver driver = {
|
||||
.name = "mbim",
|
||||
.probe = mbim_sim_probe,
|
||||
.remove = mbim_sim_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
@@ -495,7 +496,7 @@ static void mbim_sms_remove(struct ofono_sms *sms)
|
||||
l_free(sd);
|
||||
}
|
||||
|
||||
static const struct ofono_sms_driver driver = {
|
||||
static struct ofono_sms_driver driver = {
|
||||
.name = "mbim",
|
||||
.probe = mbim_sms_probe,
|
||||
.remove = mbim_sms_remove,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -510,7 +511,7 @@ static void mbm_gprs_context_remove(struct ofono_gprs_context *gc)
|
||||
g_free(gcd);
|
||||
}
|
||||
|
||||
static const struct ofono_gprs_context_driver driver = {
|
||||
static struct ofono_gprs_context_driver driver = {
|
||||
.name = "mbmmodem",
|
||||
.probe = mbm_gprs_context_probe,
|
||||
.remove = mbm_gprs_context_remove,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user