Files
ModemManager/cli/mmcli-common.h
Aleksander Morgado 1f813c4e96 core: allow identifying devices by a user-provided 'uid'
All ports of the same modem reported by the kernel will all be associated with
a common 'uid' (unique id), which uniquely identifies the physical device. This
logic was already in place, what we do now is avoid calling it  the 'sysfs
path' of the physical device, because we may not want to use that to identify
a device.

This logic now also enables the possibility of "naming" the modems in a unique
way by setting the "ID_MM_PHYSDEV_UID" property in the "usb_device" that owns
all the ports.

E.g. a custom device has 4 modems in 4 different USB ports. The device path of
each USB device will always be the same, so the naming rules could go like this:

    $ vim /usr/lib/udev/rules.d/78-mm-naming.rules

    ACTION!="add|change|move", GOTO="mm_naming_rules_end"
    DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.1", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-1"
    DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.2", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-2"
    DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.3", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-3"
    DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.4", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-4"
    LABEL="mm_naming_rules_end"

Each of the modems found will have a unique UID retrieved from the previous list
of rules. Then, "mmcli" has also been updated to allow using the UID instead of
the modem DBus path or index, e.g.:

    $ sudo mmcli -m USB-MODEM-1
    /org/freedesktop/ModemManager1/Modem/0 (device id '988d83252c0598f670c2d69d5f41e077204a92fd')
      -------------------------
      Hardware |   manufacturer: 'ZTE CORPORATION'
               |          model: 'MF637'
               |       revision: 'BD_W7P673A3F3V1.0.0B04'
               |      supported: 'gsm-umts'
               |        current: 'gsm-umts'
               |   equipment id: '356516027657837'
      -------------------------
      System   |         device: 'USB-MODEM-1'
               |        drivers: 'option'
               |         plugin: 'ZTE'
               |   primary port: 'ttyUSB5'
               |          ports: 'ttyUSB5 (at)'
    ...

    $ sudo mmcli -m USB-MODEM-1 --enable
    ...
2016-09-29 15:41:21 +02:00

114 lines
5.0 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* mmcli -- Control modem status & access information from the command line
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright (C) 2011 Aleksander Morgado <aleksander@gnu.org>
*/
#ifndef _MMCLI_COMMON_H_
#define _MMCLI_COMMON_H_
#include <gio/gio.h>
#define _LIBMM_INSIDE_MMCLI
#include <libmm-glib.h>
void mmcli_get_manager (GDBusConnection *connection,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
MMManager *mmcli_get_manager_finish (GAsyncResult *res);
MMManager *mmcli_get_manager_sync (GDBusConnection *connection);
void mmcli_get_modem (GDBusConnection *connection,
const gchar *modem_str,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
MMObject *mmcli_get_modem_finish (GAsyncResult *res,
MMManager **o_manager);
MMObject *mmcli_get_modem_sync (GDBusConnection *connection,
const gchar *modem_str,
MMManager **o_manager);
void mmcli_get_bearer (GDBusConnection *connection,
const gchar *path_or_index,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
MMBearer *mmcli_get_bearer_finish (GAsyncResult *res,
MMManager **manager,
MMObject **object);
MMBearer *mmcli_get_bearer_sync (GDBusConnection *connection,
const gchar *path_or_index,
MMManager **manager,
MMObject **object);
void mmcli_get_sim (GDBusConnection *connection,
const gchar *path_or_index,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
MMSim *mmcli_get_sim_finish (GAsyncResult *res,
MMManager **manager,
MMObject **object);
MMSim *mmcli_get_sim_sync (GDBusConnection *connection,
const gchar *path_or_index,
MMManager **manager,
MMObject **object);
void mmcli_get_sms (GDBusConnection *connection,
const gchar *path_or_index,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
MMSms *mmcli_get_sms_finish (GAsyncResult *res,
MMManager **manager,
MMObject **object);
MMSms *mmcli_get_sms_sync (GDBusConnection *connection,
const gchar *path_or_index,
MMManager **manager,
MMObject **object);
void mmcli_get_call (GDBusConnection *connection,
const gchar *path_or_index,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
MMCall *mmcli_get_call_finish (GAsyncResult *res,
MMManager **manager,
MMObject **object);
MMCall *mmcli_get_call_sync (GDBusConnection *connection,
const gchar *path_or_index,
MMManager **manager,
MMObject **object);
const gchar *mmcli_get_state_reason_string (MMModemStateChangeReason reason);
GOptionGroup *mmcli_get_common_option_group (void);
const gchar *mmcli_get_common_modem_string (void);
const gchar *mmcli_get_common_bearer_string (void);
const gchar *mmcli_get_common_sim_string (void);
const gchar *mmcli_get_common_sms_string (void);
const gchar *mmcli_get_common_call_string (void);
gchar *mmcli_prefix_newlines (const gchar *prefix,
const gchar *str);
#endif /* _MMCLI_COMMON_H_ */