broadband-modem-mbim: support 'Packet Service' from MBIMEx v2.0
This commit is contained in:
@@ -3473,30 +3473,65 @@ basic_connect_notification_packet_service (MMBroadbandModemMbim *self,
|
|||||||
MbimDevice *device,
|
MbimDevice *device,
|
||||||
MbimMessage *notification)
|
MbimMessage *notification)
|
||||||
{
|
{
|
||||||
MbimPacketServiceState packet_service_state;
|
guint32 nw_error;
|
||||||
MbimDataClass highest_available_data_class;
|
MbimPacketServiceState packet_service_state;
|
||||||
gchar *str;
|
MbimDataClass data_class;
|
||||||
|
guint64 uplink_speed;
|
||||||
|
guint64 downlink_speed;
|
||||||
|
MbimFrequencyRange frequency_range = MBIM_FREQUENCY_RANGE_UNKNOWN;
|
||||||
|
g_autofree gchar *data_class_str = NULL;
|
||||||
|
g_autofree gchar *frequency_range_str = NULL;
|
||||||
|
const gchar *nw_error_str;
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
if (!mbim_message_packet_service_notification_parse (
|
if (mbim_device_check_ms_mbimex_version (device, 2, 0)) {
|
||||||
notification,
|
if (!mbim_message_ms_basic_connect_v2_packet_service_notification_parse (
|
||||||
NULL, /* nw_error */
|
notification,
|
||||||
&packet_service_state,
|
&nw_error,
|
||||||
&highest_available_data_class,
|
&packet_service_state,
|
||||||
NULL, /* uplink_speed */
|
&data_class, /* current */
|
||||||
NULL, /* downlink_speed */
|
&uplink_speed,
|
||||||
NULL)) {
|
&downlink_speed,
|
||||||
return;
|
&frequency_range,
|
||||||
|
&error)) {
|
||||||
|
mm_obj_warn (self, "failed processing MBIMEx v2.0 packet service indication: %s", error->message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mm_obj_dbg (self, "proccessed MBIMEx v2.0 packet service indication");
|
||||||
|
} else {
|
||||||
|
if (!mbim_message_packet_service_notification_parse (
|
||||||
|
notification,
|
||||||
|
&nw_error,
|
||||||
|
&packet_service_state,
|
||||||
|
&data_class, /* highest_available */
|
||||||
|
&uplink_speed,
|
||||||
|
&downlink_speed,
|
||||||
|
&error)) {
|
||||||
|
mm_obj_warn (self, "failed processing packet service indication: %s", error->message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mm_obj_dbg (self, "proccessed packet service indication");
|
||||||
}
|
}
|
||||||
|
|
||||||
str = mbim_data_class_build_string_from_mask (highest_available_data_class);
|
data_class_str = mbim_data_class_build_string_from_mask (data_class);
|
||||||
mm_obj_dbg (self, "packet service state: '%s', data class: '%s'",
|
frequency_range_str = mbim_frequency_range_build_string_from_mask (frequency_range);
|
||||||
mbim_packet_service_state_get_string (packet_service_state), str);
|
nw_error_str = mbim_nw_error_get_string (nw_error);
|
||||||
g_free (str);
|
|
||||||
|
mm_obj_dbg (self, "packet service update:");
|
||||||
|
if (nw_error_str)
|
||||||
|
mm_obj_dbg (self, " nw error: '%s'", nw_error_str);
|
||||||
|
else
|
||||||
|
mm_obj_dbg (self, " nw error: '0x%x'", nw_error);
|
||||||
|
mm_obj_dbg (self, " state: '%s'", mbim_packet_service_state_get_string (packet_service_state));
|
||||||
|
mm_obj_dbg (self, " data class: '%s'", data_class_str);
|
||||||
|
mm_obj_dbg (self, " uplink: '%" G_GUINT64_FORMAT "' bps", uplink_speed);
|
||||||
|
mm_obj_dbg (self, " downlink: '%" G_GUINT64_FORMAT "' bps", downlink_speed);
|
||||||
|
mm_obj_dbg (self, " frequency range: '%s'", frequency_range_str);
|
||||||
|
|
||||||
if (packet_service_state == MBIM_PACKET_SERVICE_STATE_ATTACHED) {
|
if (packet_service_state == MBIM_PACKET_SERVICE_STATE_ATTACHED) {
|
||||||
self->priv->highest_available_data_class = highest_available_data_class;
|
self->priv->highest_available_data_class = data_class;
|
||||||
} else if (packet_service_state == MBIM_PACKET_SERVICE_STATE_DETACHED) {
|
} else if (packet_service_state == MBIM_PACKET_SERVICE_STATE_DETACHED) {
|
||||||
self->priv->highest_available_data_class = 0;
|
self->priv->highest_available_data_class = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_access_technologies (self);
|
update_access_technologies (self);
|
||||||
|
Reference in New Issue
Block a user