api,firmware: new UpdateSettings property

This commit is contained in:
Aleksander Morgado
2018-12-09 13:54:31 +01:00
committed by Dan Williams
parent edf8d34939
commit 8e342cf120
16 changed files with 965 additions and 273 deletions

View File

@@ -45,10 +45,15 @@ typedef struct {
static Context *ctx; static Context *ctx;
/* Options */ /* Options */
static gboolean status_flag;
static gboolean list_flag; static gboolean list_flag;
static gchar *select_str; static gchar *select_str;
static GOptionEntry entries[] = { static GOptionEntry entries[] = {
{ "firmware-status", 0, 0, G_OPTION_ARG_NONE, &status_flag,
"Show status of firmware management.",
NULL
},
{ "firmware-list", 0, 0, G_OPTION_ARG_NONE, &list_flag, { "firmware-list", 0, 0, G_OPTION_ARG_NONE, &list_flag,
"List firmware images installed in a given modem", "List firmware images installed in a given modem",
NULL NULL
@@ -84,7 +89,8 @@ mmcli_modem_firmware_options_enabled (void)
if (checked) if (checked)
return !!n_actions; return !!n_actions;
n_actions = (list_flag + n_actions = (status_flag +
list_flag +
!!select_str); !!select_str);
if (n_actions > 1) { if (n_actions > 1) {
@@ -92,6 +98,9 @@ mmcli_modem_firmware_options_enabled (void)
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
if (status_flag)
mmcli_force_sync_operation ();
checked = TRUE; checked = TRUE;
return !!n_actions; return !!n_actions;
} }
@@ -130,6 +139,34 @@ mmcli_modem_firmware_shutdown (void)
context_free (ctx); context_free (ctx);
} }
static void
print_firmware_status (void)
{
MMFirmwareUpdateSettings *update_settings;
const gchar *method = NULL;
const gchar *fastboot_at = NULL;
update_settings = mm_modem_firmware_peek_update_settings (ctx->modem_firmware);
if (update_settings) {
MMModemFirmwareUpdateMethod m;
m = mm_firmware_update_settings_get_method (update_settings);
method = mm_modem_firmware_update_method_get_string (m);
switch (m) {
case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT:
fastboot_at = mm_firmware_update_settings_get_fastboot_at (update_settings);
break;
default:
break;
}
}
mmcli_output_string (MMC_F_FIRMWARE_METHOD, method);
mmcli_output_string (MMC_F_FIRMWARE_FASTBOOT_AT, fastboot_at);
mmcli_output_dump ();
}
static void static void
list_process_reply (MMFirmwareProperties *selected, list_process_reply (MMFirmwareProperties *selected,
GList *result, GList *result,
@@ -205,6 +242,9 @@ get_modem_ready (GObject *source,
ensure_modem_firmware (); ensure_modem_firmware ();
if (status_flag)
g_assert_not_reached ();
/* Request to list images? */ /* Request to list images? */
if (list_flag) { if (list_flag) {
g_debug ("Asynchronously listing firmware images in modem..."); g_debug ("Asynchronously listing firmware images in modem...");
@@ -264,6 +304,13 @@ mmcli_modem_firmware_run_synchronous (GDBusConnection *connection)
ensure_modem_firmware (); ensure_modem_firmware ();
/* Request to get firmware status? */
if (status_flag) {
g_debug ("Printing firmware status...");
print_firmware_status ();
return;
}
/* Request to list firmware images? */ /* Request to list firmware images? */
if (list_flag) { if (list_flag) {
GList *installed = NULL; GList *installed = NULL;

View File

@@ -33,52 +33,53 @@ typedef struct {
} SectionInfo; } SectionInfo;
static SectionInfo section_infos[] = { static SectionInfo section_infos[] = {
[MMC_S_MODEM_GENERAL] = { "General" }, [MMC_S_MODEM_GENERAL] = { "General" },
[MMC_S_MODEM_HARDWARE] = { "Hardware" }, [MMC_S_MODEM_HARDWARE] = { "Hardware" },
[MMC_S_MODEM_SYSTEM] = { "System" }, [MMC_S_MODEM_SYSTEM] = { "System" },
[MMC_S_MODEM_NUMBERS] = { "Numbers" }, [MMC_S_MODEM_NUMBERS] = { "Numbers" },
[MMC_S_MODEM_STATUS] = { "Status" }, [MMC_S_MODEM_STATUS] = { "Status" },
[MMC_S_MODEM_MODES] = { "Modes" }, [MMC_S_MODEM_MODES] = { "Modes" },
[MMC_S_MODEM_BANDS] = { "Bands" }, [MMC_S_MODEM_BANDS] = { "Bands" },
[MMC_S_MODEM_IP] = { "IP" }, [MMC_S_MODEM_IP] = { "IP" },
[MMC_S_MODEM_3GPP] = { "3GPP" }, [MMC_S_MODEM_3GPP] = { "3GPP" },
[MMC_S_MODEM_3GPP_EPS] = { "3GPP EPS" }, [MMC_S_MODEM_3GPP_EPS] = { "3GPP EPS" },
[MMC_S_MODEM_3GPP_SCAN] = { "3GPP scan" }, [MMC_S_MODEM_3GPP_SCAN] = { "3GPP scan" },
[MMC_S_MODEM_3GPP_USSD] = { "3GPP USSD" }, [MMC_S_MODEM_3GPP_USSD] = { "3GPP USSD" },
[MMC_S_MODEM_CDMA] = { "CDMA" }, [MMC_S_MODEM_CDMA] = { "CDMA" },
[MMC_S_MODEM_SIM] = { "SIM" }, [MMC_S_MODEM_SIM] = { "SIM" },
[MMC_S_MODEM_BEARER] = { "Bearer" }, [MMC_S_MODEM_BEARER] = { "Bearer" },
[MMC_S_MODEM_TIME] = { "Time" }, [MMC_S_MODEM_TIME] = { "Time" },
[MMC_S_MODEM_TIMEZONE] = { "Timezone" }, [MMC_S_MODEM_TIMEZONE] = { "Timezone" },
[MMC_S_MODEM_MESSAGING] = { "Messaging" }, [MMC_S_MODEM_MESSAGING] = { "Messaging" },
[MMC_S_MODEM_SIGNAL] = { "Signal" }, [MMC_S_MODEM_SIGNAL] = { "Signal" },
[MMC_S_MODEM_SIGNAL_CDMA1X] = { "CDMA1x" }, [MMC_S_MODEM_SIGNAL_CDMA1X] = { "CDMA1x" },
[MMC_S_MODEM_SIGNAL_EVDO] = { "EV-DO" }, [MMC_S_MODEM_SIGNAL_EVDO] = { "EV-DO" },
[MMC_S_MODEM_SIGNAL_GSM] = { "GSM" }, [MMC_S_MODEM_SIGNAL_GSM] = { "GSM" },
[MMC_S_MODEM_SIGNAL_UMTS] = { "UMTS" }, [MMC_S_MODEM_SIGNAL_UMTS] = { "UMTS" },
[MMC_S_MODEM_SIGNAL_LTE] = { "LTE" }, [MMC_S_MODEM_SIGNAL_LTE] = { "LTE" },
[MMC_S_MODEM_OMA] = { "OMA" }, [MMC_S_MODEM_OMA] = { "OMA" },
[MMC_S_MODEM_OMA_CURRENT] = { "Current session" }, [MMC_S_MODEM_OMA_CURRENT] = { "Current session" },
[MMC_S_MODEM_OMA_PENDING] = { "Pending sessions" }, [MMC_S_MODEM_OMA_PENDING] = { "Pending sessions" },
[MMC_S_MODEM_LOCATION] = { "Location" }, [MMC_S_MODEM_LOCATION] = { "Location" },
[MMC_S_MODEM_LOCATION_3GPP] = { "3GPP" }, [MMC_S_MODEM_LOCATION_3GPP] = { "3GPP" },
[MMC_S_MODEM_LOCATION_GPS] = { "GPS" }, [MMC_S_MODEM_LOCATION_GPS] = { "GPS" },
[MMC_S_MODEM_LOCATION_CDMABS] = { "CDMA BS" }, [MMC_S_MODEM_LOCATION_CDMABS] = { "CDMA BS" },
[MMC_S_MODEM_FIRMWARE] = { "Firmware" }, [MMC_S_MODEM_FIRMWARE] = { "Firmware" },
[MMC_S_BEARER_GENERAL] = { "General" }, [MMC_S_MODEM_FIRMWARE_FASTBOOT] = { "Fastboot settings" },
[MMC_S_BEARER_STATUS] = { "Status" }, [MMC_S_BEARER_GENERAL] = { "General" },
[MMC_S_BEARER_PROPERTIES] = { "Properties" }, [MMC_S_BEARER_STATUS] = { "Status" },
[MMC_S_BEARER_IPV4_CONFIG] = { "IPv4 configuration" }, [MMC_S_BEARER_PROPERTIES] = { "Properties" },
[MMC_S_BEARER_IPV6_CONFIG] = { "IPv6 configuration" }, [MMC_S_BEARER_IPV4_CONFIG] = { "IPv4 configuration" },
[MMC_S_BEARER_STATS] = { "Statistics" }, [MMC_S_BEARER_IPV6_CONFIG] = { "IPv6 configuration" },
[MMC_S_CALL_GENERAL] = { "General" }, [MMC_S_BEARER_STATS] = { "Statistics" },
[MMC_S_CALL_PROPERTIES] = { "Properties" }, [MMC_S_CALL_GENERAL] = { "General" },
[MMC_S_CALL_AUDIO_FORMAT] = { "Audio format" }, [MMC_S_CALL_PROPERTIES] = { "Properties" },
[MMC_S_SMS_GENERAL] = { "General" }, [MMC_S_CALL_AUDIO_FORMAT] = { "Audio format" },
[MMC_S_SMS_CONTENT] = { "Content" }, [MMC_S_SMS_GENERAL] = { "General" },
[MMC_S_SMS_PROPERTIES] = { "Properties" }, [MMC_S_SMS_CONTENT] = { "Content" },
[MMC_S_SIM_GENERAL] = { "General" }, [MMC_S_SMS_PROPERTIES] = { "Properties" },
[MMC_S_SIM_PROPERTIES] = { "Properties" }, [MMC_S_SIM_GENERAL] = { "General" },
[MMC_S_SIM_PROPERTIES] = { "Properties" },
}; };
/******************************************************************************/ /******************************************************************************/
@@ -91,166 +92,168 @@ typedef struct {
} FieldInfo; } FieldInfo;
static FieldInfo field_infos[] = { static FieldInfo field_infos[] = {
[MMC_F_GENERAL_DBUS_PATH] = { "modem.dbus-path", "dbus path", MMC_S_MODEM_GENERAL, }, [MMC_F_GENERAL_DBUS_PATH] = { "modem.dbus-path", "dbus path", MMC_S_MODEM_GENERAL, },
[MMC_F_GENERAL_DEVICE_ID] = { "modem.generic.device-identifier", "device id", MMC_S_MODEM_GENERAL, }, [MMC_F_GENERAL_DEVICE_ID] = { "modem.generic.device-identifier", "device id", MMC_S_MODEM_GENERAL, },
[MMC_F_HARDWARE_MANUFACTURER] = { "modem.generic.manufacturer", "manufacturer", MMC_S_MODEM_HARDWARE, }, [MMC_F_HARDWARE_MANUFACTURER] = { "modem.generic.manufacturer", "manufacturer", MMC_S_MODEM_HARDWARE, },
[MMC_F_HARDWARE_MODEL] = { "modem.generic.model", "model", MMC_S_MODEM_HARDWARE, }, [MMC_F_HARDWARE_MODEL] = { "modem.generic.model", "model", MMC_S_MODEM_HARDWARE, },
[MMC_F_HARDWARE_REVISION] = { "modem.generic.revision", "revision", MMC_S_MODEM_HARDWARE, }, [MMC_F_HARDWARE_REVISION] = { "modem.generic.revision", "revision", MMC_S_MODEM_HARDWARE, },
[MMC_F_HARDWARE_HW_REVISION] = { "modem.generic.hardware-revision", "h/w revision", MMC_S_MODEM_HARDWARE, }, [MMC_F_HARDWARE_HW_REVISION] = { "modem.generic.hardware-revision", "h/w revision", MMC_S_MODEM_HARDWARE, },
[MMC_F_HARDWARE_SUPPORTED_CAPABILITIES] = { "modem.generic.supported-capabilities", "supported", MMC_S_MODEM_HARDWARE, }, [MMC_F_HARDWARE_SUPPORTED_CAPABILITIES] = { "modem.generic.supported-capabilities", "supported", MMC_S_MODEM_HARDWARE, },
[MMC_F_HARDWARE_CURRENT_CAPABILITIES] = { "modem.generic.current-capabilities", "current", MMC_S_MODEM_HARDWARE, }, [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_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_DEVICE] = { "modem.generic.device", "device", MMC_S_MODEM_SYSTEM, },
[MMC_F_SYSTEM_DRIVERS] = { "modem.generic.drivers", "drivers", 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_PLUGIN] = { "modem.generic.plugin", "plugin", MMC_S_MODEM_SYSTEM, },
[MMC_F_SYSTEM_PRIMARY_PORT] = { "modem.generic.primary-port", "primary port", MMC_S_MODEM_SYSTEM, }, [MMC_F_SYSTEM_PRIMARY_PORT] = { "modem.generic.primary-port", "primary port", MMC_S_MODEM_SYSTEM, },
[MMC_F_SYSTEM_PORTS] = { "modem.generic.ports", "ports", MMC_S_MODEM_SYSTEM, }, [MMC_F_SYSTEM_PORTS] = { "modem.generic.ports", "ports", MMC_S_MODEM_SYSTEM, },
[MMC_F_NUMBERS_OWN] = { "modem.generic.own-numbers", "own", MMC_S_MODEM_NUMBERS, }, [MMC_F_NUMBERS_OWN] = { "modem.generic.own-numbers", "own", MMC_S_MODEM_NUMBERS, },
[MMC_F_STATUS_LOCK] = { "modem.generic.unlock-required", "lock", MMC_S_MODEM_STATUS, }, [MMC_F_STATUS_LOCK] = { "modem.generic.unlock-required", "lock", MMC_S_MODEM_STATUS, },
[MMC_F_STATUS_UNLOCK_RETRIES] = { "modem.generic.unlock-retries", "unlock retries", MMC_S_MODEM_STATUS, }, [MMC_F_STATUS_UNLOCK_RETRIES] = { "modem.generic.unlock-retries", "unlock retries", MMC_S_MODEM_STATUS, },
[MMC_F_STATUS_STATE] = { "modem.generic.state", "state", MMC_S_MODEM_STATUS, }, [MMC_F_STATUS_STATE] = { "modem.generic.state", "state", MMC_S_MODEM_STATUS, },
[MMC_F_STATUS_FAILED_REASON] = { "modem.generic.state-failed-reason", "failed reason", MMC_S_MODEM_STATUS, }, [MMC_F_STATUS_FAILED_REASON] = { "modem.generic.state-failed-reason", "failed reason", MMC_S_MODEM_STATUS, },
[MMC_F_STATUS_POWER_STATE] = { "modem.generic.power-state", "power state", MMC_S_MODEM_STATUS, }, [MMC_F_STATUS_POWER_STATE] = { "modem.generic.power-state", "power state", MMC_S_MODEM_STATUS, },
[MMC_F_STATUS_ACCESS_TECH] = { "modem.generic.access-technologies", "access tech", MMC_S_MODEM_STATUS, }, [MMC_F_STATUS_ACCESS_TECH] = { "modem.generic.access-technologies", "access tech", MMC_S_MODEM_STATUS, },
[MMC_F_STATUS_SIGNAL_QUALITY_VALUE] = { "modem.generic.signal-quality.value", "signal quality", MMC_S_MODEM_STATUS, }, [MMC_F_STATUS_SIGNAL_QUALITY_VALUE] = { "modem.generic.signal-quality.value", "signal quality", MMC_S_MODEM_STATUS, },
[MMC_F_STATUS_SIGNAL_QUALITY_RECENT] = { "modem.generic.signal-quality.recent", NULL, MMC_S_UNKNOWN, }, [MMC_F_STATUS_SIGNAL_QUALITY_RECENT] = { "modem.generic.signal-quality.recent", NULL, MMC_S_UNKNOWN, },
[MMC_F_MODES_SUPPORTED] = { "modem.generic.supported-modes", "supported", MMC_S_MODEM_MODES, }, [MMC_F_MODES_SUPPORTED] = { "modem.generic.supported-modes", "supported", MMC_S_MODEM_MODES, },
[MMC_F_MODES_CURRENT] = { "modem.generic.current-modes", "current", MMC_S_MODEM_MODES, }, [MMC_F_MODES_CURRENT] = { "modem.generic.current-modes", "current", MMC_S_MODEM_MODES, },
[MMC_F_BANDS_SUPPORTED] = { "modem.generic.supported-bands", "supported", MMC_S_MODEM_BANDS, }, [MMC_F_BANDS_SUPPORTED] = { "modem.generic.supported-bands", "supported", MMC_S_MODEM_BANDS, },
[MMC_F_BANDS_CURRENT] = { "modem.generic.current-bands", "current", MMC_S_MODEM_BANDS, }, [MMC_F_BANDS_CURRENT] = { "modem.generic.current-bands", "current", MMC_S_MODEM_BANDS, },
[MMC_F_IP_SUPPORTED] = { "modem.generic.supported-ip-families", "supported", MMC_S_MODEM_IP, }, [MMC_F_IP_SUPPORTED] = { "modem.generic.supported-ip-families", "supported", MMC_S_MODEM_IP, },
[MMC_F_3GPP_IMEI] = { "modem.3gpp.imei", "imei", MMC_S_MODEM_3GPP, }, [MMC_F_3GPP_IMEI] = { "modem.3gpp.imei", "imei", MMC_S_MODEM_3GPP, },
[MMC_F_3GPP_ENABLED_LOCKS] = { "modem.3gpp.enabled-locks", "enabled locks", MMC_S_MODEM_3GPP, }, [MMC_F_3GPP_ENABLED_LOCKS] = { "modem.3gpp.enabled-locks", "enabled locks", MMC_S_MODEM_3GPP, },
[MMC_F_3GPP_OPERATOR_ID] = { "modem.3gpp.operator-code", "operator id", MMC_S_MODEM_3GPP, }, [MMC_F_3GPP_OPERATOR_ID] = { "modem.3gpp.operator-code", "operator id", MMC_S_MODEM_3GPP, },
[MMC_F_3GPP_OPERATOR_NAME] = { "modem.3gpp.operator-name", "operator name", MMC_S_MODEM_3GPP, }, [MMC_F_3GPP_OPERATOR_NAME] = { "modem.3gpp.operator-name", "operator name", MMC_S_MODEM_3GPP, },
[MMC_F_3GPP_REGISTRATION] = { "modem.3gpp.registration-state", "registration", MMC_S_MODEM_3GPP, }, [MMC_F_3GPP_REGISTRATION] = { "modem.3gpp.registration-state", "registration", MMC_S_MODEM_3GPP, },
[MMC_F_3GPP_PCO] = { "modem.3gpp.pco", "pco", MMC_S_MODEM_3GPP, }, [MMC_F_3GPP_PCO] = { "modem.3gpp.pco", "pco", MMC_S_MODEM_3GPP, },
[MMC_F_3GPP_EPS_UE_MODE] = { "modem.3gpp.eps.ue-mode-operation", "ue mode of operation", MMC_S_MODEM_3GPP_EPS, }, [MMC_F_3GPP_EPS_UE_MODE] = { "modem.3gpp.eps.ue-mode-operation", "ue mode of operation", MMC_S_MODEM_3GPP_EPS, },
[MMC_F_3GPP_EPS_INITIAL_BEARER_PATH] = { "modem.3gpp.eps.initial-bearer.dbus-path", "initial bearer dbus path", MMC_S_MODEM_3GPP_EPS, }, [MMC_F_3GPP_EPS_INITIAL_BEARER_PATH] = { "modem.3gpp.eps.initial-bearer.dbus-path", "initial bearer dbus path", MMC_S_MODEM_3GPP_EPS, },
[MMC_F_3GPP_EPS_BEARER_SETTINGS_APN] = { "modem.3gpp.eps.initial-bearer.settings.apn", "initial bearer apn", MMC_S_MODEM_3GPP_EPS, }, [MMC_F_3GPP_EPS_BEARER_SETTINGS_APN] = { "modem.3gpp.eps.initial-bearer.settings.apn", "initial bearer apn", MMC_S_MODEM_3GPP_EPS, },
[MMC_F_3GPP_EPS_BEARER_SETTINGS_IP_TYPE] = { "modem.3gpp.eps.initial-bearer.settings.ip-type", "initial bearer ip type", MMC_S_MODEM_3GPP_EPS, }, [MMC_F_3GPP_EPS_BEARER_SETTINGS_IP_TYPE] = { "modem.3gpp.eps.initial-bearer.settings.ip-type", "initial bearer ip type", MMC_S_MODEM_3GPP_EPS, },
[MMC_F_3GPP_EPS_BEARER_SETTINGS_USER] = { "modem.3gpp.eps.initial-bearer.settings.user", "initial bearer user", MMC_S_MODEM_3GPP_EPS, }, [MMC_F_3GPP_EPS_BEARER_SETTINGS_USER] = { "modem.3gpp.eps.initial-bearer.settings.user", "initial bearer user", MMC_S_MODEM_3GPP_EPS, },
[MMC_F_3GPP_EPS_BEARER_SETTINGS_PASSWORD] = { "modem.3gpp.eps.initial-bearer.settings.password", "initial bearer password", MMC_S_MODEM_3GPP_EPS, }, [MMC_F_3GPP_EPS_BEARER_SETTINGS_PASSWORD] = { "modem.3gpp.eps.initial-bearer.settings.password", "initial bearer password", MMC_S_MODEM_3GPP_EPS, },
[MMC_F_3GPP_SCAN_NETWORKS] = { "modem.3gpp.scan-networks", "networks", MMC_S_MODEM_3GPP_SCAN, }, [MMC_F_3GPP_SCAN_NETWORKS] = { "modem.3gpp.scan-networks", "networks", MMC_S_MODEM_3GPP_SCAN, },
[MMC_F_3GPP_USSD_STATUS] = { "modem.3gpp.ussd.status", "status", MMC_S_MODEM_3GPP_USSD, }, [MMC_F_3GPP_USSD_STATUS] = { "modem.3gpp.ussd.status", "status", MMC_S_MODEM_3GPP_USSD, },
[MMC_F_3GPP_USSD_NETWORK_REQUEST] = { "modem.3gpp.ussd.network-request", "network request", MMC_S_MODEM_3GPP_USSD, }, [MMC_F_3GPP_USSD_NETWORK_REQUEST] = { "modem.3gpp.ussd.network-request", "network request", MMC_S_MODEM_3GPP_USSD, },
[MMC_F_3GPP_USSD_NETWORK_NOTIFICATION] = { "modem.3gpp.ussd.network-notification", "network notification", MMC_S_MODEM_3GPP_USSD, }, [MMC_F_3GPP_USSD_NETWORK_NOTIFICATION] = { "modem.3gpp.ussd.network-notification", "network notification", MMC_S_MODEM_3GPP_USSD, },
[MMC_F_CDMA_MEID] = { "modem.cdma.meid", "meid", MMC_S_MODEM_CDMA, }, [MMC_F_CDMA_MEID] = { "modem.cdma.meid", "meid", MMC_S_MODEM_CDMA, },
[MMC_F_CDMA_ESN] = { "modem.cdma.esn", "esn", MMC_S_MODEM_CDMA, }, [MMC_F_CDMA_ESN] = { "modem.cdma.esn", "esn", MMC_S_MODEM_CDMA, },
[MMC_F_CDMA_SID] = { "modem.cdma.sid", "sid", MMC_S_MODEM_CDMA, }, [MMC_F_CDMA_SID] = { "modem.cdma.sid", "sid", MMC_S_MODEM_CDMA, },
[MMC_F_CDMA_NID] = { "modem.cdma.nid", "nid", MMC_S_MODEM_CDMA, }, [MMC_F_CDMA_NID] = { "modem.cdma.nid", "nid", MMC_S_MODEM_CDMA, },
[MMC_F_CDMA_REGISTRATION_CDMA1X] = { "modem.cdma.cdma1x-registration-state", "registration cdma1x", MMC_S_MODEM_CDMA, }, [MMC_F_CDMA_REGISTRATION_CDMA1X] = { "modem.cdma.cdma1x-registration-state", "registration cdma1x", MMC_S_MODEM_CDMA, },
[MMC_F_CDMA_REGISTRATION_EVDO] = { "modem.cdma.evdo-registration-state", "registration evdo", MMC_S_MODEM_CDMA, }, [MMC_F_CDMA_REGISTRATION_EVDO] = { "modem.cdma.evdo-registration-state", "registration evdo", MMC_S_MODEM_CDMA, },
[MMC_F_CDMA_ACTIVATION] = { "modem.cdma.activation-state", "activation", MMC_S_MODEM_CDMA, }, [MMC_F_CDMA_ACTIVATION] = { "modem.cdma.activation-state", "activation", MMC_S_MODEM_CDMA, },
[MMC_F_SIM_PATH] = { "modem.generic.sim", "dbus path", MMC_S_MODEM_SIM, }, [MMC_F_SIM_PATH] = { "modem.generic.sim", "dbus path", MMC_S_MODEM_SIM, },
[MMC_F_BEARER_PATHS] = { "modem.generic.bearers", "dbus path", MMC_S_MODEM_BEARER, }, [MMC_F_BEARER_PATHS] = { "modem.generic.bearers", "dbus path", MMC_S_MODEM_BEARER, },
[MMC_F_TIME_CURRENT] = { "modem.time.current", "current", MMC_S_MODEM_TIME, }, [MMC_F_TIME_CURRENT] = { "modem.time.current", "current", MMC_S_MODEM_TIME, },
[MMC_F_TIMEZONE_CURRENT] = { "modem.timezone.current", "current", MMC_S_MODEM_TIMEZONE, }, [MMC_F_TIMEZONE_CURRENT] = { "modem.timezone.current", "current", MMC_S_MODEM_TIMEZONE, },
[MMC_F_TIMEZONE_DST_OFFSET] = { "modem.time.dst-offset", "dst offset", MMC_S_MODEM_TIMEZONE, }, [MMC_F_TIMEZONE_DST_OFFSET] = { "modem.time.dst-offset", "dst offset", MMC_S_MODEM_TIMEZONE, },
[MMC_F_TIMEZONE_LEAP_SECONDS] = { "modem.time.leap-seconds", "leap seconds", MMC_S_MODEM_TIMEZONE, }, [MMC_F_TIMEZONE_LEAP_SECONDS] = { "modem.time.leap-seconds", "leap seconds", MMC_S_MODEM_TIMEZONE, },
[MMC_F_MESSAGING_SUPPORTED_STORAGES] = { "modem.messaging.supported-storages", "supported storages", MMC_S_MODEM_MESSAGING, }, [MMC_F_MESSAGING_SUPPORTED_STORAGES] = { "modem.messaging.supported-storages", "supported storages", MMC_S_MODEM_MESSAGING, },
[MMC_F_MESSAGING_DEFAULT_STORAGES] = { "modem.messaging.default-storages", "default storages", MMC_S_MODEM_MESSAGING, }, [MMC_F_MESSAGING_DEFAULT_STORAGES] = { "modem.messaging.default-storages", "default storages", MMC_S_MODEM_MESSAGING, },
[MMC_F_SIGNAL_REFRESH_RATE] = { "modem.signal.refresh.rate", "refresh rate", MMC_S_MODEM_SIGNAL, }, [MMC_F_SIGNAL_REFRESH_RATE] = { "modem.signal.refresh.rate", "refresh rate", MMC_S_MODEM_SIGNAL, },
[MMC_F_SIGNAL_CDMA1X_RSSI] = { "modem.signal.cdma1x.rssi", "rssi", MMC_S_MODEM_SIGNAL_CDMA1X, }, [MMC_F_SIGNAL_CDMA1X_RSSI] = { "modem.signal.cdma1x.rssi", "rssi", MMC_S_MODEM_SIGNAL_CDMA1X, },
[MMC_F_SIGNAL_CDMA1X_ECIO] = { "modem.signal.cdma1x.ecio", "ecio", MMC_S_MODEM_SIGNAL_CDMA1X, }, [MMC_F_SIGNAL_CDMA1X_ECIO] = { "modem.signal.cdma1x.ecio", "ecio", MMC_S_MODEM_SIGNAL_CDMA1X, },
[MMC_F_SIGNAL_EVDO_RSSI] = { "modem.signal.evdo.rssi", "rssi", MMC_S_MODEM_SIGNAL_EVDO, }, [MMC_F_SIGNAL_EVDO_RSSI] = { "modem.signal.evdo.rssi", "rssi", MMC_S_MODEM_SIGNAL_EVDO, },
[MMC_F_SIGNAL_EVDO_ECIO] = { "modem.signal.evdo.ecio", "ecio", MMC_S_MODEM_SIGNAL_EVDO, }, [MMC_F_SIGNAL_EVDO_ECIO] = { "modem.signal.evdo.ecio", "ecio", MMC_S_MODEM_SIGNAL_EVDO, },
[MMC_F_SIGNAL_EVDO_SINR] = { "modem.signal.evdo.sinr", "sinr", MMC_S_MODEM_SIGNAL_EVDO, }, [MMC_F_SIGNAL_EVDO_SINR] = { "modem.signal.evdo.sinr", "sinr", MMC_S_MODEM_SIGNAL_EVDO, },
[MMC_F_SIGNAL_EVDO_IO] = { "modem.signal.evdo.io", "io", MMC_S_MODEM_SIGNAL_EVDO, }, [MMC_F_SIGNAL_EVDO_IO] = { "modem.signal.evdo.io", "io", MMC_S_MODEM_SIGNAL_EVDO, },
[MMC_F_SIGNAL_GSM_RSSI] = { "modem.signal.gsm.rssi", "rssi", MMC_S_MODEM_SIGNAL_GSM, }, [MMC_F_SIGNAL_GSM_RSSI] = { "modem.signal.gsm.rssi", "rssi", MMC_S_MODEM_SIGNAL_GSM, },
[MMC_F_SIGNAL_UMTS_RSSI] = { "modem.signal.umts.rssi", "rssi", MMC_S_MODEM_SIGNAL_UMTS, }, [MMC_F_SIGNAL_UMTS_RSSI] = { "modem.signal.umts.rssi", "rssi", MMC_S_MODEM_SIGNAL_UMTS, },
[MMC_F_SIGNAL_UMTS_RSCP] = { "modem.signal.umts.rscp", "rscp", MMC_S_MODEM_SIGNAL_UMTS, }, [MMC_F_SIGNAL_UMTS_RSCP] = { "modem.signal.umts.rscp", "rscp", MMC_S_MODEM_SIGNAL_UMTS, },
[MMC_F_SIGNAL_UMTS_ECIO] = { "modem.signal.umts.ecio", "ecio", MMC_S_MODEM_SIGNAL_UMTS, }, [MMC_F_SIGNAL_UMTS_ECIO] = { "modem.signal.umts.ecio", "ecio", MMC_S_MODEM_SIGNAL_UMTS, },
[MMC_F_SIGNAL_LTE_RSSI] = { "modem.signal.lte.rssi", "rssi", MMC_S_MODEM_SIGNAL_LTE, }, [MMC_F_SIGNAL_LTE_RSSI] = { "modem.signal.lte.rssi", "rssi", MMC_S_MODEM_SIGNAL_LTE, },
[MMC_F_SIGNAL_LTE_RSRQ] = { "modem.signal.lte.rsrq", "rsrq", MMC_S_MODEM_SIGNAL_LTE, }, [MMC_F_SIGNAL_LTE_RSRQ] = { "modem.signal.lte.rsrq", "rsrq", MMC_S_MODEM_SIGNAL_LTE, },
[MMC_F_SIGNAL_LTE_RSRP] = { "modem.signal.lte.rsrp", "rsrp", MMC_S_MODEM_SIGNAL_LTE, }, [MMC_F_SIGNAL_LTE_RSRP] = { "modem.signal.lte.rsrp", "rsrp", MMC_S_MODEM_SIGNAL_LTE, },
[MMC_F_SIGNAL_LTE_SNR] = { "modem.signal.lte.snr", "s/n", MMC_S_MODEM_SIGNAL_LTE, }, [MMC_F_SIGNAL_LTE_SNR] = { "modem.signal.lte.snr", "s/n", MMC_S_MODEM_SIGNAL_LTE, },
[MMC_F_OMA_FEATURES] = { "modem.oma.features", "features", MMC_S_MODEM_OMA, }, [MMC_F_OMA_FEATURES] = { "modem.oma.features", "features", MMC_S_MODEM_OMA, },
[MMC_F_OMA_CURRENT_TYPE] = { "modem.oma.current.type", "type", MMC_S_MODEM_OMA_CURRENT, }, [MMC_F_OMA_CURRENT_TYPE] = { "modem.oma.current.type", "type", MMC_S_MODEM_OMA_CURRENT, },
[MMC_F_OMA_CURRENT_STATE] = { "modem.oma.current.state", "state", MMC_S_MODEM_OMA_CURRENT, }, [MMC_F_OMA_CURRENT_STATE] = { "modem.oma.current.state", "state", MMC_S_MODEM_OMA_CURRENT, },
[MMC_F_OMA_PENDING_SESSIONS] = { "modem.oma.pending-sessions", "sessions", MMC_S_MODEM_OMA_PENDING, }, [MMC_F_OMA_PENDING_SESSIONS] = { "modem.oma.pending-sessions", "sessions", MMC_S_MODEM_OMA_PENDING, },
[MMC_F_LOCATION_CAPABILITIES] = { "modem.location.capabilities", "capabilities", MMC_S_MODEM_LOCATION, }, [MMC_F_LOCATION_CAPABILITIES] = { "modem.location.capabilities", "capabilities", MMC_S_MODEM_LOCATION, },
[MMC_F_LOCATION_ENABLED] = { "modem.location.enabled", "enabled", MMC_S_MODEM_LOCATION, }, [MMC_F_LOCATION_ENABLED] = { "modem.location.enabled", "enabled", MMC_S_MODEM_LOCATION, },
[MMC_F_LOCATION_SIGNALS] = { "modem.location.signals", "signals", MMC_S_MODEM_LOCATION, }, [MMC_F_LOCATION_SIGNALS] = { "modem.location.signals", "signals", MMC_S_MODEM_LOCATION, },
[MMC_F_LOCATION_GPS_REFRESH_RATE] = { "modem.location.gps.refresh-rate", "refresh rate", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_REFRESH_RATE] = { "modem.location.gps.refresh-rate", "refresh rate", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_GPS_SUPL_SERVER] = { "modem.location.gps.supl-server", "a-gps supl server", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_SUPL_SERVER] = { "modem.location.gps.supl-server", "a-gps supl server", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_GPS_ASSISTANCE] = { "modem.location.gps.assistance", "supported assistance", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_ASSISTANCE] = { "modem.location.gps.assistance", "supported assistance", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_GPS_ASSISTANCE_SERVERS] = { "modem.location.gps.assistance-servers", "assistance servers", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_ASSISTANCE_SERVERS] = { "modem.location.gps.assistance-servers", "assistance servers", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_3GPP_MCC] = { "modem.location.3gpp.mcc", "operator code", MMC_S_MODEM_LOCATION_3GPP, }, [MMC_F_LOCATION_3GPP_MCC] = { "modem.location.3gpp.mcc", "operator code", MMC_S_MODEM_LOCATION_3GPP, },
[MMC_F_LOCATION_3GPP_MNC] = { "modem.location.3gpp.mnc", "operator name", MMC_S_MODEM_LOCATION_3GPP, }, [MMC_F_LOCATION_3GPP_MNC] = { "modem.location.3gpp.mnc", "operator name", MMC_S_MODEM_LOCATION_3GPP, },
[MMC_F_LOCATION_3GPP_LAC] = { "modem.location.3gpp.lac", "location area code", MMC_S_MODEM_LOCATION_3GPP, }, [MMC_F_LOCATION_3GPP_LAC] = { "modem.location.3gpp.lac", "location area code", MMC_S_MODEM_LOCATION_3GPP, },
[MMC_F_LOCATION_3GPP_TAC] = { "modem.location.3gpp.tac", "tracking area code", MMC_S_MODEM_LOCATION_3GPP, }, [MMC_F_LOCATION_3GPP_TAC] = { "modem.location.3gpp.tac", "tracking area code", MMC_S_MODEM_LOCATION_3GPP, },
[MMC_F_LOCATION_3GPP_CID] = { "modem.location.3gpp.cid", "cell id", MMC_S_MODEM_LOCATION_3GPP, }, [MMC_F_LOCATION_3GPP_CID] = { "modem.location.3gpp.cid", "cell id", MMC_S_MODEM_LOCATION_3GPP, },
[MMC_F_LOCATION_GPS_NMEA] = { "modem.location.gps.nmea", "nmea", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_NMEA] = { "modem.location.gps.nmea", "nmea", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_GPS_UTC] = { "modem.location.gps.utc", "utc", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_UTC] = { "modem.location.gps.utc", "utc", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_GPS_LONG] = { "modem.location.gps.longitude", "longitude", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_LONG] = { "modem.location.gps.longitude", "longitude", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_GPS_LAT] = { "modem.location.gps.latitude", "latitude", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_LAT] = { "modem.location.gps.latitude", "latitude", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_GPS_ALT] = { "modem.location.gps.altitude", "altitude", MMC_S_MODEM_LOCATION_GPS, }, [MMC_F_LOCATION_GPS_ALT] = { "modem.location.gps.altitude", "altitude", MMC_S_MODEM_LOCATION_GPS, },
[MMC_F_LOCATION_CDMABS_LONG] = { "modem.location.cdma-bs.longitude", "longitude", MMC_S_MODEM_LOCATION_CDMABS, }, [MMC_F_LOCATION_CDMABS_LONG] = { "modem.location.cdma-bs.longitude", "longitude", MMC_S_MODEM_LOCATION_CDMABS, },
[MMC_F_LOCATION_CDMABS_LAT] = { "modem.location.cdma-bs.latitude", "latitude", MMC_S_MODEM_LOCATION_CDMABS, }, [MMC_F_LOCATION_CDMABS_LAT] = { "modem.location.cdma-bs.latitude", "latitude", MMC_S_MODEM_LOCATION_CDMABS, },
[MMC_F_FIRMWARE_LIST] = { "modem.firmware-list", "list", MMC_S_MODEM_FIRMWARE, }, [MMC_F_FIRMWARE_LIST] = { "modem.firmware.list", "list", MMC_S_MODEM_FIRMWARE, },
[MMC_F_BEARER_GENERAL_DBUS_PATH] = { "bearer.dbus-path", "dbus path", MMC_S_BEARER_GENERAL, }, [MMC_F_FIRMWARE_METHOD] = { "modem.firmware.method", "method", MMC_S_MODEM_FIRMWARE, },
[MMC_F_BEARER_GENERAL_TYPE] = { "bearer.type", "type", MMC_S_BEARER_GENERAL, }, [MMC_F_FIRMWARE_FASTBOOT_AT] = { "modem.firmware.fastboot.at", "at command", MMC_S_MODEM_FIRMWARE_FASTBOOT, },
[MMC_F_BEARER_STATUS_CONNECTED] = { "bearer.status.connected", "connected", MMC_S_BEARER_STATUS, }, [MMC_F_BEARER_GENERAL_DBUS_PATH] = { "bearer.dbus-path", "dbus path", MMC_S_BEARER_GENERAL, },
[MMC_F_BEARER_STATUS_SUSPENDED] = { "bearer.status.suspended", "suspended", MMC_S_BEARER_STATUS, }, [MMC_F_BEARER_GENERAL_TYPE] = { "bearer.type", "type", MMC_S_BEARER_GENERAL, },
[MMC_F_BEARER_STATUS_INTERFACE] = { "bearer.status.interface", "interface", MMC_S_BEARER_STATUS, }, [MMC_F_BEARER_STATUS_CONNECTED] = { "bearer.status.connected", "connected", MMC_S_BEARER_STATUS, },
[MMC_F_BEARER_STATUS_IP_TIMEOUT] = { "bearer.status.ip-timeout", "ip timeout", MMC_S_BEARER_STATUS, }, [MMC_F_BEARER_STATUS_SUSPENDED] = { "bearer.status.suspended", "suspended", MMC_S_BEARER_STATUS, },
[MMC_F_BEARER_PROPERTIES_APN] = { "bearer.properties.apn", "apn", MMC_S_BEARER_PROPERTIES, }, [MMC_F_BEARER_STATUS_INTERFACE] = { "bearer.status.interface", "interface", MMC_S_BEARER_STATUS, },
[MMC_F_BEARER_PROPERTIES_ROAMING] = { "bearer.properties.roaming", "roaming", MMC_S_BEARER_PROPERTIES, }, [MMC_F_BEARER_STATUS_IP_TIMEOUT] = { "bearer.status.ip-timeout", "ip timeout", MMC_S_BEARER_STATUS, },
[MMC_F_BEARER_PROPERTIES_IP_TYPE] = { "bearer.properties.ip-type", "ip type", MMC_S_BEARER_PROPERTIES, }, [MMC_F_BEARER_PROPERTIES_APN] = { "bearer.properties.apn", "apn", MMC_S_BEARER_PROPERTIES, },
[MMC_F_BEARER_PROPERTIES_USER] = { "bearer.properties.user", "user", MMC_S_BEARER_PROPERTIES, }, [MMC_F_BEARER_PROPERTIES_ROAMING] = { "bearer.properties.roaming", "roaming", MMC_S_BEARER_PROPERTIES, },
[MMC_F_BEARER_PROPERTIES_PASSWORD] = { "bearer.properties.password", "password", MMC_S_BEARER_PROPERTIES, }, [MMC_F_BEARER_PROPERTIES_IP_TYPE] = { "bearer.properties.ip-type", "ip type", MMC_S_BEARER_PROPERTIES, },
[MMC_F_BEARER_PROPERTIES_NUMBER] = { "bearer.properties.number", "number", MMC_S_BEARER_PROPERTIES, }, [MMC_F_BEARER_PROPERTIES_USER] = { "bearer.properties.user", "user", MMC_S_BEARER_PROPERTIES, },
[MMC_F_BEARER_PROPERTIES_RM_PROTOCOL] = { "bearer.properties.rm-protocol", "rm protocol", MMC_S_BEARER_PROPERTIES, }, [MMC_F_BEARER_PROPERTIES_PASSWORD] = { "bearer.properties.password", "password", MMC_S_BEARER_PROPERTIES, },
[MMC_F_BEARER_IPV4_CONFIG_METHOD] = { "bearer.ipv4-config.method", "method", MMC_S_BEARER_IPV4_CONFIG, }, [MMC_F_BEARER_PROPERTIES_NUMBER] = { "bearer.properties.number", "number", MMC_S_BEARER_PROPERTIES, },
[MMC_F_BEARER_IPV4_CONFIG_ADDRESS] = { "bearer.ipv4-config.address", "address", MMC_S_BEARER_IPV4_CONFIG, }, [MMC_F_BEARER_PROPERTIES_RM_PROTOCOL] = { "bearer.properties.rm-protocol", "rm protocol", MMC_S_BEARER_PROPERTIES, },
[MMC_F_BEARER_IPV4_CONFIG_PREFIX] = { "bearer.ipv4-config.prefix", "prefix", MMC_S_BEARER_IPV4_CONFIG, }, [MMC_F_BEARER_IPV4_CONFIG_METHOD] = { "bearer.ipv4-config.method", "method", MMC_S_BEARER_IPV4_CONFIG, },
[MMC_F_BEARER_IPV4_CONFIG_GATEWAY] = { "bearer.ipv4-config.gateway", "gateway", MMC_S_BEARER_IPV4_CONFIG, }, [MMC_F_BEARER_IPV4_CONFIG_ADDRESS] = { "bearer.ipv4-config.address", "address", MMC_S_BEARER_IPV4_CONFIG, },
[MMC_F_BEARER_IPV4_CONFIG_DNS] = { "bearer.ipv4-config.dns", "dns", MMC_S_BEARER_IPV4_CONFIG, }, [MMC_F_BEARER_IPV4_CONFIG_PREFIX] = { "bearer.ipv4-config.prefix", "prefix", MMC_S_BEARER_IPV4_CONFIG, },
[MMC_F_BEARER_IPV4_CONFIG_MTU] = { "bearer.ipv4-config.mtu", "mtu", MMC_S_BEARER_IPV4_CONFIG, }, [MMC_F_BEARER_IPV4_CONFIG_GATEWAY] = { "bearer.ipv4-config.gateway", "gateway", MMC_S_BEARER_IPV4_CONFIG, },
[MMC_F_BEARER_IPV6_CONFIG_METHOD] = { "bearer.ipv6-config.method", "method", MMC_S_BEARER_IPV6_CONFIG, }, [MMC_F_BEARER_IPV4_CONFIG_DNS] = { "bearer.ipv4-config.dns", "dns", MMC_S_BEARER_IPV4_CONFIG, },
[MMC_F_BEARER_IPV6_CONFIG_ADDRESS] = { "bearer.ipv6-config.address", "address", MMC_S_BEARER_IPV6_CONFIG, }, [MMC_F_BEARER_IPV4_CONFIG_MTU] = { "bearer.ipv4-config.mtu", "mtu", MMC_S_BEARER_IPV4_CONFIG, },
[MMC_F_BEARER_IPV6_CONFIG_PREFIX] = { "bearer.ipv6-config.prefix", "prefix", MMC_S_BEARER_IPV6_CONFIG, }, [MMC_F_BEARER_IPV6_CONFIG_METHOD] = { "bearer.ipv6-config.method", "method", MMC_S_BEARER_IPV6_CONFIG, },
[MMC_F_BEARER_IPV6_CONFIG_GATEWAY] = { "bearer.ipv6-config.gateway", "gateway", MMC_S_BEARER_IPV6_CONFIG, }, [MMC_F_BEARER_IPV6_CONFIG_ADDRESS] = { "bearer.ipv6-config.address", "address", MMC_S_BEARER_IPV6_CONFIG, },
[MMC_F_BEARER_IPV6_CONFIG_DNS] = { "bearer.ipv6-config.dns", "dns", MMC_S_BEARER_IPV6_CONFIG, }, [MMC_F_BEARER_IPV6_CONFIG_PREFIX] = { "bearer.ipv6-config.prefix", "prefix", MMC_S_BEARER_IPV6_CONFIG, },
[MMC_F_BEARER_IPV6_CONFIG_MTU] = { "bearer.ipv6-config.mtu", "mtu", MMC_S_BEARER_IPV6_CONFIG, }, [MMC_F_BEARER_IPV6_CONFIG_GATEWAY] = { "bearer.ipv6-config.gateway", "gateway", MMC_S_BEARER_IPV6_CONFIG, },
[MMC_F_BEARER_STATS_DURATION] = { "bearer.stats.duration", "duration", MMC_S_BEARER_STATS, }, [MMC_F_BEARER_IPV6_CONFIG_DNS] = { "bearer.ipv6-config.dns", "dns", MMC_S_BEARER_IPV6_CONFIG, },
[MMC_F_BEARER_STATS_BYTES_RX] = { "bearer.stats.bytes-rx", "bytes rx", MMC_S_BEARER_STATS, }, [MMC_F_BEARER_IPV6_CONFIG_MTU] = { "bearer.ipv6-config.mtu", "mtu", MMC_S_BEARER_IPV6_CONFIG, },
[MMC_F_BEARER_STATS_BYTES_TX] = { "bearer.stats.bytes-tx", "bytes tx", MMC_S_BEARER_STATS, }, [MMC_F_BEARER_STATS_DURATION] = { "bearer.stats.duration", "duration", MMC_S_BEARER_STATS, },
[MMC_F_CALL_GENERAL_DBUS_PATH] = { "call.dbus-path", "dbus path", MMC_S_CALL_GENERAL, }, [MMC_F_BEARER_STATS_BYTES_RX] = { "bearer.stats.bytes-rx", "bytes rx", MMC_S_BEARER_STATS, },
[MMC_F_CALL_PROPERTIES_NUMBER] = { "call.properties.number", "number", MMC_S_CALL_PROPERTIES, }, [MMC_F_BEARER_STATS_BYTES_TX] = { "bearer.stats.bytes-tx", "bytes tx", MMC_S_BEARER_STATS, },
[MMC_F_CALL_PROPERTIES_DIRECTION] = { "call.properties.direction", "direction", MMC_S_CALL_PROPERTIES, }, [MMC_F_CALL_GENERAL_DBUS_PATH] = { "call.dbus-path", "dbus path", MMC_S_CALL_GENERAL, },
[MMC_F_CALL_PROPERTIES_STATE] = { "call.properties.state", "state", MMC_S_CALL_PROPERTIES, }, [MMC_F_CALL_PROPERTIES_NUMBER] = { "call.properties.number", "number", MMC_S_CALL_PROPERTIES, },
[MMC_F_CALL_PROPERTIES_STATE_REASON] = { "call.properties.state-reason", "state reason", MMC_S_CALL_PROPERTIES, }, [MMC_F_CALL_PROPERTIES_DIRECTION] = { "call.properties.direction", "direction", MMC_S_CALL_PROPERTIES, },
[MMC_F_CALL_PROPERTIES_AUDIO_PORT] = { "call.properties.audio-port", "audio port", MMC_S_CALL_PROPERTIES, }, [MMC_F_CALL_PROPERTIES_STATE] = { "call.properties.state", "state", MMC_S_CALL_PROPERTIES, },
[MMC_F_CALL_AUDIO_FORMAT_ENCODING] = { "call.audio-format.encoding", "encoding", MMC_S_CALL_AUDIO_FORMAT, }, [MMC_F_CALL_PROPERTIES_STATE_REASON] = { "call.properties.state-reason", "state reason", MMC_S_CALL_PROPERTIES, },
[MMC_F_CALL_AUDIO_FORMAT_RESOLUTION] = { "call.audio-format.resolution", "resolution", MMC_S_CALL_AUDIO_FORMAT, }, [MMC_F_CALL_PROPERTIES_AUDIO_PORT] = { "call.properties.audio-port", "audio port", MMC_S_CALL_PROPERTIES, },
[MMC_F_CALL_AUDIO_FORMAT_RATE] = { "call.audio-format.rate", "rate", MMC_S_CALL_AUDIO_FORMAT, }, [MMC_F_CALL_AUDIO_FORMAT_ENCODING] = { "call.audio-format.encoding", "encoding", MMC_S_CALL_AUDIO_FORMAT, },
[MMC_F_SMS_GENERAL_DBUS_PATH] = { "sms.dbus-path", "dbus path", MMC_S_SMS_GENERAL, }, [MMC_F_CALL_AUDIO_FORMAT_RESOLUTION] = { "call.audio-format.resolution", "resolution", MMC_S_CALL_AUDIO_FORMAT, },
[MMC_F_SMS_CONTENT_NUMBER] = { "sms.content.number", "number", MMC_S_SMS_CONTENT, }, [MMC_F_CALL_AUDIO_FORMAT_RATE] = { "call.audio-format.rate", "rate", MMC_S_CALL_AUDIO_FORMAT, },
[MMC_F_SMS_CONTENT_TEXT] = { "sms.content.text", "text", MMC_S_SMS_CONTENT, }, [MMC_F_SMS_GENERAL_DBUS_PATH] = { "sms.dbus-path", "dbus path", MMC_S_SMS_GENERAL, },
[MMC_F_SMS_CONTENT_DATA] = { "sms.content.data", "data", MMC_S_SMS_CONTENT, }, [MMC_F_SMS_CONTENT_NUMBER] = { "sms.content.number", "number", MMC_S_SMS_CONTENT, },
[MMC_F_SMS_PROPERTIES_PDU_TYPE] = { "sms.properties.pdu-type", "pdu type", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_CONTENT_TEXT] = { "sms.content.text", "text", MMC_S_SMS_CONTENT, },
[MMC_F_SMS_PROPERTIES_STATE] = { "sms.properties.state", "state", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_CONTENT_DATA] = { "sms.content.data", "data", MMC_S_SMS_CONTENT, },
[MMC_F_SMS_PROPERTIES_VALIDITY] = { "sms.properties.validity", "validity", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_PDU_TYPE] = { "sms.properties.pdu-type", "pdu type", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_STORAGE] = { "sms.properties.storage", "storage", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_STATE] = { "sms.properties.state", "state", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_SMSC] = { "sms.properties.smsc", "smsc", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_VALIDITY] = { "sms.properties.validity", "validity", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_CLASS] = { "sms.properties.class", "class", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_STORAGE] = { "sms.properties.storage", "storage", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_TELESERVICE_ID] = { "sms.properties.teleservice-id", "teleservice id", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_SMSC] = { "sms.properties.smsc", "smsc", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_SERVICE_CATEGORY] = { "sms.properties.service-category", "service category", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_CLASS] = { "sms.properties.class", "class", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_DELIVERY_REPORT] = { "sms.properties.delivery-report", "delivery report", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_TELESERVICE_ID] = { "sms.properties.teleservice-id", "teleservice id", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_MSG_REFERENCE] = { "sms.properties.message-reference", "message reference", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_SERVICE_CATEGORY] = { "sms.properties.service-category", "service category", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_TIMESTAMP] = { "sms.properties.timestamp", "timestamp", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_DELIVERY_REPORT] = { "sms.properties.delivery-report", "delivery report", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_DELIVERY_STATE] = { "sms.properties.delivery-state", "delivery state", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_MSG_REFERENCE] = { "sms.properties.message-reference", "message reference", MMC_S_SMS_PROPERTIES, },
[MMC_F_SMS_PROPERTIES_DISCH_TIMESTAMP] = { "sms.properties.discharge-timestamp", "discharge timestamp", MMC_S_SMS_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_TIMESTAMP] = { "sms.properties.timestamp", "timestamp", MMC_S_SMS_PROPERTIES, },
[MMC_F_SIM_GENERAL_DBUS_PATH] = { "sim.dbus-path", "dbus path", MMC_S_SIM_GENERAL, }, [MMC_F_SMS_PROPERTIES_DELIVERY_STATE] = { "sms.properties.delivery-state", "delivery state", MMC_S_SMS_PROPERTIES, },
[MMC_F_SIM_PROPERTIES_IMSI] = { "sim.properties.imsi", "imsi", MMC_S_SIM_PROPERTIES, }, [MMC_F_SMS_PROPERTIES_DISCH_TIMESTAMP] = { "sms.properties.discharge-timestamp", "discharge timestamp", MMC_S_SMS_PROPERTIES, },
[MMC_F_SIM_PROPERTIES_ICCID] = { "sim.properties.iccid", "iccid", MMC_S_SIM_PROPERTIES, }, [MMC_F_SIM_GENERAL_DBUS_PATH] = { "sim.dbus-path", "dbus path", MMC_S_SIM_GENERAL, },
[MMC_F_SIM_PROPERTIES_OPERATOR_ID] = { "sim.properties.operator-code", "operator id", MMC_S_SIM_PROPERTIES, }, [MMC_F_SIM_PROPERTIES_IMSI] = { "sim.properties.imsi", "imsi", MMC_S_SIM_PROPERTIES, },
[MMC_F_SIM_PROPERTIES_OPERATOR_NAME] = { "sim.properties.operator-name", "operator name", MMC_S_SIM_PROPERTIES, }, [MMC_F_SIM_PROPERTIES_ICCID] = { "sim.properties.iccid", "iccid", MMC_S_SIM_PROPERTIES, },
[MMC_F_MODEM_LIST_DBUS_PATH] = { "modem-list", "modems", MMC_S_UNKNOWN, }, [MMC_F_SIM_PROPERTIES_OPERATOR_ID] = { "sim.properties.operator-code", "operator id", MMC_S_SIM_PROPERTIES, },
[MMC_F_SMS_LIST_DBUS_PATH] = { "modem.messaging.sms", "sms messages", MMC_S_UNKNOWN, }, [MMC_F_SIM_PROPERTIES_OPERATOR_NAME] = { "sim.properties.operator-name", "operator name", MMC_S_SIM_PROPERTIES, },
[MMC_F_CALL_LIST_DBUS_PATH] = { "modem.voice.call", "calls", MMC_S_UNKNOWN, }, [MMC_F_MODEM_LIST_DBUS_PATH] = { "modem-list", "modems", MMC_S_UNKNOWN, },
[MMC_F_SMS_LIST_DBUS_PATH] = { "modem.messaging.sms", "sms messages", MMC_S_UNKNOWN, },
[MMC_F_CALL_LIST_DBUS_PATH] = { "modem.voice.call", "calls", MMC_S_UNKNOWN, },
}; };
/******************************************************************************/ /******************************************************************************/

View File

@@ -62,6 +62,7 @@ typedef enum {
MMC_S_MODEM_LOCATION_GPS, MMC_S_MODEM_LOCATION_GPS,
MMC_S_MODEM_LOCATION_CDMABS, MMC_S_MODEM_LOCATION_CDMABS,
MMC_S_MODEM_FIRMWARE, MMC_S_MODEM_FIRMWARE,
MMC_S_MODEM_FIRMWARE_FASTBOOT,
MMC_S_BEARER_GENERAL, MMC_S_BEARER_GENERAL,
MMC_S_BEARER_STATUS, MMC_S_BEARER_STATUS,
MMC_S_BEARER_PROPERTIES, MMC_S_BEARER_PROPERTIES,
@@ -200,8 +201,10 @@ typedef enum {
MMC_F_LOCATION_GPS_ALT, MMC_F_LOCATION_GPS_ALT,
MMC_F_LOCATION_CDMABS_LONG, MMC_F_LOCATION_CDMABS_LONG,
MMC_F_LOCATION_CDMABS_LAT, MMC_F_LOCATION_CDMABS_LAT,
/* Firmware list */ /* Firmware status section */
MMC_F_FIRMWARE_LIST, MMC_F_FIRMWARE_LIST,
MMC_F_FIRMWARE_METHOD,
MMC_F_FIRMWARE_FASTBOOT_AT,
/* Bearer general section */ /* Bearer general section */
MMC_F_BEARER_GENERAL_DBUS_PATH, MMC_F_BEARER_GENERAL_DBUS_PATH,
MMC_F_BEARER_GENERAL_TYPE, MMC_F_BEARER_GENERAL_TYPE,

View File

@@ -40,6 +40,7 @@ MMModemStateFailedReason
MMModemStateChangeReason MMModemStateChangeReason
MMModemPowerState MMModemPowerState
MMModemPortType MMModemPortType
MMModemFirmwareUpdateMethod
MMOmaFeature MMOmaFeature
MMOmaSessionState MMOmaSessionState
MMOmaSessionStateFailedReason MMOmaSessionStateFailedReason

View File

@@ -116,6 +116,7 @@
<title>Firmware support</title> <title>Firmware support</title>
<xi:include href="xml/mm-modem-firmware.xml"/> <xi:include href="xml/mm-modem-firmware.xml"/>
<xi:include href="xml/mm-firmware-properties.xml"/> <xi:include href="xml/mm-firmware-properties.xml"/>
<xi:include href="xml/mm-firmware-update-settings.xml"/>
</section> </section>
<section> <section>
<title>Extended signal information</title> <title>Extended signal information</title>

View File

@@ -684,7 +684,10 @@ mm_modem_firmware_list_sync
mm_modem_firmware_select mm_modem_firmware_select
mm_modem_firmware_select_finish mm_modem_firmware_select_finish
mm_modem_firmware_select_sync mm_modem_firmware_select_sync
mm_modem_firmware_get_update_settings
mm_modem_firmware_peek_update_settings
<SUBSECTION Standard> <SUBSECTION Standard>
MMModemFirmwarePrivate
MMModemFirmwareClass MMModemFirmwareClass
MM_IS_MODEM_FIRMWARE MM_IS_MODEM_FIRMWARE
MM_IS_MODEM_FIRMWARE_CLASS MM_IS_MODEM_FIRMWARE_CLASS
@@ -728,6 +731,30 @@ MM_TYPE_FIRMWARE_PROPERTIES
mm_firmware_properties_get_type mm_firmware_properties_get_type
</SECTION> </SECTION>
<SECTION>
<FILE>mm-firmware-update-settings</FILE>
<TITLE>MMFirmwareUpdateSettings</TITLE>
MMFirmwareUpdateSettings
<SUBSECTION Getters>
mm_firmware_update_settings_get_fastboot_at
mm_firmware_update_settings_get_method
<SUBSECTION Private>
mm_firmware_update_settings_get_variant
mm_firmware_update_settings_new
mm_firmware_update_settings_new_from_variant
mm_firmware_update_settings_set_fastboot_at
<SUBSECTION Standard>
MMFirmwareUpdateSettingsClass
MMFirmwareUpdateSettingsPrivate
MM_FIRMWARE_UPDATE_SETTINGS
MM_FIRMWARE_UPDATE_SETTINGS_CLASS
MM_FIRMWARE_UPDATE_SETTINGS_GET_CLASS
MM_IS_FIRMWARE_UPDATE_SETTINGS
MM_IS_FIRMWARE_UPDATE_SETTINGS_CLASS
MM_TYPE_FIRMWARE_UPDATE_SETTINGS
mm_firmware_update_settings_get_type
</SECTION>
<SECTION> <SECTION>
<FILE>mm-modem-oma</FILE> <FILE>mm-modem-oma</FILE>
<TITLE>MMModemOma</TITLE> <TITLE>MMModemOma</TITLE>
@@ -1423,6 +1450,7 @@ mm_modem_cdma_rm_protocol_get_string
mm_modem_location_source_build_string_from_mask mm_modem_location_source_build_string_from_mask
mm_modem_location_assistance_data_type_build_string_from_mask mm_modem_location_assistance_data_type_build_string_from_mask
mm_modem_contacts_storage_get_string mm_modem_contacts_storage_get_string
mm_modem_firmware_update_method_get_string
mm_sms_pdu_type_get_string mm_sms_pdu_type_get_string
mm_sms_state_get_string mm_sms_state_get_string
mm_sms_delivery_state_get_string mm_sms_delivery_state_get_string
@@ -1480,6 +1508,7 @@ mm_oma_session_state_failed_reason_build_string_from_mask
mm_call_direction_build_string_from_mask mm_call_direction_build_string_from_mask
mm_call_state_build_string_from_mask mm_call_state_build_string_from_mask
mm_call_state_reason_build_string_from_mask mm_call_state_reason_build_string_from_mask
mm_modem_firmware_update_method_build_string_from_mask
<SUBSECTION Standard> <SUBSECTION Standard>
MM_TYPE_BEARER_TYPE MM_TYPE_BEARER_TYPE
MM_TYPE_BEARER_IP_FAMILY MM_TYPE_BEARER_IP_FAMILY
@@ -1522,6 +1551,7 @@ MM_TYPE_OMA_SESSION_TYPE
MM_TYPE_CALL_DIRECTION MM_TYPE_CALL_DIRECTION
MM_TYPE_CALL_STATE MM_TYPE_CALL_STATE
MM_TYPE_CALL_STATE_REASON MM_TYPE_CALL_STATE_REASON
MM_TYPE_MODEM_FIRMWARE_UPDATE_METHOD
mm_bearer_type_get_type mm_bearer_type_get_type
mm_bearer_ip_family_get_type mm_bearer_ip_family_get_type
mm_bearer_ip_method_get_type mm_bearer_ip_method_get_type
@@ -1563,6 +1593,7 @@ mm_oma_session_type_get_type
mm_call_direction_get_type mm_call_direction_get_type
mm_call_state_get_type mm_call_state_get_type
mm_call_state_reason_get_type mm_call_state_reason_get_type
mm_modem_firmware_update_method_get_type
</SECTION> </SECTION>
<SECTION> <SECTION>
@@ -2463,6 +2494,8 @@ mm_gdbus_modem_time_skeleton_get_type
MmGdbusModemFirmware MmGdbusModemFirmware
MmGdbusModemFirmwareIface MmGdbusModemFirmwareIface
<SUBSECTION Getters> <SUBSECTION Getters>
mm_gdbus_modem_firmware_dup_update_settings
mm_gdbus_modem_firmware_get_update_settings
<SUBSECTION Methods> <SUBSECTION Methods>
mm_gdbus_modem_firmware_call_list mm_gdbus_modem_firmware_call_list
mm_gdbus_modem_firmware_call_list_finish mm_gdbus_modem_firmware_call_list_finish
@@ -2471,6 +2504,7 @@ mm_gdbus_modem_firmware_call_select
mm_gdbus_modem_firmware_call_select_finish mm_gdbus_modem_firmware_call_select_finish
mm_gdbus_modem_firmware_call_select_sync mm_gdbus_modem_firmware_call_select_sync
<SUBSECTION Private> <SUBSECTION Private>
mm_gdbus_modem_firmware_set_update_settings
mm_gdbus_modem_firmware_complete_list mm_gdbus_modem_firmware_complete_list
mm_gdbus_modem_firmware_complete_select mm_gdbus_modem_firmware_complete_select
mm_gdbus_modem_firmware_interface_info mm_gdbus_modem_firmware_interface_info

View File

@@ -1403,4 +1403,16 @@ typedef enum { /*< underscore_name=mm_call_direction >*/
MM_CALL_DIRECTION_OUTGOING = 2 MM_CALL_DIRECTION_OUTGOING = 2
} MMCallDirection; } MMCallDirection;
/**
* MMModemFirmwareUpdateMethod:
* @MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN: Unknown method.
* @MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT: Device supports fastboot-based update.
*
* Type of firmware update method supported by the module.
*/
typedef enum { /*< underscore_name=mm_modem_firmware_update_method >*/
MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN,
MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT,
} MMModemFirmwareUpdateMethod;
#endif /* _MODEMMANAGER_ENUMS_H_ */ #endif /* _MODEMMANAGER_ENUMS_H_ */

View File

@@ -6,6 +6,7 @@
Copyright (C) 2011-2013 Red Hat, Inc. Copyright (C) 2011-2013 Red Hat, Inc.
Copyright (C) 2011-2013 Google, Inc. Copyright (C) 2011-2013 Google, Inc.
Copyright (C) 2011-2013 Lanedo GmbH Copyright (C) 2011-2013 Lanedo GmbH
Copyright (C) 2018 Aleksander Morgado <aleksander@aleksander.es>
--> -->
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd"> <node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
@@ -14,67 +15,15 @@
org.freedesktop.ModemManager1.Modem.Firmware: org.freedesktop.ModemManager1.Modem.Firmware:
@short_description: The ModemManager Firmware interface. @short_description: The ModemManager Firmware interface.
This interface allows clients to select or install firmware images on This interface provides access to perform different firmware-related operations
modems. in the modem, including listing the available firmware images in the module and
selecting which of them to use.
Firmware slots and firmware images are identified by arbitrary opaque This interface does not provide direct access to perform firmware updates in
strings. the device. Instead, it exposes information about the expected firmware update
method as well as method-specific details required for the upgrade to happen.
Firmware images are represented as dictionaries of properties. The actual firmware upgrade may be performed via the Linux Vendor Firmware Service
Certain properties are pre-defined, and some are required: and the <link linkend="https://fwupd.org">fwupd</link> daemon.
<variablelist>
<varlistentry><term><literal>"image-type"</literal></term>
<listitem>
(Required) Type of the firmware image, given as a
<link linkend="MMFirmwareImageType">MMFirmwareImageType</link> value
(signature <literal>"u"</literal>). Firmware images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GENERIC:CAPS">MM_FIRMWARE_IMAGE_TYPE_GENERIC</link>
will only expose only the mandatory properties.
</listitem>
</varlistentry>
<varlistentry><term><literal>"unique-id"</literal></term>
<listitem>
(Required) A user-readable unique ID for the firmware image, given as a
string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-pri-version"</literal></term>
<listitem>
(Optional) The version of the PRI firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-pri-info"</literal></term>
<listitem>
(Optional) Additional information of the PRI image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-boot-version"</literal></term>
<listitem>
(Optional) The boot version of the PRI firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-pri-unique-id"</literal></term>
<listitem>
(Optional) The unique ID of the PRI firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-modem-unique-id"</literal></term>
<listitem>
(Optional) The unique ID of the Modem firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
</variablelist>
--> -->
<interface name="org.freedesktop.ModemManager1.Modem.Firmware"> <interface name="org.freedesktop.ModemManager1.Modem.Firmware">
@@ -85,13 +34,67 @@
List installed firmware images. List installed firmware images.
Depending on the type of modem, installed images may be stored on the Firmware slots and firmware images are identified by arbitrary opaque
host or the modem. strings.
Installed images can be selected non-destructively. Firmware images are represented as dictionaries of properties.
Certain properties are pre-defined, and some are required:
<variablelist>
<varlistentry><term><literal>"image-type"</literal></term>
<listitem>
(Required) Type of the firmware image, given as a
<link linkend="MMFirmwareImageType">MMFirmwareImageType</link> value
(signature <literal>"u"</literal>). Firmware images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GENERIC:CAPS">MM_FIRMWARE_IMAGE_TYPE_GENERIC</link>
will only expose only the mandatory properties.
</listitem>
</varlistentry>
<varlistentry><term><literal>"unique-id"</literal></term>
<listitem>
(Required) A user-readable unique ID for the firmware image, given as a
string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-pri-version"</literal></term>
<listitem>
(Optional) The version of the PRI firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-pri-info"</literal></term>
<listitem>
(Optional) Additional information of the PRI image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-boot-version"</literal></term>
<listitem>
(Optional) The boot version of the PRI firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-pri-unique-id"</literal></term>
<listitem>
(Optional) The unique ID of the PRI firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
<varlistentry><term><literal>"gobi-modem-unique-id"</literal></term>
<listitem>
(Optional) The unique ID of the Modem firmware image, in images of type
<link linkend="MM-FIRMWARE-IMAGE-TYPE-GOBI:CAPS">MM_FIRMWARE_IMAGE_TYPE_GOBI</link>,
given as a string value (signature <literal>"s"</literal>).
</listitem>
</varlistentry>
</variablelist>
--> -->
<method name="List"> <method name="List">
<arg name="selected" type="s" direction="out" /> <arg name="selected" type="s" direction="out" />
<arg name="installed" type="aa{sv}" direction="out" /> <arg name="installed" type="aa{sv}" direction="out" />
</method> </method>
@@ -106,10 +109,43 @@
returned by returned by
<link linkend="gdbus-method-org-freedesktop-ModemManager1-Modem-Firmware.List">List()</link>, <link linkend="gdbus-method-org-freedesktop-ModemManager1-Modem-Firmware.List">List()</link>,
or if the image could not be selected for some reason. or if the image could not be selected for some reason.
Installed images can be selected non-destructively.
--> -->
<method name="Select"> <method name="Select">
<arg name="uniqueid" type="s" direction="in" /> <arg name="uniqueid" type="s" direction="in" />
</method> </method>
<!--
UpdateSettings:
Detailed settings that provide information about how the module should be
updated.
The settings are given as a <link linkend="MMModemFirmwareUpdateMethod">MMModemFirmwareUpdateMethod</link>
value specifying the type of firmware update procedure expected followed by a
dictionary that includes other parameters applicable to the specific method.
<variablelist>
<varlistentry><term><link linkend="MM-MODEM-FIRMWARE-UPDATE-METHOD-FASTBOOT:CAPS">MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT</link></term>
<listitem>
<para>
Devices supporting the fastboot firmware update method require exposing the
following additional settings:
</para>
<variablelist>
<varlistentry><term><literal>"fastboot-at"</literal></term>
<listitem>
(Required) This property exposes the AT command that should be sent to the
module to trigger a reset into fastboot mode (signature <literal>'s'</literal>)
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
</variablelist>
-->
<property name="UpdateSettings" type="(ua{sv})" access="read" />
</interface> </interface>
</node> </node>

View File

@@ -77,6 +77,8 @@ libmm_glib_la_SOURCES = \
mm-network-timezone.c \ mm-network-timezone.c \
mm-firmware-properties.h \ mm-firmware-properties.h \
mm-firmware-properties.c \ mm-firmware-properties.c \
mm-firmware-update-settings.h \
mm-firmware-update-settings.c \
mm-cdma-manual-activation-properties.h \ mm-cdma-manual-activation-properties.h \
mm-cdma-manual-activation-properties.c \ mm-cdma-manual-activation-properties.c \
mm-signal.h \ mm-signal.h \
@@ -153,6 +155,7 @@ include_HEADERS = \
mm-unlock-retries.h \ mm-unlock-retries.h \
mm-network-timezone.h \ mm-network-timezone.h \
mm-firmware-properties.h \ mm-firmware-properties.h \
mm-firmware-update-settings.h \
mm-cdma-manual-activation-properties.h \ mm-cdma-manual-activation-properties.h \
mm-signal.h \ mm-signal.h \
mm-kernel-event-properties.h \ mm-kernel-event-properties.h \

View File

@@ -75,6 +75,7 @@
#include <mm-unlock-retries.h> #include <mm-unlock-retries.h>
#include <mm-network-timezone.h> #include <mm-network-timezone.h>
#include <mm-firmware-properties.h> #include <mm-firmware-properties.h>
#include <mm-firmware-update-settings.h>
#include <mm-cdma-manual-activation-properties.h> #include <mm-cdma-manual-activation-properties.h>
#include <mm-signal.h> #include <mm-signal.h>
#include <mm-kernel-event-properties.h> #include <mm-kernel-event-properties.h>

View File

@@ -0,0 +1,259 @@
/* -*- Mode: C; 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 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:
*
* Copyright (C) 2018 Aleksander Morgado <aleksander@aleksander.es>
*/
#include <string.h>
#include "mm-errors-types.h"
#include "mm-common-helpers.h"
#include "mm-firmware-update-settings.h"
/**
* SECTION: mm-firmware-update-settings
* @title: MMFirmwareUpdateSettings
* @short_description: Helper object to handle firmware update settings.
*
* The #MMFirmwareUpdateSettings is an object handling the settings exposed to
* aid in the firmware update operation.
*/
G_DEFINE_TYPE (MMFirmwareUpdateSettings, mm_firmware_update_settings, G_TYPE_OBJECT)
#define PROPERTY_FASTBOOT_AT "fastboot-at"
struct _MMFirmwareUpdateSettingsPrivate {
MMModemFirmwareUpdateMethod method;
/* Fasboot specific */
gchar *fastboot_at;
};
/*****************************************************************************/
/**
* mm_firmware_update_settings_get_method:
* @self: A #MMFirmwareUpdateSettings.
*
* Gets the method to use during the firmware update operation.
*
* Returns: a #MMModemFirmwareUpdateMethod.
*/
MMModemFirmwareUpdateMethod
mm_firmware_update_settings_get_method (MMFirmwareUpdateSettings *self)
{
g_return_val_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self), MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN);
return self->priv->method;
}
/*****************************************************************************/
/**
* mm_firmware_update_settings_get_fastboot_at:
* @self: a #MMFirmwareUpdateSettings.
*
* Gets the AT command that should be sent to the module to trigger a reset
* into fastboot mode.
*
* Only applicable if the update method is %MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT.
*
* Returns: The AT command string, or %NULL if unknown. Do not free the returned value, it is owned by @self.
*/
const gchar *
mm_firmware_update_settings_get_fastboot_at (MMFirmwareUpdateSettings *self)
{
g_return_val_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self), NULL);
g_return_val_if_fail (self->priv->method == MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT, NULL);
return self->priv->fastboot_at;
}
void
mm_firmware_update_settings_set_fastboot_at (MMFirmwareUpdateSettings *self,
const gchar *fastboot_at)
{
g_return_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self));
g_return_if_fail (self->priv->method == MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT);
g_free (self->priv->fastboot_at);
self->priv->fastboot_at = g_strdup (fastboot_at);
}
/*****************************************************************************/
/**
* mm_firmware_update_settings_get_variant:
* @self: A #MMFirmwareUpdateSettings.
*
* Gets a variant with the contents of @self.
*
* Returns: (transfer full): A variant with the update settings. The returned value should be freed with g_variant_unref().
*/
GVariant *
mm_firmware_update_settings_get_variant (MMFirmwareUpdateSettings *self)
{
MMModemFirmwareUpdateMethod method;
GVariantBuilder builder;
method = (self ? self->priv->method : MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN);
g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ua{sv})"));
g_variant_builder_add (&builder, "u", method);
switch (method) {
case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT:
g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}"));
g_variant_builder_add (&builder,
"{sv}",
PROPERTY_FASTBOOT_AT,
g_variant_new_string (self->priv->fastboot_at));
g_variant_builder_close (&builder);
break;
default:
break;
}
return g_variant_ref_sink (g_variant_builder_end (&builder));
}
/*****************************************************************************/
static gboolean
consume_variant (MMFirmwareUpdateSettings *self,
const gchar *key,
GVariant *value,
GError **error)
{
if (g_str_equal (key, PROPERTY_FASTBOOT_AT)) {
g_free (self->priv->fastboot_at);
self->priv->fastboot_at = g_variant_dup_string (value, NULL);
} else {
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS,
"Invalid settings dictionary, unexpected key '%s'", key);
return FALSE;
}
return TRUE;
}
/**
* mm_firmware_update_settings_new_from_variant:
* @variant: A variant with the update settings.
* @error: Return location for error or %NULL.
*
* Creates a new #MMFirmwareUpdateSettings from the input @variant.
*
* Returns: (transfer full): A #MMFirmwareUpdateSettings or %NULL if @error is set. The returned value should be freed with g_object_unref().
*/
MMFirmwareUpdateSettings *
mm_firmware_update_settings_new_from_variant (GVariant *variant,
GError **error)
{
MMFirmwareUpdateSettings *self;
guint method = MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN;
GVariant *dictionary = NULL;
GError *inner_error = NULL;
if (!variant) {
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS,
"No input given");
return NULL;
}
if (!g_variant_is_of_type (variant, G_VARIANT_TYPE ("(ua{sv})"))) {
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS,
"Invalid input type");
return NULL;
}
g_variant_get (variant, "(u@a{sv})", &method, &dictionary);
self = mm_firmware_update_settings_new (method);
if (dictionary) {
GVariantIter iter;
gchar *key;
GVariant *value;
g_variant_iter_init (&iter, dictionary);
while (!inner_error && g_variant_iter_next (&iter, "{sv}", &key, &value)) {
consume_variant (self, key, value, &inner_error);
g_free (key);
g_variant_unref (value);
}
if (!inner_error) {
switch (method) {
case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT:
if (!self->priv->fastboot_at)
inner_error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS,
"Fastboot method requires the '" PROPERTY_FASTBOOT_AT "' setting");
break;
}
}
g_variant_unref (dictionary);
}
if (inner_error) {
g_propagate_error (error, inner_error);
g_object_unref (self);
return NULL;
}
return self;
}
/*****************************************************************************/
/**
* mm_firmware_update_settings_new:
* @method: A #MMModemFirmwareUpdateMethod specifying the update method.
*
* Creates a new #MMFirmwareUpdateSettings object.
*
* Returns: (transfer full): A #MMFirmwareUpdateSettings. The returned value should be freed with g_object_unref().
*/
MMFirmwareUpdateSettings *
mm_firmware_update_settings_new (MMModemFirmwareUpdateMethod method)
{
MMFirmwareUpdateSettings *self;
self = g_object_new (MM_TYPE_FIRMWARE_UPDATE_SETTINGS, NULL);
self->priv->method = method;
return self;
}
static void
mm_firmware_update_settings_init (MMFirmwareUpdateSettings *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_FIRMWARE_UPDATE_SETTINGS, MMFirmwareUpdateSettingsPrivate);
self->priv->method = MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN;
}
static void
finalize (GObject *object)
{
MMFirmwareUpdateSettings *self = MM_FIRMWARE_UPDATE_SETTINGS (object);
g_free (self->priv->fastboot_at);
G_OBJECT_CLASS (mm_firmware_update_settings_parent_class)->finalize (object);
}
static void
mm_firmware_update_settings_class_init (MMFirmwareUpdateSettingsClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (object_class, sizeof (MMFirmwareUpdateSettingsPrivate));
object_class->finalize = finalize;
}

View File

@@ -0,0 +1,89 @@
/* -*- Mode: C; 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 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:
*
* Copyright (C) 2018 Aleksander Morgado <aleksander@aleksander.es>
*/
#ifndef MM_FIRMWARE_UPDATE_SETTINGS_H
#define MM_FIRMWARE_UPDATE_SETTINGS_H
#if !defined (__LIBMM_GLIB_H_INSIDE__) && !defined (LIBMM_GLIB_COMPILATION)
#error "Only <libmm-glib.h> can be included directly."
#endif
#include <ModemManager.h>
#include <glib-object.h>
G_BEGIN_DECLS
#define MM_TYPE_FIRMWARE_UPDATE_SETTINGS (mm_firmware_update_settings_get_type ())
#define MM_FIRMWARE_UPDATE_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_FIRMWARE_UPDATE_SETTINGS, MMFirmwareUpdateSettings))
#define MM_FIRMWARE_UPDATE_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MM_TYPE_FIRMWARE_UPDATE_SETTINGS, MMFirmwareUpdateSettingsClass))
#define MM_IS_FIRMWARE_UPDATE_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_FIRMWARE_UPDATE_SETTINGS))
#define MM_IS_FIRMWARE_UPDATE_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_FIRMWARE_UPDATE_SETTINGS))
#define MM_FIRMWARE_UPDATE_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_FIRMWARE_UPDATE_SETTINGS, MMFirmwareUpdateSettingsClass))
typedef struct _MMFirmwareUpdateSettings MMFirmwareUpdateSettings;
typedef struct _MMFirmwareUpdateSettingsClass MMFirmwareUpdateSettingsClass;
typedef struct _MMFirmwareUpdateSettingsPrivate MMFirmwareUpdateSettingsPrivate;
/**
* MMFirmwareUpdateSettings:
*
* The #MMFirmwareUpdateSettings structure contains private data and should only be accessed
* using the provided API.
*/
struct _MMFirmwareUpdateSettings {
/*< private >*/
GObject parent;
MMFirmwareUpdateSettingsPrivate *priv;
};
struct _MMFirmwareUpdateSettingsClass {
/*< private >*/
GObjectClass parent;
};
GType mm_firmware_update_settings_get_type (void);
#if GLIB_CHECK_VERSION(2, 44, 0)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMFirmwareUpdateSettings, g_object_unref)
#endif
MMModemFirmwareUpdateMethod mm_firmware_update_settings_get_method (MMFirmwareUpdateSettings *self);
/* Fastboot specific */
const gchar *mm_firmware_update_settings_get_fastboot_at (MMFirmwareUpdateSettings *self);
/*****************************************************************************/
/* ModemManager/libmm-glib/mmcli specific methods */
#if defined (_LIBMM_INSIDE_MM) || \
defined (_LIBMM_INSIDE_MMCLI) || \
defined (LIBMM_GLIB_COMPILATION)
MMFirmwareUpdateSettings *mm_firmware_update_settings_new (MMModemFirmwareUpdateMethod method);
MMFirmwareUpdateSettings *mm_firmware_update_settings_new_from_variant (GVariant *variant,
GError **error);
GVariant *mm_firmware_update_settings_get_variant (MMFirmwareUpdateSettings *self);
/* Fastboot specific */
void mm_firmware_update_settings_set_fastboot_at (MMFirmwareUpdateSettings *self,
const gchar *fastboot_at);
#endif
G_END_DECLS
#endif /* MM_FIRMWARE_UPDATE_SETTINGS_H */

View File

@@ -40,6 +40,12 @@
G_DEFINE_TYPE (MMModemFirmware, mm_modem_firmware, MM_GDBUS_TYPE_MODEM_FIRMWARE_PROXY) G_DEFINE_TYPE (MMModemFirmware, mm_modem_firmware, MM_GDBUS_TYPE_MODEM_FIRMWARE_PROXY)
struct _MMModemFirmwarePrivate {
GMutex update_settings_mutex;
guint update_settings_id;
MMFirmwareUpdateSettings *update_settings;
};
/*****************************************************************************/ /*****************************************************************************/
/** /**
@@ -82,6 +88,116 @@ mm_modem_firmware_dup_path (MMModemFirmware *self)
/*****************************************************************************/ /*****************************************************************************/
static void
update_settings_updated (MMModemFirmware *self,
GParamSpec *pspec)
{
g_mutex_lock (&self->priv->update_settings_mutex);
{
GVariant *variant;
g_clear_object (&self->priv->update_settings);
variant = mm_gdbus_modem_firmware_get_update_settings (MM_GDBUS_MODEM_FIRMWARE (self));
if (variant) {
GError *error = NULL;
self->priv->update_settings = mm_firmware_update_settings_new_from_variant (variant, &error);
if (error) {
g_warning ("Invalid update settings received: %s", error->message);
g_error_free (error);
}
}
}
g_mutex_unlock (&self->priv->update_settings_mutex);
}
static void
ensure_internal_update_settings (MMModemFirmware *self,
MMFirmwareUpdateSettings **dupl)
{
g_mutex_lock (&self->priv->update_settings_mutex);
{
/* If this is the first time ever asking for the object, setup the
* update listener and the initial object, if any. */
if (!self->priv->update_settings_id) {
GVariant *variant;
variant = mm_gdbus_modem_firmware_dup_update_settings (MM_GDBUS_MODEM_FIRMWARE (self));
if (variant) {
GError *error = NULL;
self->priv->update_settings = mm_firmware_update_settings_new_from_variant (variant, &error);
if (error) {
g_warning ("Invalid initial update settings: %s", error->message);
g_error_free (error);
}
g_variant_unref (variant);
}
/* No need to clear this signal connection when freeing self */
self->priv->update_settings_id =
g_signal_connect (self,
"notify::update-settings",
G_CALLBACK (update_settings_updated),
NULL);
}
if (dupl && self->priv->update_settings)
*dupl = g_object_ref (self->priv->update_settings);
}
g_mutex_unlock (&self->priv->update_settings_mutex);
}
/**
* mm_modem_firmware_get_update_settings:
* @self: A #MMModemFirmware.
*
* Gets a #MMFirmwareUpdateSettings object specifying the expected update
* settings.
*
* <warning>The values reported by @self are not updated when the values in the
* interface change. Instead, the client is expected to call
* mm_modem_firmware_get_update_settings() again to get a new #MMFirmwareUpdateSettings
* with the new values.</warning>
*
* Returns: (transfer full): A #MMFirmwareUpdateSettings that must be freed with g_object_unref() or %NULL if unknown.
*/
MMFirmwareUpdateSettings *
mm_modem_firmware_get_update_settings (MMModemFirmware *self)
{
MMFirmwareUpdateSettings *update_settings = NULL;
g_return_val_if_fail (MM_IS_MODEM_FIRMWARE (self), NULL);
ensure_internal_update_settings (self, &update_settings);
return update_settings;
}
/**
* mm_modem_firmware_peek_update_settings:
* @self: A #MMModemFirmware.
*
* Gets a #MMFirmwareUpdateSettings object specifying the expected update
* settings.
*
* <warning>The returned value is only valid until the property changes so
* it is only safe to use this function on the thread where
* @self was constructed. Use mm_modem_firmware_get_update_settings() if on
* another thread.</warning>
*
* Returns: (transfer none): A #MMFirmwareUpdateSettings. Do not free the returned value, it belongs to @self.
*/
MMFirmwareUpdateSettings *
mm_modem_firmware_peek_update_settings (MMModemFirmware *self)
{
g_return_val_if_fail (MM_IS_MODEM_FIRMWARE (self), NULL);
ensure_internal_update_settings (self, NULL);
return self->priv->update_settings;
}
/*****************************************************************************/
/** /**
* mm_modem_firmware_select_finish: * mm_modem_firmware_select_finish:
* @self: A #MMModemFirmware. * @self: A #MMModemFirmware.
@@ -372,9 +488,38 @@ mm_modem_firmware_list_sync (MMModemFirmware *self,
static void static void
mm_modem_firmware_init (MMModemFirmware *self) mm_modem_firmware_init (MMModemFirmware *self)
{ {
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_MODEM_FIRMWARE, MMModemFirmwarePrivate);
g_mutex_init (&self->priv->update_settings_mutex);
}
static void
finalize (GObject *object)
{
MMModemFirmware *self = MM_MODEM_FIRMWARE (object);
g_mutex_clear (&self->priv->update_settings_mutex);
G_OBJECT_CLASS (mm_modem_firmware_parent_class)->finalize (object);
}
static void
dispose (GObject *object)
{
MMModemFirmware *self = MM_MODEM_FIRMWARE (object);
g_clear_object (&self->priv->update_settings);
G_OBJECT_CLASS (mm_modem_firmware_parent_class)->dispose (object);
} }
static void static void
mm_modem_firmware_class_init (MMModemFirmwareClass *modem_class) mm_modem_firmware_class_init (MMModemFirmwareClass *modem_class)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (modem_class);
g_type_class_add_private (object_class, sizeof (MMModemFirmwarePrivate));
/* Virtual methods */
object_class->dispose = dispose;
object_class->finalize = finalize;
} }

View File

@@ -18,6 +18,7 @@
* Boston, MA 02110-1301 USA. * Boston, MA 02110-1301 USA.
* *
* Copyright (C) 2012 Google, Inc. * Copyright (C) 2012 Google, Inc.
* Copyright (C) 2018 Aleksander Morgado <aleksander@aleksander.es>
*/ */
#ifndef _MM_MODEM_FIRMWARE_H_ #ifndef _MM_MODEM_FIRMWARE_H_
@@ -31,6 +32,7 @@
#include "mm-gdbus-modem.h" #include "mm-gdbus-modem.h"
#include "mm-firmware-properties.h" #include "mm-firmware-properties.h"
#include "mm-firmware-update-settings.h"
G_BEGIN_DECLS G_BEGIN_DECLS
@@ -43,6 +45,7 @@ G_BEGIN_DECLS
typedef struct _MMModemFirmware MMModemFirmware; typedef struct _MMModemFirmware MMModemFirmware;
typedef struct _MMModemFirmwareClass MMModemFirmwareClass; typedef struct _MMModemFirmwareClass MMModemFirmwareClass;
typedef struct _MMModemFirmwarePrivate MMModemFirmwarePrivate;
/** /**
* MMModemFirmware: * MMModemFirmware:
@@ -53,7 +56,7 @@ typedef struct _MMModemFirmwareClass MMModemFirmwareClass;
struct _MMModemFirmware { struct _MMModemFirmware {
/*< private >*/ /*< private >*/
MmGdbusModemFirmwareProxy parent; MmGdbusModemFirmwareProxy parent;
gpointer unused; MMModemFirmwarePrivate *priv;
}; };
struct _MMModemFirmwareClass { struct _MMModemFirmwareClass {
@@ -70,6 +73,9 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMModemFirmware, g_object_unref)
const gchar *mm_modem_firmware_get_path (MMModemFirmware *self); const gchar *mm_modem_firmware_get_path (MMModemFirmware *self);
gchar *mm_modem_firmware_dup_path (MMModemFirmware *self); gchar *mm_modem_firmware_dup_path (MMModemFirmware *self);
MMFirmwareUpdateSettings *mm_modem_firmware_get_update_settings (MMModemFirmware *self);
MMFirmwareUpdateSettings *mm_modem_firmware_peek_update_settings (MMModemFirmware *self);
void mm_modem_firmware_list (MMModemFirmware *self, void mm_modem_firmware_list (MMModemFirmware *self,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,

View File

@@ -251,6 +251,7 @@ typedef enum {
INITIALIZATION_STEP_FIRST, INITIALIZATION_STEP_FIRST,
INITIALIZATION_STEP_CHECK_SUPPORT, INITIALIZATION_STEP_CHECK_SUPPORT,
INITIALIZATION_STEP_FAIL_IF_UNSUPPORTED, INITIALIZATION_STEP_FAIL_IF_UNSUPPORTED,
INITIALIZATION_STEP_UPDATE_SETTINGS,
INITIALIZATION_STEP_LAST INITIALIZATION_STEP_LAST
} InitializationStep; } InitializationStep;
@@ -266,6 +267,37 @@ initialization_context_free (InitializationContext *ctx)
g_free (ctx); g_free (ctx);
} }
static void
load_update_settings_ready (MMIfaceModemFirmware *self,
GAsyncResult *res,
GTask *task)
{
InitializationContext *ctx;
MMFirmwareUpdateSettings *update_settings;
GError *error = NULL;
GVariant *variant = NULL;
ctx = g_task_get_task_data (task);
update_settings = MM_IFACE_MODEM_FIRMWARE_GET_INTERFACE (self)->load_update_settings_finish (self, res, &error);
if (!update_settings) {
mm_dbg ("Couldn't load update settings: '%s'", error->message);
g_error_free (error);
} else {
variant = mm_firmware_update_settings_get_variant (update_settings);
g_object_unref (update_settings);
}
mm_gdbus_modem_firmware_set_update_settings (ctx->skeleton, variant);
if (variant)
g_variant_unref (variant);
/* Go on to next step */
ctx->step++;
interface_initialization_step (task);
}
static void static void
check_support_ready (MMIfaceModemFirmware *self, check_support_ready (MMIfaceModemFirmware *self,
GAsyncResult *res, GAsyncResult *res,
@@ -363,6 +395,18 @@ interface_initialization_step (GTask *task)
/* Fall down to next step */ /* Fall down to next step */
ctx->step++; ctx->step++;
case INITIALIZATION_STEP_UPDATE_SETTINGS:
if (MM_IFACE_MODEM_FIRMWARE_GET_INTERFACE (self)->load_update_settings &&
MM_IFACE_MODEM_FIRMWARE_GET_INTERFACE (self)->load_update_settings_finish) {
MM_IFACE_MODEM_FIRMWARE_GET_INTERFACE (self)->load_update_settings (
self,
(GAsyncReadyCallback)load_update_settings_ready,
task);
return;
}
/* Fall down to next step */
ctx->step++;
case INITIALIZATION_STEP_LAST: case INITIALIZATION_STEP_LAST:
/* We are done without errors! */ /* We are done without errors! */

View File

@@ -42,6 +42,14 @@ struct _MMIfaceModemFirmware {
GAsyncResult *res, GAsyncResult *res,
GError **error); GError **error);
/* Get update settings (async) */
void (* load_update_settings) (MMIfaceModemFirmware *self,
GAsyncReadyCallback callback,
gpointer user_data);
MMFirmwareUpdateSettings * (* load_update_settings_finish) (MMIfaceModemFirmware *self,
GAsyncResult *res,
GError **error);
/* Get Firmware list (async) */ /* Get Firmware list (async) */
void (* load_list) (MMIfaceModemFirmware *self, void (* load_list) (MMIfaceModemFirmware *self,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,