broadband-modem-mbim: implement 5GNR registration settings update
This commit is contained in:
@@ -3708,6 +3708,76 @@ modem_3gpp_load_nr5g_registration_settings (MMIfaceModem3gpp *_self,
|
||||
task);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Set 5GNR registration settings */
|
||||
|
||||
static gboolean
|
||||
modem_3gpp_set_nr5g_registration_settings_finish (MMIfaceModem3gpp *self,
|
||||
GAsyncResult *res,
|
||||
GError **error)
|
||||
{
|
||||
return g_task_propagate_boolean (G_TASK (res), error);
|
||||
}
|
||||
|
||||
static void
|
||||
set_nr5g_registration_settings_ready (MbimDevice *device,
|
||||
GAsyncResult *res,
|
||||
GTask *task)
|
||||
{
|
||||
g_autoptr(MbimMessage) response = NULL;
|
||||
GError *error = NULL;
|
||||
|
||||
response = mbim_device_command_finish (device, res, &error);
|
||||
if (!response || !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error))
|
||||
g_task_return_error (task, error);
|
||||
else
|
||||
g_task_return_boolean (task, TRUE);
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
static void
|
||||
modem_3gpp_set_nr5g_registration_settings (MMIfaceModem3gpp *_self,
|
||||
MMNr5gRegistrationSettings *settings,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self);
|
||||
GTask *task;
|
||||
MbimDevice *device;
|
||||
g_autoptr(MbimMessage) message = NULL;
|
||||
MbimMicoMode mico_mode;
|
||||
MbimDrxCycle drx_cycle;
|
||||
|
||||
if (!peek_device (self, &device, callback, user_data))
|
||||
return;
|
||||
|
||||
task = g_task_new (self, NULL, callback, user_data);
|
||||
|
||||
if (!self->priv->is_nr5g_registration_settings_supported) {
|
||||
g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED,
|
||||
"5GNR registration settings are unsupported");
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
|
||||
mico_mode = mm_modem_3gpp_mico_mode_to_mbim_mico_mode (mm_nr5g_registration_settings_get_mico_mode (settings));
|
||||
drx_cycle = mm_modem_3gpp_drx_cycle_to_mbim_drx_cycle (mm_nr5g_registration_settings_get_drx_cycle (settings));
|
||||
|
||||
message = mbim_message_ms_basic_connect_extensions_v3_registration_parameters_set_new (mico_mode,
|
||||
drx_cycle,
|
||||
MBIM_LADN_INFO_NOT_NEEDED,
|
||||
MBIM_DEFAULT_PDU_ACTIVATION_HINT_LIKELY,
|
||||
TRUE,
|
||||
NULL, /* unnamed ies */
|
||||
NULL);
|
||||
mbim_device_command (device,
|
||||
message,
|
||||
10,
|
||||
NULL,
|
||||
(GAsyncReadyCallback)set_nr5g_registration_settings_ready,
|
||||
task);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Common unsolicited events setup and cleanup */
|
||||
|
||||
@@ -8333,6 +8403,8 @@ iface_modem_3gpp_init (MMIfaceModem3gpp *iface)
|
||||
iface->load_nr5g_registration_settings_finish = modem_3gpp_load_nr5g_registration_settings_finish;
|
||||
iface->set_initial_eps_bearer_settings = modem_3gpp_set_initial_eps_bearer_settings;
|
||||
iface->set_initial_eps_bearer_settings_finish = modem_3gpp_set_initial_eps_bearer_settings_finish;
|
||||
iface->set_nr5g_registration_settings = modem_3gpp_set_nr5g_registration_settings;
|
||||
iface->set_nr5g_registration_settings_finish = modem_3gpp_set_nr5g_registration_settings_finish;
|
||||
iface->run_registration_checks = modem_3gpp_run_registration_checks;
|
||||
iface->run_registration_checks_finish = modem_3gpp_run_registration_checks_finish;
|
||||
iface->register_in_network = modem_3gpp_register_in_network;
|
||||
|
||||
@@ -707,6 +707,22 @@ mm_modem_3gpp_mico_mode_from_mbim_mico_mode (MbimMicoMode mico_mode)
|
||||
}
|
||||
}
|
||||
|
||||
MbimMicoMode
|
||||
mm_modem_3gpp_mico_mode_to_mbim_mico_mode (MMModem3gppMicoMode mico_mode)
|
||||
{
|
||||
switch (mico_mode) {
|
||||
case MM_MODEM_3GPP_MICO_MODE_DISABLED:
|
||||
return MBIM_MICO_MODE_DISABLED;
|
||||
case MM_MODEM_3GPP_MICO_MODE_ENABLED:
|
||||
return MBIM_MICO_MODE_ENABLED;
|
||||
case MM_MODEM_3GPP_MICO_MODE_UNSUPPORTED:
|
||||
return MBIM_MICO_MODE_UNSUPPORTED;
|
||||
case MM_MODEM_3GPP_MICO_MODE_UNKNOWN:
|
||||
default:
|
||||
return MBIM_MICO_MODE_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
MMModem3gppDrxCycle
|
||||
mm_modem_3gpp_drx_cycle_from_mbim_drx_cycle (MbimDrxCycle drx_cycle)
|
||||
{
|
||||
@@ -727,6 +743,26 @@ mm_modem_3gpp_drx_cycle_from_mbim_drx_cycle (MbimDrxCycle drx_cycle)
|
||||
}
|
||||
}
|
||||
|
||||
MbimDrxCycle
|
||||
mm_modem_3gpp_drx_cycle_to_mbim_drx_cycle (MMModem3gppDrxCycle drx_cycle)
|
||||
{
|
||||
switch (drx_cycle) {
|
||||
case MM_MODEM_3GPP_DRX_CYCLE_UNSUPPORTED:
|
||||
return MBIM_DRX_CYCLE_NOT_SUPPORTED;
|
||||
case MM_MODEM_3GPP_DRX_CYCLE_32:
|
||||
return MBIM_DRX_CYCLE_32;
|
||||
case MM_MODEM_3GPP_DRX_CYCLE_64:
|
||||
return MBIM_DRX_CYCLE_64;
|
||||
case MM_MODEM_3GPP_DRX_CYCLE_128:
|
||||
return MBIM_DRX_CYCLE_128;
|
||||
case MM_MODEM_3GPP_DRX_CYCLE_256:
|
||||
return MBIM_DRX_CYCLE_256;
|
||||
case MM_MODEM_3GPP_DRX_CYCLE_UNKNOWN:
|
||||
default:
|
||||
return MBIM_DRX_CYCLE_NOT_SPECIFIED;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
MMSmsState
|
||||
|
||||
@@ -84,8 +84,10 @@ gboolean mm_signal_snr_from_coded_value (guint coded_value,
|
||||
gdouble *out_snr,
|
||||
GError **error);
|
||||
|
||||
MMModem3gppMicoMode mm_modem_3gpp_mico_mode_from_mbim_mico_mode (MbimMicoMode mico_mode);
|
||||
MMModem3gppDrxCycle mm_modem_3gpp_drx_cycle_from_mbim_drx_cycle (MbimDrxCycle drx_cycle);
|
||||
MMModem3gppMicoMode mm_modem_3gpp_mico_mode_from_mbim_mico_mode (MbimMicoMode mico_mode);
|
||||
MbimMicoMode mm_modem_3gpp_mico_mode_to_mbim_mico_mode (MMModem3gppMicoMode mico_mode);
|
||||
MMModem3gppDrxCycle mm_modem_3gpp_drx_cycle_from_mbim_drx_cycle (MbimDrxCycle drx_cycle);
|
||||
MbimDrxCycle mm_modem_3gpp_drx_cycle_to_mbim_drx_cycle (MMModem3gppDrxCycle drx_cycle);
|
||||
|
||||
/*****************************************************************************/
|
||||
/* MBIM/SMS to MM translations */
|
||||
|
||||
Reference in New Issue
Block a user