diff options
author | Guido Günther <agx@sigxcpu.org> | 2014-02-05 08:38:36 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2014-02-05 08:38:36 +0100 |
commit | afc4b839a31c530d73b91aa2483795f185eb7e52 (patch) | |
tree | 68655a93926a9981b4d49b66106646efbb2d7c17 /plugins | |
parent | 13ed135b9ae78c692dc359976eb8b54d0a3629b8 (diff) |
Imported Upstream version 1.0.0upstream/1.0.0
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/Makefile.am | 25 | ||||
-rw-r--r-- | plugins/Makefile.in | 260 | ||||
-rw-r--r-- | plugins/altair/mm-broadband-modem-altair-lte.c | 25 | ||||
-rw-r--r-- | plugins/huawei/mm-broadband-bearer-huawei.c | 129 | ||||
-rw-r--r-- | plugins/huawei/mm-modem-helpers-huawei.c | 100 | ||||
-rw-r--r-- | plugins/huawei/mm-modem-helpers-huawei.h | 30 | ||||
-rw-r--r-- | plugins/huawei/tests/test-modem-helpers-huawei.c | 103 | ||||
-rw-r--r-- | plugins/icera/mm-broadband-modem-icera.c | 191 | ||||
-rw-r--r-- | plugins/novatel/mm-broadband-modem-novatel-lte.c | 4 | ||||
-rw-r--r-- | plugins/option/mm-broadband-bearer-hso.c | 1 | ||||
-rw-r--r-- | plugins/option/mm-broadband-modem-hso.c | 34 | ||||
-rw-r--r-- | plugins/x22x/77-mm-x22x-port-types.rules | 22 | ||||
-rw-r--r-- | plugins/x22x/mm-plugin-x22x.c | 4 |
13 files changed, 770 insertions, 158 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 49df4bc..83f1fae 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -1,3 +1,4 @@ +include $(top_srcdir)/gtester.make # Common CPPFLAGS and LDFLAGS @@ -30,6 +31,9 @@ endif udevrulesdir = $(UDEV_BASE_DIR)/rules.d udevrules_DATA = +# Unit tests +noinst_PROGRAMS = + ######################################## # Icera-specific support @@ -104,15 +108,28 @@ libmm_plugin_gobi_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS) libmm_plugin_huawei_la_SOURCES = \ huawei/mm-plugin-huawei.c \ huawei/mm-plugin-huawei.h \ + huawei/mm-modem-helpers-huawei.c \ + huawei/mm-modem-helpers-huawei.h \ huawei/mm-broadband-modem-huawei.c \ huawei/mm-broadband-modem-huawei.h \ huawei/mm-broadband-bearer-huawei.c \ huawei/mm-broadband-bearer-huawei.h - libmm_plugin_huawei_la_CPPFLAGS = $(PLUGIN_COMMON_COMPILER_FLAGS) libmm_plugin_huawei_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS) + udevrules_DATA += huawei/77-mm-huawei-net-port-types.rules +noinst_PROGRAMS += test-modem-helpers-huawei +test_modem_helpers_huawei_SOURCES = \ + huawei/mm-modem-helpers-huawei.c \ + huawei/mm-modem-helpers-huawei.h \ + huawei/tests/test-modem-helpers-huawei.c +test_modem_helpers_huawei_CPPFLAGS = \ + -I$(top_srcdir)/plugins/huawei \ + $(PLUGIN_COMMON_COMPILER_FLAGS) +test_modem_helpers_huawei_LDFLAGS = $(top_builddir)/libmm-glib/libmm-glib.la + + # MBM libmm_plugin_mbm_la_SOURCES = \ mbm/mm-plugin-mbm.c \ @@ -353,6 +370,10 @@ libmm_plugin_telit_la_SOURCES = \ libmm_plugin_telit_la_CPPFLAGS = $(PLUGIN_COMMON_COMPILER_FLAGS) libmm_plugin_telit_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS) + # Additional files to include in the distribution -EXTRA_DIST = \ +EXTRA_DIST += \ $(udevrules_DATA) + +# Unit tests +TEST_PROGS += $(noinst_PROGRAMS) diff --git a/plugins/Makefile.in b/plugins/Makefile.in index 98622f2..33ad27f 100644 --- a/plugins/Makefile.in +++ b/plugins/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.13.2 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -14,7 +14,6 @@ @SET_MAKE@ -# Common CPPFLAGS and LDFLAGS VPATH = @srcdir@ @@ -81,11 +80,12 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +DIST_COMMON = $(top_srcdir)/gtester.make $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/depcomp @WITH_QMI_TRUE@am__append_1 = $(QMI_CFLAGS) @WITH_MBIM_TRUE@am__append_2 = $(MBIM_CFLAGS) +noinst_PROGRAMS = test-modem-helpers-huawei$(EXEEXT) subdir = plugins -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gtk-doc.m4 \ @@ -200,6 +200,7 @@ libmm_plugin_hso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ libmm_plugin_huawei_la_LIBADD = am_libmm_plugin_huawei_la_OBJECTS = \ huawei/libmm_plugin_huawei_la-mm-plugin-huawei.lo \ + huawei/libmm_plugin_huawei_la-mm-modem-helpers-huawei.lo \ huawei/libmm_plugin_huawei_la-mm-broadband-modem-huawei.lo \ huawei/libmm_plugin_huawei_la-mm-broadband-bearer-huawei.lo libmm_plugin_huawei_la_OBJECTS = $(am_libmm_plugin_huawei_la_OBJECTS) @@ -408,6 +409,16 @@ am_libmm_utils_icera_la_OBJECTS = \ icera/libmm_utils_icera_la-mm-broadband-modem-icera.lo \ icera/libmm_utils_icera_la-mm-broadband-bearer-icera.lo libmm_utils_icera_la_OBJECTS = $(am_libmm_utils_icera_la_OBJECTS) +PROGRAMS = $(noinst_PROGRAMS) +am_test_modem_helpers_huawei_OBJECTS = huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.$(OBJEXT) \ + huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.$(OBJEXT) +test_modem_helpers_huawei_OBJECTS = \ + $(am_test_modem_helpers_huawei_OBJECTS) +test_modem_helpers_huawei_LDADD = $(LDADD) +test_modem_helpers_huawei_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(test_modem_helpers_huawei_LDFLAGS) \ + $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -466,7 +477,8 @@ SOURCES = $(libmm_plugin_altair_lte_la_SOURCES) \ $(libmm_plugin_via_la_SOURCES) \ $(libmm_plugin_wavecom_la_SOURCES) \ $(libmm_plugin_x22x_la_SOURCES) $(libmm_plugin_zte_la_SOURCES) \ - $(libmm_utils_icera_la_SOURCES) + $(libmm_utils_icera_la_SOURCES) \ + $(test_modem_helpers_huawei_SOURCES) DIST_SOURCES = $(libmm_plugin_altair_lte_la_SOURCES) \ $(libmm_plugin_anydata_la_SOURCES) \ $(libmm_plugin_cinterion_la_SOURCES) \ @@ -491,7 +503,8 @@ DIST_SOURCES = $(libmm_plugin_altair_lte_la_SOURCES) \ $(libmm_plugin_via_la_SOURCES) \ $(libmm_plugin_wavecom_la_SOURCES) \ $(libmm_plugin_x22x_la_SOURCES) $(libmm_plugin_zte_la_SOURCES) \ - $(libmm_utils_icera_la_SOURCES) + $(libmm_utils_icera_la_SOURCES) \ + $(test_modem_helpers_huawei_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -527,8 +540,6 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -CATALOGS = @CATALOGS@ -CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -552,7 +563,6 @@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ GLIB_MKENUMS = @GLIB_MKENUMS@ -GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ @@ -569,7 +579,6 @@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ @@ -601,14 +610,20 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBIM_CFLAGS = @MBIM_CFLAGS@ MBIM_LIBS = @MBIM_LIBS@ MKDIR_P = @MKDIR_P@ -MKINSTALLDIRS = @MKINSTALLDIRS@ MMCLI_CFLAGS = @MMCLI_CFLAGS@ MMCLI_LIBS = @MMCLI_LIBS@ MM_CFLAGS = @MM_CFLAGS@ +MM_DEFAULT_USER_POLICY = @MM_DEFAULT_USER_POLICY@ +MM_GLIB_LT_AGE = @MM_GLIB_LT_AGE@ +MM_GLIB_LT_CURRENT = @MM_GLIB_LT_CURRENT@ +MM_GLIB_LT_REVISION = @MM_GLIB_LT_REVISION@ MM_LIBS = @MM_LIBS@ +MM_MAJOR_VERSION = @MM_MAJOR_VERSION@ +MM_MICRO_VERSION = @MM_MICRO_VERSION@ +MM_MINOR_VERSION = @MM_MINOR_VERSION@ +MM_VERSION = @MM_VERSION@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ -MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -627,13 +642,9 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -POFILES = @POFILES@ POLKIT_CFLAGS = @POLKIT_CFLAGS@ POLKIT_LIBS = @POLKIT_LIBS@ POSUB = @POSUB@ -PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ -PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ -PPPD_PLUGIN_DIR = @PPPD_PLUGIN_DIR@ QMI_CFLAGS = @QMI_CFLAGS@ QMI_LIBS = @QMI_LIBS@ RANLIB = @RANLIB@ @@ -702,6 +713,18 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ +GTESTER = gtester +GTESTER_REPORT = gtester-report + +# initialize variables for unconditional += appending + +# Additional files to include in the distribution +EXTRA_DIST = $(udevrules_DATA) + +# Unit tests +TEST_PROGS = $(noinst_PROGRAMS) + +# Common CPPFLAGS and LDFLAGS PLUGIN_COMMON_COMPILER_FLAGS = $(MM_CFLAGS) $(GUDEV_CFLAGS) \ -I$(top_srcdir) -I$(top_srcdir)/src -I$(top_builddir)/src \ -I$(top_srcdir)/include -I$(top_builddir)/include \ @@ -800,6 +823,8 @@ libmm_plugin_gobi_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS) libmm_plugin_huawei_la_SOURCES = \ huawei/mm-plugin-huawei.c \ huawei/mm-plugin-huawei.h \ + huawei/mm-modem-helpers-huawei.c \ + huawei/mm-modem-helpers-huawei.h \ huawei/mm-broadband-modem-huawei.c \ huawei/mm-broadband-modem-huawei.h \ huawei/mm-broadband-bearer-huawei.c \ @@ -807,6 +832,16 @@ libmm_plugin_huawei_la_SOURCES = \ libmm_plugin_huawei_la_CPPFLAGS = $(PLUGIN_COMMON_COMPILER_FLAGS) libmm_plugin_huawei_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS) +test_modem_helpers_huawei_SOURCES = \ + huawei/mm-modem-helpers-huawei.c \ + huawei/mm-modem-helpers-huawei.h \ + huawei/tests/test-modem-helpers-huawei.c + +test_modem_helpers_huawei_CPPFLAGS = \ + -I$(top_srcdir)/plugins/huawei \ + $(PLUGIN_COMMON_COMPILER_FLAGS) + +test_modem_helpers_huawei_LDFLAGS = $(top_builddir)/libmm-glib/libmm-glib.la # MBM libmm_plugin_mbm_la_SOURCES = \ @@ -1063,16 +1098,11 @@ libmm_plugin_telit_la_SOURCES = \ libmm_plugin_telit_la_CPPFLAGS = $(PLUGIN_COMMON_COMPILER_FLAGS) libmm_plugin_telit_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS) - -# Additional files to include in the distribution -EXTRA_DIST = \ - $(udevrules_DATA) - all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtester.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -1093,6 +1123,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; +$(top_srcdir)/gtester.make: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -1238,6 +1269,8 @@ huawei/$(DEPDIR)/$(am__dirstamp): @: > huawei/$(DEPDIR)/$(am__dirstamp) huawei/libmm_plugin_huawei_la-mm-plugin-huawei.lo: \ huawei/$(am__dirstamp) huawei/$(DEPDIR)/$(am__dirstamp) +huawei/libmm_plugin_huawei_la-mm-modem-helpers-huawei.lo: \ + huawei/$(am__dirstamp) huawei/$(DEPDIR)/$(am__dirstamp) huawei/libmm_plugin_huawei_la-mm-broadband-modem-huawei.lo: \ huawei/$(am__dirstamp) huawei/$(DEPDIR)/$(am__dirstamp) huawei/libmm_plugin_huawei_la-mm-broadband-bearer-huawei.lo: \ @@ -1514,6 +1547,30 @@ icera/libmm_utils_icera_la-mm-broadband-bearer-icera.lo: \ libmm-utils-icera.la: $(libmm_utils_icera_la_OBJECTS) $(libmm_utils_icera_la_DEPENDENCIES) $(EXTRA_libmm_utils_icera_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libmm_utils_icera_la_OBJECTS) $(libmm_utils_icera_la_LIBADD) $(LIBS) +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.$(OBJEXT): \ + huawei/$(am__dirstamp) huawei/$(DEPDIR)/$(am__dirstamp) +huawei/tests/$(am__dirstamp): + @$(MKDIR_P) huawei/tests + @: > huawei/tests/$(am__dirstamp) +huawei/tests/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) huawei/tests/$(DEPDIR) + @: > huawei/tests/$(DEPDIR)/$(am__dirstamp) +huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.$(OBJEXT): \ + huawei/tests/$(am__dirstamp) \ + huawei/tests/$(DEPDIR)/$(am__dirstamp) + +test-modem-helpers-huawei$(EXEEXT): $(test_modem_helpers_huawei_OBJECTS) $(test_modem_helpers_huawei_DEPENDENCIES) $(EXTRA_test_modem_helpers_huawei_DEPENDENCIES) + @rm -f test-modem-helpers-huawei$(EXEEXT) + $(AM_V_CCLD)$(test_modem_helpers_huawei_LINK) $(test_modem_helpers_huawei_OBJECTS) $(test_modem_helpers_huawei_LDADD) $(LIBS) + mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f altair/*.$(OBJEXT) @@ -1528,6 +1585,7 @@ mostlyclean-compile: -rm -f gobi/*.lo -rm -f huawei/*.$(OBJEXT) -rm -f huawei/*.lo + -rm -f huawei/tests/*.$(OBJEXT) -rm -f icera/*.$(OBJEXT) -rm -f icera/*.lo -rm -f iridium/*.$(OBJEXT) @@ -1580,7 +1638,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@gobi/$(DEPDIR)/libmm_plugin_gobi_la-mm-plugin-gobi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-broadband-bearer-huawei.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-broadband-modem-huawei.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-modem-helpers-huawei.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-plugin-huawei.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@huawei/$(DEPDIR)/test_modem_helpers_huawei-mm-modem-helpers-huawei.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@huawei/tests/$(DEPDIR)/test_modem_helpers_huawei-test-modem-helpers-huawei.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@icera/$(DEPDIR)/libmm_utils_icera_la-mm-broadband-bearer-icera.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@icera/$(DEPDIR)/libmm_utils_icera_la-mm-broadband-modem-icera.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@iridium/$(DEPDIR)/libmm_plugin_iridium_la-mm-bearer-iridium.Plo@am__quote@ @@ -1768,6 +1829,13 @@ huawei/libmm_plugin_huawei_la-mm-plugin-huawei.lo: huawei/mm-plugin-huawei.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmm_plugin_huawei_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o huawei/libmm_plugin_huawei_la-mm-plugin-huawei.lo `test -f 'huawei/mm-plugin-huawei.c' || echo '$(srcdir)/'`huawei/mm-plugin-huawei.c +huawei/libmm_plugin_huawei_la-mm-modem-helpers-huawei.lo: huawei/mm-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmm_plugin_huawei_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT huawei/libmm_plugin_huawei_la-mm-modem-helpers-huawei.lo -MD -MP -MF huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-modem-helpers-huawei.Tpo -c -o huawei/libmm_plugin_huawei_la-mm-modem-helpers-huawei.lo `test -f 'huawei/mm-modem-helpers-huawei.c' || echo '$(srcdir)/'`huawei/mm-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-modem-helpers-huawei.Tpo huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-modem-helpers-huawei.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='huawei/mm-modem-helpers-huawei.c' object='huawei/libmm_plugin_huawei_la-mm-modem-helpers-huawei.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmm_plugin_huawei_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o huawei/libmm_plugin_huawei_la-mm-modem-helpers-huawei.lo `test -f 'huawei/mm-modem-helpers-huawei.c' || echo '$(srcdir)/'`huawei/mm-modem-helpers-huawei.c + huawei/libmm_plugin_huawei_la-mm-broadband-modem-huawei.lo: huawei/mm-broadband-modem-huawei.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmm_plugin_huawei_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT huawei/libmm_plugin_huawei_la-mm-broadband-modem-huawei.lo -MD -MP -MF huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-broadband-modem-huawei.Tpo -c -o huawei/libmm_plugin_huawei_la-mm-broadband-modem-huawei.lo `test -f 'huawei/mm-broadband-modem-huawei.c' || echo '$(srcdir)/'`huawei/mm-broadband-modem-huawei.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-broadband-modem-huawei.Tpo huawei/$(DEPDIR)/libmm_plugin_huawei_la-mm-broadband-modem-huawei.Plo @@ -2153,6 +2221,34 @@ icera/libmm_utils_icera_la-mm-broadband-bearer-icera.lo: icera/mm-broadband-bear @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmm_utils_icera_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o icera/libmm_utils_icera_la-mm-broadband-bearer-icera.lo `test -f 'icera/mm-broadband-bearer-icera.c' || echo '$(srcdir)/'`icera/mm-broadband-bearer-icera.c +huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.o: huawei/mm-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.o -MD -MP -MF huawei/$(DEPDIR)/test_modem_helpers_huawei-mm-modem-helpers-huawei.Tpo -c -o huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.o `test -f 'huawei/mm-modem-helpers-huawei.c' || echo '$(srcdir)/'`huawei/mm-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) huawei/$(DEPDIR)/test_modem_helpers_huawei-mm-modem-helpers-huawei.Tpo huawei/$(DEPDIR)/test_modem_helpers_huawei-mm-modem-helpers-huawei.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='huawei/mm-modem-helpers-huawei.c' object='huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.o `test -f 'huawei/mm-modem-helpers-huawei.c' || echo '$(srcdir)/'`huawei/mm-modem-helpers-huawei.c + +huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.obj: huawei/mm-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.obj -MD -MP -MF huawei/$(DEPDIR)/test_modem_helpers_huawei-mm-modem-helpers-huawei.Tpo -c -o huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.obj `if test -f 'huawei/mm-modem-helpers-huawei.c'; then $(CYGPATH_W) 'huawei/mm-modem-helpers-huawei.c'; else $(CYGPATH_W) '$(srcdir)/huawei/mm-modem-helpers-huawei.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) huawei/$(DEPDIR)/test_modem_helpers_huawei-mm-modem-helpers-huawei.Tpo huawei/$(DEPDIR)/test_modem_helpers_huawei-mm-modem-helpers-huawei.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='huawei/mm-modem-helpers-huawei.c' object='huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o huawei/test_modem_helpers_huawei-mm-modem-helpers-huawei.obj `if test -f 'huawei/mm-modem-helpers-huawei.c'; then $(CYGPATH_W) 'huawei/mm-modem-helpers-huawei.c'; else $(CYGPATH_W) '$(srcdir)/huawei/mm-modem-helpers-huawei.c'; fi` + +huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.o: huawei/tests/test-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.o -MD -MP -MF huawei/tests/$(DEPDIR)/test_modem_helpers_huawei-test-modem-helpers-huawei.Tpo -c -o huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.o `test -f 'huawei/tests/test-modem-helpers-huawei.c' || echo '$(srcdir)/'`huawei/tests/test-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) huawei/tests/$(DEPDIR)/test_modem_helpers_huawei-test-modem-helpers-huawei.Tpo huawei/tests/$(DEPDIR)/test_modem_helpers_huawei-test-modem-helpers-huawei.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='huawei/tests/test-modem-helpers-huawei.c' object='huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.o `test -f 'huawei/tests/test-modem-helpers-huawei.c' || echo '$(srcdir)/'`huawei/tests/test-modem-helpers-huawei.c + +huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.obj: huawei/tests/test-modem-helpers-huawei.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.obj -MD -MP -MF huawei/tests/$(DEPDIR)/test_modem_helpers_huawei-test-modem-helpers-huawei.Tpo -c -o huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.obj `if test -f 'huawei/tests/test-modem-helpers-huawei.c'; then $(CYGPATH_W) 'huawei/tests/test-modem-helpers-huawei.c'; else $(CYGPATH_W) '$(srcdir)/huawei/tests/test-modem-helpers-huawei.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) huawei/tests/$(DEPDIR)/test_modem_helpers_huawei-test-modem-helpers-huawei.Tpo huawei/tests/$(DEPDIR)/test_modem_helpers_huawei-test-modem-helpers-huawei.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='huawei/tests/test-modem-helpers-huawei.c' object='huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_modem_helpers_huawei_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o huawei/tests/test_modem_helpers_huawei-test-modem-helpers-huawei.obj `if test -f 'huawei/tests/test-modem-helpers-huawei.c'; then $(CYGPATH_W) 'huawei/tests/test-modem-helpers-huawei.c'; else $(CYGPATH_W) '$(srcdir)/huawei/tests/test-modem-helpers-huawei.c'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -2287,8 +2383,9 @@ distdir: $(DISTFILES) fi; \ done check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(udevrulesdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -2331,6 +2428,8 @@ distclean-generic: -rm -f gobi/$(am__dirstamp) -rm -f huawei/$(DEPDIR)/$(am__dirstamp) -rm -f huawei/$(am__dirstamp) + -rm -f huawei/tests/$(DEPDIR)/$(am__dirstamp) + -rm -f huawei/tests/$(am__dirstamp) -rm -f icera/$(DEPDIR)/$(am__dirstamp) -rm -f icera/$(am__dirstamp) -rm -f iridium/$(DEPDIR)/$(am__dirstamp) @@ -2374,10 +2473,10 @@ maintainer-clean-generic: clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-pkglibLTLIBRARIES mostlyclean-am + clean-noinstPROGRAMS clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am - -rm -rf altair/$(DEPDIR) anydata/$(DEPDIR) cinterion/$(DEPDIR) generic/$(DEPDIR) gobi/$(DEPDIR) huawei/$(DEPDIR) icera/$(DEPDIR) iridium/$(DEPDIR) linktop/$(DEPDIR) longcheer/$(DEPDIR) mbm/$(DEPDIR) motorola/$(DEPDIR) nokia/$(DEPDIR) novatel/$(DEPDIR) option/$(DEPDIR) pantech/$(DEPDIR) samsung/$(DEPDIR) sierra/$(DEPDIR) simtech/$(DEPDIR) telit/$(DEPDIR) via/$(DEPDIR) wavecom/$(DEPDIR) x22x/$(DEPDIR) zte/$(DEPDIR) + -rm -rf altair/$(DEPDIR) anydata/$(DEPDIR) cinterion/$(DEPDIR) generic/$(DEPDIR) gobi/$(DEPDIR) huawei/$(DEPDIR) huawei/tests/$(DEPDIR) icera/$(DEPDIR) iridium/$(DEPDIR) linktop/$(DEPDIR) longcheer/$(DEPDIR) mbm/$(DEPDIR) motorola/$(DEPDIR) nokia/$(DEPDIR) novatel/$(DEPDIR) option/$(DEPDIR) pantech/$(DEPDIR) samsung/$(DEPDIR) sierra/$(DEPDIR) simtech/$(DEPDIR) telit/$(DEPDIR) via/$(DEPDIR) wavecom/$(DEPDIR) x22x/$(DEPDIR) zte/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -2423,7 +2522,7 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am - -rm -rf altair/$(DEPDIR) anydata/$(DEPDIR) cinterion/$(DEPDIR) generic/$(DEPDIR) gobi/$(DEPDIR) huawei/$(DEPDIR) icera/$(DEPDIR) iridium/$(DEPDIR) linktop/$(DEPDIR) longcheer/$(DEPDIR) mbm/$(DEPDIR) motorola/$(DEPDIR) nokia/$(DEPDIR) novatel/$(DEPDIR) option/$(DEPDIR) pantech/$(DEPDIR) samsung/$(DEPDIR) sierra/$(DEPDIR) simtech/$(DEPDIR) telit/$(DEPDIR) via/$(DEPDIR) wavecom/$(DEPDIR) x22x/$(DEPDIR) zte/$(DEPDIR) + -rm -rf altair/$(DEPDIR) anydata/$(DEPDIR) cinterion/$(DEPDIR) generic/$(DEPDIR) gobi/$(DEPDIR) huawei/$(DEPDIR) huawei/tests/$(DEPDIR) icera/$(DEPDIR) iridium/$(DEPDIR) linktop/$(DEPDIR) longcheer/$(DEPDIR) mbm/$(DEPDIR) motorola/$(DEPDIR) nokia/$(DEPDIR) novatel/$(DEPDIR) option/$(DEPDIR) pantech/$(DEPDIR) samsung/$(DEPDIR) sierra/$(DEPDIR) simtech/$(DEPDIR) telit/$(DEPDIR) via/$(DEPDIR) wavecom/$(DEPDIR) x22x/$(DEPDIR) zte/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -2442,18 +2541,19 @@ ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES uninstall-udevrulesDATA -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-pkglibLTLIBRARIES install-ps \ - install-ps-am install-strip install-udevrulesDATA installcheck \ +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ + clean-generic clean-libtool clean-noinstLTLIBRARIES \ + clean-noinstPROGRAMS clean-pkglibLTLIBRARIES cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkglibLTLIBRARIES install-ps install-ps-am \ + install-strip install-udevrulesDATA installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ @@ -2461,6 +2561,90 @@ uninstall-am: uninstall-pkglibLTLIBRARIES uninstall-udevrulesDATA uninstall-pkglibLTLIBRARIES uninstall-udevrulesDATA +### testing rules + +# test: run all tests in cwd and subdirs +test: test-nonrecursive + @ for subdir in $(SUBDIRS) . ; do \ + test "$$subdir" = "." -o "$$subdir" = "po" || \ + ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \ + done + +# test-nonrecursive: run tests only in cwd +test-nonrecursive: ${TEST_PROGS} + @test -z "${TEST_PROGS}" || G_DEBUG=gc-friendly MALLOC_CHECK_=2 MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) ${GTESTER} --verbose ${TEST_PROGS} + +# test-report: run tests in subdirs and generate report +# perf-report: run tests in subdirs with -m perf and generate report +# full-report: like test-report: with -m perf and -m slow +test-report perf-report full-report: ${TEST_PROGS} + @test -z "${TEST_PROGS}" || { \ + case $@ in \ + test-report) test_options="-k";; \ + perf-report) test_options="-k -m=perf";; \ + full-report) test_options="-k -m=perf -m=slow";; \ + esac ; \ + if test -z "$$GTESTER_LOGDIR" ; then \ + ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \ + elif test -n "${TEST_PROGS}" ; then \ + ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \ + fi ; \ + } + @ ignore_logdir=true ; \ + if test -z "$$GTESTER_LOGDIR" ; then \ + GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \ + ignore_logdir=false ; \ + fi ; \ + if test -d "$(top_srcdir)/.git" ; then \ + REVISION=`git describe` ; \ + else \ + REVISION=$(VERSION) ; \ + fi ; \ + for subdir in $(SUBDIRS) . ; do \ + test "$$subdir" = "." -o "$$subdir" = "po" || \ + ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \ + done ; \ + $$ignore_logdir || { \ + echo '<?xml version="1.0"?>' > $@.xml ; \ + echo '<report-collection>' >> $@.xml ; \ + echo '<info>' >> $@.xml ; \ + echo ' <package>$(PACKAGE)</package>' >> $@.xml ; \ + echo ' <version>$(VERSION)</version>' >> $@.xml ; \ + echo " <revision>$$REVISION</revision>" >> $@.xml ; \ + echo '</info>' >> $@.xml ; \ + for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \ + sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \ + done ; \ + echo >> $@.xml ; \ + echo '</report-collection>' >> $@.xml ; \ + rm -rf "$$GTESTER_LOGDIR"/ ; \ + ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \ + } +.PHONY: test test-report perf-report full-report test-nonrecursive + +.PHONY: lcov genlcov lcov-clean +# use recursive makes in order to ignore errors during check +lcov: + -$(MAKE) $(AM_MAKEFLAGS) -k check + $(MAKE) $(AM_MAKEFLAGS) genlcov + +# we have to massage the lcov.info file slightly to hide the effect of libtool +# placing the objects files in the .libs/ directory separate from the *.c +# we also have to delete tests/.libs/libmoduletestplugin_*.gcda +genlcov: + rm -f $(top_builddir)/tests/.libs/libmoduletestplugin_*.gcda + $(LTP) --directory $(top_builddir) --capture --output-file glib-lcov.info --test-name GLIB_PERF --no-checksum --compat-libtool + LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory glib-lcov --title "GLib Code Coverage" --legend --show-details glib-lcov.info + @echo "file://$(abs_top_builddir)/glib-lcov/index.html" + +lcov-clean: + -$(LTP) --directory $(top_builddir) -z + -rm -rf glib-lcov.info glib-lcov + -find -name '*.gcda' -print | xargs rm + +# run tests in cwd as part of make check +check-local: test-nonrecursive + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/plugins/altair/mm-broadband-modem-altair-lte.c b/plugins/altair/mm-broadband-modem-altair-lte.c index e645776..3c5ef6c 100644 --- a/plugins/altair/mm-broadband-modem-altair-lte.c +++ b/plugins/altair/mm-broadband-modem-altair-lte.c @@ -286,7 +286,9 @@ load_supported_bands_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - /* Never fails */ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return NULL; + return (GArray *) g_array_ref (g_simple_async_result_get_op_res_gpointer ( G_SIMPLE_ASYNC_RESULT (res))); } @@ -365,7 +367,9 @@ load_current_bands_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - /* Never fails */ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return NULL; + return (GArray *) g_array_ref (g_simple_async_result_get_op_res_gpointer ( G_SIMPLE_ASYNC_RESULT (res))); } @@ -909,8 +913,11 @@ setup_ports (MMBroadbandModem *self) MM_BROADBAND_MODEM_CLASS (mm_broadband_modem_altair_lte_parent_class)->setup_ports (self); primary = mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)); + if (!primary) + return; - g_object_set (mm_base_modem_peek_port_primary (MM_BASE_MODEM (self)), + g_object_set (primary, + MM_SERIAL_PORT_SEND_DELAY, (guint64) 0, MM_AT_SERIAL_PORT_SEND_LF, TRUE, MM_AT_SERIAL_PORT_INIT_SEQUENCE, primary_init_sequence, NULL); @@ -956,11 +963,6 @@ mm_broadband_modem_altair_lte_init (MMBroadbandModemAltairLte *self) static void iface_modem_init (MMIfaceModem *iface) { - /* the modem is powered up at startup - no need to waste - * on power query and power up commands */ - iface->load_power_state = NULL; - iface->load_power_state_finish = NULL; - iface->modem_power_down = modem_power_down; iface->modem_power_down_finish = modem_power_down_finish; iface->create_bearer = modem_create_bearer; @@ -1044,4 +1046,11 @@ mm_broadband_modem_altair_lte_class_init (MMBroadbandModemAltairLteClass *klass) g_type_class_add_private (object_class, sizeof (MMBroadbandModemAltairLtePrivate)); broadband_modem_class->setup_ports = setup_ports; + + /* The Altair LTE modem reboots itself upon receiving an ATZ command. We + * need to skip the default implementation in MMBroadbandModem to prevent + * an ATZ command from being issued as part of the modem initialization + * sequence when enabling the modem. */ + broadband_modem_class->enabling_modem_init = NULL; + broadband_modem_class->enabling_modem_init_finish = NULL; } diff --git a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c index 6d1414d..1f330d3 100644 --- a/plugins/huawei/mm-broadband-bearer-huawei.c +++ b/plugins/huawei/mm-broadband-bearer-huawei.c @@ -29,6 +29,7 @@ #include "mm-broadband-bearer-huawei.h" #include "mm-log.h" #include "mm-modem-helpers.h" +#include "mm-modem-helpers-huawei.h" G_DEFINE_TYPE (MMBroadbandBearerHuawei, mm_broadband_bearer_huawei, MM_TYPE_BROADBAND_BEARER) @@ -43,7 +44,7 @@ struct _MMBroadbandBearerHuaweiPrivate { typedef enum { CONNECT_3GPP_CONTEXT_STEP_FIRST = 0, CONNECT_3GPP_CONTEXT_STEP_NDISDUP, - CONNECT_3GPP_CONTEXT_STEP_DHCP, + CONNECT_3GPP_CONTEXT_STEP_NDISSTATQRY, CONNECT_3GPP_CONTEXT_STEP_LAST } Connect3gppContextStep; @@ -85,7 +86,7 @@ connect_3gpp_finish (MMBroadbandBearer *self, static void connect_3gpp_context_step (Connect3gppContext *ctx); static gboolean -connect_retry_dhcp_check_cb (MMBroadbandBearerHuawei *self) +connect_retry_ndisstatqry_check_cb (MMBroadbandBearerHuawei *self) { Connect3gppContext *ctx; @@ -103,12 +104,17 @@ connect_retry_dhcp_check_cb (MMBroadbandBearerHuawei *self) } static void -connect_dhcp_check_ready (MMBaseModem *modem, - GAsyncResult *res, - MMBroadbandBearerHuawei *self) +connect_ndisstatqry_check_ready (MMBaseModem *modem, + GAsyncResult *res, + MMBroadbandBearerHuawei *self) { Connect3gppContext *ctx; + const gchar *response; GError *error = NULL; + gboolean ipv4_available; + gboolean ipv4_connected; + gboolean ipv6_available; + gboolean ipv6_connected; ctx = self->priv->connect_pending; g_assert (ctx != NULL); @@ -116,31 +122,38 @@ connect_dhcp_check_ready (MMBaseModem *modem, /* Balance refcount */ g_object_unref (self); - if (!mm_base_modem_at_command_full_finish (modem, res, &error)) { - /* Only retry the DHCP check if we get a mobile equipment error, or if - * the command timed out. */ - if (error->domain == MM_MOBILE_EQUIPMENT_ERROR || - g_error_matches (error, - MM_SERIAL_ERROR, - MM_SERIAL_ERROR_RESPONSE_TIMEOUT)) { - g_error_free (error); - /* Setup timeout to retry the same step */ - g_timeout_add_seconds (1, - (GSourceFunc)connect_retry_dhcp_check_cb, - g_object_ref (self)); - return; - } + response = mm_base_modem_at_command_full_finish (modem, res, &error); + if (!response || + !mm_huawei_parse_ndisstatqry_response (response, + &ipv4_available, + &ipv4_connected, + &ipv6_available, + &ipv6_connected, + &error)) { + mm_dbg ("Modem doesn't properly support ^NDISSTATQRY command: %s", error->message); + g_error_free (error); - /* Fatal error happened; e.g. modem unplugged */ - self->priv->connect_pending = NULL; - g_simple_async_result_take_error (ctx->result, error); + ctx->self->priv->connect_pending = NULL; + g_simple_async_result_set_error (ctx->result, + MM_MOBILE_EQUIPMENT_ERROR, + MM_MOBILE_EQUIPMENT_ERROR_NOT_SUPPORTED, + "Connection attempt not supported"); connect_3gpp_context_complete_and_free (ctx); return; } - /* Success! */ - ctx->step++; - connect_3gpp_context_step (ctx); + /* Connected in IPv4? */ + if (ipv4_available && ipv4_connected) { + /* Success! */ + ctx->step++; + connect_3gpp_context_step (ctx); + return; + } + + /* Setup timeout to retry the same step */ + g_timeout_add_seconds (1, + (GSourceFunc)connect_retry_ndisstatqry_check_cb, + g_object_ref (self)); } static void @@ -287,7 +300,7 @@ connect_3gpp_context_step (Connect3gppContext *ctx) return; } - case CONNECT_3GPP_CONTEXT_STEP_DHCP: + case CONNECT_3GPP_CONTEXT_STEP_NDISSTATQRY: /* Wait for dial up timeout, retries for 60 times * (1s between the retries, so it means 1 minute). * If too many retries, failed @@ -307,12 +320,12 @@ connect_3gpp_context_step (Connect3gppContext *ctx) ctx->check_count++; mm_base_modem_at_command_full (ctx->modem, ctx->primary, - "^DHCP?", + "^NDISSTATQRY?", 3, FALSE, FALSE, NULL, - (GAsyncReadyCallback)connect_dhcp_check_ready, + (GAsyncReadyCallback)connect_ndisstatqry_check_ready, g_object_ref (ctx->self)); return; @@ -389,7 +402,7 @@ connect_3gpp (MMBroadbandBearer *self, typedef enum { DISCONNECT_3GPP_CONTEXT_STEP_FIRST = 0, DISCONNECT_3GPP_CONTEXT_STEP_NDISDUP, - DISCONNECT_3GPP_CONTEXT_STEP_DHCP, + DISCONNECT_3GPP_CONTEXT_STEP_NDISSTATQRY, DISCONNECT_3GPP_CONTEXT_STEP_LAST } Disconnect3gppContextStep; @@ -424,7 +437,7 @@ disconnect_3gpp_finish (MMBroadbandBearer *self, static void disconnect_3gpp_context_step (Disconnect3gppContext *ctx); static gboolean -disconnect_retry_dhcp_check_cb (MMBroadbandBearerHuawei *self) +disconnect_retry_ndisstatqry_check_cb (MMBroadbandBearerHuawei *self) { Disconnect3gppContext *ctx; @@ -441,11 +454,17 @@ disconnect_retry_dhcp_check_cb (MMBroadbandBearerHuawei *self) } static void -disconnect_dhcp_check_ready (MMBaseModem *modem, - GAsyncResult *res, - MMBroadbandBearerHuawei *self) +disconnect_ndisstatqry_check_ready (MMBaseModem *modem, + GAsyncResult *res, + MMBroadbandBearerHuawei *self) { Disconnect3gppContext *ctx; + const gchar *response; + GError *error = NULL; + gboolean ipv4_available; + gboolean ipv4_connected; + gboolean ipv6_available; + gboolean ipv6_connected; ctx = self->priv->disconnect_pending; g_assert (ctx != NULL); @@ -453,18 +472,38 @@ disconnect_dhcp_check_ready (MMBaseModem *modem, /* Balance refcount */ g_object_unref (self); - /* If any response give, we're still connected */ - if (mm_base_modem_at_command_full_finish (modem, res, NULL)) { - /* Setup timeout to retry the same step */ - g_timeout_add_seconds (1, - (GSourceFunc)disconnect_retry_dhcp_check_cb, - g_object_ref (self)); + response = mm_base_modem_at_command_full_finish (modem, res, &error); + if (!response || + !mm_huawei_parse_ndisstatqry_response (response, + &ipv4_available, + &ipv4_connected, + &ipv6_available, + &ipv6_connected, + &error)) { + mm_dbg ("Modem doesn't properly support ^NDISSTATQRY command: %s", error->message); + g_error_free (error); + + ctx->self->priv->connect_pending = NULL; + g_simple_async_result_set_error (ctx->result, + MM_MOBILE_EQUIPMENT_ERROR, + MM_MOBILE_EQUIPMENT_ERROR_NOT_SUPPORTED, + "Disconnection attempt not supported"); + disconnect_3gpp_context_complete_and_free (ctx); return; } - /* Success! */ - ctx->step++; - disconnect_3gpp_context_step (ctx); + /* Disconnected IPv4? */ + if (ipv4_available && !ipv4_connected) { + /* Success! */ + ctx->step++; + disconnect_3gpp_context_step (ctx); + return; + } + + /* Setup timeout to retry the same step */ + g_timeout_add_seconds (1, + (GSourceFunc)disconnect_retry_ndisstatqry_check_cb, + g_object_ref (self)); } static void @@ -517,7 +556,7 @@ disconnect_3gpp_context_step (Disconnect3gppContext *ctx) g_object_ref (ctx->self)); return; - case DISCONNECT_3GPP_CONTEXT_STEP_DHCP: + case DISCONNECT_3GPP_CONTEXT_STEP_NDISSTATQRY: /* If too many retries (1s of wait between the retries), failed */ if (ctx->check_count > 10) { /* Clear context */ @@ -534,12 +573,12 @@ disconnect_3gpp_context_step (Disconnect3gppContext *ctx) ctx->check_count++; mm_base_modem_at_command_full (ctx->modem, ctx->primary, - "^DHCP?", + "^NDISSTATQRY?", 3, FALSE, FALSE, NULL, - (GAsyncReadyCallback)disconnect_dhcp_check_ready, + (GAsyncReadyCallback)disconnect_ndisstatqry_check_ready, g_object_ref (ctx->self)); return; diff --git a/plugins/huawei/mm-modem-helpers-huawei.c b/plugins/huawei/mm-modem-helpers-huawei.c new file mode 100644 index 0000000..d9b038d --- /dev/null +++ b/plugins/huawei/mm-modem-helpers-huawei.c @@ -0,0 +1,100 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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: + * + * Copyright (C) 2013 Huawei Technologies Co., Ltd + * Copyright (C) 2013 Aleksander Morgado <aleksander@gnu.org> + */ + +#include <string.h> + +#include <ModemManager.h> +#define _LIBMM_INSIDE_MM +#include <libmm-glib.h> + +#include "mm-modem-helpers-huawei.h" + +/*****************************************************************************/ +/* ^NDISSTATQRY response parser */ + +gboolean +mm_huawei_parse_ndisstatqry_response (const gchar *response, + gboolean *ipv4_available, + gboolean *ipv4_connected, + gboolean *ipv6_available, + gboolean *ipv6_connected, + GError **error) +{ + GRegex *r; + GMatchInfo *match_info; + GError *inner_error = NULL; + + if (!response || !g_str_has_prefix (response, "^NDISSTATQRY:")) { + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Missing ^NDISSTATQRY prefix"); + return FALSE; + } + + *ipv4_available = FALSE; + *ipv6_available = FALSE; + + /* The response maybe as: + * <CR><LF>^NDISSTATQRY: 1,,,IPV4<CR><LF>^NDISSTATQRY: 0,33,,IPV6<CR><LF> + * <CR><LF><CR><LF>OK<CR><LF> + * So we have to split the status for IPv4 and IPv6. For now, we only care + * about IPv4. + */ + r = g_regex_new ("\\^NDISSTATQRY:\\s*(\\d),(.*),(.*),(.*)(\\r\\n)?", + G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, + 0, NULL); + g_assert (r != NULL); + + g_regex_match_full (r, response, strlen (response), 0, 0, &match_info, &inner_error); + while (!inner_error && g_match_info_matches (match_info)) { + gchar *ip_type_str; + guint connected; + + /* Read values */ + ip_type_str = mm_get_string_unquoted_from_match_info (match_info, 4); + if (!ip_type_str || + !mm_get_uint_from_match_info (match_info, 1, &connected) || + (connected != 0 && connected != 1)) { + inner_error = g_error_new (MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "Couldn't parse ^NDISSTATQRY fields"); + } else if (g_ascii_strcasecmp (ip_type_str, "IPV4") == 0) { + *ipv4_available = TRUE; + *ipv4_connected = (gboolean)connected; + } else if (g_ascii_strcasecmp (ip_type_str, "IPV6") == 0) { + *ipv6_available = TRUE; + *ipv6_connected = (gboolean)connected; + } + + g_free (ip_type_str); + if (!inner_error) + g_match_info_next (match_info, &inner_error); + } + + g_match_info_free (match_info); + g_regex_unref (r); + + if (!ipv4_available && !ipv6_available) { + inner_error = g_error_new (MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "Couldn't find IPv4 or IPv6 info in ^NDISSTATQRY response"); + } + + if (inner_error) { + g_propagate_error (error, inner_error); + return FALSE; + } + + return TRUE; +} diff --git a/plugins/huawei/mm-modem-helpers-huawei.h b/plugins/huawei/mm-modem-helpers-huawei.h new file mode 100644 index 0000000..cc32087 --- /dev/null +++ b/plugins/huawei/mm-modem-helpers-huawei.h @@ -0,0 +1,30 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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: + * + * Copyright (C) 2013 Huawei Technologies Co., Ltd + * Copyright (C) 2013 Aleksander Morgado <aleksander@gnu.org> + */ + +#ifndef MM_MODEM_HELPERS_HUAWEI_H +#define MM_MODEM_HELPERS_HUAWEI_H + +#include "glib.h" + +/* ^NDISSTATQRY response parser */ +gboolean mm_huawei_parse_ndisstatqry_response (const gchar *response, + gboolean *ipv4_available, + gboolean *ipv4_connected, + gboolean *ipv6_available, + gboolean *ipv6_connected, + GError **error); + +#endif /* MM_MODEM_HELPERS_HUAWEI_H */ diff --git a/plugins/huawei/tests/test-modem-helpers-huawei.c b/plugins/huawei/tests/test-modem-helpers-huawei.c new file mode 100644 index 0000000..c1bc0ed --- /dev/null +++ b/plugins/huawei/tests/test-modem-helpers-huawei.c @@ -0,0 +1,103 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * 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: + * + * Copyright (C) 2013 Aleksander Morgado <aleksander@gnu.org> + */ + +#include <glib.h> +#include <glib-object.h> +#include <locale.h> + +#include "mm-modem-helpers-huawei.h" + +/*****************************************************************************/ +/* Test ^NDISSTATQRY responses */ + +typedef struct { + const gchar *str; + gboolean expected_ipv4_available; + gboolean expected_ipv4_connected; + gboolean expected_ipv6_available; + gboolean expected_ipv6_connected; +} NdisstatqryTest; + +static const NdisstatqryTest ndisstatqry_tests[] = { + { "^NDISSTATQRY: 1,,,IPV4\r\n", TRUE, TRUE, FALSE, FALSE }, + { "^NDISSTATQRY: 0,,,IPV4\r\n", TRUE, FALSE, FALSE, FALSE }, + { "^NDISSTATQRY: 1,,,IPV6\r\n", FALSE, FALSE, TRUE, TRUE }, + { "^NDISSTATQRY: 0,,,IPV6\r\n", FALSE, FALSE, TRUE, FALSE }, + { "^NDISSTATQRY: 1,,,IPV4\r\n" + "^NDISSTATQRY: 1,,,IPV6\r\n", TRUE, TRUE, TRUE, TRUE }, + { "^NDISSTATQRY: 1,,,IPV4\r\n" + "^NDISSTATQRY: 0,,,IPV6\r\n", TRUE, TRUE, TRUE, FALSE }, + { "^NDISSTATQRY: 0,,,IPV4\r\n" + "^NDISSTATQRY: 1,,,IPV6\r\n", TRUE, FALSE, TRUE, TRUE }, + { "^NDISSTATQRY: 0,,,IPV4\r\n" + "^NDISSTATQRY: 0,,,IPV6\r\n", TRUE, FALSE, TRUE, FALSE }, + { "^NDISSTATQRY: 1,,,IPV4", TRUE, TRUE, FALSE, FALSE }, + { "^NDISSTATQRY: 0,,,IPV4", TRUE, FALSE, FALSE, FALSE }, + { "^NDISSTATQRY: 1,,,IPV6", FALSE, FALSE, TRUE, TRUE }, + { "^NDISSTATQRY: 0,,,IPV6", FALSE, FALSE, TRUE, FALSE }, + { "^NDISSTATQRY: 1,,,IPV4\r\n" + "^NDISSTATQRY: 1,,,IPV6", TRUE, TRUE, TRUE, TRUE }, + { "^NDISSTATQRY: 1,,,IPV4\r\n" + "^NDISSTATQRY: 0,,,IPV6", TRUE, TRUE, TRUE, FALSE }, + { "^NDISSTATQRY: 0,,,IPV4\r\n" + "^NDISSTATQRY: 1,,,IPV6", TRUE, FALSE, TRUE, TRUE }, + { "^NDISSTATQRY: 0,,,IPV4\r\n" + "^NDISSTATQRY: 0,,,IPV6", TRUE, FALSE, TRUE, FALSE }, + { NULL, FALSE, FALSE, FALSE, FALSE } +}; + +static void +test_ndisstatqry (void) +{ + guint i; + + for (i = 0; ndisstatqry_tests[i].str; i++) { + GError *error = NULL; + gboolean ipv4_available; + gboolean ipv4_connected; + gboolean ipv6_available; + gboolean ipv6_connected; + + g_assert (mm_huawei_parse_ndisstatqry_response ( + ndisstatqry_tests[i].str, + &ipv4_available, + &ipv4_connected, + &ipv6_available, + &ipv6_connected, + &error) == TRUE); + g_assert_no_error (error); + + g_assert (ipv4_available == ndisstatqry_tests[i].expected_ipv4_available); + if (ipv4_available) + g_assert (ipv4_connected == ndisstatqry_tests[i].expected_ipv4_connected); + g_assert (ipv6_available == ndisstatqry_tests[i].expected_ipv6_available); + if (ipv6_available) + g_assert (ipv6_connected == ndisstatqry_tests[i].expected_ipv6_connected); + } +} + +/*****************************************************************************/ + +int main (int argc, char **argv) +{ + setlocale (LC_ALL, ""); + + g_type_init (); + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/MM/huawei/ndisstatqry", test_ndisstatqry); + + return g_test_run (); +} diff --git a/plugins/icera/mm-broadband-modem-icera.c b/plugins/icera/mm-broadband-modem-icera.c index 84e998b..b84cd12 100644 --- a/plugins/icera/mm-broadband-modem-icera.c +++ b/plugins/icera/mm-broadband-modem-icera.c @@ -70,68 +70,143 @@ struct _MMBroadbandModemIceraPrivate { /*****************************************************************************/ /* Load supported modes (Modem interface) */ +static void +add_supported_mode (GArray **combinations, + guint mode) +{ + MMModemModeCombination combination; + + switch (mode) { + case 0: + mm_dbg ("Modem supports 2G-only mode"); + combination.allowed = MM_MODEM_MODE_2G; + combination.preferred = MM_MODEM_MODE_NONE; + break; + case 1: + mm_dbg ("Modem supports 3G-only mode"); + combination.allowed = MM_MODEM_MODE_3G; + combination.preferred = MM_MODEM_MODE_NONE; + break; + case 2: + mm_dbg ("Modem supports 2G/3G mode with 2G preferred"); + combination.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); + combination.preferred = MM_MODEM_MODE_2G; + break; + case 3: + mm_dbg ("Modem supports 2G/3G mode with 3G preferred"); + combination.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); + combination.preferred = MM_MODEM_MODE_3G; + break; + case 5: + mm_dbg ("Modem supports 'any', but not explicitly listing it"); + /* Any, no need to add it to the list */ + return; + default: + mm_warn ("Unsupported Icera mode found: %u", mode); + return; + } + + if (*combinations == NULL) + *combinations = g_array_sized_new (FALSE, FALSE, sizeof (MMModemModeCombination), 5); + + g_array_append_val (*combinations, combination); +} + static GArray * load_supported_modes_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + GArray *combinations = NULL; + const gchar *response; + gchar **split = NULL; + GMatchInfo *match_info; + GRegex *r; + guint i; + + response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error); + if (!response) return NULL; - return g_array_ref (g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res))); -} + /* Reply goes like this: + * AT%IPSYS=? + * %IPSYS: (0-3,5),(0-3) + */ -static void -parent_load_supported_modes_ready (MMIfaceModem *self, - GAsyncResult *res, - GSimpleAsyncResult *simple) -{ - GError *error = NULL; - GArray *all; - GArray *combinations; - GArray *filtered; - MMModemModeCombination mode; + r = g_regex_new ("\\%IPSYS:\\s*\\((.*)\\)\\s*,\\((.*)\\)", + G_REGEX_RAW, 0, NULL); + g_assert (r != NULL); - all = iface_modem_parent->load_supported_modes_finish (self, res, &error); - if (!all) { - g_simple_async_result_take_error (simple, error); - g_simple_async_result_complete (simple); - g_object_unref (simple); - return; + g_regex_match (r, response, 0, &match_info); + if (g_match_info_matches (match_info)) { + gchar *aux; + + aux = mm_get_string_unquoted_from_match_info (match_info, 1); + if (aux) { + split = g_strsplit (aux, ",", -1); + g_free (aux); + } } - /* Build list of combinations */ - combinations = g_array_sized_new (FALSE, FALSE, sizeof (MMModemModeCombination), 5); - - /* 2G only */ - mode.allowed = MM_MODEM_MODE_2G; - mode.preferred = MM_MODEM_MODE_NONE; - g_array_append_val (combinations, mode); - /* 3G only */ - mode.allowed = MM_MODEM_MODE_3G; - mode.preferred = MM_MODEM_MODE_NONE; - g_array_append_val (combinations, mode); - /* 2G and 3G */ - mode.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); - mode.preferred = MM_MODEM_MODE_NONE; - g_array_append_val (combinations, mode); - /* 2G and 3G, 2G preferred */ - mode.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); - mode.preferred = MM_MODEM_MODE_2G; - g_array_append_val (combinations, mode); - /* 2G and 3G, 3G preferred */ - mode.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); - mode.preferred = MM_MODEM_MODE_3G; - g_array_append_val (combinations, mode); - - /* Filter out those unsupported modes */ - filtered = mm_filter_supported_modes (all, combinations); - g_array_unref (all); - g_array_unref (combinations); - - g_simple_async_result_set_op_res_gpointer (simple, filtered, (GDestroyNotify) g_array_unref); - g_simple_async_result_complete (simple); - g_object_unref (simple); + g_match_info_free (match_info); + g_regex_unref (r); + + if (!split) { + g_set_error (error, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "%%IPSYS=? response didn't match"); + g_regex_unref (r); + return NULL; + } + + for (i = 0; split[i]; i++) { + gchar *interval_separator; + + g_strstrip (split[i]); + interval_separator = strstr (split[i], "-"); + if (interval_separator) { + /* Add all in interval */ + gchar *first, *last; + guint modefirst, modelast; + + first = g_strdup (split[i]); + interval_separator = strstr (first, "-"); + *(interval_separator++) = '\0'; + last = interval_separator; + + if (mm_get_uint_from_str (first, &modefirst) && + mm_get_uint_from_str (last, &modelast) && + modefirst < modelast && + modelast <= 5) { + guint j; + + for (j = modefirst; j <= modelast; j++) + add_supported_mode (&combinations, j); + } else + mm_warn ("Couldn't parse mode interval (%s) in %%IPSYS=? response", split[i]); + g_free (first); + } else { + guint mode; + + /* Add single */ + if (mm_get_uint_from_str (split[i], &mode)) + add_supported_mode (&combinations, mode); + else + mm_warn ("Couldn't parse mode (%s) in %%IPSYS=? response", split[i]); + } + } + + g_strfreev (split); + + if (!combinations) + g_set_error (error, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "No mode combinations were parsed from the %%IPSYS=? response (%s)", + response); + + return combinations; } static void @@ -139,14 +214,12 @@ load_supported_modes (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data) { - /* Run parent's loading */ - iface_modem_parent->load_supported_modes ( - MM_IFACE_MODEM (self), - (GAsyncReadyCallback)parent_load_supported_modes_ready, - g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - load_supported_modes)); + mm_base_modem_at_command (MM_BASE_MODEM (self), + "%IPSYS=?", + 3, + TRUE, + callback, + user_data); } /*****************************************************************************/ diff --git a/plugins/novatel/mm-broadband-modem-novatel-lte.c b/plugins/novatel/mm-broadband-modem-novatel-lte.c index 0db1686..8cb127a 100644 --- a/plugins/novatel/mm-broadband-modem-novatel-lte.c +++ b/plugins/novatel/mm-broadband-modem-novatel-lte.c @@ -376,7 +376,9 @@ load_current_bands_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - /* Never fails */ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) + return NULL; + return (GArray *) g_array_ref (g_simple_async_result_get_op_res_gpointer ( G_SIMPLE_ASYNC_RESULT (res))); } diff --git a/plugins/option/mm-broadband-bearer-hso.c b/plugins/option/mm-broadband-bearer-hso.c index 1830bb2..7da13aa 100644 --- a/plugins/option/mm-broadband-bearer-hso.c +++ b/plugins/option/mm-broadband-bearer-hso.c @@ -143,6 +143,7 @@ ip_config_ready (MMBaseModem *modem, ip_config = mm_bearer_ip_config_new (); mm_bearer_ip_config_set_method (ip_config, MM_BEARER_IP_METHOD_STATIC); mm_bearer_ip_config_set_address (ip_config, items[i]); + mm_bearer_ip_config_set_prefix (ip_config, 32); } else if (i == 3 || i == 4) { /* DNS entries */ guint32 tmp; diff --git a/plugins/option/mm-broadband-modem-hso.c b/plugins/option/mm-broadband-modem-hso.c index 967b0ce..1c69109 100644 --- a/plugins/option/mm-broadband-modem-hso.c +++ b/plugins/option/mm-broadband-modem-hso.c @@ -65,12 +65,33 @@ modem_create_bearer_finish (MMIfaceModem *self, MMBearer *bearer; bearer = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); - mm_dbg ("New HSO bearer created at DBus path '%s'", mm_bearer_get_path (bearer)); + mm_dbg ("New %s bearer created at DBus path '%s'", + MM_IS_BROADBAND_BEARER_HSO (bearer) ? "HSO" : "Generic", + mm_bearer_get_path (bearer)); return g_object_ref (bearer); } static void +broadband_bearer_new_ready (GObject *source, + GAsyncResult *res, + GSimpleAsyncResult *simple) +{ + MMBearer *bearer = NULL; + GError *error = NULL; + + bearer = mm_broadband_bearer_new_finish (res, &error); + if (!bearer) + g_simple_async_result_take_error (simple, error); + else + g_simple_async_result_set_op_res_gpointer (simple, + bearer, + (GDestroyNotify)g_object_unref); + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +static void broadband_bearer_hso_new_ready (GObject *source, GAsyncResult *res, GSimpleAsyncResult *simple) @@ -102,6 +123,17 @@ modem_create_bearer (MMIfaceModem *self, user_data, modem_create_bearer); + if (mm_bearer_properties_get_ip_type (properties) & + (MM_BEARER_IP_FAMILY_IPV6 | MM_BEARER_IP_FAMILY_IPV4V6)) { + mm_dbg ("Creating generic bearer (IPv6 requested)..."); + mm_broadband_bearer_new (MM_BROADBAND_MODEM (self), + properties, + NULL, /* cancellable */ + (GAsyncReadyCallback)broadband_bearer_new_ready, + result); + return; + } + mm_dbg ("Creating HSO bearer..."); mm_broadband_bearer_hso_new (MM_BROADBAND_MODEM_HSO (self), properties, diff --git a/plugins/x22x/77-mm-x22x-port-types.rules b/plugins/x22x/77-mm-x22x-port-types.rules index 198d203..91ae092 100644 --- a/plugins/x22x/77-mm-x22x-port-types.rules +++ b/plugins/x22x/77-mm-x22x-port-types.rules @@ -11,10 +11,13 @@ ACTION!="add|change", GOTO="mm_x22x_port_types_end" SUBSYSTEM!="tty", GOTO="mm_x22x_port_types_end" -SUBSYSTEMS=="usb", ATTRS{idVendor}=="1bbb", GOTO="mm_x22x_vendorcheck" +SUBSYSTEMS=="usb", ATTRS{idVendor}=="1bbb", GOTO="mm_x22x_generic_vendorcheck" +SUBSYSTEMS=="usb", ATTRS{idVendor}=="0b3c", GOTO="mm_x22x_olivetti_vendorcheck" GOTO="mm_x22x_port_types_end" -LABEL="mm_x22x_vendorcheck" +# Generic JRD devices --------------------------- + +LABEL="mm_x22x_generic_vendorcheck" SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{.MM_USBIFNUM}="$attr{bInterfaceNumber}" # Alcatel X200 @@ -41,5 +44,20 @@ ATTRS{idVendor}=="1bbb", ATTRS{idProduct}=="00B7", ENV{ID_MM_X22X_TAGGED}="1" GOTO="mm_x22x_port_types_end" +# Olivetti devices --------------------------- + +LABEL="mm_x22x_olivetti_vendorcheck" +SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{.MM_USBIFNUM}="$attr{bInterfaceNumber}" + +# Olicard 200 +ATTRS{idVendor}=="0b3c", ATTRS{idProduct}=="c005", ENV{.MM_USBIFNUM}=="05", ENV{ID_MM_X22X_PORT_TYPE_MODEM}="1" +ATTRS{idVendor}=="0b3c", ATTRS{idProduct}=="c005", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_X22X_PORT_TYPE_AUX}="1" +ATTRS{idVendor}=="0b3c", ATTRS{idProduct}=="c005", ENV{.MM_USBIFNUM}=="01", ENV{ID_MM_X22X_PORT_TYPE_AUX}="1" +ATTRS{idVendor}=="0b3c", ATTRS{idProduct}=="c005", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_X22X_PORT_TYPE_AUX}="1" +ATTRS{idVendor}=="0b3c", ATTRS{idProduct}=="c005", ENV{.MM_USBIFNUM}=="03", ENV{ID_MM_X22X_PORT_TYPE_AUX}="1" +ATTRS{idVendor}=="0b3c", ATTRS{idProduct}=="c005", ENV{.MM_USBIFNUM}=="06", ENV{ID_MM_X22X_PORT_TYPE_AUX}="1" +ATTRS{idVendor}=="0b3c", ATTRS{idProduct}=="c005", ENV{ID_MM_X22X_TAGGED}="1" + +GOTO="mm_x22x_port_types_end" LABEL="mm_x22x_port_types_end" diff --git a/plugins/x22x/mm-plugin-x22x.c b/plugins/x22x/mm-plugin-x22x.c index c729469..9b36048 100644 --- a/plugins/x22x/mm-plugin-x22x.c +++ b/plugins/x22x/mm-plugin-x22x.c @@ -241,8 +241,8 @@ G_MODULE_EXPORT MMPlugin * mm_plugin_create (void) { static const gchar *subsystems[] = { "tty", NULL }; - /* Vendors: X22x and TAMobile */ - static const guint16 vendor_ids[] = { 0x1bbb, 0 }; + /* Vendors: TAMobile and Olivetti */ + static const guint16 vendor_ids[] = { 0x1bbb, 0x0b3c, 0 }; /* Only handle X22X tagged devices here. */ static const gchar *udev_tags[] = { "ID_MM_X22X_TAGGED", |