Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ofono for openSUSE:Factory checked 
in at 2025-12-11 18:41:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ofono (Old)
 and      /work/SRC/openSUSE:Factory/.ofono.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ofono"

Thu Dec 11 18:41:55 2025 rev:33 rq:1322203 version:2.19

Changes:
--------
--- /work/SRC/openSUSE:Factory/ofono/ofono.changes      2025-08-27 
21:36:28.123164999 +0200
+++ /work/SRC/openSUSE:Factory/.ofono.new.1939/ofono.changes    2025-12-11 
18:45:24.923743476 +0100
@@ -1,0 +2,7 @@
+Sun Dec  7 22:03:31 UTC 2025 - Martin Hauke <[email protected]>
+
+- Update to version 2.19
+  * Add support for PPP reset workaround for SIM7100 modem.
+  * Add support for Qualcomm RAW-IP only devices.
+
+-------------------------------------------------------------------

Old:
----
  ofono-2.18.tar.xz

New:
----
  ofono-2.19.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ofono.spec ++++++
--- /var/tmp/diff_new_pack.oCI8Xm/_old  2025-12-11 18:45:25.763778770 +0100
+++ /var/tmp/diff_new_pack.oCI8Xm/_new  2025-12-11 18:45:25.767778938 +0100
@@ -19,7 +19,7 @@
 
 
 Name:           ofono
-Version:        2.18
+Version:        2.19
 Release:        0
 Summary:        Mobile telephony application development framework
 License:        GPL-2.0-only

++++++ ofono-2.18.tar.xz -> ofono-2.19.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/ChangeLog new/ofono-2.19/ChangeLog
--- old/ofono-2.18/ChangeLog    2025-07-25 11:35:42.000000000 +0200
+++ new/ofono-2.19/ChangeLog    2025-11-21 20:53:43.000000000 +0100
@@ -1,3 +1,7 @@
+ver 2.19:
+       Add support for PPP reset workaround for SIM7100 modem.
+       Add support for Qualcomm RAW-IP only devices.
+
 ver 2.18:
        Fix issue with QMI and handling SMS message acknowledgement.
        Fix issue with handling SIM7100 modem ready detection.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/Makefile.am new/ofono-2.19/Makefile.am
--- old/ofono-2.18/Makefile.am  2025-02-13 00:00:27.000000000 +0100
+++ new/ofono-2.19/Makefile.am  2025-11-21 20:53:43.000000000 +0100
@@ -578,7 +578,6 @@
 builtin_sources += plugins/quectel.c
 builtin_sources += plugins/ublox.c
 builtin_sources += plugins/xmm7xxx.c
-builtin_sources += plugins/droid.c
 
 builtin_modules += stemgr
 builtin_sources += plugins/stemgr.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/Makefile.in new/ofono-2.19/Makefile.in
--- old/ofono-2.18/Makefile.in  2025-07-25 11:37:32.000000000 +0200
+++ new/ofono-2.19/Makefile.in  2025-11-21 20:55:44.000000000 +0100
@@ -287,8 +287,8 @@
 @ATMODEM_TRUE@ plugins/samsung.c plugins/sim900.c \
 @ATMODEM_TRUE@ plugins/sim7100.c plugins/telit.c \
 @ATMODEM_TRUE@ plugins/quectel.c plugins/ublox.c \
-@ATMODEM_TRUE@ plugins/xmm7xxx.c plugins/droid.c \
-@ATMODEM_TRUE@ plugins/stemgr.c plugins/connman.c
+@ATMODEM_TRUE@ plugins/xmm7xxx.c plugins/stemgr.c \
+@ATMODEM_TRUE@ plugins/connman.c
 @ATMODEM_TRUE@am__append_16 = stemgr connman
 @ATMODEM_TRUE@@BLUETOOTH_TRUE@am__append_17 = hfp_bluez5 dun_gw_bluez5
 @ATMODEM_TRUE@@BLUETOOTH_TRUE@am__append_18 = plugins/hfp_hf_bluez5.c \
@@ -635,9 +635,8 @@
        plugins/alcatel.c plugins/speedup.c plugins/samsung.c \
        plugins/sim900.c plugins/sim7100.c plugins/telit.c \
        plugins/quectel.c plugins/ublox.c plugins/xmm7xxx.c \
-       plugins/droid.c plugins/stemgr.c plugins/connman.c \
-       plugins/hfp_hf_bluez5.c plugins/bluez5.h \
-       plugins/dun_gw_bluez5.c plugins/bluez5.c \
+       plugins/stemgr.c plugins/connman.c plugins/hfp_hf_bluez5.c \
+       plugins/bluez5.h plugins/dun_gw_bluez5.c plugins/bluez5.c \
        plugins/hfp_ag_bluez5.c plugins/upower.c examples/history.c \
        examples/nettime.c examples/emulator.c \
        examples/private-network.c plugins/stktest.c \
@@ -863,7 +862,7 @@
 @ATMODEM_TRUE@ plugins/quectel.$(OBJEXT) \
 @ATMODEM_TRUE@ plugins/ublox.$(OBJEXT) \
 @ATMODEM_TRUE@ plugins/xmm7xxx.$(OBJEXT) \
-@ATMODEM_TRUE@ plugins/droid.$(OBJEXT) plugins/stemgr.$(OBJEXT) \
+@ATMODEM_TRUE@ plugins/stemgr.$(OBJEXT) \
 @ATMODEM_TRUE@ plugins/connman.$(OBJEXT)
 @ATMODEM_TRUE@@BLUETOOTH_TRUE@am__objects_17 =  \
 @ATMODEM_TRUE@@BLUETOOTH_TRUE@ plugins/hfp_hf_bluez5.$(OBJEXT) \
@@ -1286,7 +1285,7 @@
        gril/$(DEPDIR)/parcel.Po plugins/$(DEPDIR)/alcatel.Po \
        plugins/$(DEPDIR)/allowed-apns.Po plugins/$(DEPDIR)/bluez5.Po \
        plugins/$(DEPDIR)/calypso.Po plugins/$(DEPDIR)/cinterion.Po \
-       plugins/$(DEPDIR)/connman.Po plugins/$(DEPDIR)/droid.Po \
+       plugins/$(DEPDIR)/connman.Po \
        plugins/$(DEPDIR)/dun_gw_bluez5.Po \
        plugins/$(DEPDIR)/emulator_fuzz.Po plugins/$(DEPDIR)/g1.Po \
        plugins/$(DEPDIR)/gemalto.Po plugins/$(DEPDIR)/gobi.Po \
@@ -3344,8 +3343,6 @@
        plugins/$(DEPDIR)/$(am__dirstamp)
 plugins/xmm7xxx.$(OBJEXT): plugins/$(am__dirstamp) \
        plugins/$(DEPDIR)/$(am__dirstamp)
-plugins/droid.$(OBJEXT): plugins/$(am__dirstamp) \
-       plugins/$(DEPDIR)/$(am__dirstamp)
 plugins/stemgr.$(OBJEXT): plugins/$(am__dirstamp) \
        plugins/$(DEPDIR)/$(am__dirstamp)
 plugins/connman.$(OBJEXT): plugins/$(am__dirstamp) \
@@ -3957,7 +3954,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@plugins/$(DEPDIR)/calypso.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@plugins/$(DEPDIR)/cinterion.Po@am__quote@ 
# am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@plugins/$(DEPDIR)/connman.Po@am__quote@ # 
am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@plugins/$(DEPDIR)/droid.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@plugins/$(DEPDIR)/dun_gw_bluez5.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@plugins/$(DEPDIR)/emulator_fuzz.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@plugins/$(DEPDIR)/g1.Po@am__quote@ # 
am--include-marker
@@ -5197,7 +5193,6 @@
        -rm -f plugins/$(DEPDIR)/calypso.Po
        -rm -f plugins/$(DEPDIR)/cinterion.Po
        -rm -f plugins/$(DEPDIR)/connman.Po
-       -rm -f plugins/$(DEPDIR)/droid.Po
        -rm -f plugins/$(DEPDIR)/dun_gw_bluez5.Po
        -rm -f plugins/$(DEPDIR)/emulator_fuzz.Po
        -rm -f plugins/$(DEPDIR)/g1.Po
@@ -5635,7 +5630,6 @@
        -rm -f plugins/$(DEPDIR)/calypso.Po
        -rm -f plugins/$(DEPDIR)/cinterion.Po
        -rm -f plugins/$(DEPDIR)/connman.Po
-       -rm -f plugins/$(DEPDIR)/droid.Po
        -rm -f plugins/$(DEPDIR)/dun_gw_bluez5.Po
        -rm -f plugins/$(DEPDIR)/emulator_fuzz.Po
        -rm -f plugins/$(DEPDIR)/g1.Po
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/configure new/ofono-2.19/configure
--- old/ofono-2.18/configure    2025-07-25 11:37:27.000000000 +0200
+++ new/ofono-2.19/configure    2025-11-21 20:55:39.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for ofono 2.18.
+# Generated by GNU Autoconf 2.72 for ofono 2.19.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation,
@@ -611,8 +611,8 @@
 # Identity of this package.
 PACKAGE_NAME='ofono'
 PACKAGE_TARNAME='ofono'
-PACKAGE_VERSION='2.18'
-PACKAGE_STRING='ofono 2.18'
+PACKAGE_VERSION='2.19'
+PACKAGE_STRING='ofono 2.19'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1424,7 +1424,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-'configure' configures ofono 2.18 to adapt to many kinds of systems.
+'configure' configures ofono 2.19 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1495,7 +1495,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ofono 2.18:";;
+     short | recursive ) echo "Configuration of ofono 2.19:";;
    esac
   cat <<\_ACEOF
 
@@ -1645,7 +1645,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ofono configure 2.18
+ofono configure 2.19
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -1869,7 +1869,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ofono $as_me 2.18, which was
+It was created by ofono $as_me 2.19, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3170,7 +3170,7 @@
 
 # Define the identity of the package.
  PACKAGE='ofono'
- VERSION='2.18'
+ VERSION='2.19'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -16080,7 +16080,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ofono $as_me 2.18, which was
+This file was extended by ofono $as_me 2.19, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16148,7 +16148,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-ofono config.status 2.18
+ofono config.status 2.19
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/configure.ac new/ofono-2.19/configure.ac
--- old/ofono-2.18/configure.ac 2025-07-25 11:35:42.000000000 +0200
+++ new/ofono-2.19/configure.ac 2025-11-21 20:53:43.000000000 +0100
@@ -1,5 +1,5 @@
 AC_PREREQ([2.69])
-AC_INIT([ofono], [2.18])
+AC_INIT([ofono], [2.19])
 
 AC_CONFIG_HEADERS(config.h)
 AC_CONFIG_AUX_DIR(build-aux)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/drivers/atmodem/network-registration.c 
new/ofono-2.19/drivers/atmodem/network-registration.c
--- old/ofono-2.18/drivers/atmodem/network-registration.c       2024-11-07 
18:37:55.000000000 +0100
+++ new/ofono-2.19/drivers/atmodem/network-registration.c       2025-11-21 
20:53:43.000000000 +0100
@@ -38,6 +38,7 @@
 static const char *cind_prefix[] = { "+CIND:", NULL };
 static const char *cmer_prefix[] = { "+CMER:", NULL };
 static const char *smoni_prefix[] = { "^SMONI:", NULL };
+static const char *simcom_tech_prefix[] = { "+CNSMOD:", NULL };
 static const char *zpas_prefix[] = { "+ZPAS:", NULL };
 static const char *option_tech_prefix[] = { "_OCTI:", "_OUWCTI:", NULL };
 
@@ -179,6 +180,45 @@
        return tech;
 }
 
+static int simcom_parse_tech(GAtResult *result)
+{
+       GAtResultIter iter;
+       int s, stat, tech;
+
+       g_at_result_iter_init(&iter, result);
+
+       if (!g_at_result_iter_next(&iter, "+CNSMOD:"))
+               return -1;
+
+       if (!g_at_result_iter_next_number(&iter, &s))
+               return -1;
+
+       if (!g_at_result_iter_next_number(&iter, &stat))
+               return -1;
+
+       switch (stat) {
+       case 1: /* GSM */
+               tech = ACCESS_TECHNOLOGY_GSM;
+               break;
+       case 2: /* GPRS */
+               tech = ACCESS_TECHNOLOGY_GSM;
+               break;
+       case 3: /* EDGE */
+               tech = ACCESS_TECHNOLOGY_GSM_EGPRS;
+               break;
+       case 8: /* LTE */
+               tech = ACCESS_TECHNOLOGY_EUTRAN;
+               break;
+       default:
+               tech = -1;
+               break;
+       }
+
+       DBG("stat %d tech %d", stat, tech);
+
+       return tech;
+}
+
 static void at_creg_cb(gboolean ok, GAtResult *result, gpointer user_data)
 {
        struct cb_data *cbd = user_data;
@@ -246,6 +286,18 @@
                nd->tech = -1;
 }
 
+static void simcom_tech_cb(gboolean ok, GAtResult *result, gpointer user_data)
+{
+       struct cb_data *cbd = user_data;
+       struct ofono_netreg *netreg = cbd->data;
+       struct at_netreg_data *nd = ofono_netreg_get_data(netreg);
+
+       if (ok)
+               nd->tech = simcom_parse_tech(result);
+       else
+               nd->tech = -1;
+}
+
 void at_registration_status(struct ofono_netreg *netreg,
                                        ofono_netreg_status_cb_t cb,
                                        void *data)
@@ -299,6 +351,13 @@
                                        option_tech_cb, cbd, NULL) == 0)
                        nd->tech = -1;
                break;
+       case OFONO_VENDOR_SIMCOM_A76XX:
+               /* Send AT+CNSMOD? to find out the current tech */
+               if (g_at_chat_send(nd->chat, "AT+CNSMOD?",
+                                       simcom_tech_prefix,
+                                       simcom_tech_cb, cbd, NULL) == 0)
+                       nd->tech = -1;
+               break;
        }
 
        if (g_at_chat_send(nd->chat, "AT+CREG?", creg_prefix,
@@ -353,13 +412,6 @@
        op.status = 2;
        op.tech = tech;
 
-       /*
-        * SIMCom modems shows the current tech via the +COPS
-        * not like other modems where it's shown via +CREG
-        */
-       if (nd->vendor == OFONO_VENDOR_SIMCOM_A76XX)
-               nd->tech = tech;
-
        DBG("cops_cb: %s, %s %s %d", name, nd->mcc, nd->mnc, tech);
 
        cb(&error, &op, cbd->data);
@@ -1561,6 +1613,21 @@
                        tq->status, tq->lac, tq->ci, tech);
 }
 
+static void simcom_query_tech_cb(gboolean ok, GAtResult *result,
+                                               gpointer user_data)
+{
+       struct tech_query *tq = user_data;
+       int tech;
+
+       if (ok)
+               tech = simcom_parse_tech(result);
+       else
+               tech = -1;
+
+       ofono_netreg_status_notify(tq->netreg,
+                       tq->status, tq->lac, tq->ci, tech);
+}
+
 static void creg_notify(GAtResult *result, gpointer user_data)
 {
        struct ofono_netreg *netreg = user_data;
@@ -1572,8 +1639,16 @@
                                &lac, &ci, &tech, nd->vendor) == FALSE)
                return;
 
-       if (status != 1 && status != 5)
-               goto notify;
+       switch (status) {
+               case NETWORK_REGISTRATION_STATUS_REGISTERED:
+               case NETWORK_REGISTRATION_STATUS_ROAMING:
+               case NETWORK_REGISTRATION_STATUS_REGISTERED_SMS_EUTRAN:
+               case NETWORK_REGISTRATION_STATUS_ROAMING_SMS_EUTRAN:
+                       break;
+               default:
+                       goto notify;
+                       break;
+       }
 
        tq = g_try_new0(struct tech_query, 1);
        if (tq == NULL)
@@ -1612,6 +1687,12 @@
                                        gemalto_query_tech_cb, tq, g_free) > 0)
                        return;
                break;
+       case OFONO_VENDOR_SIMCOM_A76XX:
+               if (g_at_chat_send(nd->chat, "AT+CNSMOD?",
+                                       simcom_tech_prefix,
+                                       simcom_query_tech_cb, tq, g_free) > 0)
+                       return;
+               break;
        }
 
        g_free(tq);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/ell/main.c new/ofono-2.19/ell/main.c
--- old/ofono-2.18/ell/main.c   2024-02-06 18:44:14.000000000 +0100
+++ new/ofono-2.19/ell/main.c   2025-11-21 15:06:25.000000000 +0100
@@ -350,6 +350,7 @@
        const char *sock;
        struct sockaddr_un addr;
        const char *watchdog_usec;
+       socklen_t len;
        int msec;
 
        /* check if NOTIFY_SOCKET has been set */
@@ -370,11 +371,12 @@
        memset(&addr, 0, sizeof(addr));
        addr.sun_family = AF_UNIX;
        strncpy(addr.sun_path, sock, sizeof(addr.sun_path) - 1);
+       len = offsetof(struct sockaddr_un, sun_path) + strlen(sock);
 
        if (addr.sun_path[0] == '@')
                addr.sun_path[0] = '\0';
 
-       if (bind(notify_fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+       if (connect(notify_fd, (struct sockaddr *) &addr, len) < 0) {
                close(notify_fd);
                notify_fd = 0;
                return;
@@ -498,6 +500,7 @@
        if (unlikely(epoll_running))
                return EXIT_FAILURE;
 
+       sd_notify("READY=1");
        epoll_running = true;
 
        for (;;) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/ell/test.c new/ofono-2.19/ell/test.c
--- old/ofono-2.18/ell/test.c   2025-05-07 12:33:02.000000000 +0200
+++ new/ofono-2.19/ell/test.c   2025-09-23 16:36:05.000000000 +0200
@@ -456,7 +456,7 @@
        }
 
        if (tap_enable) {
-               printf("TAP version 12\n");
+               printf("TAP version 13\n");
                printf("1..%u\n", test_count);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/ell/tls-suites.c 
new/ofono-2.19/ell/tls-suites.c
--- old/ofono-2.18/ell/tls-suites.c     2023-09-27 11:03:04.000000000 +0200
+++ new/ofono-2.19/ell/tls-suites.c     2025-09-23 16:36:05.000000000 +0200
@@ -781,6 +781,7 @@
                                                &secret)) {
                TLS_DISCONNECT(TLS_ALERT_INTERNAL_ERROR, 0,
                                "Generating ECDH shared-secret failed");
+               l_ecc_point_free(other_public);
                return;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/plugins/droid.c 
new/ofono-2.19/plugins/droid.c
--- old/ofono-2.18/plugins/droid.c      2024-06-05 21:58:50.000000000 +0200
+++ new/ofono-2.19/plugins/droid.c      1970-01-01 01:00:00.000000000 +0100
@@ -1,172 +0,0 @@
-/*
- * oFono - Open Source Telephony
- * Copyright (C) 2008-2011  Intel Corporation
- * Copyright (C) 2009  Collabora Ltd
- * Copyright (C) 2020  Pavel Machek
- *
- * SPDX-License-Identifier: GPL-2.0-only
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <gatchat.h>
-#include <gattty.h>
-
-#define OFONO_API_SUBJECT_TO_CHANGE
-#include <ofono/plugin.h>
-#include <ofono/log.h>
-#include <ofono/modem.h>
-#include <ofono/call-barring.h>
-#include <ofono/call-forwarding.h>
-#include <ofono/call-meter.h>
-#include <ofono/call-settings.h>
-#include <ofono/devinfo.h>
-#include <ofono/message-waiting.h>
-#include <ofono/netreg.h>
-#include <ofono/phonebook.h>
-#include <ofono/sim.h>
-#include <ofono/sms.h>
-#include <ofono/ussd.h>
-#include <ofono/voicecall.h>
-
-#include <drivers/atmodem/atutil.h>
-#include <drivers/atmodem/vendor.h>
-
-static void droid_debug(const char *str, void *user_data)
-{
-       const char *prefix = user_data;
-
-       ofono_info("%s%s", prefix, str);
-}
-
-/* Detect hardware, and initialize if found */
-static int droid_probe(struct ofono_modem *modem)
-{
-       DBG("");
-
-       return 0;
-}
-
-static void droid_remove(struct ofono_modem *modem)
-{
-       GAtChat *chat = ofono_modem_get_data(modem);
-
-       DBG("");
-
-       if (chat) {
-               g_at_chat_unref(chat);
-               ofono_modem_set_data(modem, NULL);
-       }
-}
-
-static void cfun_set_on_cb(gboolean ok, GAtResult *result, gpointer user_data)
-{
-       struct ofono_modem *modem = user_data;
-
-       DBG("");
-
-       if (ok)
-               ofono_modem_set_powered(modem, TRUE);
-}
-
-/* power up hardware */
-static int droid_enable(struct ofono_modem *modem)
-{
-       GAtChat *chat;
-
-       DBG("");
-
-       chat = at_util_open_device(modem, "Device", droid_debug, "", NULL);
-       ofono_modem_set_data(modem, chat);
-
-       /* ensure modem is in a known state; verbose on, echo/quiet off */
-       g_at_chat_send(chat, "ATE0Q0V1", NULL, NULL, NULL, NULL);
-
-       /* power up modem */
-       g_at_chat_send(chat, "AT+CFUN=1", NULL, cfun_set_on_cb, modem, NULL);
-
-       return 0;
-}
-
-static void cfun_set_off_cb(gboolean ok, GAtResult *result, gpointer user_data)
-{
-       struct ofono_modem *modem = user_data;
-       GAtChat *chat = ofono_modem_get_data(modem);
-
-       DBG("");
-
-       g_at_chat_unref(chat);
-       ofono_modem_set_data(modem, NULL);
-
-       if (ok)
-               ofono_modem_set_powered(modem, FALSE);
-}
-
-static int droid_disable(struct ofono_modem *modem)
-{
-       GAtChat *chat = ofono_modem_get_data(modem);
-
-       DBG("");
-
-       /* power down modem */
-       g_at_chat_cancel_all(chat);
-       g_at_chat_unregister_all(chat);
-       g_at_chat_send(chat, "AT+CFUN=0", NULL, cfun_set_off_cb, modem, NULL);
-
-       return -EINPROGRESS;
-}
-
-static void droid_pre_sim(struct ofono_modem *modem)
-{
-       GAtChat *chat = ofono_modem_get_data(modem);
-       struct ofono_sim *sim;
-
-       DBG("");
-
-       ofono_devinfo_create(modem, 0, "atmodem", chat);
-       sim = ofono_sim_create(modem, OFONO_VENDOR_DROID, "atmodem", chat);
-       ofono_voicecall_create(modem, OFONO_VENDOR_DROID, "atmodem", chat);
-
-       if (sim)
-               ofono_sim_inserted_notify(sim, TRUE);
-}
-
-static void droid_post_sim(struct ofono_modem *modem)
-{
-       GAtChat *chat = ofono_modem_get_data(modem);
-       struct ofono_message_waiting *mw;
-
-       DBG("");
-
-       ofono_ussd_create(modem, 0, "atmodem", chat);
-       ofono_call_forwarding_create(modem, 0, "atmodem", chat);
-       ofono_call_settings_create(modem, 0, "atmodem", chat);
-       ofono_netreg_create(modem, 0, "atmodem", chat);
-       /*
-        * Droid 4 modem has problems with AT+CPUC?, avoid call meter for now.
-        */
-       ofono_call_barring_create(modem, 0, "atmodem", chat);
-       ofono_sms_create(modem, OFONO_VENDOR_DROID, "atmodem", chat);
-       ofono_phonebook_create(modem, 0, "atmodem", chat);
-
-       mw = ofono_message_waiting_create(modem);
-       if (mw)
-               ofono_message_waiting_register(mw);
-}
-
-static struct ofono_modem_driver droid_driver = {
-       .probe          = droid_probe,
-       .remove         = droid_remove,
-       .enable         = droid_enable,
-       .disable        = droid_disable,
-       .pre_sim        = droid_pre_sim,
-       .post_sim       = droid_post_sim,
-};
-
-OFONO_MODEM_DRIVER_BUILTIN(droid, &droid_driver)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/plugins/gobi.c 
new/ofono-2.19/plugins/gobi.c
--- old/ofono-2.18/plugins/gobi.c       2025-03-26 11:21:26.000000000 +0100
+++ new/ofono-2.19/plugins/gobi.c       2025-11-21 20:53:43.000000000 +0100
@@ -57,6 +57,7 @@
 #define GOBI_UIM       (1 << 5)
 #define GOBI_VOICE     (1 << 6)
 #define GOBI_WDA       (1 << 7)
+#define GOBI_LTE       (1 << 8)
 
 #define MAX_CONTEXTS 4
 #define DEFAULT_MTU 1400
@@ -108,6 +109,7 @@
        uint32_t set_powered_id;
        uint32_t set_mtu_id;
        enum wda_data_format data_format;
+       uint8_t off_opmode;
        bool no_pass_through : 1;
 };
 
@@ -216,12 +218,14 @@
        struct gobi_data *data;
        const char *if_driver;
        const char *ifname;
+       const char *opmode;
        uint8_t interface_number;
        int ifindex;
        const char *bus;
        struct stat st;
        _auto_(l_free) char *pass_through = NULL;
        bool no_pass_through = false;
+       uint8_t off_opmode = QMI_DMS_OPER_MODE_LOW_POWER;
 
        DBG("%p", modem);
 
@@ -230,6 +234,7 @@
        ifname = ofono_modem_get_string(modem, "NetworkInterface");
        ifindex = ofono_modem_get_integer(modem, "NetworkInterfaceIndex");
        bus = ofono_modem_get_string(modem, "Bus");
+       opmode = ofono_modem_get_string(modem, "OfflineOperatingMode");
 
        DBG("net: %s[%s](%d) %s", ifname, if_driver, ifindex, bus);
 
@@ -254,6 +259,15 @@
                        return -errno;
        }
 
+       if (opmode) {
+               DBG("offline power mode: %s", opmode);
+
+               if (!strcmp(opmode, "PersistentLowPower"))
+                       off_opmode = QMI_DMS_OPER_MODE_PERSIST_LOW_POWER;
+               else if (strcmp(opmode, "LowPower"))
+                       return -ENOTSUP;
+       }
+
        data = l_new(struct gobi_data, 1);
        data->main_net_ifindex = ifindex;
        l_strlcpy(data->main_net_name, ifname, sizeof(data->main_net_name));
@@ -261,9 +275,9 @@
        data->no_pass_through = no_pass_through;
        /* See drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h */
        data->max_aggregation_size = 16384;
+       data->off_opmode = off_opmode;
 
        ofono_modem_set_data(modem, data);
-       ofono_modem_set_capabilities(modem, OFONO_MODEM_CAPABILITY_LTE);
 
        return 0;
 }
@@ -442,7 +456,7 @@
        switch (data->oper_mode) {
        case QMI_DMS_OPER_MODE_ONLINE:
                param = qmi_param_new_uint8(QMI_DMS_PARAM_OPER_MODE,
-                                       QMI_DMS_OPER_MODE_LOW_POWER);
+                                               data->off_opmode);
                if (!param) {
                        shutdown_device(modem);
                        return;
@@ -480,8 +494,17 @@
         DBG("service capabilities %d", caps->data_capa);
         DBG("sim supported %d", caps->sim_supported);
 
-        for (i = 0; i < caps->radio_if_count; i++)
-                DBG("radio = %d", caps->radio_if[i]);
+       for (i = 0; i < caps->radio_if_count; i++) {
+               uint8_t iface = caps->radio_if[i];
+
+               DBG("radio = %d", iface);
+
+               if (iface == QMI_DMS_RADIO_IF_LTE)
+                       data->features |= GOBI_LTE;
+       }
+
+       if (data->features & GOBI_LTE)
+               ofono_modem_set_capabilities(modem, OFONO_MODEM_CAPABILITY_LTE);
 
        if (qmi_service_send(data->dms, QMI_DMS_GET_OPER_MODE, NULL,
                                        get_oper_mode_cb, modem, NULL) > 0)
@@ -527,7 +550,7 @@
        shutdown_device(modem);
 }
 
-static uint32_t start_service_requests(struct ofono_modem *modem)
+static bool start_service_requests(struct ofono_modem *modem)
 {
        struct gobi_data *data = ofono_modem_get_data(modem);
        unsigned int i;
@@ -570,7 +593,7 @@
                                sizeof(struct rmnet_ifinfo) * n_interfaces);
        data->n_premux = n_interfaces;
 
-       if (start_service_requests(modem) > 0)
+       if (start_service_requests(modem))
                return;
 error:
        shutdown_device(modem);
@@ -618,7 +641,7 @@
                goto error;
        }
 
-       if (start_service_requests(modem) > 0)
+       if (start_service_requests(modem))
                return;
 error:
        shutdown_device(modem);
@@ -665,10 +688,21 @@
        DBG("");
 
        if (!qmi_result_set_error(result, NULL)) {
+               struct qmi_wda_data_format actual;
+
                if (!compare_data_format(data, result))
                        goto done;
 
                ofono_error("Setting Data Format had no effect");
+
+               if (!qmi_wda_parse_data_format(result, &actual) &&
+                               data->data_format == WDA_DATA_FORMAT_802_3 &&
+                               actual.ll_protocol ==
+                               QMI_WDA_DATA_LINK_PROTOCOL_RAW_IP) {
+                       ofono_warn("Modem seems to only work in raw-ip mode");
+                       data->data_format = WDA_DATA_FORMAT_RAW_IP;
+                       goto done;
+               }
        }
 
        if (data->data_format == WDA_DATA_FORMAT_802_3)
@@ -717,7 +751,7 @@
                DBG("Failed to request WDA service, assume 802.3");
 
                if (qmi_qmux_device_create_client(data->device, QMI_SERVICE_DMS,
-                                       request_service_cb, modem, NULL) > 0)
+                                       request_service_cb, modem, NULL))
                        return;
 
                goto error;
@@ -792,11 +826,16 @@
                add_service_request(data, &data->wms, QMI_SERVICE_WMS);
        if (data->features & GOBI_VOICE)
                add_service_request(data, &data->voice, QMI_SERVICE_VOICE);
+       if (data->features & GOBI_PDS)
+               add_service_request(data, &data->pds, QMI_SERVICE_PDS);
        if (data->features & GOBI_UIM)
                add_service_request(data, &data->uim, QMI_SERVICE_UIM);
 
-       if (qmi_qmux_device_create_client(data->device, QMI_SERVICE_WDA,
-                                               create_wda_cb, modem, NULL))
+       if (data->features & GOBI_WDA) {
+               if (qmi_qmux_device_create_client(data->device,
+                               QMI_SERVICE_WDA, create_wda_cb, modem, NULL))
+                       return;
+       } else if (start_service_requests(modem))
                return;
 
 error:
@@ -921,8 +960,7 @@
        if (ofono_modem_get_boolean(modem, "AlwaysOnline"))
                goto out;
 
-       param = qmi_param_new_uint8(QMI_DMS_PARAM_OPER_MODE,
-                                       QMI_DMS_OPER_MODE_LOW_POWER);
+       param = qmi_param_new_uint8(QMI_DMS_PARAM_OPER_MODE, data->off_opmode);
        if (!param)
                return -ENOMEM;
 
@@ -1139,7 +1177,7 @@
 
        DBG("%p", modem);
 
-       if (data->features & GOBI_WDS)
+       if (data->features & GOBI_WDS && data->features & GOBI_LTE)
                ofono_lte_create(modem, 0, "qmimodem",
                                        qmi_service_clone(data->wds));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/plugins/sim7100.c 
new/ofono-2.19/plugins/sim7100.c
--- old/ofono-2.18/plugins/sim7100.c    2025-07-25 11:35:42.000000000 +0200
+++ new/ofono-2.19/plugins/sim7100.c    2025-11-21 20:53:43.000000000 +0100
@@ -106,13 +106,49 @@
        g_free(data);
 }
 
+static void ppptim_cb(gboolean ok, GAtResult *result, gpointer user_data)
+{
+       struct ofono_modem *modem = user_data;
+
+       DBG("");
+
+       ofono_modem_set_powered(modem, TRUE);
+}
+
+static void ppptim_support_cb(gboolean ok, GAtResult *result,
+                             gpointer user_data)
+{
+       struct ofono_modem *modem = user_data;
+       struct sim7100_data *data = ofono_modem_get_data(modem);
+
+       DBG("");
+
+       if (ok) {
+               /* enable reset of PPP state upon AT+CFUN=0 for A76XX modems */
+               g_at_chat_send(data->at, "AT+PPPTIM=1", NULL, ppptim_cb,
+                              modem, NULL);
+       } else {
+               ofono_warn("modem doesn't support ppp reset on disable; is the "
+                          "firmware up to date?");
+               ofono_modem_set_powered(modem, TRUE);
+       }
+}
+
 static void cfun_set_on_cb(gboolean ok, GAtResult *result, gpointer user_data)
 {
        struct ofono_modem *modem = user_data;
+       struct sim7100_data *data = ofono_modem_get_data(modem);
 
        DBG("");
 
-       if (ok)
+       if (!ok)
+               return;
+
+       if (data->model == SIMCOM_A76XX)
+               /* does the modem support reset of PPP state upon AT+CFUN=0? */
+               g_at_chat_send(data->at, "AT+PPPTIM?", NULL, ppptim_support_cb,
+                              modem, NULL);
+       else
                ofono_modem_set_powered(modem, TRUE);
 }
 
@@ -138,7 +174,7 @@
 
                DBG("modem model: %s", model);
 
-               if (g_str_has_prefix(model, "A7672"))
+               if (g_str_has_prefix(model, "A76"))
                        data->model = SIMCOM_A76XX;
 
                break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/plugins/udevng.c 
new/ofono-2.19/plugins/udevng.c
--- old/ofono-2.18/plugins/udevng.c     2025-07-25 11:35:42.000000000 +0200
+++ new/ofono-2.19/plugins/udevng.c     2025-11-21 20:53:43.000000000 +0100
@@ -870,7 +870,9 @@
 
 static gboolean setup_droid(struct modem_info *modem)
 {
-       const char *at = NULL;
+       const struct device_info *qmi = NULL;
+       const struct device_info *net = NULL;
+
        GSList *list;
 
        DBG("%s", modem->syspath);
@@ -878,23 +880,31 @@
        for (list = modem->devices; list; list = list->next) {
                struct device_info *info = list->data;
                const char *subsystem =
-                       udev_device_get_subsystem(info->udev_device);
-
-               DBG("%s %s %s %s %s", info->devnode, info->interface,
-                               info->number, info->label, subsystem);
-
-               if (g_strcmp0(info->interface, "255/255/255") == 0 &&
-                               g_strcmp0(info->number, "04") == 0) {
-                       at = info->devnode;
+                               udev_device_get_subsystem(info->udev_device);
+               DBG("%s %s %s %s %s %s", info->devnode, info->interface,
+                                               info->number, info->label,
+                                               info->sysattr, subsystem);
+
+               if (g_strcmp0(subsystem, "usbmisc") == 0) {
+                       if (g_strcmp0(info->number, "05") == 0)
+                               qmi = info;
+               } else if (g_strcmp0(subsystem, "net") == 0) {
+                       if (g_strcmp0(info->number, "05") == 0)
+                               net = info;
                }
        }
 
-       if (at == NULL)
+       if (qmi == NULL || net == NULL)
                return FALSE;
 
-       ofono_modem_set_string(modem->modem, "Device", at);
-       ofono_modem_set_driver(modem->modem, "droid");
+       DBG("qmi=%s net=%s", qmi->devnode, get_ifname(net));
+
+
+       if (setup_qmi_qmux(modem, qmi, net) < 0)
+               return FALSE;
 
+       ofono_modem_set_string(modem->modem, "OfflineOperatingMode",
+                               "PersistentLowPower");
        return TRUE;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ofono-2.18/src/ofono.conf 
new/ofono-2.19/src/ofono.conf
--- old/ofono-2.18/src/ofono.conf       2018-12-19 15:57:34.000000000 +0100
+++ new/ofono-2.19/src/ofono.conf       2025-11-21 20:53:43.000000000 +0100
@@ -27,4 +27,8 @@
     <deny send_destination="org.ofono"/>
   </policy>
 
+  <policy user="pipewire">
+    <allow send_destination="org.ofono"/>
+  </policy>
+
 </busconfig>

Reply via email to