summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSom_SP <somashekhar.puttagangaiah@intel.com>2021-10-01 20:39:14 +0530
committerAleksander Morgado <aleksander@aleksander.es>2021-10-25 12:48:51 +0200
commitee9eea63160664c4e28ae73e112ca582f0c4621f (patch)
tree7d1bb9aa4af0f4332390ca2f78333af58528ae55
parent9eb738c0d632112daad3a5575de0b58d58bd94b2 (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.json17
-rwxr-xr-xdocs/reference/libmbim-glib/libmbim-glib-common.sections5
-rw-r--r--src/libmbim-glib/mbim-cid.h2
-rw-r--r--src/libmbim-glib/mbim-enums.h18
-rw-r--r--src/mbimcli/mbimcli-ms-basic-connect-extensions.c65
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 ();
}