diff options
author | Som_SP <somashekhar.puttagangaiah@intel.com> | 2021-10-01 20:39:14 +0530 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-10-25 12:48:51 +0200 |
commit | ee9eea63160664c4e28ae73e112ca582f0c4621f (patch) | |
tree | 7d1bb9aa4af0f4332390ca2f78333af58528ae55 | |
parent | 9eb738c0d632112daad3a5575de0b58d58bd94b2 (diff) |
ms-basic-connect-extensions: implement wake-reason
This CID is used by host to query the modem for its wake reason when
power up because of device wake. If the device supports this function,
but fails the query from host, it means the power up is not caused by
a wake from the device.
Includes updates by Aleksander Morgado to fix coding style issues,
message definitions add missing documentation items.
-rw-r--r-- | data/mbim-service-ms-basic-connect-extensions-v3.json | 17 | ||||
-rwxr-xr-x | docs/reference/libmbim-glib/libmbim-glib-common.sections | 5 | ||||
-rw-r--r-- | src/libmbim-glib/mbim-cid.h | 2 | ||||
-rw-r--r-- | src/libmbim-glib/mbim-enums.h | 18 | ||||
-rw-r--r-- | src/mbimcli/mbimcli-ms-basic-connect-extensions.c | 65 |
5 files changed, 104 insertions, 3 deletions
diff --git a/data/mbim-service-ms-basic-connect-extensions-v3.json b/data/mbim-service-ms-basic-connect-extensions-v3.json index 0227b80..02e06e4 100644 --- a/data/mbim-service-ms-basic-connect-extensions-v3.json +++ b/data/mbim-service-ms-basic-connect-extensions-v3.json @@ -261,5 +261,20 @@ "struct-type" : "MbimCellInfoServingNr" }, { "name" : "NrNeighborCells", "format" : "ms-struct-array", - "struct-type" : "MbimCellInfoNeighboringNr" } ] } + "struct-type" : "MbimCellInfoNeighboringNr" } ] }, + + //************************************************************************************ + + { "name" : "Wake Reason", + "type" : "Command", + "since" : "1.28", + "query" : [], + "response" : [ { "name" : "WakeType", + "format" : "guint32", + "public-format" : "MbimWakeType" }, + { "name" : "SessionId", + "format" : "guint32" }, + { "name" : "DataBuffer", + "format" : "unsized-byte-array" } ] } + ] diff --git a/docs/reference/libmbim-glib/libmbim-glib-common.sections b/docs/reference/libmbim-glib/libmbim-glib-common.sections index e8236a2..6a07b4c 100755 --- a/docs/reference/libmbim-glib/libmbim-glib-common.sections +++ b/docs/reference/libmbim-glib/libmbim-glib-common.sections @@ -381,6 +381,7 @@ MbimSubscriberReadyStatusFlag MbimDataClassV3 MbimDataSublass MbimModemConfigurationStatus +MbimWakeType <SUBSECTION Methods> mbim_device_type_get_string mbim_cellular_class_build_string_from_mask @@ -465,6 +466,7 @@ mbim_subscriber_ready_status_flag_build_string_from_mask mbim_data_class_v3_build_string_from_mask mbim_data_subclass_build_string_from_mask mbim_modem_configuration_status_get_string +mbim_wake_type_get_string <SUBSECTION Private> mbim_device_type_build_string_from_mask mbim_cellular_class_get_string @@ -551,6 +553,7 @@ mbim_subscriber_ready_status_flag_get_string mbim_data_class_v3_get_string mbim_data_subclass_get_string mbim_modem_configuration_status_build_string_from_mask +mbim_wake_type_build_string_from_mask <SUBSECTION Standard> MBIM_TYPE_ACTIVATION_COMMAND MBIM_TYPE_ACTIVATION_STATE @@ -640,6 +643,7 @@ MBIM_TYPE_SUBSCRIBER_READY_STATUS_FLAG MBIM_TYPE_DATA_CLASS_V3 MBIM_TYPE_DATA_SUBCLASS MBIM_TYPE_MODEM_CONFIGURATION_STATUS +MBIM_TYPE_WAKE_TYPE mbim_activation_command_get_type mbim_activation_state_get_type mbim_auth_protocol_get_type @@ -728,6 +732,7 @@ mbim_subscriber_ready_status_flag_get_type mbim_data_class_v3_get_type mbim_data_subclass_get_type mbim_modem_configuration_status_get_type +mbim_wake_type_get_type </SECTION> <SECTION> diff --git a/src/libmbim-glib/mbim-cid.h b/src/libmbim-glib/mbim-cid.h index 2ccbd04..6a7a89e 100644 --- a/src/libmbim-glib/mbim-cid.h +++ b/src/libmbim-glib/mbim-cid.h @@ -336,6 +336,7 @@ typedef enum { /*< since=1.26 >*/ * @MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_VERSION: Protocol version query and report, defined in MBIMEx v2.0. Since 1.28. * @MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_MODEM_CONFIGURATION: Modem configuration status, defined in MBIMEx v3.0. Since 1.28. * @MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_REGISTRATION_PARAMETERS: Registration parameters, defined in MBIMEx v3.0. Since 1.28. + * @MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_WAKE_REASON: Protocol wake reason query and report, defined in MBIMEx v3.0. Since 1.28 * * MBIM commands in the %MBIM_SERVICE_MS_BASIC_CONNECT_EXTENSIONS service. * @@ -358,6 +359,7 @@ typedef enum { /*< since=1.18 >*/ MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_VERSION = 15, MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_MODEM_CONFIGURATION = 16, MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_REGISTRATION_PARAMETERS = 17, + MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_WAKE_REASON = 19, } MbimCidMsBasicConnectExtensions; /* Command helpers */ diff --git a/src/libmbim-glib/mbim-enums.h b/src/libmbim-glib/mbim-enums.h index c129802..b208d00 100644 --- a/src/libmbim-glib/mbim-enums.h +++ b/src/libmbim-glib/mbim-enums.h @@ -603,6 +603,24 @@ typedef enum { /*< since=1.0 >*/ } MbimRegistrationFlag; /*****************************************************************************/ +/* 'Wake Reason' enums */ +/** + * MbimWaketype: + * @MBIM_WAKE_TYPE_CID_RESPONSE: A CID response wakes device. + * @MBIM_WAKE_TYPE_CID_INDICATION: A CID indication wakes device. + * @MBIM_WAKE_TYPE_PACKET: An incoming packet wakes device. + * + * Wake type. + * + * Since: 1.28 + */ +typedef enum { /*< since=1.28 >*/ + MBIM_WAKE_TYPE_CID_RESPONSE = 0, + MBIM_WAKE_TYPE_CID_INDICATION = 1, + MBIM_WAKE_TYPE_PACKET = 2, +} MbimWakeType; + +/*****************************************************************************/ /* 'Packet Service' enums */ /** diff --git a/src/mbimcli/mbimcli-ms-basic-connect-extensions.c b/src/mbimcli/mbimcli-ms-basic-connect-extensions.c index cf4564b..e7cbe62 100644 --- a/src/mbimcli/mbimcli-ms-basic-connect-extensions.c +++ b/src/mbimcli/mbimcli-ms-basic-connect-extensions.c @@ -49,6 +49,7 @@ static gchar *query_version_str; static gboolean query_registration_parameters_flag; static gchar *set_registration_parameters_str; static gboolean query_modem_configuration_flag; +static gboolean query_wake_reason_flag; static gboolean query_pco_arg_parse (const gchar *option_name, const gchar *value, @@ -125,7 +126,11 @@ static GOptionEntry entries[] = { "Query modem configuration. Since MBIMEx v3.0.", NULL }, - { NULL } + { "ms-query-wake-reason", 0, 0, G_OPTION_ARG_NONE, &query_wake_reason_flag, + "Query wake reason. Since MBIMEx v3.0.", + NULL + }, + {NULL } }; static gboolean @@ -208,7 +213,8 @@ mbimcli_ms_basic_connect_extensions_options_enabled (void) !!query_version_str + query_registration_parameters_flag + !!set_registration_parameters_str + - query_modem_configuration_flag); + query_modem_configuration_flag + + query_wake_reason_flag); if (n_actions > 1) { g_printerr ("error: too many Microsoft Basic Connect Extensions Service actions requested\n"); @@ -1534,6 +1540,48 @@ query_modem_configuration_ready (MbimDevice *device, shutdown (TRUE); } +static void +query_wake_reason_ready (MbimDevice *device, + GAsyncResult *res) +{ + g_autoptr(MbimMessage) response = NULL; + g_autoptr(GError) error = NULL; + MbimWakeType wake_type; + guint32 session_id; + const guint8 *data_buffer; + guint32 data_buffer_size; + g_autofree gchar *data_buffer_str = NULL; + + response = mbim_device_command_finish (device, res, &error); + if (!response || !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error)) { + g_printerr ("error: operation failed: %s\n", error->message); + shutdown (FALSE); + return; + } + + if (!mbim_message_ms_basic_connect_extensions_v3_wake_reason_response_parse ( + response, + &wake_type, + &session_id, + &data_buffer_size, + &data_buffer, + &error)) { + g_printerr ("error: couldn't parse response message: %s\n", error->message); + shutdown (FALSE); + return; + } + + g_print ("[%s] Successfully queried wake reason\n", + mbim_device_get_path_display (device)); + + data_buffer_str = mbim_common_str_hex (data_buffer, data_buffer_size, ':'); + g_print ("\t Wake type: '%s'\n", mbim_wake_type_get_string (wake_type)); + g_print ("\t Session ID: '%u'\n", session_id); + g_print ("\tData buffer: '%s'\n", data_buffer_str); + + shutdown (TRUE); +} + void mbimcli_ms_basic_connect_extensions_run (MbimDevice *device, GCancellable *cancellable) @@ -1900,5 +1948,18 @@ mbimcli_ms_basic_connect_extensions_run (MbimDevice *device, return; } + /* Request to query Wake Reason? */ + if (query_wake_reason_flag) { + g_debug ("Asynchronously querying wake reason..."); + request = mbim_message_ms_basic_connect_extensions_v3_wake_reason_query_new (NULL); + mbim_device_command (ctx->device, + request, + 10, + ctx->cancellable, + (GAsyncReadyCallback)query_wake_reason_ready, + NULL); + return; + } + g_warn_if_reached (); } |