aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2014-02-05 08:38:36 +0100
committerGuido Günther <agx@sigxcpu.org>2014-02-05 08:38:36 +0100
commitafc4b839a31c530d73b91aa2483795f185eb7e52 (patch)
tree68655a93926a9981b4d49b66106646efbb2d7c17 /plugins
parent13ed135b9ae78c692dc359976eb8b54d0a3629b8 (diff)
Imported Upstream version 1.0.0upstream/1.0.0
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Makefile.am25
-rw-r--r--plugins/Makefile.in260
-rw-r--r--plugins/altair/mm-broadband-modem-altair-lte.c25
-rw-r--r--plugins/huawei/mm-broadband-bearer-huawei.c129
-rw-r--r--plugins/huawei/mm-modem-helpers-huawei.c100
-rw-r--r--plugins/huawei/mm-modem-helpers-huawei.h30
-rw-r--r--plugins/huawei/tests/test-modem-helpers-huawei.c103
-rw-r--r--plugins/icera/mm-broadband-modem-icera.c191
-rw-r--r--plugins/novatel/mm-broadband-modem-novatel-lte.c4
-rw-r--r--plugins/option/mm-broadband-bearer-hso.c1
-rw-r--r--plugins/option/mm-broadband-modem-hso.c34
-rw-r--r--plugins/x22x/77-mm-x22x-port-types.rules22
-rw-r--r--plugins/x22x/mm-plugin-x22x.c4
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",