Files
ModemManager/examples/network-scan-python/network-scan-python
Aleksander Morgado fcbffbd123 libmm-glib,3gpp: make MMModem3gppNetwork a boxed type
So that bindings know how to free the list of structs.

This commit ends up triggering an API break in the bindings generated
via GObject introspection, because the methods to access the items of
a MMModem3gppNetwork are no longer treated as Modem3gpp class methods.

E.g. instead of:
  ModemManager.Modem3gpp.network_get_operator_code(network)
We should now do:
  network.get_operator_code()

There is no API break in libmm-glib.
2019-12-13 18:04:02 +01:00

57 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python
# -*- Mode: python; 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 Lesser 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 Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Copyright (C) 2019 Aleksander Morgado <aleksander@aleksander.es>
#
import sys, signal, gi
gi.require_version('ModemManager', '1.0')
from gi.repository import GLib, GObject, Gio, ModemManager
if __name__ == "__main__":
# Process input arguments
if len(sys.argv) != 1:
sys.stderr.write('error: wrong number of arguments\n')
sys.stdout.write('usage: network-scan-python\n')
sys.exit(1)
# Connection to ModemManager
connection = Gio.bus_get_sync (Gio.BusType.SYSTEM, None)
manager = ModemManager.Manager.new_sync (connection, Gio.DBusObjectManagerClientFlags.DO_NOT_AUTO_START, None)
if manager.get_name_owner() is None:
sys.stderr.write('ModemManager not found in bus')
sys.exit(2)
# Iterate modems and scan network with each one by one
for obj in manager.get_objects():
modem3gpp = obj.get_modem_3gpp()
modem3gpp.set_default_timeout(300000)
print('%s: starting network scan...' % modem3gpp.get_object_path())
networks = modem3gpp.scan_sync()
if networks:
for network in networks:
print('%s: %s - %s (%s, %s)' % (
network.get_operator_code(),
network.get_operator_short(),
network.get_operator_short(),
ModemManager.modem_access_technology_build_string_from_mask (network.get_access_technology()),
ModemManager.Modem3gppNetworkAvailability.get_string(network.get_availability())))
else:
print('no networks found')