Commit Graph
669 Commits
Author SHA1 Message Date
Dominique Martinet 04c9797456 modem-helpers: fix multiple C*REG events in single URC
When receiving a message from modem containing multiple CREG events that
have different format, the parsing happens in the order CREG regexes are
registered, and not in the order the modem sent the events.

That means that when receiving the following URC:
<CR><LF>+CEREG:  2<CR><LF><CR><LF>+CNSMOD: 8<CR><LF><CR><LF>+CEREG: 1,AAAA,01234567,7<CR><LF>
we'd incorrectly parse the `CEREG: 1` before `CEREG: 2`, and remember
the state as searching (2) instead of home (1), which can cause trouble
connecting because of waiting for state to go home which would never
happen again.

This fixes that problem by merging all the regexes together, so the
parsing should properly process the events in matching order in
parse_unsolicited()

Unfortunately changing the regex like this means that
mm_3gpp_parse_creg_response() match info handling also needs to be
reworked: matches number are increased for each regex, so we can
reliably know which regex was matched based on match count.
This is actually cleaner than the old approach that just guessed if nth
field with "item_is_lac_not_stat()", but requires careful testing.

This was validated checking that tests fail if any of the indices is
changed by iterating over them all and running the test:
grep -n 'n_matches -' src/mm-modem-helpers.c | sed -e 's/:.*//' \
	| while read lineno; do
		echo $lineno
		git show HEAD:src/mm-modem-helpers.c \
			| awk -v l=$lineno '{ if (NR == l) {
					print $1,$2,$3,$4,$5 - 1,";"
				} else {
					print
			}}' > src/mm-modem-helpers.c
		ninja -C build src/tests/test-modem-helpers || break
		build/src/tests/test-modem-helpers && break
	done

A test case was added to make this work, as the Samsung Wave S8500
sample 'act' doesn't seem to actually be a technology value?

(case 36/42 could actually be merged but were kept separate on purpose
for easier maintenance/testing)

Fixes: #1087
Signed-off-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
2026-09-08 18:51:58 +02:00
Aleksander Morgado dd54145d71 ussd: quote USSD command to prevent AT injection
When sending an unencoded USSD command, the user-supplied string was
spliced directly into the +CUSD AT command. If the string contained
CR or semicolons, it could lead to AT command injection.

Use mm_at_quote_string() to properly quote and escape the USSD
command before sending it.

https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/work_items/1064

Signed-off-by: Aleksander Morgado <aleksandermj@google.com>
2026-07-10 13:43:48 +02:00
Dan Williams 061a9956d0 broadband-modem,pantech: network time broken on UML290
UML290 with firmware L0290VWBB12F.248 doesn't support QMI network
time and crashes when asked for AT network time too quickly after
being plugged in.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2026-01-09 05:59:17 -06:00
Dan Williams f7897daeb5 broadband-modem,iface-modem: move bearer counting to interface and generalize
Allow counting more kinds of bearers than just multiplexed ones.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-07-21 15:11:16 -05:00
Rukun Mao ca4334de94 broadband-modem: exit with error if enable() is called in enabling state
We should not assert. We can error out the latest enabling attempt and let
the previous enabling gracefully reach an end.

Issue log:
"2025-06-22T21:56:52.972448Z NOTICE ModemManager[1842]: <msg> [modem2] state changed (disabled -> enabling)
...
2025-06-22T21:57:53.146572Z ERR ModemManager[1842]: <err> [modem2] port cdc-wdm0 timed out 10 consecutive times, marking modem as invalid
...
2025-06-22T21:57:53.185751Z INFO shill[870]: INFO shill: [modem_info.cc(120)] RemoveModem: /org/freedesktop/ModemManager1/Modem/2
2025-06-22T21:57:53.187595Z INFO ModemManager[1842]: <inf> [modem2] processing user request to enable modem...
"

which led to a crash:
"
0x00007c474ceb979f (libc.so.6 -pthread_kill.c:44)               ??__pthread_kill_implementation
0x00007c474ce6d92c (libc.so.6 -raise.c:26)                      ??raise
0x00007c474ce584aa (libc.so.6 -abort.c:79)                      ??abort
0x00007c474d72b269 (libglib-2.0.so.0 -gtestutils.c:3450)        ??g_assertion_message
0x00007c474d72b2e3 (libglib-2.0.so.0 -gtestutils.c:3476)        ??g_assertion_message_expr
0x00005979074b4b6a (ModemManager -mm-broadband-modem.c)         enable
0x00005979074e3b9c (ModemManager -mm-iface-modem.c:2340)        handle_enable_auth_ready
0x00007c474d591997 (libgio-2.0.so.0 -gtask.c:1309)              g_task_return_now
0x00007c474d590555 (libgio-2.0.so.0 -gtask.c:1378)              g_task_return
0x00005979074a57bd (ModemManager -mm-base-modem.c:2011)         lock_after_authorize_ready
0x00007c474d591997 (libgio-2.0.so.0 -gtask.c:1309)              g_task_return_now
0x00007c474d590555 (libgio-2.0.so.0 -gtask.c:1378)              g_task_return
0x00005979074a3fa8 (ModemManager -mm-base-modem.c:1841)         base_modem_operation_run
...
"

Signed-off-by: Rukun Mao <rmao@google.com>
2025-06-26 20:24:16 +00:00
biemster c30052ffc9 iface-modem: disable unsolicited 3GPP events during quick suspend/resume
This introduces the "terse" mode during quick suspend/resume, right now
it is used by 3GPP interface to disable unsolicited events, but in
future it can be used by other interfaces as well.

This prevents device to wake-up from suspend for each unsolicited while
still allowing to wake up on calls or SMS messages.

Signed-off-by: biemster <biemster@gmail.com>
Signed-off-by: Bhushan Shah <bshah@kde.org>
2025-06-16 08:34:57 -05:00
Dan Williams 5448a85a2b call: allow setting DTMF tone duration at call creation time
Instead of hard-coding a 500ms DTMF tone duration, let applications
use a specific duration at call setup time.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-30 07:59:58 -05:00
Dan Williams 8392f30388 base-call: split AT-specific call code into MMCallAt
Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-30 07:57:50 -05:00
Dan Williams 757df26b29 broadband-modem,modem-helpers: move +CPIN response parsing to modem helpers
Unit test it better, plus remove code duplication in various plugins.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-23 08:31:04 -05:00
Dan Williams 7f014add61 broadband-modem,modem-helpers: generalize call end regex creation
Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-22 08:05:58 -05:00
Daniele Palmas b0589932d7 broadband-modem: support +CGEREP values different than 2
Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
2025-05-19 08:59:00 -05:00
Dan Williams 9c8ec57c24 base-sms: pass SMS default storage at creation time and update as needed
Instead of getting it from the MMIfaceModemMessaging when the
SMS is stored. This flattens dependencies between MMBaseSms and
MMIfaceModemMessaging.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 20:24:37 -05:00
Dan Williams b81f23e24a base-sms,sms-list,iface-messaging: move MMBaseSms creation to MMBroadbandModem class
This commit moves creation of the MMBaseSms objects out of MMSmsList and up
into MMIfaceModemMessaging (which is already a MMBroadbandModem) and
the MMBroadbandModem subclasses themselves.

This flattens the creation of MMBaseSms objects by passing them down
from the object that creates the SMS parts, rather than having a
convoluted callback scheme relying on MMSmsList and MMBaseSms having
direct knowledge of their owning modem.

The goal is to eventually remove usage of MMBaseModem from MMBaseSms
and MMSmsList so that we can test them more easily.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 20:24:37 -05:00
Dan Williams 9830e3955a base-sms,sms-at: split AT-specific SMS code into MMSmsAt
Simplify MMBaseSms (making it easier to use from testcases) by
splitting the AT-specific code into MMSmsAt rather than keeping
it in the base class.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 20:24:37 -05:00
Dan Williams 1283ee8c2a base-sms,iface-modem-messaging: move lock/unlock logic into the interface
Allows us to test things that rely on MMBaseSms more easily..

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 20:24:37 -05:00
Dan Williams 683a33b303 base-sms: determine 3GPP vs. CDMA at creation time
It won't ever change over the lifetime of the BaseSMS.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 20:24:37 -05:00
Dan Williams 1fa21fcc48 base-cbm,cbm-list,iface-cbm: remove usage of MMBaseModem
CBM isn't as complicated as SMS, and the CBM class itself doesn't
need to be overridden by QMI/MBIM/etc. Now that the log parent
and connection binding no longer require MMBaseModem we can flatten
the CBM object creation and remove usage of MMBaseModem.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 20:08:06 -05:00
Dan Williams ec5104c9a8 Move log parent and connection property binding to helper
Continues removing usage of MMBaseModem in a bunch of files
by splitting out bits of its usage to separate interfaces.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 20:08:06 -05:00
Dan Williams b13bdacf38 broadband-modem: close serial ports in dispose
We want ports to be closed as early as possible; so make sure they
are closed in dispose() which is run explicitly by MMDevice when
cleaning up and removing the modem. Otherwise they could stay
open longer than we want, causing problems for suspend/resume.

This caused problems with suspend because cancelling the
MMBaseModem's cancellable triggered an idle handler that held
a reference to the modem, preventing finalize() from running
until after the suspend code was finished, thus preventing
ports from being closed and cleaned up. Closing them in
dispose() handles this.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-08 15:41:10 -05:00
Dan Williams febab17f07 broadband-modem: reload registration info after manual registration
This refreshes operator information after manual registration. QMI and
MBIM implementations return operator info along with registration info
so they handle this easily, while with AT-based devices we must run
additional commands to retrieve that after the manual registration has
finished.

Suggested by: Kirill Buksha <kirill.buksha@axians.rs>
Fixes: https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/971

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-05-01 15:15:29 -05:00
Dan Williams 8cf25a97a1 broadband-modem: detect old Mediatek 62xx chipsets as GSM-capable
They don't necessarily reply to +WS46 but like old Motorola ESX
devices they reply to +CGMM with a known string.

Fixes: https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/980

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-04-23 10:11:22 -05:00
Guido Günther b83df955fa modem: Load current channels on startup
Signed-off-by: Guido Günther <agx@sigxcpu.org>
2025-03-28 20:53:52 +00:00
Guido Günther 2878833f5c modem: Allow to set current channel list
This adds support for setting the channels to override the boot up modem
defaults:

```
  busctl --system call org.freedesktop.ModemManager1 /org/freedesktop/ModemManager1/Modem/0 org.freedesktop.ModemManager1.Modem.CellBroadcast SetChannels 'a(uu)' 1 0 9999
  busctl --system get-property org.freedesktop.ModemManager1 /org/freedesktop/ModemManager1/Modem/0 org.freedesktop.ModemManager1.Modem.CellBroadcast Channels
  a(uu) 1 0 9999
```

Closes: https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/934

Signed-off-by: Guido Günther <agx@sigxcpu.org>
2025-03-28 20:53:52 +00:00
Dan Williams bad4765581 broadband-modem: detect modem modes with +CEREG and +C5GREG
Some AT-based modems like the Quectel Unisoc-based RM500U don't
support the older AT commands we used to detect modes like
AT*CNTI=2 and AT+WS46. Add support for detecting 4G and 5G
with generic commands too.

Fixes: https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/786

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-03-27 23:51:17 +00:00
Dan Williams 57d1f21b36 broadband-modem,iface-modem: don't treat SIM unlocks as hot-swaps
If the old IMSI was unavailable because the SIM was locked, but now
is available because the SIM was unlocked, don't treat the SIM
properties change as a hotswap that may trigger dropping and re-probing
the modem.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-03-23 09:04:42 -05:00
Guido Günther 68933455df treewide: Fix typos
Signed-off-by: Guido Günther <agx@sigxcpu.org>
2025-03-11 23:15:57 +01:00
Dan Williams f014f3843e broadband-modem,cli: slightly bump 3GPP scan timeout; add some cli dbus timeout slack
Add some mmcli D-Bus timeout slack, making them slightly higher than the
ModemManager internal timeout, to ensure the cli doesn't time out the
D-Bus call when MM succeeds.

For 3GPP scan, some modems appear to have internal 5 minute timeouts,
so ensure MM doesn't time out right before the modem returns results:

ModemManager[282578]: <dbg> [1741054422.321400] [ttyUSB2/at] --> 'AT+COPS=?<CR>'
ModemManager[282578]: <wrn> [1741054722.247806] [modem1] failed scanning networks: Serial command timed out
ModemManager[282578]: <dbg> [1741054724.119770] [ttyUSB2/at] <-- '<CR><LF>+COPS: (1,"T-Mobile","T-Mobile","310260",0),,(0,1,2,3,4),(0,1,2)<CR><LF><CR><LF>OK<CR><LF>'

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-03-06 04:52:50 +00:00
Akula Susmitha bf5245bb27 messaging: load default storage from modem during initialization
Signed-off-by: Akula Susmitha <quic_asusmith@quicinc.com>
2025-02-27 15:04:59 +00:00
Aleksander Morgado 781428ddcd iface-modem-firmware: common logic to check for sahara/firehose tags
The logic will exclusively look for the udev tags reporting
sahara/firehose support in the primary control port of each modem
type.
2025-02-21 14:08:50 +00:00
Lukas Voegl 155893ea38 broadband-modem: generic Firehose and Sahara support
Allows setting the renamed `ID_MM_QUALCOMM_FIREHOSE` and
`ID_MM_QUALCOMM_SAHARA` environment variables for all devices.

Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
2025-02-21 14:08:50 +00:00
Aleksander Morgado ef5fe9b8d5 broadband-modem: prefer explicit return to break
Just to make it explicit that there is no more logic running
afterwards.
2025-02-03 10:21:32 +00:00
Aleksander Morgado 4ce23a9ebd broadband-modem: exit with error if enable() while in unknown state
We should not assert if the modem is flagged as invalid but an
outstanding enabling request is processed. Let's exit gracefully and
let the object get properly disposed afterwards.

   (libc.so.6 - pthread_kill.c: 44)         __pthread_kill_implementation
   (libc.so.6 - raise.c: 26)    raise
   (libc.so.6 - abort.c: 79)    abort
   (libglib-2.0.so.0 - gtestutils.c: 3450)  g_assertion_message
   (libglib-2.0.so.0 - gtestutils.c: 3476)  g_assertion_message_expr
   (ModemManager - mm-broadband-modem.c)    enable
   (ModemManager - mm-iface-modem.c: 2340)  handle_enable_auth_ready
   (libgio-2.0.so.0 - gtask.c: 1309)        g_task_return_now
   (libgio-2.0.so.0 - gtask.c: 1378)        g_task_return
   (ModemManager - mm-base-modem.c: 2011)   lock_after_authorize_ready
   (libgio-2.0.so.0 - gtask.c: 1309)        g_task_return_now
   (libgio-2.0.so.0 - gtask.c: 1378)        g_task_return
   (ModemManager - mm-base-modem.c: 1841)   base_modem_operation_run
   (ModemManager - mm-base-modem.c: 764)    state_operation_ready
   (libgio-2.0.so.0 - gtask.c: 1309)        g_task_return_now
   (libgio-2.0.so.0 - gtask.c: 1323)        complete_in_idle_cb
   (libglib-2.0.so.0 - gmain.c: 3460)       g_main_dispatch
   (libglib-2.0.so.0 - gmain.c: 4200)       g_main_context_dispatch
   (libglib-2.0.so.0 - gmain.c: 4276)       g_main_context_iterate
   (libglib-2.0.so.0 - gmain.c: 4479)       g_main_loop_run
   (ModemManager - main.c: 236) main
   (libc.so.6 - libc_start_call_main.h: 58) __libc_start_call_main
   (libc.so.6 - libc-start.c: 360)          __libc_start_main_impl
   (ModemManager + 0x000b8850)              _start
2025-02-03 10:18:19 +00:00
Guido Günther 60357247eb broadband-modem: Add Cell Broadcast implementation
The CBMs are read via unsolicted events for which we register
an event handler.

We don't enable unsolicted events explicitly as this already happens
via the `+CNMI=*,*,2,*,*` whens setting up unsolicted events in
`modem_messaging_enable_unsolicited_events` (ETSI TS 127 005).
2024-12-01 21:41:10 +00:00
Aleksander Morgado 9a76a00095 broadband-modem: don't assert Modem interface skeleton during enabling
There is no guarantee that during an enabling operation the skeleton
for the Modem interface unconditionally exists, e.g. the modem may
have been flagged as invalid and untracked from DBus during the
operation.

Just remove the assertion, because mm_iface_modem_enable() will
already cleanly fail if the skeleton object is not found.

   Thread 0 (crashed),
    0  libc.so.6!__pthread_kill_implementation [pthread_kill.c : 44 + 0x0],
    1  libc.so.6!raise [raise.c : 26 + 0xb],
    2  libc.so.6!abort [abort.c : 79 + 0xa],
    3  libglib-2.0.so.0!g_assertion_message [gtestutils.c : 3450 + 0x5],
    4  libglib-2.0.so.0!g_assertion_message_expr [gtestutils.c : 3476 + 0x14],
    5  ModemManager!enabling_step [mm-broadband-modem.c : 0 + 0x7],
    6  libgio-2.0.so.0!g_task_return_now [gtask.c : 1309 + 0x5],
    7  libgio-2.0.so.0!g_task_return [gtask.c : 1378 + 0x8],
    8  ModemManager!parent_enabling_started_ready [mm-broadband-modem-mbim.c : 3239 + 0xd],
    9  libgio-2.0.so.0!g_task_return_now [gtask.c : 1309 + 0x5],
   10  libgio-2.0.so.0!complete_in_idle_cb [gtask.c : 1323 + 0x5],
   11  libglib-2.0.so.0!g_main_dispatch [gmain.c : 3460 + 0x2],
2024-10-29 18:16:27 +00:00
Aleksander Morgado be668462c0 base-modem: synchronize initialize/enable/disable/sync operations
Each of these now holds an exclusive lock, so all these operations are
synchronized.

This logic can be tested by queing different enable/disable operations
one after the other, e.g.:
  mmcli -m a -d &    --> Disable 1
  sleep 0.2
  mmcli -m a -e &    --> Enable 1
  sleep 0.2
  mmcli -m a -e &    --> Enable 2
  sleep 0.2
  mmcli -m a -d &    --> Disable 2
  sleep 0.2
  mmcli -m a -e &    --> Enable 3
  sleep 0.2
  mmcli -m a -d &    --> Disable 3

This previous sequence produces MM logs as follows:
  <dbg> [1726566352.936025] [modem0] [operation 9] default - disable:  scheduled     --> Disable 1 requested
  <dbg> [1726566352.936399] [modem0] [operation 9] default - disable:  lock acquired --> Disable 1 started
  <dbg> [1726566353.136445] [modem0] [operation 10] default - enable:  scheduled     --> Enable 1 requested
  <dbg> [1726566353.202980] [modem0] [operation 9] default - disable:  lock released --> Disable 1 finished
  <dbg> [1726566353.203526] [modem0] [operation 10] default - enable:  lock acquired --> Enable 1 started
  <dbg> [1726566353.320057] [modem0] [operation 11] default - enable:  scheduled     --> Enable 2 requested
  <dbg> [1726566353.440931] [modem0] [operation 10] default - enable:  lock released --> Enable 1 finished
  <dbg> [1726566353.443238] [modem0] [operation 11] default - enable:  lock acquired --> Enable 2 started
  <dbg> [1726566353.452984] [modem0] [operation 11] default - enable:  lock released --> Enable 2 finished
  <dbg> [1726566353.517512] [modem0] [operation 12] default - disable: scheduled     --> Disable 2 requested
  <dbg> [1726566353.517699] [modem0] [operation 12] default - disable: lock acquired --> Disable 2 started
  <dbg> [1726566353.688695] [modem0] [operation 12] default - disable: lock released --> Disable 2 finished
  <dbg> [1726566353.718237] [modem0] [operation 13] default - enable:  scheduled     --> Enable 3 requested
  <dbg> [1726566353.718417] [modem0] [operation 13] default - enable:  lock acquired --> Enable 3 started
  <dbg> [1726566353.937122] [modem0] [operation 14] default - disable: scheduled     --> Disable 3 requested
  <dbg> [1726566353.970791] [modem0] [operation 13] default - enable:  lock released --> Enable 3 finished
  <dbg> [1726566353.970964] [modem0] [operation 14] default - disable: lock acquired --> Disable 3 started
  <dbg> [1726566354.170938] [modem0] [operation 14] default - disable: lock released --> Disable 3 finished
2024-09-30 07:55:05 +00:00
Aleksander Morgado 8e8e88b75d broadband-modem: update modem state before disabling task is completed
The modem state property update was happening at disabling task context
free time, after the actual task completion has happened.

Avoid wrong assumptions on the modem state value in operations
scheduled after the task completion, in the same way as done in the
enabling sequence.
2024-09-30 07:51:53 +00:00
Aleksander Morgado 17929188d8 broadband-modem: update modem state before enabling task is completed
The modem state property update was happening at enabling task context
free time, after the actual task completion has happened. Due to this,
scheduling a new enable request right after finishing one would end up
with the logic asserting, as the new enable operation would be
scheduled while the modem was still reporting "enabling" state.

  ModemManager[7673]: <inf> [1722359278.131123] [modem0] processing user request to enable modem...
  **
  ERROR:../src/mm-broadband-modem.c:12487:enable: code should not be reached
  Bail out! ERROR:../src/mm-broadband-modem.c:12487:enable: code should not be reached
  Aborted
2024-09-30 07:51:53 +00:00
Lubomir Rintel 5f6b095360 broadband-modem: fix a potential leak in cusd_process_string() error handling
On error, *converted may already be allocated and we need to free it
(but not in case we're returning it from the task).
2024-05-31 10:46:30 +00:00
Aleksander Morgado 9fcff66406 broadband-modem: allow subclassing initial eps bearer cid selection 2024-05-29 09:08:13 +00:00
Aleksander Morgado e7492270c2 broadband-modem: implement setting initial EPS bearer settings 2024-05-29 09:05:22 +00:00
Aleksander Morgado 471656addf broadband-modem: implement loading initial EPS bearer info 2024-05-29 09:05:22 +00:00
Aleksander Morgado 97cab9f37e broadband-modem: implement loading initial EPS bearer settings
The main issue here is how to select the id of the context that is
used for attach in the modem.

We will assume that the lowest cid value for the IP range returned in
the CGDCONT=? test is the one used for the attach context. This
assumption works with modems following the 3GPP specs (with cid=0) and
also in Qualcomm based modems (with cid=1).
2024-05-29 09:05:04 +00:00
Aleksander Morgado 1c919890c6 iface-modem-cdma: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:39 +00:00
Aleksander Morgado 92a89efd02 iface-modem-oma: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:39 +00:00
Aleksander Morgado 0f48695d54 iface-modem-voice: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:38 +00:00
Aleksander Morgado 074277ca1a iface-modem-time: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:38 +00:00
Aleksander Morgado bec62a406c iface-modem-signal: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:38 +00:00
Aleksander Morgado 0a91a6035b iface-modem-simple: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:38 +00:00
Aleksander Morgado cc2f1317b3 iface-modem-sar: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:38 +00:00
Aleksander Morgado 070975736f iface-modem-messaging: use G_DECLARE|DEFINE_INTERFACE() macros 2024-05-06 13:45:38 +00:00