summaryrefslogtreecommitdiff
path: root/src/mbimcli/mbimcli-ms-basic-connect-extensions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbimcli/mbimcli-ms-basic-connect-extensions.c')
-rw-r--r--src/mbimcli/mbimcli-ms-basic-connect-extensions.c89
1 files changed, 79 insertions, 10 deletions
diff --git a/src/mbimcli/mbimcli-ms-basic-connect-extensions.c b/src/mbimcli/mbimcli-ms-basic-connect-extensions.c
index e7cbe62..3149b70 100644
--- a/src/mbimcli/mbimcli-ms-basic-connect-extensions.c
+++ b/src/mbimcli/mbimcli-ms-basic-connect-extensions.c
@@ -1548,9 +1548,7 @@ query_wake_reason_ready (MbimDevice *device,
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;
+ MbimTlv *wake_tlv = NULL;
response = mbim_device_command_finish (device, res, &error);
if (!response || !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error)) {
@@ -1563,8 +1561,7 @@ query_wake_reason_ready (MbimDevice *device,
response,
&wake_type,
&session_id,
- &data_buffer_size,
- &data_buffer,
+ &wake_tlv,
&error)) {
g_printerr ("error: couldn't parse response message: %s\n", error->message);
shutdown (FALSE);
@@ -1574,12 +1571,84 @@ query_wake_reason_ready (MbimDevice *device,
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);
+ g_print ("\t Wake type: '%s'\n", mbim_wake_type_get_string (wake_type));
+ g_print ("\tSession ID: '%u'\n", session_id);
+
+ if ((wake_type == MBIM_WAKE_TYPE_CID_RESPONSE) ||
+ (wake_type == MBIM_WAKE_TYPE_CID_INDICATION)) {
+ const MbimUuid *service = NULL;
+ g_autofree gchar *service_str = NULL;
+ guint32 cid = 0;
+ guint32 payload_size = 0;
+ g_autofree guint8 *payload = NULL;
+ g_autofree gchar *payload_str = NULL;
+
+ if (!mbim_tlv_wake_command_get (wake_tlv,
+ &service,
+ &cid,
+ &payload_size,
+ &payload,
+ &error)) {
+ g_printerr ("error: couldn't parse wake command TLV: %s\n", error->message);
+ shutdown (FALSE);
+ return;
+ }
- shutdown (TRUE);
+ /* Known payload defined right now only for the Connect CID */
+ if ((mbim_uuid_to_service (service) == MBIM_SERVICE_BASIC_CONNECT) &&
+ (cid == MBIM_CID_BASIC_CONNECT_CONNECT) &&
+ (payload_size == 4)) {
+ guint32 activate;
+
+ memcpy (&activate, payload, payload_size);
+ activate = GUINT32_FROM_LE (activate);
+ if (activate == 0x00000001 || activate == 0x00000000)
+ payload_str = g_strdup (activate ? "activate" : "deactivate");
+ }
+
+ if (!payload_str)
+ payload_str = mbim_common_str_hex (payload, payload_size, ':');
+
+ service_str = mbim_uuid_get_printable (service);
+
+ g_print ("\t Service: '%s'\n", service_str);
+ g_print ("\t CID: '0x%08x'\n", cid);
+ g_print ("\t Payload: '%s'\n", payload_str);
+ shutdown (TRUE);
+ return;
+ }
+
+ if (wake_type == MBIM_WAKE_TYPE_PACKET) {
+ guint32 filter_id = 0;
+ guint32 original_packet_size = 0;
+ guint32 packet_size = 0;
+ g_autofree guint8 *packet = NULL;
+ g_autofree gchar *packet_str = NULL;
+
+ if (!mbim_tlv_wake_packet_get (wake_tlv,
+ &filter_id,
+ &original_packet_size,
+ &packet_size,
+ &packet,
+ &error)) {
+ g_printerr ("error: couldn't parse wake packet TLV: %s\n", error->message);
+ shutdown (FALSE);
+ return;
+ }
+
+ packet_str = mbim_common_str_hex (packet, packet_size, ':');
+
+ g_print ("\t Filter ID: '%u'\n", filter_id);
+ g_print ("\tOriginal size: '%u'\n", original_packet_size);
+ g_print ("\t Saved size: '%u'\n", packet_size);
+ g_print ("\t Packet: '%s'\n", packet_str);
+
+ shutdown (TRUE);
+ return;
+ }
+
+ g_printerr ("error: unknown wake type: 0x%08x\n", wake_type);
+ shutdown (FALSE);
}
void