summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSom_SP <somashekhar.puttagangaiah@intel.com>2021-09-25 22:25:14 +0530
committerAleksander Morgado <aleksander@aleksander.es>2021-10-12 22:21:08 +0200
commit11ba859da3e5439426c1991820146f8219d99bd8 (patch)
tree5ef71f8eeb4550d4fc963dba43041a545aecc1cc
parent0a5176ff814881b91c1ec66e528231ad237289b2 (diff)
MBIMEx 3.0: implement "packet service v3" for SA
This command is an extension for the existing MBIM_CID_PACKET_SERVICE defined in the MBIM specification revision 2.0.
-rw-r--r--data/mbim-service-ms-basic-connect-v3.json59
-rw-r--r--src/mbimcli/mbimcli-basic-connect.c93
2 files changed, 131 insertions, 21 deletions
diff --git a/data/mbim-service-ms-basic-connect-v3.json b/data/mbim-service-ms-basic-connect-v3.json
index 8fb3417..90e276f 100644
--- a/data/mbim-service-ms-basic-connect-v3.json
+++ b/data/mbim-service-ms-basic-connect-v3.json
@@ -46,5 +46,62 @@
"format" : "guint32" },
{ "name" : "TelephoneNumbers",
"format" : "string-array",
- "array-size-field" : "TelephoneNumbersCount" } ] }
+ "array-size-field" : "TelephoneNumbersCount" } ] },
+
+ // *********************************************************************************
+ { "name" : "MbimTAI",
+ "type" : "Struct",
+ "since" : "1.28",
+ "contents" : [ { "name" : "Plmn",
+ "format" : "guint32" },
+ { "name" : "Tac",
+ "format" : "guint32" } ] },
+
+ { "name" : "Packet Service",
+ "type" : "Command",
+ "since" : "1.28",
+ // set same as in v1
+ // query same as in v1
+ "response" : [ { "name" : "NwError",
+ "format" : "guint32" },
+ { "name" : "PacketServiceState",
+ "format" : "guint32",
+ "public-format" : "MbimPacketServiceState" },
+ { "name" : "HighestAvailableDataClass",
+ "format" : "guint32",
+ "public-format" : "MbimDataClassV2" },
+ { "name" : "UplinkSpeed",
+ "format" : "guint64" },
+ { "name" : "DownlinkSpeed",
+ "format" : "guint64" },
+ { "name" : "FrequencyRange",
+ "format" : "guint32",
+ "public-format" : "MbimFrequencyRange" },
+ { "name" : "DataSubclass",
+ "format" : "guint32",
+ "public-format" : "MbimDataSubclass" },
+ { "name" : "TAI",
+ "format" : "struct",
+ "struct-type" : "MbimTAI" } ],
+ "notification" : [ { "name" : "NwError",
+ "format" : "guint32" },
+ { "name" : "PacketServiceState",
+ "format" : "guint32",
+ "public-format" : "MbimPacketServiceState" },
+ { "name" : "HighestAvailableDataClass",
+ "format" : "guint32",
+ "public-format" : "MbimDataClassV2" },
+ { "name" : "UplinkSpeed",
+ "format" : "guint64" },
+ { "name" : "DownlinkSpeed",
+ "format" : "guint64" },
+ { "name" : "FrequencyRange",
+ "format" : "guint32",
+ "public-format" : "MbimFrequencyRange" },
+ { "name" : "DataSubclass",
+ "format" : "guint32",
+ "public-format" : "MbimDataSubclass" },
+ { "name" : "TAI",
+ "format" : "struct",
+ "struct-type" : "MbimTAI" } ] }
]
diff --git a/src/mbimcli/mbimcli-basic-connect.c b/src/mbimcli/mbimcli-basic-connect.c
index 88f8e35..1e6105b 100644
--- a/src/mbimcli/mbimcli-basic-connect.c
+++ b/src/mbimcli/mbimcli-basic-connect.c
@@ -1575,10 +1575,12 @@ packet_service_ready (MbimDevice *device,
guint32 nw_error;
MbimPacketServiceState packet_service_state;
MbimDataClass highest_available_data_class;
- g_autofree gchar *highest_available_data_class_str = NULL;
+ MbimDataClassV2 highest_available_data_class_v2;
guint64 uplink_speed;
guint64 downlink_speed;
MbimFrequencyRange frequency_range;
+ MbimDataSubclass data_subclass;
+ MbimTAI *tai = NULL;
response = mbim_device_command_finish (device, res, &error);
if (!response || !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error)) {
@@ -1587,8 +1589,26 @@ packet_service_ready (MbimDevice *device,
return;
}
+ /* MBIMEx 3.0 support */
+ if (mbim_device_check_ms_mbimex_version (device, 3, 0)) {
+ if (!mbim_message_ms_basic_connect_v3_packet_service_response_parse (response,
+ &nw_error,
+ &packet_service_state,
+ &highest_available_data_class_v2,
+ &uplink_speed,
+ &downlink_speed,
+ &frequency_range,
+ &data_subclass,
+ &tai,
+ &error)) {
+ g_printerr ("error: couldn't parse response message: %s\n", error->message);
+ shutdown (FALSE);
+ return;
+ }
+ g_debug ("Successfully parsed response as MBIM 3.0 Packet Service");
+ }
/* MBIMEx 2.0 support */
- if (mbim_device_check_ms_mbimex_version (device, 2, 0)) {
+ else if (mbim_device_check_ms_mbimex_version (device, 2, 0)) {
if (!mbim_message_ms_basic_connect_v2_packet_service_response_parse (response,
&nw_error,
&packet_service_state,
@@ -1632,27 +1652,60 @@ packet_service_ready (MbimDevice *device,
break;
}
- highest_available_data_class_str = mbim_data_class_build_string_from_mask (highest_available_data_class);
-
- g_print ("[%s] Packet service status:\n"
- "\t Network error: '%s'\n"
- "\t Packet service state: '%s'\n"
- "\tAvailable data classes: '%s'\n"
- "\t Uplink speed: '%" G_GUINT64_FORMAT " bps'\n"
- "\t Downlink speed: '%" G_GUINT64_FORMAT " bps'\n",
- mbim_device_get_path_display (device),
- VALIDATE_UNKNOWN (mbim_nw_error_get_string (nw_error)),
- VALIDATE_UNKNOWN (mbim_packet_service_state_get_string (packet_service_state)),
- VALIDATE_UNKNOWN (highest_available_data_class_str),
- uplink_speed,
- downlink_speed);
-
- if (mbim_device_check_ms_mbimex_version (device, 2, 0)) {
+ if (mbim_device_check_ms_mbimex_version (device, 3, 0)) {
g_autofree gchar *frequency_range_str = NULL;
+ g_autofree gchar *data_subclass_str = NULL;
+ g_autofree gchar *highest_available_data_class_str = NULL;
+ data_subclass_str = mbim_data_subclass_build_string_from_mask (data_subclass);
frequency_range_str = mbim_frequency_range_build_string_from_mask (frequency_range);
- g_print ("\t Frequency range: '%s'\n",
- VALIDATE_UNKNOWN (frequency_range_str));
+ highest_available_data_class_str = mbim_data_class_v2_build_string_from_mask (highest_available_data_class_v2);
+
+ g_print ("[%s] Packet service status:\n"
+ "\t Network error: '%s'\n"
+ "\t Packet service state: '%s'\n"
+ "\tAvailable data classes: '%s'\n"
+ "\t Uplink speed: '%" G_GUINT64_FORMAT " bps'\n"
+ "\t Downlink speed: '%" G_GUINT64_FORMAT " bps'\n"
+ "\t Frequency range: '%s'\n"
+ "\t Data sub class: '%s'\n"
+ "\t TAI PLMN: '%d'\n"
+ "\t TAI TAC: '%d'\n",
+ mbim_device_get_path_display (device),
+ VALIDATE_UNKNOWN (mbim_nw_error_get_string (nw_error)),
+ VALIDATE_UNKNOWN (mbim_packet_service_state_get_string (packet_service_state)),
+ VALIDATE_UNKNOWN (highest_available_data_class_str),
+ uplink_speed,
+ downlink_speed,
+ VALIDATE_UNKNOWN (frequency_range_str),
+ VALIDATE_UNKNOWN (data_subclass_str),
+ tai->plmn,
+ tai->tac);
+ }
+ else {
+ g_autofree gchar *highest_available_data_class_str = NULL;
+
+ highest_available_data_class_str = mbim_data_class_build_string_from_mask (highest_available_data_class);
+ g_print ("[%s] Packet service status:\n"
+ "\t Network error: '%s'\n"
+ "\t Packet service state: '%s'\n"
+ "\tAvailable data classes: '%s'\n"
+ "\t Uplink speed: '%" G_GUINT64_FORMAT " bps'\n"
+ "\t Downlink speed: '%" G_GUINT64_FORMAT " bps'\n",
+ mbim_device_get_path_display (device),
+ VALIDATE_UNKNOWN (mbim_nw_error_get_string (nw_error)),
+ VALIDATE_UNKNOWN (mbim_packet_service_state_get_string (packet_service_state)),
+ VALIDATE_UNKNOWN (highest_available_data_class_str),
+ uplink_speed,
+ downlink_speed);
+
+ if (mbim_device_check_ms_mbimex_version (device, 2, 0)) {
+ g_autofree gchar *frequency_range_str = NULL;
+
+ frequency_range_str = mbim_frequency_range_build_string_from_mask (frequency_range);
+ g_print ("\t Frequency range: '%s'\n",
+ VALIDATE_UNKNOWN (frequency_range_str));
+ }
}
shutdown (TRUE);