From 8cd1c1bdb9ba5bfe1b69b4484cc46bdd4720fdb4 Mon Sep 17 00:00:00 2001 From: Lukas Voegl Date: Fri, 15 Sep 2023 12:59:54 +0200 Subject: api,modem: new 'Physdev' property Signed-off-by: Lukas Voegl --- cli/mmcli-common.c | 51 ++++++++++++++-------- cli/mmcli-modem.c | 1 + cli/mmcli-output.c | 1 + cli/mmcli-output.h | 1 + docs/reference/libmm-glib/libmm-glib-sections.txt | 4 ++ .../org.freedesktop.ModemManager1.Modem.xml | 13 ++++++ libmm-glib/mm-modem.c | 48 ++++++++++++++++++++ libmm-glib/mm-modem.h | 3 ++ src/mm-base-manager.c | 8 +++- src/mm-base-modem.c | 26 +++++++++++ src/mm-base-modem.h | 2 + src/mm-broadband-modem-mbim.c | 2 + src/mm-broadband-modem-mbim.h | 1 + src/mm-broadband-modem-qmi.c | 2 + src/mm-broadband-modem-qmi.h | 1 + src/mm-broadband-modem.c | 2 + src/mm-broadband-modem.h | 1 + src/mm-device.c | 27 ++++++++++++ src/mm-device.h | 3 ++ src/mm-iface-modem.c | 11 +++++ src/mm-plugin.c | 1 + src/mm-plugin.h | 1 + src/plugins/altair/mm-broadband-modem-altair-lte.c | 2 + src/plugins/altair/mm-broadband-modem-altair-lte.h | 1 + src/plugins/altair/mm-plugin-altair-lte.c | 2 + src/plugins/anydata/mm-broadband-modem-anydata.c | 2 + src/plugins/anydata/mm-broadband-modem-anydata.h | 1 + src/plugins/anydata/mm-plugin-anydata.c | 3 ++ src/plugins/broadmobi/mm-plugin-broadmobi.c | 3 ++ .../cinterion/mm-broadband-modem-cinterion.c | 2 + .../cinterion/mm-broadband-modem-cinterion.h | 1 + .../cinterion/mm-broadband-modem-mbim-cinterion.c | 2 + .../cinterion/mm-broadband-modem-mbim-cinterion.h | 1 + .../cinterion/mm-broadband-modem-qmi-cinterion.c | 2 + .../cinterion/mm-broadband-modem-qmi-cinterion.h | 1 + src/plugins/cinterion/mm-plugin-cinterion.c | 4 ++ src/plugins/dell/mm-plugin-dell.c | 10 +++++ src/plugins/dlink/mm-plugin-dlink.c | 3 ++ src/plugins/fibocom/mm-broadband-modem-fibocom.c | 2 + src/plugins/fibocom/mm-broadband-modem-fibocom.h | 1 + .../fibocom/mm-broadband-modem-mbim-fibocom.c | 2 + .../fibocom/mm-broadband-modem-mbim-fibocom.h | 1 + .../fibocom/mm-broadband-modem-mbim-xmm-fibocom.c | 2 + .../fibocom/mm-broadband-modem-mbim-xmm-fibocom.h | 1 + src/plugins/fibocom/mm-plugin-fibocom.c | 6 +++ .../foxconn/mm-broadband-modem-mbim-foxconn.c | 2 + .../foxconn/mm-broadband-modem-mbim-foxconn.h | 1 + src/plugins/foxconn/mm-plugin-foxconn.c | 4 ++ src/plugins/generic/mm-plugin-generic.c | 4 ++ src/plugins/gosuncn/mm-plugin-gosuncn.c | 4 ++ src/plugins/haier/mm-plugin-haier.c | 2 + src/plugins/huawei/mm-broadband-modem-huawei.c | 2 + src/plugins/huawei/mm-broadband-modem-huawei.h | 1 + src/plugins/huawei/mm-plugin-huawei.c | 4 ++ src/plugins/icera/mm-broadband-modem-icera.c | 2 + src/plugins/icera/mm-broadband-modem-icera.h | 1 + src/plugins/intel/mm-broadband-modem-mbim-intel.c | 2 + src/plugins/intel/mm-broadband-modem-mbim-intel.h | 1 + src/plugins/intel/mm-plugin-intel.c | 3 ++ src/plugins/iridium/mm-broadband-modem-iridium.c | 2 + src/plugins/iridium/mm-broadband-modem-iridium.h | 1 + src/plugins/iridium/mm-plugin-iridium.c | 2 + src/plugins/linktop/mm-broadband-modem-linktop.c | 2 + src/plugins/linktop/mm-broadband-modem-linktop.h | 1 + src/plugins/linktop/mm-plugin-linktop.c | 2 + .../longcheer/mm-broadband-modem-longcheer.c | 2 + .../longcheer/mm-broadband-modem-longcheer.h | 1 + src/plugins/longcheer/mm-plugin-longcheer.c | 2 + src/plugins/mbm/mm-broadband-modem-mbm.c | 2 + src/plugins/mbm/mm-broadband-modem-mbm.h | 1 + src/plugins/mbm/mm-plugin-mbm.c | 3 ++ src/plugins/motorola/mm-broadband-modem-motorola.c | 2 + src/plugins/motorola/mm-broadband-modem-motorola.h | 1 + src/plugins/motorola/mm-plugin-motorola.c | 2 + src/plugins/mtk/mm-broadband-modem-mtk.c | 2 + src/plugins/mtk/mm-broadband-modem-mtk.h | 1 + src/plugins/mtk/mm-plugin-mtk.c | 2 + src/plugins/nokia/mm-broadband-modem-nokia.c | 2 + src/plugins/nokia/mm-broadband-modem-nokia.h | 1 + src/plugins/nokia/mm-plugin-nokia-icera.c | 2 + src/plugins/nokia/mm-plugin-nokia.c | 2 + .../novatel/mm-broadband-modem-novatel-lte.c | 2 + .../novatel/mm-broadband-modem-novatel-lte.h | 1 + src/plugins/novatel/mm-broadband-modem-novatel.c | 2 + src/plugins/novatel/mm-broadband-modem-novatel.h | 1 + src/plugins/novatel/mm-plugin-novatel-lte.c | 2 + src/plugins/novatel/mm-plugin-novatel.c | 3 ++ src/plugins/option/mm-broadband-modem-hso.c | 2 + src/plugins/option/mm-broadband-modem-hso.h | 1 + src/plugins/option/mm-broadband-modem-option.c | 2 + src/plugins/option/mm-broadband-modem-option.h | 1 + src/plugins/option/mm-plugin-hso.c | 2 + src/plugins/option/mm-plugin-option.c | 2 + src/plugins/pantech/mm-broadband-modem-pantech.c | 2 + src/plugins/pantech/mm-broadband-modem-pantech.h | 1 + src/plugins/pantech/mm-plugin-pantech.c | 3 ++ .../qcom-soc/mm-broadband-modem-qmi-qcom-soc.c | 2 + .../qcom-soc/mm-broadband-modem-qmi-qcom-soc.h | 1 + src/plugins/qcom-soc/mm-plugin-qcom-soc.c | 2 + .../quectel/mm-broadband-modem-mbim-quectel.c | 2 + .../quectel/mm-broadband-modem-mbim-quectel.h | 1 + .../quectel/mm-broadband-modem-qmi-quectel.c | 2 + .../quectel/mm-broadband-modem-qmi-quectel.h | 1 + src/plugins/quectel/mm-broadband-modem-quectel.c | 2 + src/plugins/quectel/mm-broadband-modem-quectel.h | 1 + src/plugins/quectel/mm-plugin-quectel.c | 4 ++ src/plugins/samsung/mm-broadband-modem-samsung.c | 2 + src/plugins/samsung/mm-broadband-modem-samsung.h | 1 + src/plugins/samsung/mm-plugin-samsung.c | 2 + .../sierra/mm-broadband-modem-sierra-icera.c | 2 + .../sierra/mm-broadband-modem-sierra-icera.h | 1 + src/plugins/sierra/mm-broadband-modem-sierra.c | 2 + src/plugins/sierra/mm-broadband-modem-sierra.h | 1 + src/plugins/sierra/mm-plugin-sierra-legacy.c | 3 ++ src/plugins/sierra/mm-plugin-sierra.c | 6 +++ .../simtech/mm-broadband-modem-qmi-simtech.c | 2 + .../simtech/mm-broadband-modem-qmi-simtech.h | 1 + src/plugins/simtech/mm-broadband-modem-simtech.c | 2 + src/plugins/simtech/mm-broadband-modem-simtech.h | 1 + src/plugins/simtech/mm-plugin-simtech.c | 3 ++ src/plugins/telit/mm-broadband-modem-mbim-telit.c | 2 + src/plugins/telit/mm-broadband-modem-mbim-telit.h | 1 + src/plugins/telit/mm-broadband-modem-telit.c | 2 + src/plugins/telit/mm-broadband-modem-telit.h | 1 + src/plugins/telit/mm-plugin-telit.c | 4 ++ src/plugins/thuraya/mm-broadband-modem-thuraya.c | 2 + src/plugins/thuraya/mm-broadband-modem-thuraya.h | 1 + src/plugins/thuraya/mm-plugin-thuraya.c | 2 + src/plugins/tplink/mm-plugin-tplink.c | 3 ++ src/plugins/ublox/mm-broadband-modem-ublox.c | 2 + src/plugins/ublox/mm-broadband-modem-ublox.h | 1 + src/plugins/ublox/mm-plugin-ublox.c | 2 + src/plugins/via/mm-broadband-modem-via.c | 2 + src/plugins/via/mm-broadband-modem-via.h | 1 + src/plugins/via/mm-plugin-via.c | 2 + src/plugins/wavecom/mm-broadband-modem-wavecom.c | 2 + src/plugins/wavecom/mm-broadband-modem-wavecom.h | 1 + src/plugins/wavecom/mm-plugin-wavecom.c | 2 + src/plugins/x22x/mm-broadband-modem-x22x.c | 2 + src/plugins/x22x/mm-broadband-modem-x22x.h | 1 + src/plugins/x22x/mm-plugin-x22x.c | 3 ++ src/plugins/xmm/mm-broadband-modem-mbim-xmm.c | 2 + src/plugins/xmm/mm-broadband-modem-mbim-xmm.h | 1 + src/plugins/xmm/mm-broadband-modem-xmm.c | 2 + src/plugins/xmm/mm-broadband-modem-xmm.h | 1 + src/plugins/zte/mm-broadband-modem-zte-icera.c | 2 + src/plugins/zte/mm-broadband-modem-zte-icera.h | 1 + src/plugins/zte/mm-broadband-modem-zte.c | 1 + src/plugins/zte/mm-broadband-modem-zte.h | 1 + src/plugins/zte/mm-plugin-zte.c | 5 +++ 150 files changed, 446 insertions(+), 19 deletions(-) diff --git a/cli/mmcli-common.c b/cli/mmcli-common.c index 4163f42f..40474932 100644 --- a/cli/mmcli-common.c +++ b/cli/mmcli-common.c @@ -121,6 +121,7 @@ get_object_lookup_info (const gchar *str, const gchar *object_prefix, gchar **object_path, gchar **modem_uid, + gchar **modem_physdev, gboolean *find_any) { gboolean all_numeric; @@ -132,16 +133,19 @@ get_object_lookup_info (const gchar *str, exit (EXIT_FAILURE); } - /* User string may come in four ways: + /* User string may come in five ways: * a) full DBus path * b) object index * c) modem UID (for modem or SIM lookup only) - * d) "any" string (for modem or SIM lookup only) + * c) modem physdev path (for modem lookup only) + * e) "any" string (for modem or SIM lookup only) */ *object_path = NULL; if (modem_uid) *modem_uid = NULL; + if (modem_physdev) + *modem_physdev = NULL; if (find_any) *find_any = FALSE; @@ -174,6 +178,13 @@ get_object_lookup_info (const gchar *str, return; } + /* If starts with / we have the physdev path */ + if (g_str_has_prefix (str, "/")) { + g_debug ("Assuming '%s' is the %s physdev path", str, object_type); + *modem_physdev = g_strdup (str); + return; + } + /* Otherwise we have the UID */ if (modem_uid) { g_debug ("Assuming '%s' is the modem UID", str); @@ -193,6 +204,7 @@ static MMObject * find_modem (MMManager *manager, const gchar *modem_path, const gchar *modem_uid, + const gchar *modem_physdev, gboolean modem_any) { GList *modems; @@ -211,7 +223,8 @@ find_modem (MMManager *manager, if (modem_any || (modem_path && g_str_equal (mm_object_get_path (obj), modem_path)) || - (modem_uid && g_str_equal (mm_modem_get_device (modem), modem_uid))) { + (modem_uid && g_str_equal (mm_modem_get_device (modem), modem_uid)) || + (modem_physdev && g_str_equal (mm_modem_get_physdev (modem), modem_physdev))) { found = g_object_ref (obj); break; } @@ -231,6 +244,7 @@ find_modem (MMManager *manager, typedef struct { gchar *modem_path; gchar *modem_uid; + gchar *modem_physdev; gboolean modem_any; } GetModemContext; @@ -252,6 +266,7 @@ get_modem_context_free (GetModemContext *ctx) { g_free (ctx->modem_path); g_free (ctx->modem_uid); + g_free (ctx->modem_physdev); g_free (ctx); } @@ -283,7 +298,7 @@ get_manager_ready (GDBusConnection *connection, results = g_new (GetModemResults, 1); results->manager = mmcli_get_manager_finish (res); - results->object = find_modem (results->manager, ctx->modem_path, ctx->modem_uid, ctx->modem_any); + results->object = find_modem (results->manager, ctx->modem_path, ctx->modem_uid, ctx->modem_physdev, ctx->modem_any); g_task_return_pointer (task, results, (GDestroyNotify)get_modem_results_free); g_object_unref (task); } @@ -302,8 +317,8 @@ mmcli_get_modem (GDBusConnection *connection, ctx = g_new0 (GetModemContext, 1); get_object_lookup_info (str, "modem", MM_DBUS_MODEM_PREFIX, - &ctx->modem_path, &ctx->modem_uid, &ctx->modem_any); - g_assert (!!ctx->modem_path + !!ctx->modem_uid + ctx->modem_any == 1); + &ctx->modem_path, &ctx->modem_uid, &ctx->modem_physdev, &ctx->modem_any); + g_assert (!!ctx->modem_path + !!ctx->modem_uid + !!ctx->modem_physdev + ctx->modem_any == 1); g_task_set_task_data (task, ctx, (GDestroyNotify) get_modem_context_free); mmcli_get_manager (connection, @@ -321,13 +336,14 @@ mmcli_get_modem_sync (GDBusConnection *connection, MMObject *found; gchar *modem_path = NULL; gchar *modem_uid = NULL; + gchar *modem_physdev = NULL; gboolean modem_any = FALSE; manager = mmcli_get_manager_sync (connection); get_object_lookup_info (str, "modem", MM_DBUS_MODEM_PREFIX, - &modem_path, &modem_uid, &modem_any); - g_assert (!!modem_path + !!modem_uid + modem_any == 1); - found = find_modem (manager, modem_path, modem_uid, modem_any); + &modem_path, &modem_uid, &modem_physdev, &modem_any); + g_assert (!!modem_path + !!modem_uid + !!modem_physdev + modem_any == 1); + found = find_modem (manager, modem_path, modem_uid, modem_physdev, modem_any); if (o_manager) *o_manager = manager; @@ -335,6 +351,7 @@ mmcli_get_modem_sync (GDBusConnection *connection, g_object_unref (manager); g_free (modem_path); g_free (modem_uid); + g_free (modem_physdev); return found; } @@ -592,7 +609,7 @@ mmcli_get_bearer (GDBusConnection *connection, ctx = g_new0 (GetBearerContext, 1); get_object_lookup_info (str, "bearer", MM_DBUS_BEARER_PREFIX, - &ctx->bearer_path, NULL, NULL); + &ctx->bearer_path, NULL, NULL, NULL); g_assert (ctx->bearer_path); g_task_set_task_data (task, ctx, (GDestroyNotify) get_bearer_context_free); @@ -615,7 +632,7 @@ mmcli_get_bearer_sync (GDBusConnection *connection, gchar *bearer_path = NULL; get_object_lookup_info (str, "bearer", MM_DBUS_BEARER_PREFIX, - &bearer_path, NULL, NULL); + &bearer_path, NULL, NULL, NULL); g_assert (bearer_path); manager = mmcli_get_manager_sync (connection); @@ -915,7 +932,7 @@ mmcli_get_sim (GDBusConnection *connection, ctx = g_new0 (GetSimContext, 1); get_object_lookup_info (str, "SIM", MM_DBUS_SIM_PREFIX, - &ctx->sim_path, &ctx->modem_uid, &ctx->sim_any); + &ctx->sim_path, &ctx->modem_uid, NULL, &ctx->sim_any); g_assert (!!ctx->sim_path + !!ctx->modem_uid + ctx->sim_any == 1); g_task_set_task_data (task, ctx, (GDestroyNotify) get_sim_context_free); @@ -940,7 +957,7 @@ mmcli_get_sim_sync (GDBusConnection *connection, gboolean sim_any = FALSE; get_object_lookup_info (str, "SIM", MM_DBUS_SIM_PREFIX, - &sim_path, &modem_uid, &sim_any); + &sim_path, &modem_uid, NULL, &sim_any); g_assert (!!sim_path + !!modem_uid + sim_any == 1); manager = mmcli_get_manager_sync (connection); @@ -1222,7 +1239,7 @@ mmcli_get_sms (GDBusConnection *connection, ctx = g_new0 (GetSmsContext, 1); get_object_lookup_info (str, "SMS", MM_DBUS_SMS_PREFIX, - &ctx->sms_path, NULL, NULL); + &ctx->sms_path, NULL, NULL, NULL); g_task_set_task_data (task, ctx, (GDestroyNotify) get_sms_context_free); mmcli_get_manager (connection, @@ -1244,7 +1261,7 @@ mmcli_get_sms_sync (GDBusConnection *connection, gchar *sms_path = NULL; get_object_lookup_info (str, "SMS", MM_DBUS_SMS_PREFIX, - &sms_path, NULL, NULL); + &sms_path, NULL, NULL, NULL); manager = mmcli_get_manager_sync (connection); modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (manager)); @@ -1485,7 +1502,7 @@ mmcli_get_call (GDBusConnection *connection, ctx = g_new0 (GetCallContext, 1); get_object_lookup_info (str, "call", MM_DBUS_CALL_PREFIX, - &ctx->call_path, NULL, NULL); + &ctx->call_path, NULL, NULL, NULL); g_task_set_task_data (task, ctx, (GDestroyNotify) get_call_context_free); mmcli_get_manager (connection, @@ -1507,7 +1524,7 @@ mmcli_get_call_sync (GDBusConnection *connection, gchar *call_path = NULL; get_object_lookup_info (str, "call", MM_DBUS_CALL_PREFIX, - &call_path, NULL, NULL); + &call_path, NULL, NULL, NULL); manager = mmcli_get_manager_sync (connection); modems = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (manager)); diff --git a/cli/mmcli-modem.c b/cli/mmcli-modem.c index 54ed3414..1375c7b4 100644 --- a/cli/mmcli-modem.c +++ b/cli/mmcli-modem.c @@ -371,6 +371,7 @@ print_modem_info (void) mmcli_output_string (MMC_F_HARDWARE_EQUIPMENT_ID, mm_modem_get_equipment_identifier (ctx->modem)); mmcli_output_string (MMC_F_SYSTEM_DEVICE, mm_modem_get_device (ctx->modem)); + mmcli_output_string (MMC_F_SYSTEM_PHYSDEV, mm_modem_get_physdev (ctx->modem)); mmcli_output_string_array (MMC_F_SYSTEM_DRIVERS, (const gchar **) mm_modem_get_drivers (ctx->modem), FALSE); mmcli_output_string (MMC_F_SYSTEM_PLUGIN, mm_modem_get_plugin (ctx->modem)); mmcli_output_string (MMC_F_SYSTEM_PRIMARY_PORT, mm_modem_get_primary_port (ctx->modem)); diff --git a/cli/mmcli-output.c b/cli/mmcli-output.c index 8c5cf218..151778ef 100644 --- a/cli/mmcli-output.c +++ b/cli/mmcli-output.c @@ -111,6 +111,7 @@ static FieldInfo field_infos[] = { [MMC_F_HARDWARE_CURRENT_CAPABILITIES] = { "modem.generic.current-capabilities", "current", MMC_S_MODEM_HARDWARE, }, [MMC_F_HARDWARE_EQUIPMENT_ID] = { "modem.generic.equipment-identifier", "equipment id", MMC_S_MODEM_HARDWARE, }, [MMC_F_SYSTEM_DEVICE] = { "modem.generic.device", "device", MMC_S_MODEM_SYSTEM, }, + [MMC_F_SYSTEM_PHYSDEV] = { "modem.generic.physdev", "physdev", MMC_S_MODEM_SYSTEM, }, [MMC_F_SYSTEM_DRIVERS] = { "modem.generic.drivers", "drivers", MMC_S_MODEM_SYSTEM, }, [MMC_F_SYSTEM_PLUGIN] = { "modem.generic.plugin", "plugin", MMC_S_MODEM_SYSTEM, }, [MMC_F_SYSTEM_PRIMARY_PORT] = { "modem.generic.primary-port", "primary port", MMC_S_MODEM_SYSTEM, }, diff --git a/cli/mmcli-output.h b/cli/mmcli-output.h index 77c75a67..5e2a3071 100644 --- a/cli/mmcli-output.h +++ b/cli/mmcli-output.h @@ -105,6 +105,7 @@ typedef enum { MMC_F_HARDWARE_EQUIPMENT_ID, /* System section */ MMC_F_SYSTEM_DEVICE, + MMC_F_SYSTEM_PHYSDEV, MMC_F_SYSTEM_DRIVERS, MMC_F_SYSTEM_PLUGIN, MMC_F_SYSTEM_PRIMARY_PORT, diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt index ed2373cf..e4eda2f9 100644 --- a/docs/reference/libmm-glib/libmm-glib-sections.txt +++ b/docs/reference/libmm-glib/libmm-glib-sections.txt @@ -157,6 +157,8 @@ mm_modem_peek_ports mm_modem_get_ports mm_modem_get_device mm_modem_dup_device +mm_modem_get_physdev +mm_modem_dup_physdev mm_modem_get_equipment_identifier mm_modem_dup_equipment_identifier mm_modem_get_device_identifier @@ -2679,6 +2681,8 @@ mm_gdbus_modem_dup_current_bands mm_gdbus_modem_get_current_capabilities mm_gdbus_modem_get_device mm_gdbus_modem_dup_device +mm_gdbus_modem_get_physdev +mm_gdbus_modem_dup_physdev mm_gdbus_modem_get_device_identifier mm_gdbus_modem_dup_device_identifier mm_gdbus_modem_get_drivers diff --git a/introspection/org.freedesktop.ModemManager1.Modem.xml b/introspection/org.freedesktop.ModemManager1.Modem.xml index f68cac05..6631d85c 100644 --- a/introspection/org.freedesktop.ModemManager1.Modem.xml +++ b/introspection/org.freedesktop.ModemManager1.Modem.xml @@ -929,6 +929,19 @@ --> + + +