aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-10-16 21:43:36 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-10-16 22:03:39 +0200
commitb32d85b1bf07d572e5e8f7960f2b87f5526e3953 (patch)
tree51cd4167f0b2460fc6269d42f68ed71b1306e24d
parentaca14b92c6790b231238c75e536af2e318c38248 (diff)
bearer-mbim: support 'Packet Service' from MBIMEx v2.0
-rw-r--r--src/mm-bearer-mbim.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index 21a17a2e..e45b242e 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -814,9 +814,10 @@ packet_service_set_ready (MbimDevice *device,
g_autoptr(MbimMessage) response = NULL;
guint32 nw_error;
MbimPacketServiceState packet_service_state;
- MbimDataClass highest_available_data_class;
+ MbimDataClass data_class;
guint64 uplink_speed;
guint64 downlink_speed;
+ MbimFrequencyRange frequency_range = MBIM_FREQUENCY_RANGE_UNKNOWN;
self = g_task_get_source_object (task);
ctx = g_task_get_task_data (task);
@@ -827,26 +828,43 @@ packet_service_set_ready (MbimDevice *device,
error->code == MBIM_STATUS_ERROR_FAILURE)) {
g_autoptr(GError) inner_error = NULL;
- if (mbim_message_packet_service_response_parse (
+ if (mbim_device_check_ms_mbimex_version (device, 2, 0)) {
+ mbim_message_ms_basic_connect_v2_packet_service_response_parse (
response,
&nw_error,
&packet_service_state,
- &highest_available_data_class,
+ &data_class,
&uplink_speed,
&downlink_speed,
- &inner_error)) {
+ &frequency_range,
+ &inner_error);
+ } else {
+ mbim_message_packet_service_response_parse (
+ response,
+ &nw_error,
+ &packet_service_state,
+ &data_class,
+ &uplink_speed,
+ &downlink_speed,
+ &inner_error);
+ }
+
+ if (!inner_error) {
if (nw_error) {
g_clear_error (&error);
error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error, self);
} else {
- g_autofree gchar *str = NULL;
+ g_autofree gchar *data_class_str = NULL;
+ g_autofree gchar *frequency_range_str = NULL;
- str = mbim_data_class_build_string_from_mask (highest_available_data_class);
+ data_class_str = mbim_data_class_build_string_from_mask (data_class);
+ frequency_range_str = mbim_frequency_range_build_string_from_mask (frequency_range);
mm_obj_dbg (self, "packet service update:");
- mm_obj_dbg (self, " state: '%s'", mbim_packet_service_state_get_string (packet_service_state));
- mm_obj_dbg (self, " data class: '%s'", 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, " 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);
}
} else {
/* Prefer the error from the result to the parsing error */