diff --git a/src/plugins/intel/mm-bearer-xmm7360.c b/src/plugins/intel/mm-bearer-xmm7360.c index 7ca3ad0e..e5d41444 100644 --- a/src/plugins/intel/mm-bearer-xmm7360.c +++ b/src/plugins/intel/mm-bearer-xmm7360.c @@ -274,12 +274,22 @@ get_dns_ready (MMBroadbandModemXmm7360 *modem, arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, i + 1); if (XMM7360_RPC_MSG_ARG_GET_INT (arg) == 1) { arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, i); - g_assert (arg->size >= 4); + if (arg->size < 4) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unexpected DNSv4 address format"); + g_object_unref (task); + return; + } g_ptr_array_add (ctx->dns, g_inet_address_new_from_bytes ((const guint8 *)arg->value.string, G_SOCKET_FAMILY_IPV4)); } else if (XMM7360_RPC_MSG_ARG_GET_INT (arg) == 2) { arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, i); - g_assert (arg->size >= 16); + if (arg->size < 16) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unexpected DNSv6 address format"); + g_object_unref (task); + return; + } g_ptr_array_add (ctx->dns, g_inet_address_new_from_bytes ((const guint8 *)arg->value.string, G_SOCKET_FAMILY_IPV6)); } @@ -458,7 +468,12 @@ net_attach_command_ready (MMBroadbandModemXmm7360 *modem, /* status code */ arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, 1); - g_assert (arg->type == XMM7360_RPC_MSG_ARG_TYPE_LONG); + if (arg->type != XMM7360_RPC_MSG_ARG_TYPE_LONG) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unexpected net attach command response"); + g_object_unref (task); + return; + } status = XMM7360_RPC_MSG_ARG_GET_INT (arg); if (status != (gint32)0xffffffff) { diff --git a/src/plugins/intel/mm-broadband-modem-xmm7360.c b/src/plugins/intel/mm-broadband-modem-xmm7360.c index 3f9260c9..fc366228 100644 --- a/src/plugins/intel/mm-broadband-modem-xmm7360.c +++ b/src/plugins/intel/mm-broadband-modem-xmm7360.c @@ -472,8 +472,7 @@ fcc_unlock_ready (MMBroadbandModem *self, return; } arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, 0); - g_assert (arg->type == XMM7360_RPC_MSG_ARG_TYPE_LONG); - if (XMM7360_RPC_MSG_ARG_GET_INT (arg) != 1) { + if ((arg->type != XMM7360_RPC_MSG_ARG_TYPE_LONG) || (XMM7360_RPC_MSG_ARG_GET_INT (arg) != 1)) { g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Our answer to the FCC unlock challenge was not accepted"); g_object_unref (task); @@ -496,7 +495,7 @@ fcc_unlock_challenge_ready (MMBroadbandModem *self, Xmm7360RpcMsgArg *arg; gint32 fcc_challenge; GChecksum *checksum; - guchar salt[] = { 0x3d, 0xf8, 0xc7, 0x19 }; + const guchar salt[] = { 0x3d, 0xf8, 0xc7, 0x19 }; guint8 digest[32] = { 0 }; gsize digest_len = 32; g_autoptr(GByteArray) digest_response = NULL; @@ -512,7 +511,12 @@ fcc_unlock_challenge_ready (MMBroadbandModem *self, } arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, 1); - g_assert (arg->type == XMM7360_RPC_MSG_ARG_TYPE_LONG); + if (arg->type != XMM7360_RPC_MSG_ARG_TYPE_LONG) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unexpected response to FCC unlock challenge request"); + g_object_unref (task); + return; + } fcc_challenge = XMM7360_RPC_MSG_ARG_GET_INT (arg); checksum = g_checksum_new (G_CHECKSUM_SHA256); @@ -566,7 +570,12 @@ fcc_lock_query_ready (MMBroadbandModem *self, /* second argument is fcc_state */ arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, 1); - g_assert (arg->type == XMM7360_RPC_MSG_ARG_TYPE_LONG); + if (arg->type != XMM7360_RPC_MSG_ARG_TYPE_LONG) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unexpected FCC check fcc_state type"); + g_object_unref (task); + return; + } if (XMM7360_RPC_MSG_ARG_GET_INT (arg)) { /* no FCC unlock required: FCC state is != 0 */ g_task_return_boolean (task, FALSE); @@ -576,7 +585,12 @@ fcc_lock_query_ready (MMBroadbandModem *self, /* third argument is fcc_mode */ arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, 2); - g_assert (arg->type == XMM7360_RPC_MSG_ARG_TYPE_LONG); + if (arg->type != XMM7360_RPC_MSG_ARG_TYPE_LONG) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Unexpected FCC check fcc_mode type"); + g_object_unref (task); + return; + } if (!XMM7360_RPC_MSG_ARG_GET_INT (arg)) { /* no FCC unlock required: FCC mode is == 0 */ g_task_return_boolean (task, FALSE); diff --git a/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.c b/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.c index ad5aed4f..ddce64b5 100644 --- a/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.c +++ b/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.c @@ -33,194 +33,6 @@ struct _MMPortSerialXmmrpcXmm7360Private { guint unsolicited_msg_handlers_i; }; -static void -xmm7360_rpc_msg_arg_free (Xmm7360RpcMsgArg *arg) -{ - if (arg->type == XMM7360_RPC_MSG_ARG_TYPE_STRING) { - g_free ((gchar *) arg->value.string); - } - g_free (arg); -} - -void -xmm7360_rpc_response_free (Xmm7360RpcResponse *response) -{ - if (response) { - g_byte_array_free (response->body, TRUE); - g_ptr_array_free (response->content, TRUE); - g_free (response); - } -} - -static gint -xmm7360_byte_array_read_asn_int (GByteArray *buf, gsize *offset, Xmm7360RpcMsgArg *arg) -{ - gint size; - gint bytes_read; - gint val; - - g_assert (buf->len > *offset + 2); - - /* check ASN start byte and read int size */ - g_assert (buf->data[(*offset)++] == 0x02); - size = buf->data[(*offset)++]; - - /* read actual value byte by byte */ - g_assert (buf->len >= *offset + size); - val = 0; - for (bytes_read = 0; bytes_read < size; bytes_read++) { - val <<= 8; - val |= buf->data[(*offset)++]; - } - - if (arg != NULL) { - if (size == 0x01) { - arg->type = XMM7360_RPC_MSG_ARG_TYPE_BYTE; - arg->value.b = (gint8) val; - } else if (size == 0x02) { - arg->type = XMM7360_RPC_MSG_ARG_TYPE_SHORT; - arg->value.s = (gint16) val; - } else { - arg->type = XMM7360_RPC_MSG_ARG_TYPE_LONG; - arg->value.l = (gint32) val; - } - } - - return val; -} - -static gchar * -xmm7360_byte_array_read_string (GByteArray *buf, gsize *offset, gsize *string_len) -{ - guchar string_type; - gsize string_len_padded; - gsize pad_len; - gchar *result; - - g_assert (buf->len > *offset + 2); - - string_type = buf->data[(*offset)++]; - g_assert (string_type == 0x55 || string_type == 0x56 || string_type == 0x57); - - *string_len = buf->data[(*offset)++]; - if (*string_len & 0x80) { - guchar bytelen; - guchar i; - - bytelen = *string_len & 0x0f; - *string_len = 0; - g_assert (bytelen <= 4); - g_assert (buf->len > *offset + bytelen); - for (i = 0; i < bytelen; i++) { - *string_len |= buf->data[(*offset)++] << (i * 8); - } - } - - if (string_type == 0x56) { - /* 0x56 contains 2-byte chars */ - *string_len <<= 1; - } else if (string_type == 0x57) { - /* 0x57 contains 4-byte chars */ - *string_len <<= 2; - } - - string_len_padded = (gsize) xmm7360_byte_array_read_asn_int (buf, offset, NULL); - pad_len = (gsize) xmm7360_byte_array_read_asn_int (buf, offset, NULL); - - if (string_len_padded > 0) { - g_assert (string_len_padded == *string_len + pad_len); - } else { - string_len_padded = *string_len + pad_len; - } - - /* make sure the buffer is large enough */ - g_assert (buf->len >= *offset + string_len_padded); - - /* copy the result */ - result = g_malloc (*string_len); - memcpy (result, &(buf->data[*offset]), *string_len); - - /* move pointer to the end of the string data */ - *offset += (*string_len + pad_len); - - return result; -} - - -void -xmm7360_byte_array_append_asn_int4 (GByteArray *buf, gint32 value) -{ - gint32 value_be = GINT32_TO_BE (value); - g_byte_array_append (buf, (const guint8 *) "\x02\x04", 2); - g_byte_array_append (buf, (const guint8 *) &value_be, 4); -} - -static void -xmm7360_byte_array_append_uint8 (GByteArray *buf, gulong val) -{ - guint8 _val = (guint8) val; - g_byte_array_append (buf, &_val, 1); -} - -static void -xmm7360_byte_array_append_string (GByteArray *buf, - const guint8 *data, - gsize data_len, - guint data_len_padded) -{ - gsize i; - gsize pad_len; - - g_assert (data_len_padded >= data_len); - pad_len = data_len_padded - data_len; - - /* only support 1-byte element size */ - xmm7360_byte_array_append_uint8 (buf, 0x55); - - if (data_len < 0x80) { - xmm7360_byte_array_append_uint8 (buf, data_len); - } else { - guchar bytelen = 0x80; - /* write dummy first byte (updated later) */ - xmm7360_byte_array_append_uint8 (buf, bytelen); - for (i = data_len; i > 0; i >>= 8) { - bytelen++; - xmm7360_byte_array_append_uint8 (buf, i & 0xff); - } - /* update first byte */ - buf->data[buf->len - 1 - (bytelen & 0x7f)] = bytelen; - } - - xmm7360_byte_array_append_asn_int4 (buf, data_len_padded); - xmm7360_byte_array_append_asn_int4 (buf, pad_len); - g_byte_array_append (buf, data, data_len); - for (i = 0; i < pad_len; i++) { - xmm7360_byte_array_append_uint8 (buf, 0); - } -} - -static GString * -xmm7360_byte_array_hexlify (GByteArray *buf) { - GString *string; - gsize i; - - string = g_string_sized_new (2 * buf->len + 1); - for (i = 0; i < buf->len; i++) { - g_string_append_printf (string, "%02x", buf->data[i]); - } - g_string_append (string, ""); - - /* truncate very long strings to avoid overly verbose logs */ - if (string->len > 64) { - gsize string_len; - string_len = string->len; - g_string_truncate (string, 48); - g_string_append_printf (string, "... (%" G_GSIZE_FORMAT " chars)", string_len); - } - - return string; -} - static void xmm7360_byte_array_log (gpointer obj, const gchar *prefix, GByteArray *buf) { @@ -231,46 +43,6 @@ xmm7360_byte_array_log (gpointer obj, const gchar *prefix, GByteArray *buf) g_string_free (hexlified, TRUE); } -static GString * -xmm7360_rpc_args_to_string (GPtrArray *args) -{ - guint i; - GString *result; - Xmm7360RpcMsgArg *arg; - gint16 arg_value_short; - gint32 arg_value_long; - - result = g_string_new (""); - - for (i = 0; i < args->len; i++) { - arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (args, i); - if (i > 0) { - g_string_append (result, " "); - } - switch (arg->type) { - case XMM7360_RPC_MSG_ARG_TYPE_BYTE: - g_string_append_printf (result, "B(0x%02x)", arg->value.b); - break; - case XMM7360_RPC_MSG_ARG_TYPE_SHORT: - arg_value_short = GINT16_TO_BE (arg->value.s); - g_string_append_printf (result, "S(0x%04x)", arg_value_short); - break; - case XMM7360_RPC_MSG_ARG_TYPE_LONG: - arg_value_long = GINT32_TO_BE (arg->value.l); - g_string_append_printf (result, "L(0x%08x)", arg_value_long); - break; - case XMM7360_RPC_MSG_ARG_TYPE_STRING: - g_string_append_printf (result, "STR(size=%" G_GSIZE_FORMAT ")", arg->size); - break; - case XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN: - default: - g_assert_not_reached (); - } - } - - return result; -} - static void xmm7360_rpc_msg_args_log (gpointer obj, const gchar *prefix, GPtrArray *args) { @@ -288,213 +60,6 @@ xmm7360_rpc_msg_args_log (gpointer obj, const gchar *prefix, GPtrArray *args) g_string_free (args_string, TRUE); } -GByteArray * -xmm7360_rpc_args_to_byte_array (const Xmm7360RpcMsgArg *args) -{ - GByteArray *result; - gint16 arg_value_short; - gint32 arg_value_long; - - if (args == NULL) - return NULL; - - result = g_byte_array_new (); - for (; args->type != XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN; args++) { - switch (args->type) { - case XMM7360_RPC_MSG_ARG_TYPE_BYTE: - g_byte_array_append (result, (guint8[]) { 0x02, 0x01 }, 2); - g_byte_array_append (result, (guint8 *) &(args->value.b), 1); - break; - case XMM7360_RPC_MSG_ARG_TYPE_SHORT: - arg_value_short = GINT16_TO_BE (args->value.s); - g_byte_array_append (result, (guint8[]) { 0x02, 0x02 }, 2); - g_byte_array_append (result, (guint8 *) &arg_value_short, 2); - break; - case XMM7360_RPC_MSG_ARG_TYPE_LONG: - arg_value_long = GINT32_TO_BE (args->value.l); - g_byte_array_append (result, (guint8[]) { 0x02, 0x04 }, 2); - g_byte_array_append (result, (guint8 *) &arg_value_long, 4); - break; - case XMM7360_RPC_MSG_ARG_TYPE_STRING: - xmm7360_byte_array_append_string (result, - (const guint8 *) args->value.string, - args->size, - args->size + args->pad); - break; - case XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN: - default: - /* should be unreachable */ - return NULL; - } - } - return result; -} - -static GByteArray * -xmm7360_command_to_byte_array (Xmm7360RpcCallId callid, - gboolean is_async, - GByteArray *body) -{ - GByteArray *buf; - gint32 tid; - gint32 tid_word; - gint32 tid_word_be; - guint32 total_len; - - buf = g_byte_array_sized_new (22); - - if (body == NULL) { - body = g_byte_array_new (); - xmm7360_byte_array_append_asn_int4 (body, 0); - } else { - g_byte_array_ref (body); - } - - if (is_async) { - tid = 0x11000101; - } else { - tid = 0; - } - tid_word = 0x11000100 | tid; - - total_len = body->len + 16; - if (tid) { - total_len += 6; - } - g_byte_array_append (buf, (const guint8 *) &total_len, 4); - xmm7360_byte_array_append_asn_int4 (buf, total_len); - xmm7360_byte_array_append_asn_int4 (buf, callid); - tid_word_be = GINT32_TO_BE (tid_word); - g_byte_array_append (buf, (const guint8 *) &tid_word_be, 4); - if (tid) { - xmm7360_byte_array_append_asn_int4 (buf, tid); - } - - g_assert (total_len == buf->len + body->len - 4); - g_byte_array_append (buf, (const guint8 *) body->data, body->len); - g_byte_array_unref (body); - - return buf; -} - -static int -xmm7360_rpc_msg_body_unpack (GByteArray *buf, GPtrArray *args, GError **error) -{ - GError *inner_error = NULL; - gsize offset; - gchar *str_value; - Xmm7360RpcMsgArg *arg; - - g_assert (buf != NULL && args != NULL); - - offset = 0; - while (offset < buf->len) { - arg = g_new0 (Xmm7360RpcMsgArg, 1); - arg->size = 0; - switch (buf->data[offset]) { - case 0x02: - xmm7360_byte_array_read_asn_int (buf, &offset, arg); - break; - case 0x55: - case 0x56: - case 0x57: - arg->type = XMM7360_RPC_MSG_ARG_TYPE_STRING; - str_value = xmm7360_byte_array_read_string (buf, &offset, &arg->size); - if (str_value == NULL) { - inner_error = g_error_new (MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Parsing a string failed"); - goto out; - } - arg->value.string = str_value; - break; - default: - arg->type = XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN; - inner_error = g_error_new (MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Unknown type 0x%x", - buf->data[offset]); - goto out; - } - g_ptr_array_add (args, arg); - } - -out: - if (inner_error) { - g_propagate_error (error, inner_error); - return -1; - } - - return 0; -} - -static Xmm7360RpcResponse * -parse_response_xmm7360 (GByteArray *buf) -{ - GError *error = NULL; - Xmm7360RpcResponse *response = NULL; - gsize offset; - Xmm7360RpcMsgArg *arg; - - /* first 20 bytes are format header: - * message size ( int32, 4) - * message size (again!) (asn int, 6) - * unsolicited message id (asn int, 6) - * transmission id ( int32, 4) - */ - g_assert (buf->len > 20); - - offset = 4; - if (*(gint32 *) buf->data != xmm7360_byte_array_read_asn_int (buf, &offset, NULL)) { - mm_obj_dbg (NULL, "error parsing RPC message: length mismatch"); - goto err; - } - - /* initialize all fields of the response */ - response = g_new0 (Xmm7360RpcResponse, 1); - response->id = GINT32_FROM_BE (*(gint32 *) (buf->data + 16)); - response->type = XMM7360_RPC_RESPONSE_TYPE_UNKNOWN; - response->unsol_id = xmm7360_byte_array_read_asn_int (buf, &offset, NULL); - response->body = g_byte_array_new (); - response->content = g_ptr_array_new_with_free_func ((GDestroyNotify)xmm7360_rpc_msg_arg_free); - - g_byte_array_append (response->body, &buf->data[20], buf->len - 20); - if (xmm7360_rpc_msg_body_unpack (response->body, response->content, &error) != 0) { - mm_obj_dbg (NULL, "error parsing RPC message: unpacking failed: %s", error->message); - g_error_free (error); - goto err; - } - - if (response->id == 0x11000100) { - response->type = XMM7360_RPC_RESPONSE_TYPE_RESPONSE; - } else if ((response->id & 0xffffff00) == 0x11000100) { - if (response->unsol_id >= 0x7d0) { - response->type = XMM7360_RPC_RESPONSE_TYPE_ASYNC_ACK; - } else { - response->type = XMM7360_RPC_RESPONSE_TYPE_RESPONSE; - - /* discard first element in content (equals transmission id) */ - arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, 0); - if (arg->type != XMM7360_RPC_MSG_ARG_TYPE_LONG - || (guint32) XMM7360_RPC_MSG_ARG_GET_INT (arg) != response->id) { - mm_obj_dbg (NULL, "error parsing RPC message: invalid start of async response body"); - goto err; - } - g_ptr_array_remove_index (response->content, 0); - g_byte_array_remove_range (response->body, 0, 6); - } - } else { - response->type = XMM7360_RPC_RESPONSE_TYPE_UNSOLICITED; - } - - return response; - -err: - if (response) - xmm7360_rpc_response_free (response); - return NULL; -} - static MMPortSerialResponseType parse_response (MMPortSerial *port, GByteArray *response_buffer, @@ -530,7 +95,11 @@ serial_command_ready (MMPortSerial *port, return; } - response = parse_response_xmm7360 (response_buffer); + response = xmm7360_parse_response (response_buffer, &error); + if (!response) { + mm_obj_dbg (port, "%s", error->message); + g_clear_error (&error); + } if (response_buffer->len > 0) g_byte_array_remove_range (response_buffer, 0, response_buffer->len); g_byte_array_unref (response_buffer); @@ -649,13 +218,14 @@ mm_port_serial_xmmrpc_xmm7360_enable_unsolicited_msg_handler (MMPortSerialXmmrpc static void parse_unsolicited (MMPortSerial *port, GByteArray *response_buffer) { - MMPortSerialXmmrpcXmm7360 *self = MM_PORT_SERIAL_XMMRPC_XMM7360 (port); - g_autoptr(Xmm7360RpcResponse) response = NULL; + MMPortSerialXmmrpcXmm7360 *self = MM_PORT_SERIAL_XMMRPC_XMM7360 (port); + g_autoptr(Xmm7360RpcResponse) response = NULL; + g_autoptr(GError) error = NULL; GSList *iter; - response = parse_response_xmm7360 (response_buffer); - + response = xmm7360_parse_response (response_buffer, &error); if (!response) { + mm_obj_dbg (port, "%s", error->message); return; } diff --git a/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.h b/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.h index 59cc0dd6..31efaef2 100644 --- a/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.h +++ b/src/plugins/intel/mm-port-serial-xmmrpc-xmm7360.h @@ -23,509 +23,7 @@ #include #include "mm-port-serial.h" - -typedef enum { - XMM7360_RPC_CALL_UTA_MS_SIM_OPEN_REQ = 0x001, - XMM7360_RPC_CALL_UTA_MS_SIM_APDU_CMD_REQ = 0x002, - XMM7360_RPC_CALL_UTA_MS_SIM_APPLICATION_REQ = 0x004, - XMM7360_RPC_CALL_UTA_MS_SIM_DECODE_FCP = 0x006, - XMM7360_RPC_CALL_UTA_MS_SIM_PB_READ_ENTRY_REQ = 0x00d, - XMM7360_RPC_CALL_UTA_MS_SIM_GEN_PIN_REQ = 0x00f, - XMM7360_RPC_CALL_UTA_MS_SIM_MODIFY_LOCK_REQ = 0x011, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_PROACTIVE_COMMAND_RSP = 0x016, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_ENVELOPE_COMMAND_REQ = 0x017, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_TERMINAL_PROFILE_READ_REQ = 0x019, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_REGISTER_HANDLER = 0x01c, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_DEREGISTER_HANDLER = 0x01d, - XMM7360_RPC_CALL_UTA_MS_CPS_SET_MODE_REQ = 0x01f, - XMM7360_RPC_CALL_UTA_MS_CPS_SET_STACK_MODE_CONFIGURATION = 0x020, - XMM7360_RPC_CALL_UTA_MS_CPS_SET_SIM_MODE_CONFIGURATION = 0x021, - XMM7360_RPC_CALL_UTA_MS_CPS_READ_IMEI = 0x023, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_INIT = 0x024, - XMM7360_RPC_CALL_UTA_MS_CBS_INIT = 0x025, - XMM7360_RPC_CALL_UTA_MS_SS_INIT = 0x026, - XMM7360_RPC_CALL_UTA_MS_SS_SEND_USSD_REQ = 0x027, - XMM7360_RPC_CALL_UTA_MS_SS_RESPOND_USSD = 0x028, - XMM7360_RPC_CALL_UTA_MS_SS_ABORT = 0x029, - XMM7360_RPC_CALL_UTA_MS_SMS_INIT = 0x030, - XMM7360_RPC_CALL_UTA_MS_SMS_SEND_REQ = 0x031, - XMM7360_RPC_CALL_UTA_MS_SMS_SET_MEMORY_AVAILABLE_REQ = 0x034, - XMM7360_RPC_CALL_UTA_MS_SMS_INCOMING_SMS_ACK = 0x036, - XMM7360_RPC_CALL_UTA_MS_SMS_SIM_MSG_COUNT_REQ = 0x038, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_INITIALIZE = 0x03a, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_OBTAIN_PDP_CONTEXT_ID = 0x03b, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_RELEASE_PDP_CONTEXT_ID = 0x03c, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_DEFINE_PRIMARY_REQ = 0x03d, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_UNDEFINE_PRIMARY_REQ = 0x03f, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_PRIMARY_REQ = 0x041, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_AUTHENTICATION_REQ = 0x043, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_DNS_REQ = 0x045, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NEGOTIATED_DNS_REQ = 0x047, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NEG_IP_ADDR_REQ = 0x049, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_ACTIVATE_REQ = 0x04b, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_DEACTIVATE_REQ = 0x04e, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_CONNECT_REQ = 0x051, - XMM7360_RPC_CALL_UTA_MS_NET_OPEN = 0x053, - XMM7360_RPC_CALL_UTA_MS_NET_SET_RADIO_SIGNAL_REPORTING = 0x054, - XMM7360_RPC_CALL_UTA_MS_NET_SINGLE_SHOT_RADIO_SIGNAL_REPORTING_REQ = 0x055, - XMM7360_RPC_CALL_UTA_MS_NET_ATTACH_REQ = 0x05c, - XMM7360_RPC_CALL_UTA_MS_NET_PS_ATTACH_REQ = 0x05d, - XMM7360_RPC_CALL_UTA_MS_NET_PS_DETACH_REQ = 0x05e, - XMM7360_RPC_CALL_UTA_MS_NET_SCAN_REQ = 0x05f, - XMM7360_RPC_CALL_UTA_MS_NET_SCAN_ABORT = 0x060, - XMM7360_RPC_CALL_UTA_MS_NET_POWER_DOWN_REQ = 0x061, - XMM7360_RPC_CALL_UTA_MS_NET_EXT_SCAN_REQ = 0x062, - XMM7360_RPC_CALL_UTA_MS_NET_SET_FD_CONFIG_REQ = 0x06e, - XMM7360_RPC_CALL_UTA_MS_NET_GET_FD_CONFIG_REQ = 0x071, - XMM7360_RPC_CALL_UTA_MS_NET_CONFIGURE_NETWORK_MODE_REQ = 0x073, - XMM7360_RPC_CALL_UTA_MS_NET_RAT_MODE_STATUS_REQ = 0x076, - XMM7360_RPC_CALL_UTA_NVM_READ = 0x079, - XMM7360_RPC_CALL_UTA_NVM_WRITE = 0x07a, - XMM7360_RPC_CALL_UTA_NVM_WRITE_COMMIT = 0x07b, - XMM7360_RPC_CALL_UTA_SYS_GET_INFO = 0x07c, - XMM7360_RPC_CALL_UTA_RPC_PS_CONNECT_SETUP_REQ = 0x07d, - XMM7360_RPC_CALL_UTA_RPC_PS_CONNECT_TO_DATACHANNEL_REQ = 0x07e, - XMM7360_RPC_CALL_UTA_RPC_PS_CONNECT_RELEASE_REQ = 0x07f, - XMM7360_RPC_CALL_UTA_MS_NET_DC_SET_VOICE_DOMAIN_PREFERENCE_CONFIG_REQ = 0x080, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_SETUP_VOICE_CALL_REQ = 0x082, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_RELEASE_CALL_REQ = 0x088, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_ACCEPT_CALL_REQ = 0x08d, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_SWAP_CALLS_REQ = 0x090, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_HOLD_CALL_REQ = 0x092, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_RETRIEVE_CALL_REQ = 0x094, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_SPLIT_MPTY_REQ = 0x096, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_JOIN_CALLS_REQ = 0x098, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_TRANSFER_CALLS_REQ = 0x09a, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_START_DTMF_REQ = 0x09c, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_STOP_DTMF_REQ = 0x09e, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_SET_UUS1_INFO = 0x0a6, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_SET_TTY_DEVICE_MODE = 0x0a7, - XMM7360_RPC_CALL_UTA_MS_CALL_CS_GET_TTY_DEVICE_MODE = 0x0a8, - XMM7360_RPC_CALL_UTA_MS_CALL_MULTIMEDIA_SETUP_CALL_REQ = 0x0ac, - XMM7360_RPC_CALL_UTA_MS_CALL_MULTIMEDIA_UPDATE_CALL_REQ = 0x0ad, - XMM7360_RPC_CALL_UTA_MS_CPS_SET_SIM_MODE_REQ = 0x0b0, - XMM7360_RPC_CALL_UTA_MS_SS_CALL_FORWARD_REQ = 0x0b2, - XMM7360_RPC_CALL_UTA_MS_SS_CALL_WAITING_REQ = 0x0b4, - XMM7360_RPC_CALL_UTA_MS_SS_CALL_BARRING_REQ = 0x0b6, - XMM7360_RPC_CALL_UTA_MS_SS_IDENTIFICATION_REQ = 0x0b8, - XMM7360_RPC_CALL_UTA_MS_SMS_SET_SEND_MORE_MESSAGES_STATUS = 0x0ba, - XMM7360_RPC_CALL_UTA_MS_SMS_DATA_DOWNLOAD_REQ = 0x0bb, - XMM7360_RPC_CALL_UTA_MS_SMS_DATA_DOWNLOAD_ACK = 0x0bd, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NEG_QOS_REQ = 0x0be, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_TFT_REQ = 0x0c0, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_PCO_REQ = 0x0c2, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NW_PCO_REQ = 0x0c4, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_NW_ACTIVATE_ACCEPT_REQ = 0x0c7, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_NW_ACTIVATE_REJECT_REQ = 0x0c9, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_DATA_PREF_REQ = 0x0cd, - XMM7360_RPC_CALL_UTA_MS_CBS_START_REQ = 0x0cf, - XMM7360_RPC_CALL_UTA_MS_CBS_STOP_REQ = 0x0d0, - XMM7360_RPC_CALL_UTA_MS_CBS_SET_MSG_FILTER = 0x0d3, - XMM7360_RPC_CALL_UTA_MS_CBS_GET_MSG_FILTER = 0x0d4, - XMM7360_RPC_CALL_UTA_MS_CBS_ETWS_CONFIG_REQ = 0x0d6, - XMM7360_RPC_CALL_UTA_MS_CBS_ETWS_START_REQ = 0x0d8, - XMM7360_RPC_CALL_UTA_MS_CBS_ETWS_STOP_REQ = 0x0da, - XMM7360_RPC_CALL_UTA_MS_CPS_NVM_WRITE = 0x0de, - XMM7360_RPC_CALL_UTA_MS_CPS_NVM_READ = 0x0df, - XMM7360_RPC_CALL_UTA_MS_NET_CONFIGURE_RX_DIVERSITY_DARP = 0x0e0, - XMM7360_RPC_CALL_UTA_MS_NET_LDR_GET_APN_PARAMETER_LIST = 0x0e2, - XMM7360_RPC_CALL_UTA_MS_NET_TIME_INFO_READ_REQ = 0x0e3, - XMM7360_RPC_CALL_UTA_MS_NET_SET_CSG_CONFIG_REQ = 0x0e6, - XMM7360_RPC_CALL_UTA_MS_NET_BAND_STATUS_REQ = 0x0e7, - XMM7360_RPC_CALL_UTA_MS_NET_GET_EXTENDED_RADIO_SIGNAL_INFO_REQ = 0x0ec, - XMM7360_RPC_CALL_UTA_MS_NET_DETACH_REQ = 0x0ef, - XMM7360_RPC_CALL_UTA_MS_NET_SELECT_GPRS_CLASS_REQ = 0x0f1, - XMM7360_RPC_CALL_UTA_MS_NET_GET_CSG_CONFIG_REQ = 0x0f3, - XMM7360_RPC_CALL_UTA_MS_NET_CS_SERVICE_NOTIFICATION_ACCEPT = 0x0f4, - XMM7360_RPC_CALL_UTA_MS_NET_SINGLE_SHOT_FD_REQ = 0x0f9, - XMM7360_RPC_CALL_UTA_MS_SIM_PB_LOCATION_REQ = 0x0fb, - XMM7360_RPC_CALL_UTA_MS_SIM_PB_READ_GAS_ENTRY_REQ = 0x0fd, - XMM7360_RPC_CALL_UTA_MS_SIM_PB_WRITE_ENTRY_REQ = 0x0ff, - XMM7360_RPC_CALL_UTA_MS_SIM_PB_GET_META_INFORMATION_REQ = 0x101, - XMM7360_RPC_CALL_UTA_MS_SIM_PB_USIM_PB_SELECT_REQ = 0x103, - XMM7360_RPC_CALL_UTA_MS_SIM_PB_GET_FREE_RECORDS_REQ = 0x105, - XMM7360_RPC_CALL_UTA_MS_SIM_CREATE_READ_BINARY_APDU = 0x10a, - XMM7360_RPC_CALL_UTA_MS_SIM_CREATE_UPDATE_BINARY_APDU = 0x10b, - XMM7360_RPC_CALL_UTA_MS_SIM_ANALYSE_READ_RESULT = 0x10c, - XMM7360_RPC_CALL_UTA_MS_SIM_SET_FDN_REQ = 0x10e, - XMM7360_RPC_CALL_SET_AP_SCREEN_STATE = 0x110, - XMM7360_RPC_CALL_UTA_IO_CTL = 0x111, - XMM7360_RPC_CALL_UTA_IDC_AP_MSG_SET_REQ = 0x114, - XMM7360_RPC_CALL_UTA_IDC_AP_MSG_GET_REQ = 0x115, - XMM7360_RPC_CALL_UTA_IDC_ENBLE_REQ = 0x116, - XMM7360_RPC_CALL_UTA_IDC_CWS_MSG_SET_REQ = 0x119, - XMM7360_RPC_CALL_UTA_IDC_CWS_MSG_GET_REQ = 0x11a, - XMM7360_RPC_CALL_UTA_IDC_SUBSCRIBE_INDICATIONS = 0x11c, - XMM7360_RPC_CALL_UTA_IDC_UNSUBSCRIBE_INDICATIONS = 0x11d, - XMM7360_RPC_CALL_UTA_BOOT_PREPARE_SHUTDOWN_REQ = 0x11f, - XMM7360_RPC_CALL_UTA_BOOT_SHUTDOWN_REQ = 0x120, - XMM7360_RPC_CALL_UTA_RF_MAX_TX_PWR_SET_2G = 0x121, - XMM7360_RPC_CALL_UTA_RF_MAX_TX_PWR_SET_3G = 0x122, - XMM7360_RPC_CALL_UTA_RF_MAX_TX_PWR_SET_4G = 0x123, - XMM7360_RPC_CALL_UTA_FREQ_INFO_ACTIVATE_REQ = 0x128, - XMM7360_RPC_CALL_UTA_FREQ_INFO_GET_FREQ_INFO_REQ = 0x129, - XMM7360_RPC_CALL_UTA_FREQ_INFO_DEACTIVATE_REQ = 0x12a, - XMM7360_RPC_CALL_UTA_FREQ_INFO_REGISTER_INDICATIONS = 0x12b, - XMM7360_RPC_CALL_UTA_FREQ_INFO_DEREGISTER_INDICATIONS = 0x12c, - XMM7360_RPC_CALL_UTA_MODE_SET_REQ = 0x12f, - XMM7360_RPC_CALL_UTA_NVM_FLUSH_SYNC = 0x130, - XMM7360_RPC_CALL_UTA_PROD_REGISTER_GTI_CALLBACK_FUNC = 0x132, - XMM7360_RPC_CALL_UTA_PROD_GTI_CMD_REQ = 0x133, - XMM7360_RPC_CALL_UTA_CELL_TIME_STAMP_REQ = 0x134, - XMM7360_RPC_CALL_UTA_MS_SS_LCS_INIT = 0x136, - XMM7360_RPC_CALL_UTA_MS_SS_LCS_MO_LOCATION_REQ = 0x137, - XMM7360_RPC_CALL_UTA_MS_SS_LCS_MTLR_NOTIFICATION_RSP = 0x139, - XMM7360_RPC_CALL_UTA_MS_CP_ASSISTANCE_DATA_INJECT_REQ = 0x13c, - XMM7360_RPC_CALL_UTA_MS_CP_RESET_ASSISTANCE_DATA = 0x13d, - XMM7360_RPC_CALL_UTA_MS_CP_POS_MEASUREMENT_REQ = 0x140, - XMM7360_RPC_CALL_UTA_MS_CP_POS_MEASUREMENT_ABORT_REQ = 0x142, - XMM7360_RPC_CALL_UTA_MS_CP_POS_ENABLE_MEASUREMENT_REPORT = 0x144, - XMM7360_RPC_CALL_UTA_MS_CP_POS_DISABLE_MEASUREMENT_REPORT = 0x145, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_INIT = 0x146, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_SMS_PP_RSP = 0x148, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_SIM_INITIATED_CALL_RSP = 0x14a, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_SS_USSD_RSP = 0x14c, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_DTMF_RSP = 0x14e, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_STOP_DTMF_REQ = 0x150, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_REFRESH_CONFIRM_RSP = 0x152, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_REFRESH_FCN_RSP = 0x154, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_CONTROL_REQ = 0x155, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_TERMINAL_PROFILE_DOWNLOAD_REQ = 0x157, - XMM7360_RPC_CALL_UTA_MS_3GPP2_SMS_SEND_REQ = 0x15a, - XMM7360_RPC_CALL_UTA_MS_3GPP2_SMS_SUBSCRIBE_INDICATIONS = 0x15c, - XMM7360_RPC_CALL_UTA_MS_3GPP2_SMS_UNSUBSCRIBE_INDICATIONS = 0x15d, - XMM7360_RPC_CALL_RPC_GET_REMOTE_VER_INFO = 0x15e, - XMM7360_RPC_CALL_UTA_MS_METRICS_REGISTER_HANDLER = 0x160, - XMM7360_RPC_CALL_UTA_MS_METRICS_DEREGISTER_HANDLER = 0x161, - XMM7360_RPC_CALL_UTA_MS_METRICS_SET_OPTIONS = 0x162, - XMM7360_RPC_CALL_UTA_MS_METRICS_TRIGGER = 0x163, - XMM7360_RPC_CALL_UTA_MS_EMBMS_INIT = 0x164, - XMM7360_RPC_CALL_UTA_MS_EMBMS_SET_SERVICE_REQ = 0x165, - XMM7360_RPC_CALL_UTA_MS_EMBMS_MBSFN_AREA_CONFIG_REQ = 0x166, - XMM7360_RPC_CALL_UTA_MS_EMBMS_SESSION_CONFIG_REQ = 0x167, - XMM7360_RPC_CALL_UTA_MS_EMBMS_SET_INTERESTED_TMGI_LIST_REQ = 0x168, - XMM7360_RPC_CALL_UTA_MS_EMBMS_SET_INTERESTED_SAI_FREQ_REQ = 0x169, - XMM7360_RPC_CALL_UTA_IMS_SUBSCRIBE_INDICATIONS = 0x176, - XMM7360_RPC_CALL_UTA_IMS_UNSUBSCRIBE_INDICATIONS = 0x177, - XMM7360_RPC_CALL_UTA_IMS_GET_FRAMEWORK_STATE = 0x178, - XMM7360_RPC_CALL_UTA_RTC_GET_DATETIME = 0x179, - XMM7360_RPC_CALL_UTA_MS_SIM_ANALYSE_SIM_APDU_RESULT = 0x17a, - XMM7360_RPC_CALL_UTA_MS_SIM_OPEN_CHANNEL_REQ = 0x17b, - XMM7360_RPC_CALL_UTA_MS_SIM_CLOSE_CHANNEL_REQ = 0x17d, - XMM7360_RPC_CALL_UTA_MS_SIM_SET_BDN_REQ = 0x17f, - XMM7360_RPC_CALL_UTA_MS_SET_SIM_STACK_MAPPING_REQ = 0x181, - XMM7360_RPC_CALL_UTA_MS_GET_SIM_STACK_MAPPING_REQ = 0x183, - XMM7360_RPC_CALL_UTA_MS_NET_SET_RADIO_SIGNAL_REPORTING_CONFIGURATION = 0x188, - XMM7360_RPC_CALL_UTA_PC_IE_ENUMERATIONEXT_TOUT = 0x189, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_SET_TERMINAL_CAPABILITY_REQ = 0x18a, - XMM7360_RPC_CALL_UTA_MS_SIM_TK_READ_TERMINAL_CAPABILITY_REQ = 0x18c, - XMM7360_RPC_CALL_CSI_FCC_LOCK_QUERY_REQ = 0x18e, - XMM7360_RPC_CALL_CSI_FCC_LOCK_GEN_CHALLENGE_REQ = 0x190, - XMM7360_RPC_CALL_CSI_FCC_LOCK_VER_CHALLENGE_REQ = 0x192, - XMM7360_RPC_CALL_UTA_SENSOR_OPEN_REQ = 0x194, - XMM7360_RPC_CALL_UTA_SENSOR_CLOSE_EXT = 0x197, - XMM7360_RPC_CALL_UTA_SENSOR_START_EXT = 0x198, - XMM7360_RPC_CALL_UTA_SENSOR_SET_ALARM_PARAM_EXT = 0x199, - XMM7360_RPC_CALL_UTA_SENSOR_SET_SCHEDULER_PARAM_EXT = 0x19a, - XMM7360_RPC_CALL_CSI_SIO_IP_FILTER_CNTRL_SET_REQ = 0x19b, - XMM7360_RPC_CALL_UTA_MS_ACC_CURRENT_FREQ_INFO_REQ = 0x19d, - XMM7360_RPC_CALL_CSI_TRC_AT_CMND_REQ = 0x1a0, - XMM7360_RPC_CALL_UTA_MS_SIM_APDU_CMD_EXT_REQ = 0x1a2, - XMM7360_RPC_CALL_UTA_MS_NET_GET_PLMN_NAME_INFO_REQ = 0x1a4, - XMM7360_RPC_CALL_UTA_MS_NET_GET_COUNTRY_LIST_REQ = 0x1a7, - XMM7360_RPC_CALL_UTA_MS_NET_EXT_CONFIGURE_NETWORK_MODE_REQ = 0x1a9, - XMM7360_RPC_CALL_UTA_MS_NET_EXT_BAND_STATUS_REQ = 0x1ac, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_ATTACH_APN_CONFIG_REQ = 0x1af, - XMM7360_RPC_CALL_CSI_MS_CALL_PS_INITIALIZE = 0x1b1, - XMM7360_RPC_CALL_UTA_AUDIO_ENABLE_SOURCE = 0x1b2, - XMM7360_RPC_CALL_UTA_AUDIO_DISABLE_SOURCE = 0x1b3, - XMM7360_RPC_CALL_UTA_AUDIO_CONFIGURE_DESTINATION_EXT = 0x1b4, - XMM7360_RPC_CALL_UTA_AUDIO_SET_DESTINATIONS_FOR_SOURCE = 0x1b5, - XMM7360_RPC_CALL_UTA_AUDIO_SET_VOLUME_FOR_SOURCE = 0x1b6, - XMM7360_RPC_CALL_UTA_AUDIO_SET_MUTE_FOR_SOURCE_EXT = 0x1b7, - XMM7360_RPC_CALL_UTA_AUDIO_SET_VOLUME_FOR_DESTINATION = 0x1b8, - XMM7360_RPC_CALL_UTA_AUDIO_SET_MUTE_FOR_DESTINATION_EXT = 0x1b9, - XMM7360_RPC_CALL_UTA_AUDIO_CONFIGURE_SOURCE_EXT = 0x1ba, - XMM7360_RPC_CALL_UTA_AUDIO_SET_DESTINATIONS_FOR_SOURCE_EXT = 0x1bb, - XMM7360_RPC_CALL_UTA_RPC_SCREEN_CONTROL_REQ = 0x1bc, - XMM7360_RPC_CALL_UTA_MS_CALL_PS_READ_CONTEXT_STATUS_REQ = 0x1bd, - XMM7360_RPC_CALL_CSI_MS_SIM_ACCESS_GET_SIM_STATE_INFO_REQ = 0x1bf, - XMM7360_RPC_CALL_CSI_MS_NET_GET_REGISTRATION_INFO_REQ = 0x1c1, - XMM7360_RPC_CALL_CSI_SIO_IP_FILTER_NEW_CNTRL_SET_REQ = 0x1c3, - XMM7360_RPC_CALL_CSI_MS_NET_LDR_GET_APN_PLMN_PARAMETER_LIST_REQ = 0x1c5, - XMM7360_RPC_CALL_RPC_GET_API_PARAM_CHANGED_BITMAP = 0x1c8, -} Xmm7360RpcCallId; - -typedef enum { - XMM7360_RPC_UNSOL_UTA_MS_SIM_APDU_CMD_RSP_CB = 0x003, - XMM7360_RPC_UNSOL_UTA_MS_SIM_APPLICATION_RSP_CB = 0x005, - XMM7360_RPC_UNSOL_UTA_MS_SIM_INFO_IND_CB = 0x007, - XMM7360_RPC_UNSOL_UTA_MS_SIM_INIT_IND_CB = 0x008, - XMM7360_RPC_UNSOL_UTA_MS_SIM_FULL_ACCESS_IND_CB = 0x009, - XMM7360_RPC_UNSOL_UTA_MS_SIM_ERROR_IND_CB = 0x00a, - XMM7360_RPC_UNSOL_UTA_MS_SIM_CARD_IND_CB = 0x00b, - XMM7360_RPC_UNSOL_UTA_MS_SIM_APPLICATION_IND_CB = 0x00c, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_READ_ENTRY_RSP_CB = 0x00e, - XMM7360_RPC_UNSOL_UTA_MS_SIM_GEN_PIN_RSP_CB = 0x010, - XMM7360_RPC_UNSOL_UTA_MS_SIM_MODIFY_LOCK_RSP_CB = 0x012, - XMM7360_RPC_UNSOL_UTA_MS_SIM_LOCK_STATUS_IND_CB = 0x013, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_MO_SMS_CONTROL_INFO_IND_CB = 0x014, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_PROACTIVE_COMMAND_IND_CB = 0x015, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_ENVELOPE_RES_IND_CB = 0x018, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_TERMINAL_PROFILE_READ_RSP_CB = 0x01a, - XMM7360_RPC_UNSOL_UTA_SIM_TK_PROACTIVE_COMMAND_HANDLER_FUNC = 0x01b, - XMM7360_RPC_UNSOL_UTA_MS_CPS_SET_MODE_RSP = 0x01e, - XMM7360_RPC_UNSOL_UTA_MS_CPS_SET_MODE_IND_CB = 0x022, - XMM7360_RPC_UNSOL_UTA_MS_SS_NETWORK_ERROR_IND_CB = 0x02a, - XMM7360_RPC_UNSOL_UTA_MS_SS_NETWORK_REJECT_IND_CB = 0x02b, - XMM7360_RPC_UNSOL_UTA_MS_SS_NETWORK_GSM_CAUSE_IND_CB = 0x02c, - XMM7360_RPC_UNSOL_UTA_MS_SS_USSD_RSP_CB = 0x02d, - XMM7360_RPC_UNSOL_UTA_MS_SS_USSD_IND_CB = 0x02e, - XMM7360_RPC_UNSOL_UTA_MS_SS_END_IND_CB = 0x02f, - XMM7360_RPC_UNSOL_UTA_MS_SMS_INCOMING_IND_CB = 0x032, - XMM7360_RPC_UNSOL_UTA_MS_SMS_SEND_RSP_CB = 0x033, - XMM7360_RPC_UNSOL_UTA_MS_SMS_SET_MEMORY_AVAILABLE_RSP_CB = 0x035, - XMM7360_RPC_UNSOL_UTA_MS_SMS_SIM_MSG_CACHE_FINISHED_IND_CB = 0x037, - XMM7360_RPC_UNSOL_UTA_MS_SMS_SIM_MSG_COUNT_RSP_CB = 0x039, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_DEFINE_PRIMARY_RSP_CB = 0x03e, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_UNDEFINE_PRIMARY_RSP_CB = 0x040, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_PRIMARY_RSP_CB = 0x042, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_AUTHENTICATION_RSP_CB = 0x044, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_DNS_RSP_CB = 0x046, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NEGOTIATED_DNS_RSP_CB = 0x048, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NEG_IP_ADDR_RSP_CB = 0x04a, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_ACTIVATE_RSP_CB = 0x04c, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_ACTIVATE_STATUS_IND_CB = 0x04d, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_DEACTIVATE_RSP_CB = 0x04f, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_DEACTIVATE_IND_CB = 0x050, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_CONNECT_RSP_CB = 0x052, - XMM7360_RPC_UNSOL_UTA_MS_NET_SINGLE_SHOT_RADIO_SIGNAL_REPORTING_RSP_CB = 0x056, - XMM7360_RPC_UNSOL_UTA_MS_NET_CELL_INFO_IND_CB = 0x057, - XMM7360_RPC_UNSOL_UTA_MS_NET_CONNECTION_INFO_IND_CB = 0x058, - XMM7360_RPC_UNSOL_UTA_MS_NET_HSPA_INFO_IND_CB = 0x059, - XMM7360_RPC_UNSOL_UTA_MS_NET_RADIO_SIGNAL_IND_CB = 0x05a, - XMM7360_RPC_UNSOL_UTA_MS_NET_CELL_CHANGE_IND_CB = 0x05b, - XMM7360_RPC_UNSOL_UTA_MS_NET_ATTACH_RSP_CB = 0x063, - XMM7360_RPC_UNSOL_UTA_MS_NET_PS_ATTACH_RSP_CB = 0x064, - XMM7360_RPC_UNSOL_UTA_MS_NET_PS_DETACH_RSP_CB = 0x065, - XMM7360_RPC_UNSOL_UTA_MS_NET_SCAN_RSP_CB = 0x066, - XMM7360_RPC_UNSOL_UTA_MS_NET_POWER_DOWN_RSP_CB = 0x067, - XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_SCAN_RSP_CB = 0x068, - XMM7360_RPC_UNSOL_UTA_MS_NET_PS_ATTACH_IND_CB = 0x069, - XMM7360_RPC_UNSOL_UTA_MS_NET_PS_DETACH_IND_CB = 0x06a, - XMM7360_RPC_UNSOL_UTA_MS_NET_REGISTRATION_INFO_IND_CB = 0x06b, - XMM7360_RPC_UNSOL_UTA_MS_NET_IS_ATTACH_ALLOWED_IND_CB = 0x06c, - XMM7360_RPC_UNSOL_UTA_MS_NET_GPRS_CLASS_IND_CB = 0x06d, - XMM7360_RPC_UNSOL_UTA_MS_NET_SET_FD_CONFIG_RSP_CB = 0x06f, - XMM7360_RPC_UNSOL_UTA_MS_NET_FD_CONFIG_IND_CB = 0x070, - XMM7360_RPC_UNSOL_UTA_MS_NET_GET_FD_CONFIG_RSP_CB = 0x072, - XMM7360_RPC_UNSOL_UTA_MS_NET_CONFIGURE_NETWORK_MODE_RSP_CB = 0x074, - XMM7360_RPC_UNSOL_UTA_MS_NET_NETWORK_MODE_CHANGE_IND_CB = 0x075, - XMM7360_RPC_UNSOL_UTA_MS_NET_RAT_MODE_STATUS_RSP_CB = 0x077, - XMM7360_RPC_UNSOL_UTA_MS_NET_RAT_MODE_STATUS_IND_CB = 0x078, - XMM7360_RPC_UNSOL_UTA_MS_NET_DC_SET_VOICE_DOMAIN_PREFERENCE_CONFIG_RSP_CB = 0x081, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_SETUP_CALL_RSP_CB = 0x083, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_DIALING_IND_CB = 0x084, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_ALERTING_IND_CB = 0x085, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CTM_INFO_IND_CB = 0x086, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CONNECTED_IND_CB = 0x087, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_RELEASE_CALL_RSP_CB = 0x089, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_DISCONNECTING_IND_CB = 0x08a, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_DISCONNECTED_IND_CB = 0x08b, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_INCOMING_CALL_IND_CB = 0x08c, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_ACCEPT_CALL_RSP_CB = 0x08e, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_PROGRESS_IND_CB = 0x08f, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_SWAP_CALLS_RSP_CB = 0x091, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_HOLD_CALL_RSP_CB = 0x093, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_RETRIEVE_CALL_RSP_CB = 0x095, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_SPLIT_MPTY_RSP_CB = 0x097, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_JOIN_CALLS_RSP_CB = 0x099, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_TRANSFER_CALLS_RSP_CB = 0x09b, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_START_DTMF_RSP_CB = 0x09d, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_STOP_DTMF_RSP_CB = 0x09f, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_STOP_DTMF_EXT_RSP_CB = 0x0a0, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_NOTIFICATION_IND_CB = 0x0a1, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CUG_INFO_IND_CB = 0x0a2, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CALLING_NAME_INFO_IND_CB = 0x0a3, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_EMERGENCY_NUMBER_LIST_IND_CB = 0x0a4, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CALL_STATUS_IND_CB = 0x0a5, - XMM7360_RPC_UNSOL_UTA_CALL_MULTIMEDIA_GET_MEDIA_PROFILES_INFO_RSP_CB = 0x0a9, - XMM7360_RPC_UNSOL_UTA_MS_CALL_MULTIMEDIA_SETUP_CALL_RSP_CB = 0x0aa, - XMM7360_RPC_UNSOL_UTA_MS_CALL_MULTIMEDIA_UPDATE_CALL_RSP_CB = 0x0ab, - XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_VOIMS_SRVCC_HO_STATUS_IND_CB = 0x0ae, - XMM7360_RPC_UNSOL_UTA_MS_CPS_SET_SIM_MODE_RSP = 0x0af, - XMM7360_RPC_UNSOL_UTA_MS_CPS_STARTUP_IND_CB = 0x0b1, - XMM7360_RPC_UNSOL_UTA_MS_SS_CALL_FORWARD_RSP_CB = 0x0b3, - XMM7360_RPC_UNSOL_UTA_MS_SS_CALL_WAITING_RSP_CB = 0x0b5, - XMM7360_RPC_UNSOL_UTA_MS_SS_CALL_BARRING_RSP_CB = 0x0b7, - XMM7360_RPC_UNSOL_UTA_MS_SS_IDENTIFICATION_RSP_CB = 0x0b9, - XMM7360_RPC_UNSOL_UTA_MS_SMS_DATA_DOWNLOAD_RSP_CB = 0x0bc, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NEG_QOS_RSP_CB = 0x0bf, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_TFT_RSP_CB = 0x0c1, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_PCO_RSP_CB = 0x0c3, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NW_PCO_RSP_CB = 0x0c5, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_NW_ACTIVATE_IND_CB = 0x0c6, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_NW_ACTIVATE_ACCEPT_RSP_CB = 0x0c8, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_MODIFY_IND_CB = 0x0ca, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SUSPEND_IND_CB = 0x0cb, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_RESUME_IND_CB = 0x0cc, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_DATA_PREF_RSP_CB = 0x0ce, - XMM7360_RPC_UNSOL_UTA_MS_CBS_START_RSP_CB = 0x0d1, - XMM7360_RPC_UNSOL_UTA_MS_CBS_STOP_RSP_CB = 0x0d2, - XMM7360_RPC_UNSOL_UTA_MS_CBS_NEW_MESSAGE_IND_CB = 0x0d5, - XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_CONFIG_RSP_CB = 0x0d7, - XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_START_RSP_CB = 0x0d9, - XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_STOP_RSP_CB = 0x0db, - XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_NOTIFY_PRIMARY_WARNING_IND = 0x0dc, - XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_NOTIFY_SECONDARY_WARNING_IND = 0x0dd, - XMM7360_RPC_UNSOL_UTA_MS_NET_CONFIGURE_RX_DIVERSITY_DARP_IND_CB = 0x0e1, - XMM7360_RPC_UNSOL_UTA_MS_NET_TIME_INFO_READ_RSP_CB = 0x0e4, - XMM7360_RPC_UNSOL_UTA_MS_NET_TIME_INFO_IND_CB = 0x0e5, - XMM7360_RPC_UNSOL_UTA_MS_NET_BAND_STATUS_RSP_CB = 0x0e8, - XMM7360_RPC_UNSOL_UTA_MS_NET_BAND_STATUS_IND_CB = 0x0e9, - XMM7360_RPC_UNSOL_UTA_MS_NET_SET_CSG_CONFIG_RSP_CB = 0x0ea, - XMM7360_RPC_UNSOL_UTA_MS_NET_GET_CSG_CONFIG_RSP_CB = 0x0eb, - XMM7360_RPC_UNSOL_UTA_MS_NET_GET_EXTENDED_RADIO_SIGNAL_INFO_RSP_CB = 0x0ed, - XMM7360_RPC_UNSOL_UTA_MS_NET_NITZ_INFO_IND_CB = 0x0ee, - XMM7360_RPC_UNSOL_UTA_MS_NET_DETACH_RSP_CB = 0x0f0, - XMM7360_RPC_UNSOL_UTA_MS_NET_SELECT_GPRS_CLASS_RSP_CB = 0x0f2, - XMM7360_RPC_UNSOL_UTA_MS_NET_NETWORK_FEATURE_SUPPORT_INFO_IND_CB = 0x0f5, - XMM7360_RPC_UNSOL_UTA_MS_NET_EPS_NETWORK_FEATURE_SUPPORT_INFO_IND_CB = 0x0f6, - XMM7360_RPC_UNSOL_UTA_MS_NET_CS_SERVICE_NOTIFICATION_IND_CB = 0x0f7, - XMM7360_RPC_UNSOL_UTA_MS_NET_DUAL_SIM_SERVICE_IND_CB = 0x0f8, - XMM7360_RPC_UNSOL_UTA_MS_NET_SINGLE_SHOT_FD_RSP_CB = 0x0fa, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_GET_LOCATION_RSP_CB = 0x0fc, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_READ_GAS_ENTRY_RSP_CB = 0x0fe, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_WRITE_ENTRY_RSP_CB = 0x100, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_GET_META_INFORMATION_RSP_CB = 0x102, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_USIM_PB_SELECT_RSP_CB = 0x104, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_GET_FREE_RECORDS_RSP_CB = 0x106, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_USIM_PB_READY_IND_CB = 0x107, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_CACHE_LOAD_FINISHED_IND_CB = 0x108, - XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_CACHE_LOAD_IND_CB = 0x109, - XMM7360_RPC_UNSOL_UTA_MS_SIM_GEN_PIN_IND_CB = 0x10d, - XMM7360_RPC_UNSOL_UTA_MS_SIM_FDN_STATE_IND_CB = 0x10f, - XMM7360_RPC_UNSOL_UTA_IDC_AP_MSG_SET_RSP_CB = 0x112, - XMM7360_RPC_UNSOL_UTA_IDC_AP_MSG_GET_RSP_CB = 0x113, - XMM7360_RPC_UNSOL_UTA_IDC_CWS_MSG_SET_RSP_CB = 0x117, - XMM7360_RPC_UNSOL_UTA_IDC_CWS_MSG_GET_RSP_CB = 0x118, - XMM7360_RPC_UNSOL_UTA_IDC_CWS_MSG_IND_CB = 0x11b, - XMM7360_RPC_UNSOL_UTA_BOOT_PREPARE_SHUTDOWN_RSP_CB = 0x11e, - XMM7360_RPC_UNSOL_UTA_FREQ_INFO_ACTIVATE_RSP_CB = 0x124, - XMM7360_RPC_UNSOL_UTA_FREQ_INFO_DEACTIVATE_RSP_CB = 0x125, - XMM7360_RPC_UNSOL_UTA_FREQ_INFO_GET_FREQ_INFO_RSP_CB = 0x126, - XMM7360_RPC_UNSOL_UTA_FREQ_INFO_INDICATION_CB = 0x127, - XMM7360_RPC_UNSOL_UTA_MODE_SET_RSP_CB = 0x12d, - XMM7360_RPC_UNSOL_UTA_MODE_STARTUP_IND_CB = 0x12e, - XMM7360_RPC_UNSOL_UTA_PROD_GTI_CMD_RSP_CB = 0x131, - XMM7360_RPC_UNSOL_UTA_CELL_TIME_STAMP_RSP_CB = 0x135, - XMM7360_RPC_UNSOL_UTA_MS_SS_LCS_MO_LOCATION_RSP_CB = 0x138, - XMM7360_RPC_UNSOL_UTA_MS_SS_LCS_CAPABILITIES_IND_CB = 0x13a, - XMM7360_RPC_UNSOL_UTA_MS_CP_ASSISTANCE_DATA_INJECT_RSP_CB = 0x13b, - XMM7360_RPC_UNSOL_UTA_MS_CP_ASSISTANCE_DATA_NEEDED_IND_CB = 0x13e, - XMM7360_RPC_UNSOL_UTA_MS_CP_POS_MEASUREMENT_RSP_CB = 0x13f, - XMM7360_RPC_UNSOL_UTA_MS_CP_POS_MEASUREMENT_ABORT_RSP_CB = 0x141, - XMM7360_RPC_UNSOL_UTA_MS_CP_POS_REPORT_MEASUREMENT_IND_CB = 0x143, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_SMS_PP_IND_CB = 0x147, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_SIM_INITIATED_CALL_IND_CB = 0x149, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_SS_USSD_IND_CB = 0x14b, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_DTMF_IND_CB = 0x14d, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_DTMF_END_IND_CB = 0x14f, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_REFRESH_CONFIRM_IND_CB = 0x151, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_REFRESH_FCN_IND_CB = 0x153, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_CONTROL_RSP_CB = 0x156, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_TERMINAL_PROFILE_DOWNLOAD_RSP_CB = 0x158, - XMM7360_RPC_UNSOL_UTA_MS_3GPP2_SMS_SEND_RSP_CB = 0x159, - XMM7360_RPC_UNSOL_UTA_MS_3GPP2_SMS_INCOMING_IND_CB = 0x15b, - XMM7360_RPC_UNSOL_UTA_METRICS_HANDLER_FUNCTION = 0x15f, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SET_SERVICE_RSP_CB = 0x16a, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_MBSFN_AREA_CONFIG_RSP_CB = 0x16b, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SESSION_CONFIG_RSP_CB = 0x16c, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SET_INTERESTED_TMGI_LIST_RSP_CB = 0x16d, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SET_INTERESTED_SAI_FREQ_RSP_CB = 0x16e, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SERVICE_IND_CB = 0x16f, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_MBSFN_AREA_IND_CB = 0x170, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SERVICES_LIST_IND_CB = 0x171, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SAI_LIST_IND_CB = 0x172, - XMM7360_RPC_UNSOL_UTA_MS_EMBMS_MPS_INFO_IND_CB = 0x173, - XMM7360_RPC_UNSOL_UTA_IMS_STATE_CHANGED_IND_CB = 0x174, - XMM7360_RPC_UNSOL_UTA_IMS_SERVICE_STATE_CHANGED_IND_CB = 0x175, - XMM7360_RPC_UNSOL_UTA_MS_SIM_OPEN_CHANNEL_RSP_CB = 0x17c, - XMM7360_RPC_UNSOL_UTA_MS_SIM_CLOSE_CHANNEL_RSP_CB = 0x17e, - XMM7360_RPC_UNSOL_UTA_MS_SIM_BDN_STATE_IND_CB = 0x180, - XMM7360_RPC_UNSOL_UTA_MS_SET_SIM_STACK_MAPPING_RSP_CB = 0x182, - XMM7360_RPC_UNSOL_UTA_MS_GET_SIM_STACK_MAPPING_RSP_CB = 0x184, - XMM7360_RPC_UNSOL_UTA_MS_SIM_MCC_MNC_IND_CB = 0x185, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_TERMINAL_RESPONSE_IND_CB = 0x186, - XMM7360_RPC_UNSOL_UTA_MS_NET_REGISTERED_PLMN_NAME_IND_CB = 0x187, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_SET_TERMINAL_CAPABILITY_RSP_CB = 0x18b, - XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_READ_TERMINAL_CAPABILITY_RSP_CB = 0x18d, - XMM7360_RPC_UNSOL_CSI_FCC_LOCK_QUERY_RSP_CB = 0x18f, - XMM7360_RPC_UNSOL_CSI_FCC_LOCK_GEN_CHALLENGE_RSP_CB = 0x191, - XMM7360_RPC_UNSOL_CSI_FCC_LOCK_VER_CHALLENGE_RSP_CB = 0x193, - XMM7360_RPC_UNSOL_UTA_SENSOR_OPEN_RSP_CB = 0x195, - XMM7360_RPC_UNSOL_UTA_SENSOR_MEAS_IND_CB = 0x196, - XMM7360_RPC_UNSOL_CSI_SIO_IP_FILTER_CNTRL_SET_RSP_CB = 0x19c, - XMM7360_RPC_UNSOL_CSI_SIO_IP_FILTER_NEW_CNTRL_SET_RSP_CB = 0x1c4, - XMM7360_RPC_UNSOL_UTA_MS_ACC_CURRENT_FREQ_INFO_RSP_CB = 0x19e, - XMM7360_RPC_UNSOL_UTA_MS_ACC_CURRENT_FREQ_INFO_IND_CB = 0x19f, - XMM7360_RPC_UNSOL_CSI_TRC_AT_CMND_RSP_CB = 0x1a1, - XMM7360_RPC_UNSOL_UTA_MS_SIM_APDU_CMD_EXT_RSP_CB = 0x1a3, - XMM7360_RPC_UNSOL_UTA_MS_NET_GET_PLMN_NAME_INFO_RSP_CB = 0x1a5, - XMM7360_RPC_UNSOL_UTA_MS_NET_SIB8_TIME_INFO_IND_CB = 0x1a6, - XMM7360_RPC_UNSOL_UTA_MS_NET_GET_COUNTRY_LIST_RSP_CB = 0x1a8, - XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_CONFIGURE_NETWORK_MODE_RSP_CB = 0x1aa, - XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_NETWORK_MODE_CHANGE_IND_CB = 0x1ab, - XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_BAND_STATUS_RSP_CB = 0x1ad, - XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_BAND_STATUS_IND_CB = 0x1ae, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_ATTACH_APN_CONFIG_RSP_CB = 0x1b0, - XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_READ_CONTEXT_STATUS_RSP_CB = 0x1be, - XMM7360_RPC_UNSOL_CSI_MS_SIM_ACCESS_GET_SIM_STATE_INFO_RSP_CB = 0x1c0, - XMM7360_RPC_UNSOL_CSI_MS_NET_GET_REGISTRATION_INFO_RSP_CB = 0x1c2, - XMM7360_RPC_UNSOL_CSI_MS_NET_LDR_GET_APN_PLMN_PARAMETER_LIST_RSP_CB = 0x1c6, - XMM7360_RPC_UNSOL_UTA_MS_NET_LDR_APN_PARAMETERS_CHANGE_IND_CB = 0x1c7, -} Xmm7360RpcUnsolId; - -typedef enum { - XMM7360_RPC_MSG_ARG_TYPE_BYTE, - XMM7360_RPC_MSG_ARG_TYPE_SHORT, - XMM7360_RPC_MSG_ARG_TYPE_LONG, - XMM7360_RPC_MSG_ARG_TYPE_STRING, - XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN, -} Xmm7360RpcMsgArgType; - - -#define XMM7360_RPC_MSG_ARG_GET_INT(arg) \ - (arg->type == XMM7360_RPC_MSG_ARG_TYPE_BYTE ? arg->value.b \ - : arg->type == XMM7360_RPC_MSG_ARG_TYPE_SHORT ? arg->value.s \ - : arg->type == XMM7360_RPC_MSG_ARG_TYPE_LONG ? arg->value.l : -1) - -typedef struct { - Xmm7360RpcMsgArgType type; - union { - gint8 b; - gint16 s; - gint32 l; - const gchar *string; - } value; - gsize size; - gsize pad; -} Xmm7360RpcMsgArg; - -typedef enum { - XMM7360_RPC_RESPONSE_TYPE_RESPONSE, - XMM7360_RPC_RESPONSE_TYPE_ASYNC_ACK, - XMM7360_RPC_RESPONSE_TYPE_UNSOLICITED, - XMM7360_RPC_RESPONSE_TYPE_UNKNOWN, -} Xmm7360RpcResponseType; - -typedef struct { - guint32 id; - Xmm7360RpcResponseType type; - guint32 unsol_id; - GByteArray *body; - GPtrArray *content; /* contains (Xmm7360RpcMsgArgs *) */ -} Xmm7360RpcResponse; +#include "mm-xmmrpc-xmm7360-protocol.h" #define MM_TYPE_PORT_SERIAL_XMMRPC_XMM7360 (mm_port_serial_xmmrpc_xmm7360_get_type ()) #define MM_PORT_SERIAL_XMMRPC_XMM7360(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_PORT_SERIAL_XMMRPC_XMM7360, MMPortSerialXmmrpcXmm7360)) @@ -566,14 +64,6 @@ void mm_port_serial_xmmrpc_xmm7360_command (MMPortSerialXmmrpcXmm7360 *self, GAsyncReadyCallback callback, gpointer user_data); -void xmm7360_byte_array_append_asn_int4 (GByteArray *array, gint32 value); - -void xmm7360_rpc_response_free (Xmm7360RpcResponse *msg); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (Xmm7360RpcResponse, xmm7360_rpc_response_free); - -GByteArray *xmm7360_rpc_args_to_byte_array (const Xmm7360RpcMsgArg *args); - Xmm7360RpcResponse *mm_port_serial_xmmrpc_xmm7360_command_finish (MMPortSerialXmmrpcXmm7360 *self, GAsyncResult *res, GError **error); diff --git a/src/plugins/intel/mm-xmmrpc-xmm7360-protocol.c b/src/plugins/intel/mm-xmmrpc-xmm7360-protocol.c new file mode 100644 index 00000000..dcf16280 --- /dev/null +++ b/src/plugins/intel/mm-xmmrpc-xmm7360-protocol.c @@ -0,0 +1,573 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2019 James Wah + * Copyright (C) 2020 Marinus Enzinger + * Copyright (C) 2023 Shane Parslow + * Copyright (C) 2024 Thomas Vogt + */ + +#include +#include +#include +#include + +#include +#define _LIBMM_INSIDE_MM +#include + +#include "mm-xmmrpc-xmm7360-protocol.h" +#include "mm-intel-enums-types.h" + +static void +xmm7360_rpc_msg_arg_free (Xmm7360RpcMsgArg *arg) +{ + if (arg->type == XMM7360_RPC_MSG_ARG_TYPE_STRING) { + g_free ((gchar *) arg->value.string); + } + g_free (arg); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (Xmm7360RpcMsgArg, xmm7360_rpc_msg_arg_free) + +void +xmm7360_rpc_response_free (Xmm7360RpcResponse *response) +{ + if (response) { + g_byte_array_free (response->body, TRUE); + g_ptr_array_free (response->content, TRUE); + g_free (response); + } +} + +#define PARSE_ERROR(fmt, ...) { \ + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, fmt, __VA_ARGS__); \ +} + +gint +xmm7360_byte_array_read_asn_int (GByteArray *buf, + gsize offset, + gint *out_val, + Xmm7360RpcMsgArg *out_arg, + GError **error) +{ + const gsize orig_offset = offset; + gint size; + gint bytes_read; + gint val; + Xmm7360RpcMsgArg arg = { 0 }; + + if (buf->len <= offset + 2) { + PARSE_ERROR ("initial buffer size %u too small (need %zu)", + buf->len, offset + 2 + 1); + return -1; + } + + /* check ASN start byte and read int size */ + if (buf->data[offset] != 0x02) { + PARSE_ERROR ("unexpected ASN start byte 0x%02X (expected 0x02)", buf->data[offset]); + return -1; + } + offset++; + size = buf->data[offset++]; + if (size > 4 || size == 3) { + PARSE_ERROR ("unhandled int size %d", size); + return -1; + } + + /* read actual value byte by byte */ + if (buf->len < offset + size) { + PARSE_ERROR ("buffer size %u too small (need %zu)", buf->len, offset + size); + return -1; + } + val = 0; + for (bytes_read = 0; bytes_read < size; bytes_read++) { + val <<= 8; + val |= buf->data[offset++]; + } + + if (size == 0x00) { + arg.type = XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN; + } else if (size == 0x01) { + arg.type = XMM7360_RPC_MSG_ARG_TYPE_BYTE; + arg.value.b = (gint8) val; + } else if (size == 0x02) { + arg.type = XMM7360_RPC_MSG_ARG_TYPE_SHORT; + arg.value.s = (gint16) val; + } else if (size == 0x04) { + arg.type = XMM7360_RPC_MSG_ARG_TYPE_LONG; + arg.value.l = (gint32) val; + } else { + /* size is validated above */ + g_assert_not_reached (); + } + + if (out_arg) + *out_arg = arg; + + if (out_val) { + /* If the ASN int is negative, we must convert a int8/int16 + * value to the appropriate u32 value to avoid returning a + * positive 32-bit gint. + */ + if ((arg.type == XMM7360_RPC_MSG_ARG_TYPE_BYTE) && (arg.value.b < 0)) + *out_val = (arg.value.b << 24) >> 24; + else if ((arg.type == XMM7360_RPC_MSG_ARG_TYPE_SHORT) && (arg.value.s < 0)) + *out_val = (arg.value.s << 16) >> 16; + else + *out_val = arg.value.l; + } + + /* return bytes consumed by this function */ + return offset - orig_offset; +} + +gint +xmm7360_byte_array_read_string (GByteArray *buf, + gsize offset, + Xmm7360RpcMsgArg *out_arg, + GError **error) +{ + const gsize orig_offset = offset; + guchar string_type; + gint string_len_padded; + gint pad_len; + gint string_len; + gint consumed; + + if (buf->len < offset + 2) { + PARSE_ERROR ("initial buffer size %u too small (need %zu)", + buf->len, offset + 2); + return -1; + } + + string_type = buf->data[offset++]; + if (string_type != 0x55 && string_type != 0x56 && string_type != 0x57) { + PARSE_ERROR ("unhandled string type 0x%02X", string_type); + return -1; + } + + string_len = buf->data[offset++]; + if (string_len & 0x80) { + guchar bytelen; + guint8 i; + + bytelen = string_len & 0x0f; + if (bytelen > 4) { + PARSE_ERROR ("unhandled string length size 0x%02X", bytelen); + return -1; + } else if (buf->len <= offset + bytelen) { + PARSE_ERROR ("string len buffer size %u too small (need %zu)", + buf->len, offset + bytelen); + return -1; + } + + string_len = 0; + for (i = 0; i < bytelen; i++) + string_len |= buf->data[offset++] << (i * 8); + } + + if (string_type == 0x56) { + /* 0x56 contains 2-byte chars */ + string_len <<= 1; + } else if (string_type == 0x57) { + /* 0x57 contains 4-byte chars */ + string_len <<= 2; + } + + consumed = xmm7360_byte_array_read_asn_int (buf, offset, &string_len_padded, NULL, error); + if (consumed < 0) + return -1; + else if (string_len_padded < 0) { + PARSE_ERROR ("string length padded should be >= 0 (got %d)", string_len_padded); + return -1; + } + offset += consumed; + + consumed = xmm7360_byte_array_read_asn_int (buf, offset, &pad_len, NULL, error); + if (consumed < 0) + return -1; + else if (pad_len < 0) { + PARSE_ERROR ("pad length should be >= 0 (got %d)", pad_len); + return -1; + } + offset += consumed; + + if (string_len_padded > 0) { + if (string_len_padded != string_len + pad_len) { + PARSE_ERROR ("padded string len %u mismatch (expected %u)", + string_len_padded, string_len + pad_len); + return -1; + } + } else { + string_len_padded = string_len + pad_len; + } + + /* make sure the buffer is large enough */ + if (buf->len < offset + string_len_padded) { + PARSE_ERROR ("padded string len buffer size %u too small (need %zu)", + buf->len, offset + string_len_padded); + return -1; + } + + /* copy the result */ + if (out_arg) { + out_arg->type = XMM7360_RPC_MSG_ARG_TYPE_STRING; + /* Copy the bare string without padding */ + out_arg->value.string = g_memdup (buf->data + offset, string_len); + out_arg->size = string_len; + } + + /* return bytes consumed by this function */ + return offset + string_len_padded - orig_offset; +} + + +void +xmm7360_byte_array_append_asn_int4 (GByteArray *buf, gint32 value) +{ + gint32 value_be = GINT32_TO_BE (value); + g_byte_array_append (buf, (const guint8 *) "\x02\x04", 2); + g_byte_array_append (buf, (const guint8 *) &value_be, 4); +} + +void +xmm7360_byte_array_append_uint8 (GByteArray *buf, gulong val) +{ + guint8 _val = (guint8) val; + g_byte_array_append (buf, &_val, 1); +} + +void +xmm7360_byte_array_append_string (GByteArray *buf, + const guint8 *data, + gsize data_len, + guint data_len_padded) +{ + gsize i; + gsize pad_len; + + g_assert (data_len_padded >= data_len); + pad_len = data_len_padded - data_len; + + /* only support 1-byte element size */ + xmm7360_byte_array_append_uint8 (buf, 0x55); + + if (data_len < 0x80) { + xmm7360_byte_array_append_uint8 (buf, data_len); + } else { + guchar bytelen = 0x80; + /* write dummy first byte (updated later) */ + xmm7360_byte_array_append_uint8 (buf, bytelen); + for (i = data_len; i > 0; i >>= 8) { + bytelen++; + xmm7360_byte_array_append_uint8 (buf, i & 0xff); + } + /* update first byte */ + buf->data[buf->len - 1 - (bytelen & 0x7f)] = bytelen; + } + + xmm7360_byte_array_append_asn_int4 (buf, data_len_padded); + xmm7360_byte_array_append_asn_int4 (buf, pad_len); + g_byte_array_append (buf, data, data_len); + for (i = 0; i < pad_len; i++) { + xmm7360_byte_array_append_uint8 (buf, 0); + } +} + +GString * +xmm7360_byte_array_hexlify (GByteArray *buf) +{ + GString *string; + gsize i; + + string = g_string_sized_new (2 * buf->len + 1); + for (i = 0; i < buf->len; i++) { + g_string_append_printf (string, "%02x", buf->data[i]); + } + g_string_append (string, ""); + + /* truncate very long strings to avoid overly verbose logs */ + if (string->len > 64) { + gsize string_len; + string_len = string->len; + g_string_truncate (string, 48); + g_string_append_printf (string, "... (%" G_GSIZE_FORMAT " chars)", string_len); + } + + return string; +} + +GString * +xmm7360_rpc_args_to_string (GPtrArray *args) +{ + guint i; + GString *result; + Xmm7360RpcMsgArg *arg; + gint16 arg_value_short; + gint32 arg_value_long; + + result = g_string_new (""); + + for (i = 0; i < args->len; i++) { + arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (args, i); + if (i > 0) { + g_string_append (result, " "); + } + switch (arg->type) { + case XMM7360_RPC_MSG_ARG_TYPE_BYTE: + g_string_append_printf (result, "B(0x%02x)", arg->value.b); + break; + case XMM7360_RPC_MSG_ARG_TYPE_SHORT: + arg_value_short = GINT16_TO_BE (arg->value.s); + g_string_append_printf (result, "S(0x%04x)", arg_value_short); + break; + case XMM7360_RPC_MSG_ARG_TYPE_LONG: + arg_value_long = GINT32_TO_BE (arg->value.l); + g_string_append_printf (result, "L(0x%08x)", arg_value_long); + break; + case XMM7360_RPC_MSG_ARG_TYPE_STRING: + g_string_append_printf (result, "STR(size=%" G_GSIZE_FORMAT ")", arg->size); + break; + case XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN: + default: + g_assert_not_reached (); + } + } + + return result; +} + +GByteArray * +xmm7360_rpc_args_to_byte_array (const Xmm7360RpcMsgArg *args) +{ + GByteArray *result; + gint16 arg_value_short; + gint32 arg_value_long; + + if (args == NULL) + return NULL; + + result = g_byte_array_new (); + for (; args->type != XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN; args++) { + switch (args->type) { + case XMM7360_RPC_MSG_ARG_TYPE_BYTE: + g_byte_array_append (result, (guint8[]) { 0x02, 0x01 }, 2); + g_byte_array_append (result, (guint8 *) &(args->value.b), 1); + break; + case XMM7360_RPC_MSG_ARG_TYPE_SHORT: + arg_value_short = GINT16_TO_BE (args->value.s); + g_byte_array_append (result, (guint8[]) { 0x02, 0x02 }, 2); + g_byte_array_append (result, (guint8 *) &arg_value_short, 2); + break; + case XMM7360_RPC_MSG_ARG_TYPE_LONG: + arg_value_long = GINT32_TO_BE (args->value.l); + g_byte_array_append (result, (guint8[]) { 0x02, 0x04 }, 2); + g_byte_array_append (result, (guint8 *) &arg_value_long, 4); + break; + case XMM7360_RPC_MSG_ARG_TYPE_STRING: + xmm7360_byte_array_append_string (result, + (const guint8 *) args->value.string, + args->size, + args->size + args->pad); + break; + case XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN: + default: + /* should be unreachable */ + return NULL; + } + } + return result; +} + +GByteArray * +xmm7360_command_to_byte_array (Xmm7360RpcCallId callid, + gboolean is_async, + GByteArray *body) +{ + GByteArray *buf; + gint32 tid; + gint32 tid_word; + gint32 tid_word_be; + guint32 total_len; + + buf = g_byte_array_sized_new (22); + + if (body == NULL) { + body = g_byte_array_new (); + xmm7360_byte_array_append_asn_int4 (body, 0); + } else { + g_byte_array_ref (body); + } + + if (is_async) { + tid = 0x11000101; + } else { + tid = 0; + } + tid_word = 0x11000100 | tid; + + total_len = body->len + 16; + if (tid) { + total_len += 6; + } + g_byte_array_append (buf, (const guint8 *) &total_len, 4); + xmm7360_byte_array_append_asn_int4 (buf, total_len); + xmm7360_byte_array_append_asn_int4 (buf, callid); + tid_word_be = GINT32_TO_BE (tid_word); + g_byte_array_append (buf, (const guint8 *) &tid_word_be, 4); + if (tid) { + xmm7360_byte_array_append_asn_int4 (buf, tid); + } + + g_assert (total_len == buf->len + body->len - 4); + g_byte_array_append (buf, (const guint8 *) body->data, body->len); + g_byte_array_unref (body); + + return buf; +} + +gboolean +xmm7360_rpc_msg_body_unpack (GByteArray *buf, GPtrArray *args, GError **error) +{ + gsize offset; + gint consumed; + + g_assert (buf != NULL && args != NULL); + + offset = 0; + while (offset < buf->len) { + g_autoptr(Xmm7360RpcMsgArg) arg = NULL; + + arg = g_new0 (Xmm7360RpcMsgArg, 1); + arg->size = 0; + switch (buf->data[offset]) { + case 0x02: + consumed = xmm7360_byte_array_read_asn_int (buf, + offset, + NULL, + arg, + error); + if (consumed < 0) + return FALSE; + offset += consumed; + break; + case 0x55: + case 0x56: + case 0x57: + arg->type = XMM7360_RPC_MSG_ARG_TYPE_STRING; + consumed = xmm7360_byte_array_read_string (buf, + offset, + arg, + error); + if (consumed < 0) + return FALSE; + offset += consumed; + break; + default: + arg->type = XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN; + PARSE_ERROR ("Unknown type 0x%x", buf->data[offset]); + return FALSE; + } + g_ptr_array_add (args, g_steal_pointer (&arg)); + } + + return TRUE; +} + +Xmm7360RpcResponse * +xmm7360_parse_response (GByteArray *buf, GError **error) +{ + g_autoptr(Xmm7360RpcResponse) response = NULL; + gsize offset; + gint consumed; + gint asn_msg_len = 0; + gint unsol_id = 0; + + /* first 20 bytes are format header: + * message size ( int32, 4) + * message size (again!) (asn int, 6) + * unsolicited message id (asn int, 6) + * transmission id ( int32, 4) + */ + if (buf->len <= 20) { + PARSE_ERROR ("error parsing RPC message: message size %u too short", buf->len); + return NULL; + } + + /* Read and validate the ASN message size */ + offset = 4; + consumed = xmm7360_byte_array_read_asn_int (buf, offset, &asn_msg_len, NULL, error); + if (consumed < 0) { + g_prefix_error (error, "error parsing RPC message: error reading ASN message size: "); + return NULL; + } else if (asn_msg_len < 0) { + PARSE_ERROR ("ASN message size should be >= 0 (got %d)", asn_msg_len); + return NULL; + } + offset += consumed; + /* Make sure the ASN message size and message size agree */ + if (*(gint32 *) buf->data != asn_msg_len) { + PARSE_ERROR ("error parsing RPC message: length mismatch (buf %d != asn %d)", + *(gint32 *) buf->data, asn_msg_len); + return NULL; + } + + consumed = xmm7360_byte_array_read_asn_int (buf, offset, &unsol_id, NULL, error); + if (consumed < 0) { + g_prefix_error (error, "error parsing RPC message: error reading unsolicited message id: "); + return NULL; + } else if (unsol_id < 0) { + PARSE_ERROR ("Unsolicited message ID should be >= 0 (got %d)", unsol_id); + return NULL; + } + offset += consumed; + + /* initialize all fields of the response */ + response = g_new0 (Xmm7360RpcResponse, 1); + response->id = GINT32_FROM_BE (*(gint32 *) (buf->data + 16)); + response->type = XMM7360_RPC_RESPONSE_TYPE_UNKNOWN; + response->unsol_id = unsol_id; + response->body = g_byte_array_new (); + response->content = g_ptr_array_new_with_free_func ((GDestroyNotify)xmm7360_rpc_msg_arg_free); + + g_byte_array_append (response->body, &buf->data[20], buf->len - 20); + if (!xmm7360_rpc_msg_body_unpack (response->body, response->content, error)) + return NULL; + + if (response->id == 0x11000100) { + response->type = XMM7360_RPC_RESPONSE_TYPE_RESPONSE; + } else if ((response->id & 0xffffff00) == 0x11000100) { + if (response->unsol_id >= 0x7d0) { + response->type = XMM7360_RPC_RESPONSE_TYPE_ASYNC_ACK; + } else { + Xmm7360RpcMsgArg *arg; + + response->type = XMM7360_RPC_RESPONSE_TYPE_RESPONSE; + + /* discard first element in content (equals transmission id) */ + arg = (Xmm7360RpcMsgArg *) g_ptr_array_index (response->content, 0); + if (arg->type != XMM7360_RPC_MSG_ARG_TYPE_LONG + || (guint32) XMM7360_RPC_MSG_ARG_GET_INT (arg) != response->id) { + PARSE_ERROR ("error parsing RPC message: invalid start of async response body (type %u not LONG or ID mismatch)", + arg->type); + return NULL; + } + g_ptr_array_remove_index (response->content, 0); + g_byte_array_remove_range (response->body, 0, 6); + } + } else { + response->type = XMM7360_RPC_RESPONSE_TYPE_UNSOLICITED; + } + + return g_steal_pointer (&response); +} diff --git a/src/plugins/intel/mm-xmmrpc-xmm7360-protocol.h b/src/plugins/intel/mm-xmmrpc-xmm7360-protocol.h new file mode 100644 index 00000000..e02e2ea3 --- /dev/null +++ b/src/plugins/intel/mm-xmmrpc-xmm7360-protocol.h @@ -0,0 +1,572 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2019 James Wah + * Copyright (C) 2020 Marinus Enzinger + * Copyright (C) 2023 Shane Parslow + * Copyright (C) 2024 Thomas Vogt + */ + +#ifndef MM_XMMRPC_XMM7360_PROTOCOL_H +#define MM_XMMRPC_XMM7360_PROTOCOL_H + +#include + +typedef enum { + XMM7360_RPC_CALL_UTA_MS_SIM_OPEN_REQ = 0x001, + XMM7360_RPC_CALL_UTA_MS_SIM_APDU_CMD_REQ = 0x002, + XMM7360_RPC_CALL_UTA_MS_SIM_APPLICATION_REQ = 0x004, + XMM7360_RPC_CALL_UTA_MS_SIM_DECODE_FCP = 0x006, + XMM7360_RPC_CALL_UTA_MS_SIM_PB_READ_ENTRY_REQ = 0x00d, + XMM7360_RPC_CALL_UTA_MS_SIM_GEN_PIN_REQ = 0x00f, + XMM7360_RPC_CALL_UTA_MS_SIM_MODIFY_LOCK_REQ = 0x011, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_PROACTIVE_COMMAND_RSP = 0x016, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_ENVELOPE_COMMAND_REQ = 0x017, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_TERMINAL_PROFILE_READ_REQ = 0x019, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_REGISTER_HANDLER = 0x01c, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_DEREGISTER_HANDLER = 0x01d, + XMM7360_RPC_CALL_UTA_MS_CPS_SET_MODE_REQ = 0x01f, + XMM7360_RPC_CALL_UTA_MS_CPS_SET_STACK_MODE_CONFIGURATION = 0x020, + XMM7360_RPC_CALL_UTA_MS_CPS_SET_SIM_MODE_CONFIGURATION = 0x021, + XMM7360_RPC_CALL_UTA_MS_CPS_READ_IMEI = 0x023, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_INIT = 0x024, + XMM7360_RPC_CALL_UTA_MS_CBS_INIT = 0x025, + XMM7360_RPC_CALL_UTA_MS_SS_INIT = 0x026, + XMM7360_RPC_CALL_UTA_MS_SS_SEND_USSD_REQ = 0x027, + XMM7360_RPC_CALL_UTA_MS_SS_RESPOND_USSD = 0x028, + XMM7360_RPC_CALL_UTA_MS_SS_ABORT = 0x029, + XMM7360_RPC_CALL_UTA_MS_SMS_INIT = 0x030, + XMM7360_RPC_CALL_UTA_MS_SMS_SEND_REQ = 0x031, + XMM7360_RPC_CALL_UTA_MS_SMS_SET_MEMORY_AVAILABLE_REQ = 0x034, + XMM7360_RPC_CALL_UTA_MS_SMS_INCOMING_SMS_ACK = 0x036, + XMM7360_RPC_CALL_UTA_MS_SMS_SIM_MSG_COUNT_REQ = 0x038, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_INITIALIZE = 0x03a, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_OBTAIN_PDP_CONTEXT_ID = 0x03b, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_RELEASE_PDP_CONTEXT_ID = 0x03c, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_DEFINE_PRIMARY_REQ = 0x03d, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_UNDEFINE_PRIMARY_REQ = 0x03f, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_PRIMARY_REQ = 0x041, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_AUTHENTICATION_REQ = 0x043, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_DNS_REQ = 0x045, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NEGOTIATED_DNS_REQ = 0x047, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NEG_IP_ADDR_REQ = 0x049, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_ACTIVATE_REQ = 0x04b, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_DEACTIVATE_REQ = 0x04e, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_CONNECT_REQ = 0x051, + XMM7360_RPC_CALL_UTA_MS_NET_OPEN = 0x053, + XMM7360_RPC_CALL_UTA_MS_NET_SET_RADIO_SIGNAL_REPORTING = 0x054, + XMM7360_RPC_CALL_UTA_MS_NET_SINGLE_SHOT_RADIO_SIGNAL_REPORTING_REQ = 0x055, + XMM7360_RPC_CALL_UTA_MS_NET_ATTACH_REQ = 0x05c, + XMM7360_RPC_CALL_UTA_MS_NET_PS_ATTACH_REQ = 0x05d, + XMM7360_RPC_CALL_UTA_MS_NET_PS_DETACH_REQ = 0x05e, + XMM7360_RPC_CALL_UTA_MS_NET_SCAN_REQ = 0x05f, + XMM7360_RPC_CALL_UTA_MS_NET_SCAN_ABORT = 0x060, + XMM7360_RPC_CALL_UTA_MS_NET_POWER_DOWN_REQ = 0x061, + XMM7360_RPC_CALL_UTA_MS_NET_EXT_SCAN_REQ = 0x062, + XMM7360_RPC_CALL_UTA_MS_NET_SET_FD_CONFIG_REQ = 0x06e, + XMM7360_RPC_CALL_UTA_MS_NET_GET_FD_CONFIG_REQ = 0x071, + XMM7360_RPC_CALL_UTA_MS_NET_CONFIGURE_NETWORK_MODE_REQ = 0x073, + XMM7360_RPC_CALL_UTA_MS_NET_RAT_MODE_STATUS_REQ = 0x076, + XMM7360_RPC_CALL_UTA_NVM_READ = 0x079, + XMM7360_RPC_CALL_UTA_NVM_WRITE = 0x07a, + XMM7360_RPC_CALL_UTA_NVM_WRITE_COMMIT = 0x07b, + XMM7360_RPC_CALL_UTA_SYS_GET_INFO = 0x07c, + XMM7360_RPC_CALL_UTA_RPC_PS_CONNECT_SETUP_REQ = 0x07d, + XMM7360_RPC_CALL_UTA_RPC_PS_CONNECT_TO_DATACHANNEL_REQ = 0x07e, + XMM7360_RPC_CALL_UTA_RPC_PS_CONNECT_RELEASE_REQ = 0x07f, + XMM7360_RPC_CALL_UTA_MS_NET_DC_SET_VOICE_DOMAIN_PREFERENCE_CONFIG_REQ = 0x080, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_SETUP_VOICE_CALL_REQ = 0x082, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_RELEASE_CALL_REQ = 0x088, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_ACCEPT_CALL_REQ = 0x08d, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_SWAP_CALLS_REQ = 0x090, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_HOLD_CALL_REQ = 0x092, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_RETRIEVE_CALL_REQ = 0x094, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_SPLIT_MPTY_REQ = 0x096, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_JOIN_CALLS_REQ = 0x098, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_TRANSFER_CALLS_REQ = 0x09a, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_START_DTMF_REQ = 0x09c, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_STOP_DTMF_REQ = 0x09e, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_SET_UUS1_INFO = 0x0a6, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_SET_TTY_DEVICE_MODE = 0x0a7, + XMM7360_RPC_CALL_UTA_MS_CALL_CS_GET_TTY_DEVICE_MODE = 0x0a8, + XMM7360_RPC_CALL_UTA_MS_CALL_MULTIMEDIA_SETUP_CALL_REQ = 0x0ac, + XMM7360_RPC_CALL_UTA_MS_CALL_MULTIMEDIA_UPDATE_CALL_REQ = 0x0ad, + XMM7360_RPC_CALL_UTA_MS_CPS_SET_SIM_MODE_REQ = 0x0b0, + XMM7360_RPC_CALL_UTA_MS_SS_CALL_FORWARD_REQ = 0x0b2, + XMM7360_RPC_CALL_UTA_MS_SS_CALL_WAITING_REQ = 0x0b4, + XMM7360_RPC_CALL_UTA_MS_SS_CALL_BARRING_REQ = 0x0b6, + XMM7360_RPC_CALL_UTA_MS_SS_IDENTIFICATION_REQ = 0x0b8, + XMM7360_RPC_CALL_UTA_MS_SMS_SET_SEND_MORE_MESSAGES_STATUS = 0x0ba, + XMM7360_RPC_CALL_UTA_MS_SMS_DATA_DOWNLOAD_REQ = 0x0bb, + XMM7360_RPC_CALL_UTA_MS_SMS_DATA_DOWNLOAD_ACK = 0x0bd, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NEG_QOS_REQ = 0x0be, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_TFT_REQ = 0x0c0, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_PCO_REQ = 0x0c2, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_GET_NW_PCO_REQ = 0x0c4, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_NW_ACTIVATE_ACCEPT_REQ = 0x0c7, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_NW_ACTIVATE_REJECT_REQ = 0x0c9, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_SET_DATA_PREF_REQ = 0x0cd, + XMM7360_RPC_CALL_UTA_MS_CBS_START_REQ = 0x0cf, + XMM7360_RPC_CALL_UTA_MS_CBS_STOP_REQ = 0x0d0, + XMM7360_RPC_CALL_UTA_MS_CBS_SET_MSG_FILTER = 0x0d3, + XMM7360_RPC_CALL_UTA_MS_CBS_GET_MSG_FILTER = 0x0d4, + XMM7360_RPC_CALL_UTA_MS_CBS_ETWS_CONFIG_REQ = 0x0d6, + XMM7360_RPC_CALL_UTA_MS_CBS_ETWS_START_REQ = 0x0d8, + XMM7360_RPC_CALL_UTA_MS_CBS_ETWS_STOP_REQ = 0x0da, + XMM7360_RPC_CALL_UTA_MS_CPS_NVM_WRITE = 0x0de, + XMM7360_RPC_CALL_UTA_MS_CPS_NVM_READ = 0x0df, + XMM7360_RPC_CALL_UTA_MS_NET_CONFIGURE_RX_DIVERSITY_DARP = 0x0e0, + XMM7360_RPC_CALL_UTA_MS_NET_LDR_GET_APN_PARAMETER_LIST = 0x0e2, + XMM7360_RPC_CALL_UTA_MS_NET_TIME_INFO_READ_REQ = 0x0e3, + XMM7360_RPC_CALL_UTA_MS_NET_SET_CSG_CONFIG_REQ = 0x0e6, + XMM7360_RPC_CALL_UTA_MS_NET_BAND_STATUS_REQ = 0x0e7, + XMM7360_RPC_CALL_UTA_MS_NET_GET_EXTENDED_RADIO_SIGNAL_INFO_REQ = 0x0ec, + XMM7360_RPC_CALL_UTA_MS_NET_DETACH_REQ = 0x0ef, + XMM7360_RPC_CALL_UTA_MS_NET_SELECT_GPRS_CLASS_REQ = 0x0f1, + XMM7360_RPC_CALL_UTA_MS_NET_GET_CSG_CONFIG_REQ = 0x0f3, + XMM7360_RPC_CALL_UTA_MS_NET_CS_SERVICE_NOTIFICATION_ACCEPT = 0x0f4, + XMM7360_RPC_CALL_UTA_MS_NET_SINGLE_SHOT_FD_REQ = 0x0f9, + XMM7360_RPC_CALL_UTA_MS_SIM_PB_LOCATION_REQ = 0x0fb, + XMM7360_RPC_CALL_UTA_MS_SIM_PB_READ_GAS_ENTRY_REQ = 0x0fd, + XMM7360_RPC_CALL_UTA_MS_SIM_PB_WRITE_ENTRY_REQ = 0x0ff, + XMM7360_RPC_CALL_UTA_MS_SIM_PB_GET_META_INFORMATION_REQ = 0x101, + XMM7360_RPC_CALL_UTA_MS_SIM_PB_USIM_PB_SELECT_REQ = 0x103, + XMM7360_RPC_CALL_UTA_MS_SIM_PB_GET_FREE_RECORDS_REQ = 0x105, + XMM7360_RPC_CALL_UTA_MS_SIM_CREATE_READ_BINARY_APDU = 0x10a, + XMM7360_RPC_CALL_UTA_MS_SIM_CREATE_UPDATE_BINARY_APDU = 0x10b, + XMM7360_RPC_CALL_UTA_MS_SIM_ANALYSE_READ_RESULT = 0x10c, + XMM7360_RPC_CALL_UTA_MS_SIM_SET_FDN_REQ = 0x10e, + XMM7360_RPC_CALL_SET_AP_SCREEN_STATE = 0x110, + XMM7360_RPC_CALL_UTA_IO_CTL = 0x111, + XMM7360_RPC_CALL_UTA_IDC_AP_MSG_SET_REQ = 0x114, + XMM7360_RPC_CALL_UTA_IDC_AP_MSG_GET_REQ = 0x115, + XMM7360_RPC_CALL_UTA_IDC_ENBLE_REQ = 0x116, + XMM7360_RPC_CALL_UTA_IDC_CWS_MSG_SET_REQ = 0x119, + XMM7360_RPC_CALL_UTA_IDC_CWS_MSG_GET_REQ = 0x11a, + XMM7360_RPC_CALL_UTA_IDC_SUBSCRIBE_INDICATIONS = 0x11c, + XMM7360_RPC_CALL_UTA_IDC_UNSUBSCRIBE_INDICATIONS = 0x11d, + XMM7360_RPC_CALL_UTA_BOOT_PREPARE_SHUTDOWN_REQ = 0x11f, + XMM7360_RPC_CALL_UTA_BOOT_SHUTDOWN_REQ = 0x120, + XMM7360_RPC_CALL_UTA_RF_MAX_TX_PWR_SET_2G = 0x121, + XMM7360_RPC_CALL_UTA_RF_MAX_TX_PWR_SET_3G = 0x122, + XMM7360_RPC_CALL_UTA_RF_MAX_TX_PWR_SET_4G = 0x123, + XMM7360_RPC_CALL_UTA_FREQ_INFO_ACTIVATE_REQ = 0x128, + XMM7360_RPC_CALL_UTA_FREQ_INFO_GET_FREQ_INFO_REQ = 0x129, + XMM7360_RPC_CALL_UTA_FREQ_INFO_DEACTIVATE_REQ = 0x12a, + XMM7360_RPC_CALL_UTA_FREQ_INFO_REGISTER_INDICATIONS = 0x12b, + XMM7360_RPC_CALL_UTA_FREQ_INFO_DEREGISTER_INDICATIONS = 0x12c, + XMM7360_RPC_CALL_UTA_MODE_SET_REQ = 0x12f, + XMM7360_RPC_CALL_UTA_NVM_FLUSH_SYNC = 0x130, + XMM7360_RPC_CALL_UTA_PROD_REGISTER_GTI_CALLBACK_FUNC = 0x132, + XMM7360_RPC_CALL_UTA_PROD_GTI_CMD_REQ = 0x133, + XMM7360_RPC_CALL_UTA_CELL_TIME_STAMP_REQ = 0x134, + XMM7360_RPC_CALL_UTA_MS_SS_LCS_INIT = 0x136, + XMM7360_RPC_CALL_UTA_MS_SS_LCS_MO_LOCATION_REQ = 0x137, + XMM7360_RPC_CALL_UTA_MS_SS_LCS_MTLR_NOTIFICATION_RSP = 0x139, + XMM7360_RPC_CALL_UTA_MS_CP_ASSISTANCE_DATA_INJECT_REQ = 0x13c, + XMM7360_RPC_CALL_UTA_MS_CP_RESET_ASSISTANCE_DATA = 0x13d, + XMM7360_RPC_CALL_UTA_MS_CP_POS_MEASUREMENT_REQ = 0x140, + XMM7360_RPC_CALL_UTA_MS_CP_POS_MEASUREMENT_ABORT_REQ = 0x142, + XMM7360_RPC_CALL_UTA_MS_CP_POS_ENABLE_MEASUREMENT_REPORT = 0x144, + XMM7360_RPC_CALL_UTA_MS_CP_POS_DISABLE_MEASUREMENT_REPORT = 0x145, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_INIT = 0x146, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_SMS_PP_RSP = 0x148, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_SIM_INITIATED_CALL_RSP = 0x14a, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_SS_USSD_RSP = 0x14c, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_EXEC_DTMF_RSP = 0x14e, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_STOP_DTMF_REQ = 0x150, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_REFRESH_CONFIRM_RSP = 0x152, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_REFRESH_FCN_RSP = 0x154, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_CONTROL_REQ = 0x155, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_TERMINAL_PROFILE_DOWNLOAD_REQ = 0x157, + XMM7360_RPC_CALL_UTA_MS_3GPP2_SMS_SEND_REQ = 0x15a, + XMM7360_RPC_CALL_UTA_MS_3GPP2_SMS_SUBSCRIBE_INDICATIONS = 0x15c, + XMM7360_RPC_CALL_UTA_MS_3GPP2_SMS_UNSUBSCRIBE_INDICATIONS = 0x15d, + XMM7360_RPC_CALL_RPC_GET_REMOTE_VER_INFO = 0x15e, + XMM7360_RPC_CALL_UTA_MS_METRICS_REGISTER_HANDLER = 0x160, + XMM7360_RPC_CALL_UTA_MS_METRICS_DEREGISTER_HANDLER = 0x161, + XMM7360_RPC_CALL_UTA_MS_METRICS_SET_OPTIONS = 0x162, + XMM7360_RPC_CALL_UTA_MS_METRICS_TRIGGER = 0x163, + XMM7360_RPC_CALL_UTA_MS_EMBMS_INIT = 0x164, + XMM7360_RPC_CALL_UTA_MS_EMBMS_SET_SERVICE_REQ = 0x165, + XMM7360_RPC_CALL_UTA_MS_EMBMS_MBSFN_AREA_CONFIG_REQ = 0x166, + XMM7360_RPC_CALL_UTA_MS_EMBMS_SESSION_CONFIG_REQ = 0x167, + XMM7360_RPC_CALL_UTA_MS_EMBMS_SET_INTERESTED_TMGI_LIST_REQ = 0x168, + XMM7360_RPC_CALL_UTA_MS_EMBMS_SET_INTERESTED_SAI_FREQ_REQ = 0x169, + XMM7360_RPC_CALL_UTA_IMS_SUBSCRIBE_INDICATIONS = 0x176, + XMM7360_RPC_CALL_UTA_IMS_UNSUBSCRIBE_INDICATIONS = 0x177, + XMM7360_RPC_CALL_UTA_IMS_GET_FRAMEWORK_STATE = 0x178, + XMM7360_RPC_CALL_UTA_RTC_GET_DATETIME = 0x179, + XMM7360_RPC_CALL_UTA_MS_SIM_ANALYSE_SIM_APDU_RESULT = 0x17a, + XMM7360_RPC_CALL_UTA_MS_SIM_OPEN_CHANNEL_REQ = 0x17b, + XMM7360_RPC_CALL_UTA_MS_SIM_CLOSE_CHANNEL_REQ = 0x17d, + XMM7360_RPC_CALL_UTA_MS_SIM_SET_BDN_REQ = 0x17f, + XMM7360_RPC_CALL_UTA_MS_SET_SIM_STACK_MAPPING_REQ = 0x181, + XMM7360_RPC_CALL_UTA_MS_GET_SIM_STACK_MAPPING_REQ = 0x183, + XMM7360_RPC_CALL_UTA_MS_NET_SET_RADIO_SIGNAL_REPORTING_CONFIGURATION = 0x188, + XMM7360_RPC_CALL_UTA_PC_IE_ENUMERATIONEXT_TOUT = 0x189, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_SET_TERMINAL_CAPABILITY_REQ = 0x18a, + XMM7360_RPC_CALL_UTA_MS_SIM_TK_READ_TERMINAL_CAPABILITY_REQ = 0x18c, + XMM7360_RPC_CALL_CSI_FCC_LOCK_QUERY_REQ = 0x18e, + XMM7360_RPC_CALL_CSI_FCC_LOCK_GEN_CHALLENGE_REQ = 0x190, + XMM7360_RPC_CALL_CSI_FCC_LOCK_VER_CHALLENGE_REQ = 0x192, + XMM7360_RPC_CALL_UTA_SENSOR_OPEN_REQ = 0x194, + XMM7360_RPC_CALL_UTA_SENSOR_CLOSE_EXT = 0x197, + XMM7360_RPC_CALL_UTA_SENSOR_START_EXT = 0x198, + XMM7360_RPC_CALL_UTA_SENSOR_SET_ALARM_PARAM_EXT = 0x199, + XMM7360_RPC_CALL_UTA_SENSOR_SET_SCHEDULER_PARAM_EXT = 0x19a, + XMM7360_RPC_CALL_CSI_SIO_IP_FILTER_CNTRL_SET_REQ = 0x19b, + XMM7360_RPC_CALL_UTA_MS_ACC_CURRENT_FREQ_INFO_REQ = 0x19d, + XMM7360_RPC_CALL_CSI_TRC_AT_CMND_REQ = 0x1a0, + XMM7360_RPC_CALL_UTA_MS_SIM_APDU_CMD_EXT_REQ = 0x1a2, + XMM7360_RPC_CALL_UTA_MS_NET_GET_PLMN_NAME_INFO_REQ = 0x1a4, + XMM7360_RPC_CALL_UTA_MS_NET_GET_COUNTRY_LIST_REQ = 0x1a7, + XMM7360_RPC_CALL_UTA_MS_NET_EXT_CONFIGURE_NETWORK_MODE_REQ = 0x1a9, + XMM7360_RPC_CALL_UTA_MS_NET_EXT_BAND_STATUS_REQ = 0x1ac, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_ATTACH_APN_CONFIG_REQ = 0x1af, + XMM7360_RPC_CALL_CSI_MS_CALL_PS_INITIALIZE = 0x1b1, + XMM7360_RPC_CALL_UTA_AUDIO_ENABLE_SOURCE = 0x1b2, + XMM7360_RPC_CALL_UTA_AUDIO_DISABLE_SOURCE = 0x1b3, + XMM7360_RPC_CALL_UTA_AUDIO_CONFIGURE_DESTINATION_EXT = 0x1b4, + XMM7360_RPC_CALL_UTA_AUDIO_SET_DESTINATIONS_FOR_SOURCE = 0x1b5, + XMM7360_RPC_CALL_UTA_AUDIO_SET_VOLUME_FOR_SOURCE = 0x1b6, + XMM7360_RPC_CALL_UTA_AUDIO_SET_MUTE_FOR_SOURCE_EXT = 0x1b7, + XMM7360_RPC_CALL_UTA_AUDIO_SET_VOLUME_FOR_DESTINATION = 0x1b8, + XMM7360_RPC_CALL_UTA_AUDIO_SET_MUTE_FOR_DESTINATION_EXT = 0x1b9, + XMM7360_RPC_CALL_UTA_AUDIO_CONFIGURE_SOURCE_EXT = 0x1ba, + XMM7360_RPC_CALL_UTA_AUDIO_SET_DESTINATIONS_FOR_SOURCE_EXT = 0x1bb, + XMM7360_RPC_CALL_UTA_RPC_SCREEN_CONTROL_REQ = 0x1bc, + XMM7360_RPC_CALL_UTA_MS_CALL_PS_READ_CONTEXT_STATUS_REQ = 0x1bd, + XMM7360_RPC_CALL_CSI_MS_SIM_ACCESS_GET_SIM_STATE_INFO_REQ = 0x1bf, + XMM7360_RPC_CALL_CSI_MS_NET_GET_REGISTRATION_INFO_REQ = 0x1c1, + XMM7360_RPC_CALL_CSI_SIO_IP_FILTER_NEW_CNTRL_SET_REQ = 0x1c3, + XMM7360_RPC_CALL_CSI_MS_NET_LDR_GET_APN_PLMN_PARAMETER_LIST_REQ = 0x1c5, + XMM7360_RPC_CALL_RPC_GET_API_PARAM_CHANGED_BITMAP = 0x1c8, +} Xmm7360RpcCallId; + +typedef enum { + XMM7360_RPC_UNSOL_UTA_MS_SIM_APDU_CMD_RSP_CB = 0x003, + XMM7360_RPC_UNSOL_UTA_MS_SIM_APPLICATION_RSP_CB = 0x005, + XMM7360_RPC_UNSOL_UTA_MS_SIM_INFO_IND_CB = 0x007, + XMM7360_RPC_UNSOL_UTA_MS_SIM_INIT_IND_CB = 0x008, + XMM7360_RPC_UNSOL_UTA_MS_SIM_FULL_ACCESS_IND_CB = 0x009, + XMM7360_RPC_UNSOL_UTA_MS_SIM_ERROR_IND_CB = 0x00a, + XMM7360_RPC_UNSOL_UTA_MS_SIM_CARD_IND_CB = 0x00b, + XMM7360_RPC_UNSOL_UTA_MS_SIM_APPLICATION_IND_CB = 0x00c, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_READ_ENTRY_RSP_CB = 0x00e, + XMM7360_RPC_UNSOL_UTA_MS_SIM_GEN_PIN_RSP_CB = 0x010, + XMM7360_RPC_UNSOL_UTA_MS_SIM_MODIFY_LOCK_RSP_CB = 0x012, + XMM7360_RPC_UNSOL_UTA_MS_SIM_LOCK_STATUS_IND_CB = 0x013, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_MO_SMS_CONTROL_INFO_IND_CB = 0x014, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_PROACTIVE_COMMAND_IND_CB = 0x015, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_ENVELOPE_RES_IND_CB = 0x018, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_TERMINAL_PROFILE_READ_RSP_CB = 0x01a, + XMM7360_RPC_UNSOL_UTA_SIM_TK_PROACTIVE_COMMAND_HANDLER_FUNC = 0x01b, + XMM7360_RPC_UNSOL_UTA_MS_CPS_SET_MODE_RSP = 0x01e, + XMM7360_RPC_UNSOL_UTA_MS_CPS_SET_MODE_IND_CB = 0x022, + XMM7360_RPC_UNSOL_UTA_MS_SS_NETWORK_ERROR_IND_CB = 0x02a, + XMM7360_RPC_UNSOL_UTA_MS_SS_NETWORK_REJECT_IND_CB = 0x02b, + XMM7360_RPC_UNSOL_UTA_MS_SS_NETWORK_GSM_CAUSE_IND_CB = 0x02c, + XMM7360_RPC_UNSOL_UTA_MS_SS_USSD_RSP_CB = 0x02d, + XMM7360_RPC_UNSOL_UTA_MS_SS_USSD_IND_CB = 0x02e, + XMM7360_RPC_UNSOL_UTA_MS_SS_END_IND_CB = 0x02f, + XMM7360_RPC_UNSOL_UTA_MS_SMS_INCOMING_IND_CB = 0x032, + XMM7360_RPC_UNSOL_UTA_MS_SMS_SEND_RSP_CB = 0x033, + XMM7360_RPC_UNSOL_UTA_MS_SMS_SET_MEMORY_AVAILABLE_RSP_CB = 0x035, + XMM7360_RPC_UNSOL_UTA_MS_SMS_SIM_MSG_CACHE_FINISHED_IND_CB = 0x037, + XMM7360_RPC_UNSOL_UTA_MS_SMS_SIM_MSG_COUNT_RSP_CB = 0x039, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_DEFINE_PRIMARY_RSP_CB = 0x03e, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_UNDEFINE_PRIMARY_RSP_CB = 0x040, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_PRIMARY_RSP_CB = 0x042, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_AUTHENTICATION_RSP_CB = 0x044, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_DNS_RSP_CB = 0x046, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NEGOTIATED_DNS_RSP_CB = 0x048, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NEG_IP_ADDR_RSP_CB = 0x04a, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_ACTIVATE_RSP_CB = 0x04c, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_ACTIVATE_STATUS_IND_CB = 0x04d, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_DEACTIVATE_RSP_CB = 0x04f, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_DEACTIVATE_IND_CB = 0x050, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_CONNECT_RSP_CB = 0x052, + XMM7360_RPC_UNSOL_UTA_MS_NET_SINGLE_SHOT_RADIO_SIGNAL_REPORTING_RSP_CB = 0x056, + XMM7360_RPC_UNSOL_UTA_MS_NET_CELL_INFO_IND_CB = 0x057, + XMM7360_RPC_UNSOL_UTA_MS_NET_CONNECTION_INFO_IND_CB = 0x058, + XMM7360_RPC_UNSOL_UTA_MS_NET_HSPA_INFO_IND_CB = 0x059, + XMM7360_RPC_UNSOL_UTA_MS_NET_RADIO_SIGNAL_IND_CB = 0x05a, + XMM7360_RPC_UNSOL_UTA_MS_NET_CELL_CHANGE_IND_CB = 0x05b, + XMM7360_RPC_UNSOL_UTA_MS_NET_ATTACH_RSP_CB = 0x063, + XMM7360_RPC_UNSOL_UTA_MS_NET_PS_ATTACH_RSP_CB = 0x064, + XMM7360_RPC_UNSOL_UTA_MS_NET_PS_DETACH_RSP_CB = 0x065, + XMM7360_RPC_UNSOL_UTA_MS_NET_SCAN_RSP_CB = 0x066, + XMM7360_RPC_UNSOL_UTA_MS_NET_POWER_DOWN_RSP_CB = 0x067, + XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_SCAN_RSP_CB = 0x068, + XMM7360_RPC_UNSOL_UTA_MS_NET_PS_ATTACH_IND_CB = 0x069, + XMM7360_RPC_UNSOL_UTA_MS_NET_PS_DETACH_IND_CB = 0x06a, + XMM7360_RPC_UNSOL_UTA_MS_NET_REGISTRATION_INFO_IND_CB = 0x06b, + XMM7360_RPC_UNSOL_UTA_MS_NET_IS_ATTACH_ALLOWED_IND_CB = 0x06c, + XMM7360_RPC_UNSOL_UTA_MS_NET_GPRS_CLASS_IND_CB = 0x06d, + XMM7360_RPC_UNSOL_UTA_MS_NET_SET_FD_CONFIG_RSP_CB = 0x06f, + XMM7360_RPC_UNSOL_UTA_MS_NET_FD_CONFIG_IND_CB = 0x070, + XMM7360_RPC_UNSOL_UTA_MS_NET_GET_FD_CONFIG_RSP_CB = 0x072, + XMM7360_RPC_UNSOL_UTA_MS_NET_CONFIGURE_NETWORK_MODE_RSP_CB = 0x074, + XMM7360_RPC_UNSOL_UTA_MS_NET_NETWORK_MODE_CHANGE_IND_CB = 0x075, + XMM7360_RPC_UNSOL_UTA_MS_NET_RAT_MODE_STATUS_RSP_CB = 0x077, + XMM7360_RPC_UNSOL_UTA_MS_NET_RAT_MODE_STATUS_IND_CB = 0x078, + XMM7360_RPC_UNSOL_UTA_MS_NET_DC_SET_VOICE_DOMAIN_PREFERENCE_CONFIG_RSP_CB = 0x081, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_SETUP_CALL_RSP_CB = 0x083, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_DIALING_IND_CB = 0x084, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_ALERTING_IND_CB = 0x085, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CTM_INFO_IND_CB = 0x086, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CONNECTED_IND_CB = 0x087, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_RELEASE_CALL_RSP_CB = 0x089, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_DISCONNECTING_IND_CB = 0x08a, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_DISCONNECTED_IND_CB = 0x08b, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_INCOMING_CALL_IND_CB = 0x08c, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_ACCEPT_CALL_RSP_CB = 0x08e, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_PROGRESS_IND_CB = 0x08f, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_SWAP_CALLS_RSP_CB = 0x091, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_HOLD_CALL_RSP_CB = 0x093, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_RETRIEVE_CALL_RSP_CB = 0x095, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_SPLIT_MPTY_RSP_CB = 0x097, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_JOIN_CALLS_RSP_CB = 0x099, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_TRANSFER_CALLS_RSP_CB = 0x09b, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_START_DTMF_RSP_CB = 0x09d, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_STOP_DTMF_RSP_CB = 0x09f, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_STOP_DTMF_EXT_RSP_CB = 0x0a0, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_NOTIFICATION_IND_CB = 0x0a1, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CUG_INFO_IND_CB = 0x0a2, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CALLING_NAME_INFO_IND_CB = 0x0a3, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_EMERGENCY_NUMBER_LIST_IND_CB = 0x0a4, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_CALL_STATUS_IND_CB = 0x0a5, + XMM7360_RPC_UNSOL_UTA_CALL_MULTIMEDIA_GET_MEDIA_PROFILES_INFO_RSP_CB = 0x0a9, + XMM7360_RPC_UNSOL_UTA_MS_CALL_MULTIMEDIA_SETUP_CALL_RSP_CB = 0x0aa, + XMM7360_RPC_UNSOL_UTA_MS_CALL_MULTIMEDIA_UPDATE_CALL_RSP_CB = 0x0ab, + XMM7360_RPC_UNSOL_UTA_MS_CALL_CS_VOIMS_SRVCC_HO_STATUS_IND_CB = 0x0ae, + XMM7360_RPC_UNSOL_UTA_MS_CPS_SET_SIM_MODE_RSP = 0x0af, + XMM7360_RPC_UNSOL_UTA_MS_CPS_STARTUP_IND_CB = 0x0b1, + XMM7360_RPC_UNSOL_UTA_MS_SS_CALL_FORWARD_RSP_CB = 0x0b3, + XMM7360_RPC_UNSOL_UTA_MS_SS_CALL_WAITING_RSP_CB = 0x0b5, + XMM7360_RPC_UNSOL_UTA_MS_SS_CALL_BARRING_RSP_CB = 0x0b7, + XMM7360_RPC_UNSOL_UTA_MS_SS_IDENTIFICATION_RSP_CB = 0x0b9, + XMM7360_RPC_UNSOL_UTA_MS_SMS_DATA_DOWNLOAD_RSP_CB = 0x0bc, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NEG_QOS_RSP_CB = 0x0bf, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_TFT_RSP_CB = 0x0c1, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_PCO_RSP_CB = 0x0c3, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_GET_NW_PCO_RSP_CB = 0x0c5, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_NW_ACTIVATE_IND_CB = 0x0c6, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_NW_ACTIVATE_ACCEPT_RSP_CB = 0x0c8, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_MODIFY_IND_CB = 0x0ca, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SUSPEND_IND_CB = 0x0cb, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_RESUME_IND_CB = 0x0cc, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_SET_DATA_PREF_RSP_CB = 0x0ce, + XMM7360_RPC_UNSOL_UTA_MS_CBS_START_RSP_CB = 0x0d1, + XMM7360_RPC_UNSOL_UTA_MS_CBS_STOP_RSP_CB = 0x0d2, + XMM7360_RPC_UNSOL_UTA_MS_CBS_NEW_MESSAGE_IND_CB = 0x0d5, + XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_CONFIG_RSP_CB = 0x0d7, + XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_START_RSP_CB = 0x0d9, + XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_STOP_RSP_CB = 0x0db, + XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_NOTIFY_PRIMARY_WARNING_IND = 0x0dc, + XMM7360_RPC_UNSOL_UTA_MS_CBS_ETWS_NOTIFY_SECONDARY_WARNING_IND = 0x0dd, + XMM7360_RPC_UNSOL_UTA_MS_NET_CONFIGURE_RX_DIVERSITY_DARP_IND_CB = 0x0e1, + XMM7360_RPC_UNSOL_UTA_MS_NET_TIME_INFO_READ_RSP_CB = 0x0e4, + XMM7360_RPC_UNSOL_UTA_MS_NET_TIME_INFO_IND_CB = 0x0e5, + XMM7360_RPC_UNSOL_UTA_MS_NET_BAND_STATUS_RSP_CB = 0x0e8, + XMM7360_RPC_UNSOL_UTA_MS_NET_BAND_STATUS_IND_CB = 0x0e9, + XMM7360_RPC_UNSOL_UTA_MS_NET_SET_CSG_CONFIG_RSP_CB = 0x0ea, + XMM7360_RPC_UNSOL_UTA_MS_NET_GET_CSG_CONFIG_RSP_CB = 0x0eb, + XMM7360_RPC_UNSOL_UTA_MS_NET_GET_EXTENDED_RADIO_SIGNAL_INFO_RSP_CB = 0x0ed, + XMM7360_RPC_UNSOL_UTA_MS_NET_NITZ_INFO_IND_CB = 0x0ee, + XMM7360_RPC_UNSOL_UTA_MS_NET_DETACH_RSP_CB = 0x0f0, + XMM7360_RPC_UNSOL_UTA_MS_NET_SELECT_GPRS_CLASS_RSP_CB = 0x0f2, + XMM7360_RPC_UNSOL_UTA_MS_NET_NETWORK_FEATURE_SUPPORT_INFO_IND_CB = 0x0f5, + XMM7360_RPC_UNSOL_UTA_MS_NET_EPS_NETWORK_FEATURE_SUPPORT_INFO_IND_CB = 0x0f6, + XMM7360_RPC_UNSOL_UTA_MS_NET_CS_SERVICE_NOTIFICATION_IND_CB = 0x0f7, + XMM7360_RPC_UNSOL_UTA_MS_NET_DUAL_SIM_SERVICE_IND_CB = 0x0f8, + XMM7360_RPC_UNSOL_UTA_MS_NET_SINGLE_SHOT_FD_RSP_CB = 0x0fa, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_GET_LOCATION_RSP_CB = 0x0fc, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_READ_GAS_ENTRY_RSP_CB = 0x0fe, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_WRITE_ENTRY_RSP_CB = 0x100, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_GET_META_INFORMATION_RSP_CB = 0x102, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_USIM_PB_SELECT_RSP_CB = 0x104, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_GET_FREE_RECORDS_RSP_CB = 0x106, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_USIM_PB_READY_IND_CB = 0x107, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_CACHE_LOAD_FINISHED_IND_CB = 0x108, + XMM7360_RPC_UNSOL_UTA_MS_SIM_PB_CACHE_LOAD_IND_CB = 0x109, + XMM7360_RPC_UNSOL_UTA_MS_SIM_GEN_PIN_IND_CB = 0x10d, + XMM7360_RPC_UNSOL_UTA_MS_SIM_FDN_STATE_IND_CB = 0x10f, + XMM7360_RPC_UNSOL_UTA_IDC_AP_MSG_SET_RSP_CB = 0x112, + XMM7360_RPC_UNSOL_UTA_IDC_AP_MSG_GET_RSP_CB = 0x113, + XMM7360_RPC_UNSOL_UTA_IDC_CWS_MSG_SET_RSP_CB = 0x117, + XMM7360_RPC_UNSOL_UTA_IDC_CWS_MSG_GET_RSP_CB = 0x118, + XMM7360_RPC_UNSOL_UTA_IDC_CWS_MSG_IND_CB = 0x11b, + XMM7360_RPC_UNSOL_UTA_BOOT_PREPARE_SHUTDOWN_RSP_CB = 0x11e, + XMM7360_RPC_UNSOL_UTA_FREQ_INFO_ACTIVATE_RSP_CB = 0x124, + XMM7360_RPC_UNSOL_UTA_FREQ_INFO_DEACTIVATE_RSP_CB = 0x125, + XMM7360_RPC_UNSOL_UTA_FREQ_INFO_GET_FREQ_INFO_RSP_CB = 0x126, + XMM7360_RPC_UNSOL_UTA_FREQ_INFO_INDICATION_CB = 0x127, + XMM7360_RPC_UNSOL_UTA_MODE_SET_RSP_CB = 0x12d, + XMM7360_RPC_UNSOL_UTA_MODE_STARTUP_IND_CB = 0x12e, + XMM7360_RPC_UNSOL_UTA_PROD_GTI_CMD_RSP_CB = 0x131, + XMM7360_RPC_UNSOL_UTA_CELL_TIME_STAMP_RSP_CB = 0x135, + XMM7360_RPC_UNSOL_UTA_MS_SS_LCS_MO_LOCATION_RSP_CB = 0x138, + XMM7360_RPC_UNSOL_UTA_MS_SS_LCS_CAPABILITIES_IND_CB = 0x13a, + XMM7360_RPC_UNSOL_UTA_MS_CP_ASSISTANCE_DATA_INJECT_RSP_CB = 0x13b, + XMM7360_RPC_UNSOL_UTA_MS_CP_ASSISTANCE_DATA_NEEDED_IND_CB = 0x13e, + XMM7360_RPC_UNSOL_UTA_MS_CP_POS_MEASUREMENT_RSP_CB = 0x13f, + XMM7360_RPC_UNSOL_UTA_MS_CP_POS_MEASUREMENT_ABORT_RSP_CB = 0x141, + XMM7360_RPC_UNSOL_UTA_MS_CP_POS_REPORT_MEASUREMENT_IND_CB = 0x143, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_SMS_PP_IND_CB = 0x147, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_SIM_INITIATED_CALL_IND_CB = 0x149, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_SS_USSD_IND_CB = 0x14b, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_DTMF_IND_CB = 0x14d, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_EXEC_DTMF_END_IND_CB = 0x14f, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_REFRESH_CONFIRM_IND_CB = 0x151, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_REFRESH_FCN_IND_CB = 0x153, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_CONTROL_RSP_CB = 0x156, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_TERMINAL_PROFILE_DOWNLOAD_RSP_CB = 0x158, + XMM7360_RPC_UNSOL_UTA_MS_3GPP2_SMS_SEND_RSP_CB = 0x159, + XMM7360_RPC_UNSOL_UTA_MS_3GPP2_SMS_INCOMING_IND_CB = 0x15b, + XMM7360_RPC_UNSOL_UTA_METRICS_HANDLER_FUNCTION = 0x15f, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SET_SERVICE_RSP_CB = 0x16a, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_MBSFN_AREA_CONFIG_RSP_CB = 0x16b, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SESSION_CONFIG_RSP_CB = 0x16c, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SET_INTERESTED_TMGI_LIST_RSP_CB = 0x16d, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SET_INTERESTED_SAI_FREQ_RSP_CB = 0x16e, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SERVICE_IND_CB = 0x16f, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_MBSFN_AREA_IND_CB = 0x170, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SERVICES_LIST_IND_CB = 0x171, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_SAI_LIST_IND_CB = 0x172, + XMM7360_RPC_UNSOL_UTA_MS_EMBMS_MPS_INFO_IND_CB = 0x173, + XMM7360_RPC_UNSOL_UTA_IMS_STATE_CHANGED_IND_CB = 0x174, + XMM7360_RPC_UNSOL_UTA_IMS_SERVICE_STATE_CHANGED_IND_CB = 0x175, + XMM7360_RPC_UNSOL_UTA_MS_SIM_OPEN_CHANNEL_RSP_CB = 0x17c, + XMM7360_RPC_UNSOL_UTA_MS_SIM_CLOSE_CHANNEL_RSP_CB = 0x17e, + XMM7360_RPC_UNSOL_UTA_MS_SIM_BDN_STATE_IND_CB = 0x180, + XMM7360_RPC_UNSOL_UTA_MS_SET_SIM_STACK_MAPPING_RSP_CB = 0x182, + XMM7360_RPC_UNSOL_UTA_MS_GET_SIM_STACK_MAPPING_RSP_CB = 0x184, + XMM7360_RPC_UNSOL_UTA_MS_SIM_MCC_MNC_IND_CB = 0x185, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_TERMINAL_RESPONSE_IND_CB = 0x186, + XMM7360_RPC_UNSOL_UTA_MS_NET_REGISTERED_PLMN_NAME_IND_CB = 0x187, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_SET_TERMINAL_CAPABILITY_RSP_CB = 0x18b, + XMM7360_RPC_UNSOL_UTA_MS_SIM_TK_READ_TERMINAL_CAPABILITY_RSP_CB = 0x18d, + XMM7360_RPC_UNSOL_CSI_FCC_LOCK_QUERY_RSP_CB = 0x18f, + XMM7360_RPC_UNSOL_CSI_FCC_LOCK_GEN_CHALLENGE_RSP_CB = 0x191, + XMM7360_RPC_UNSOL_CSI_FCC_LOCK_VER_CHALLENGE_RSP_CB = 0x193, + XMM7360_RPC_UNSOL_UTA_SENSOR_OPEN_RSP_CB = 0x195, + XMM7360_RPC_UNSOL_UTA_SENSOR_MEAS_IND_CB = 0x196, + XMM7360_RPC_UNSOL_CSI_SIO_IP_FILTER_CNTRL_SET_RSP_CB = 0x19c, + XMM7360_RPC_UNSOL_CSI_SIO_IP_FILTER_NEW_CNTRL_SET_RSP_CB = 0x1c4, + XMM7360_RPC_UNSOL_UTA_MS_ACC_CURRENT_FREQ_INFO_RSP_CB = 0x19e, + XMM7360_RPC_UNSOL_UTA_MS_ACC_CURRENT_FREQ_INFO_IND_CB = 0x19f, + XMM7360_RPC_UNSOL_CSI_TRC_AT_CMND_RSP_CB = 0x1a1, + XMM7360_RPC_UNSOL_UTA_MS_SIM_APDU_CMD_EXT_RSP_CB = 0x1a3, + XMM7360_RPC_UNSOL_UTA_MS_NET_GET_PLMN_NAME_INFO_RSP_CB = 0x1a5, + XMM7360_RPC_UNSOL_UTA_MS_NET_SIB8_TIME_INFO_IND_CB = 0x1a6, + XMM7360_RPC_UNSOL_UTA_MS_NET_GET_COUNTRY_LIST_RSP_CB = 0x1a8, + XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_CONFIGURE_NETWORK_MODE_RSP_CB = 0x1aa, + XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_NETWORK_MODE_CHANGE_IND_CB = 0x1ab, + XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_BAND_STATUS_RSP_CB = 0x1ad, + XMM7360_RPC_UNSOL_UTA_MS_NET_EXT_BAND_STATUS_IND_CB = 0x1ae, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_ATTACH_APN_CONFIG_RSP_CB = 0x1b0, + XMM7360_RPC_UNSOL_UTA_MS_CALL_PS_READ_CONTEXT_STATUS_RSP_CB = 0x1be, + XMM7360_RPC_UNSOL_CSI_MS_SIM_ACCESS_GET_SIM_STATE_INFO_RSP_CB = 0x1c0, + XMM7360_RPC_UNSOL_CSI_MS_NET_GET_REGISTRATION_INFO_RSP_CB = 0x1c2, + XMM7360_RPC_UNSOL_CSI_MS_NET_LDR_GET_APN_PLMN_PARAMETER_LIST_RSP_CB = 0x1c6, + XMM7360_RPC_UNSOL_UTA_MS_NET_LDR_APN_PARAMETERS_CHANGE_IND_CB = 0x1c7, +} Xmm7360RpcUnsolId; + +typedef enum { + XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN, + XMM7360_RPC_MSG_ARG_TYPE_BYTE, + XMM7360_RPC_MSG_ARG_TYPE_SHORT, + XMM7360_RPC_MSG_ARG_TYPE_LONG, + XMM7360_RPC_MSG_ARG_TYPE_STRING, +} Xmm7360RpcMsgArgType; + + +#define XMM7360_RPC_MSG_ARG_GET_INT(arg) \ + (arg->type == XMM7360_RPC_MSG_ARG_TYPE_BYTE ? arg->value.b \ + : arg->type == XMM7360_RPC_MSG_ARG_TYPE_SHORT ? arg->value.s \ + : arg->type == XMM7360_RPC_MSG_ARG_TYPE_LONG ? arg->value.l : -1) + +typedef struct { + Xmm7360RpcMsgArgType type; + union { + gint8 b; + gint16 s; + gint32 l; + const gchar *string; + } value; + gsize size; + gsize pad; +} Xmm7360RpcMsgArg; + +typedef enum { + XMM7360_RPC_RESPONSE_TYPE_RESPONSE, + XMM7360_RPC_RESPONSE_TYPE_ASYNC_ACK, + XMM7360_RPC_RESPONSE_TYPE_UNSOLICITED, + XMM7360_RPC_RESPONSE_TYPE_UNKNOWN, +} Xmm7360RpcResponseType; + +typedef struct { + guint32 id; + Xmm7360RpcResponseType type; + guint32 unsol_id; + GByteArray *body; + GPtrArray *content; /* contains (Xmm7360RpcMsgArgs *) */ +} Xmm7360RpcResponse; + +/*****************************************************************************/ + +gint xmm7360_byte_array_read_asn_int (GByteArray *buf, + gsize offset, + gint *out_val, + Xmm7360RpcMsgArg *out_arg, + GError **error); + +gint xmm7360_byte_array_read_string (GByteArray *buf, + gsize offset, + Xmm7360RpcMsgArg *out_arg, + GError **error); + +void xmm7360_byte_array_append_asn_int4 (GByteArray *array, + gint32 value); + +void xmm7360_byte_array_append_uint8 (GByteArray *buf, + gulong val); + +void xmm7360_byte_array_append_string (GByteArray *buf, + const guint8 *data, + gsize data_len, + guint data_len_padded); + +void xmm7360_rpc_response_free (Xmm7360RpcResponse *msg); + +GByteArray * xmm7360_rpc_args_to_byte_array (const Xmm7360RpcMsgArg *args); + +Xmm7360RpcResponse *xmm7360_parse_response (GByteArray *buf, + GError **error); + +GByteArray * xmm7360_command_to_byte_array (Xmm7360RpcCallId callid, + gboolean is_async, + GByteArray *body); + +GString * xmm7360_rpc_args_to_string (GPtrArray *args); + +GString * xmm7360_byte_array_hexlify (GByteArray *buf); + +gboolean xmm7360_rpc_msg_body_unpack (GByteArray *buf, + GPtrArray *args, + GError **error); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (Xmm7360RpcResponse, xmm7360_rpc_response_free); + +#endif /* MM_XMMRPC_XMM7360_PROTOCOL_H */ diff --git a/src/plugins/intel/tests/test-xmmrpc-xmm7360-protocol.c b/src/plugins/intel/tests/test-xmmrpc-xmm7360-protocol.c new file mode 100644 index 00000000..9b1b8f87 --- /dev/null +++ b/src/plugins/intel/tests/test-xmmrpc-xmm7360-protocol.c @@ -0,0 +1,402 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2018 Aleksander Morgado + */ + +#include +#include +#include + +#include +#define _LIBMM_INSIDE_MM +#include + +#include "mm-log-test.h" +#include "mm-modem-helpers.h" +#include "mm-xmmrpc-xmm7360-protocol.h" + +#define XMM_BUFFER(...) \ + .buffer = { __VA_ARGS__ }, \ + .buffer_size = sizeof((guint8[]){ __VA_ARGS__ }), + +#define XMM_STRING_BUFFER(str_type, str_len, ...) \ + .buffer = { str_type, \ + str_len, \ + 0x02, /* len_padded: ASN int start marker */ \ + 0x01, /* len_padded: ASN int size 1 */ \ + str_len * (str_type == 0x55 ? 1 : str_type == 0x56 ? 2 : str_type == 0x57 ? 4 : 0), /* len_padded: ASN int val */ \ + 0x02, /* pad_len: ASN int start marker */ \ + 0x01, /* pad_len: ASN int size 1 */ \ + 0x00, /* pad_len: ASN int val 0 */ \ + __VA_ARGS__ /* string data */ \ + }, \ + .buffer_size = sizeof((guint8[]){ __VA_ARGS__ }) + 8, + +#define XMM_EXPECTED_ARG_BUFFER(...) \ + .expected_arg_buf = { __VA_ARGS__ }, \ + .expected_arg_size = sizeof((guint8[]){ __VA_ARGS__ }), + +/*****************************************************************************/ + +typedef struct { + const gchar *detail; + const gsize offset; + const gint expected_consumed; + const gint expected_error; + const gchar *expected_error_string; + const guint8 buffer[255]; + const guint buffer_size; + const guint8 expected_arg_buf[255]; + const gsize expected_arg_size; +} ReadStrTest; + +static const ReadStrTest read_str_tests[] = { + { + .detail = "zero_buffer", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "initial buffer size 0 too small (need 2)", + }, + { + .detail = "1b_buffer", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "initial buffer size 1 too small (need 2)", + XMM_BUFFER( 0x02 ) + }, + { + .detail = "bad_string_type", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "unhandled string type 0x02", + XMM_BUFFER( 0x02, 0x04 ) + }, + { + .detail = "small_buffer_big_message", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "initial buffer size 3 too small (need 5)", + XMM_BUFFER( 0x55, 0x04, 0x02 ) + }, + { + .detail = "1b_string_2chars", + .expected_consumed = 10, + XMM_STRING_BUFFER( 0x55, 0x02, 'H', 'i' ) + XMM_EXPECTED_ARG_BUFFER( 'H', 'i' ) + }, + { + .detail = "1b_string_5chars", + .expected_consumed = 13, + XMM_STRING_BUFFER( 0x55, 0x05, 'H', 'e', 'l', 'l', 'o' ) + XMM_EXPECTED_ARG_BUFFER( 'H', 'e', 'l', 'l', 'o' ) + }, + { + .detail = "2b_string_2chars", + .expected_consumed = 12, + XMM_STRING_BUFFER( 0x56, 0x02, 0x00, 'H', 0x00, 'i' ) + XMM_EXPECTED_ARG_BUFFER( 0x00, 'H', 0x00, 'i' ) + }, + { + .detail = "4b_string_2chars", + .expected_consumed = 16, + XMM_STRING_BUFFER( 0x57, 0x02, 0x00, 0x01, 0x02, 'H', 0x00, 0x01, 0x02, 'i' ) + XMM_EXPECTED_ARG_BUFFER( 0x00, 0x01, 0x02, 'H', 0x00, 0x01, 0x02, 'i' ) + }, + { + .detail = "1b_string_zero_length", + .expected_consumed = 8, + XMM_STRING_BUFFER( 0x55, 0x00 ) + }, + { + .detail = "2b_string_zero_length", + .expected_consumed = 8, + XMM_STRING_BUFFER( 0x56, 0x00 ) + }, + { + .detail = "4b_string_zero_length", + .expected_consumed = 8, + XMM_STRING_BUFFER( 0x57, 0x00 ) + }, +}; + +static void +test_read_str (gconstpointer data) +{ + const ReadStrTest *test = data; + g_autoptr(GError) error = NULL; + gint consumed; + g_autoptr(GByteArray) buffer = NULL; + Xmm7360RpcMsgArg arg = { 0 }; + + buffer = g_byte_array_sized_new (sizeof (test->buffer_size)); + if (sizeof (test->buffer)) + g_byte_array_append (buffer, test->buffer, test->buffer_size); + + consumed = xmm7360_byte_array_read_string (buffer, test->offset, &arg, &error); + if (error) { + g_assert_error (error, MM_CORE_ERROR, test->expected_error); + g_assert_cmpstr (error->message, ==, test->expected_error_string); + g_assert_cmpint (consumed, <, 0); + g_assert_cmpint (test->expected_arg_size, ==, 0); + g_assert_cmpint (arg.size, ==, 0); + } else { + g_assert_no_error (error); + g_assert_cmpint (test->expected_error, ==, 0); + g_assert_false (!!test->expected_error_string); + g_assert_cmpint (consumed, ==, test->expected_consumed); + g_assert_cmpint (arg.type, ==, XMM7360_RPC_MSG_ARG_TYPE_STRING); + g_assert_cmpint (arg.size, ==, test->expected_arg_size); + g_assert_cmpmem (arg.value.string, arg.size, test->expected_arg_buf, test->expected_arg_size); + } +} + +/*****************************************************************************/ + +typedef struct { + const gchar *detail; + const gsize offset; + const gint expected_consumed; + const gint expected_error; + const gchar *expected_error_string; + const gint expected_val; + const guint8 buffer[255]; + const guint buffer_size; + const Xmm7360RpcMsgArg expected_arg; +} ReadAsnIntTest; + +static const ReadAsnIntTest read_asn_int_tests[] = { + { + .detail = "zero_buffer", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "initial buffer size 0 too small (need 3)", + }, + { + .detail = "1b_buffer", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "initial buffer size 1 too small (need 3)", + XMM_BUFFER( 0x02 ) + }, + { + .detail = "2b_buffer", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "initial buffer size 2 too small (need 3)", + XMM_BUFFER( 0x02, 0x01 ) + }, + { + .detail = "small_buffer_big_message", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "buffer size 3 too small (need 6)", + XMM_BUFFER( 0x02, 0x04, 0x02 ) + }, + { + .detail = "bad_start", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "unexpected ASN start byte 0x00 (expected 0x02)", + XMM_BUFFER( 0x00, 0x01, 0x01 ) + }, + { + .detail = "no_data", + .expected_consumed = 2, + .expected_val = 0, + XMM_BUFFER( 0x02, 0x00, 0x00 ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN, + }, + }, + { + .detail = "u8", + .expected_consumed = 3, + .expected_val = 1, + XMM_BUFFER( 0x02, 0x01, 0x01 ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_BYTE, + .value.b = 0x01, + }, + }, + { + .detail = "u16", + .expected_consumed = 4, + .expected_val = 0x102, + XMM_BUFFER( 0x02, 0x02, 0x01, 0x02 ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_SHORT, + .value.s = 0x102, + }, + }, + { + .detail = "u24_is_bad", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "unhandled int size 3", + XMM_BUFFER( 0x02, 0x03, 0x01, 0x02, 0x03 ) + }, + { + .detail = "u32", + .expected_consumed = 6, + .expected_val = 0x1020304, + XMM_BUFFER( 0x02, 0x04, 0x01, 0x02, 0x03, 0x04 ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_LONG, + .value.l = 0x1020304, + }, + }, + { + .detail = "ubad", + .expected_consumed = -1, + .expected_error = MM_CORE_ERROR_FAILED, + .expected_error_string = "unhandled int size 6", + XMM_BUFFER( 0x02, 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 ) + }, + { + .detail = "u8_negative_max", + .expected_consumed = 3, + .expected_val = -128, + XMM_BUFFER( 0x02, 0x01, 0x80 ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_BYTE, + .value.b = -128, + }, + }, + { + .detail = "u16_negative_max", + .expected_consumed = 4, + .expected_val = -32768, + XMM_BUFFER( 0x02, 0x02, 0x80, 0x00 ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_SHORT, + .value.s = -32768, + }, + }, + { + .detail = "u32_negative_max", + .expected_consumed = 6, + .expected_val = -2147483648, + XMM_BUFFER( 0x02, 0x04, 0x80, 0x00, 0x00, 0x00 ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_LONG, + .value.l = -2147483648, + }, + }, + { + .detail = "u8_negative_min", + .expected_consumed = 3, + .expected_val = -1, + XMM_BUFFER( 0x02, 0x01, 0xFF ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_BYTE, + .value.b = -1, + }, + }, + { + .detail = "u16_negative_min", + .expected_consumed = 4, + .expected_val = -1, + XMM_BUFFER( 0x02, 0x02, 0xFF, 0xFF ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_SHORT, + .value.s = -1, + }, + }, + { + .detail = "u32_negative_min", + .expected_consumed = 6, + .expected_val = -1, + XMM_BUFFER( 0x02, 0x04, 0xFF, 0xFF, 0xFF, 0xFF ) + .expected_arg = { + .type = XMM7360_RPC_MSG_ARG_TYPE_LONG, + .value.l = -1, + }, + }, +}; + +static void +test_read_asn_int (gconstpointer data) +{ + const ReadAsnIntTest *test = data; + g_autoptr(GError) error = NULL; + gint consumed; + g_autoptr(GByteArray) buffer = NULL; + gint val = 0; + Xmm7360RpcMsgArg arg = { 0 }; + + buffer = g_byte_array_sized_new (sizeof (test->buffer_size)); + if (sizeof (test->buffer)) + g_byte_array_append (buffer, test->buffer, test->buffer_size); + + consumed = xmm7360_byte_array_read_asn_int (buffer, test->offset, &val, &arg, &error); + if (error) { + g_assert_error (error, MM_CORE_ERROR, test->expected_error); + g_assert_cmpstr (error->message, ==, test->expected_error_string); + g_assert_cmpint (consumed, <, 0); + g_assert_cmpint (test->expected_arg.type, ==, 0); + } else { + g_assert_no_error (error); + g_assert_cmpint (test->expected_error, ==, 0); + g_assert_false (!!test->expected_error_string); + g_assert_cmpint (consumed, ==, test->expected_consumed); +g_message ("v = %d 0x%x\n", val, val); + g_assert_cmpint (val, ==, test->expected_val); + if (test->expected_arg.type != XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN) { + g_assert_cmpint (arg.type, ==, test->expected_arg.type); + switch (arg.type) { + case XMM7360_RPC_MSG_ARG_TYPE_BYTE: + g_assert_cmpint (arg.value.b, ==, test->expected_arg.value.b); + break; + case XMM7360_RPC_MSG_ARG_TYPE_SHORT: + g_assert_cmpint (arg.value.s, ==, test->expected_arg.value.s); + break; + case XMM7360_RPC_MSG_ARG_TYPE_LONG: + g_assert_cmpint (arg.value.l, ==, test->expected_arg.value.l); + break; + case XMM7360_RPC_MSG_ARG_TYPE_STRING: + g_assert_cmpmem (arg.value.string, arg.size, test->expected_arg.value.string, test->expected_arg.size); + break; + case XMM7360_RPC_MSG_ARG_TYPE_UNKNOWN: + default: + g_assert_not_reached (); + } + } + } +} + +/*****************************************************************************/ + +int main (int argc, char **argv) +{ + guint i; + + setlocale (LC_ALL, ""); + + g_test_init (&argc, &argv, NULL); + + for (i = 0; i < G_N_ELEMENTS (read_asn_int_tests); i++) { + g_autofree gchar *path; + + path = g_strdup_printf ("/MM/xmmrpc/read_asn_int/%s", read_asn_int_tests[i].detail); + g_test_add_data_func (path, &read_asn_int_tests[i], test_read_asn_int); + } + + for (i = 0; i < G_N_ELEMENTS (read_str_tests); i++) { + g_autofree gchar *path; + + path = g_strdup_printf ("/MM/xmmrpc/read_str/%s", read_str_tests[i].detail); + g_test_add_data_func (path, &read_str_tests[i], test_read_str); + } + + return g_test_run (); +} diff --git a/src/plugins/meson.build b/src/plugins/meson.build index c19dfd3b..5a79bb16 100644 --- a/src/plugins/meson.build +++ b/src/plugins/meson.build @@ -600,6 +600,7 @@ if plugins_options['intel'] 'intel/mm-broadband-modem-xmm7360.c', 'intel/mm-broadband-modem-xmm7360-rpc.c', 'intel/mm-port-serial-xmmrpc-xmm7360.c', + 'intel/mm-xmmrpc-xmm7360-protocol.c', 'intel/mm-bearer-xmm7360.c', 'intel/mm-sim-xmm7360.c', ) @@ -610,7 +611,7 @@ if plugins_options['intel'] common_c_args = '-DMM_MODULE_NAME="intel"' - headers = files('intel/mm-port-serial-xmmrpc-xmm7360.h') + headers = files('intel/mm-xmmrpc-xmm7360-protocol.h') enums_types = 'mm-intel-enums-types' @@ -634,16 +635,22 @@ if plugins_options['intel'] command: [ python, mm_mkenums, - '--fhead', '#include "mm-port-serial-xmmrpc-xmm7360.h"\n#ifndef __MM_XMM7360_ENUMS_TYPES_H__\n#define __MM_XMM7360_ENUMS_TYPES_H__\n', + '--fhead', '#include "mm-xmmrpc-xmm7360-protocol.h"\n#ifndef __MM_XMM7360_ENUMS_TYPES_H__\n#define __MM_XMM7360_ENUMS_TYPES_H__\n', '--template', files(templates_dir / enums_types + '.h.template'), '--ftail', '#endif /* __MM_XMM7360_ENUMS_TYPES_H__ */\n', '@INPUT@'], capture: true, ) + test_sources = files( + 'intel/mm-xmmrpc-xmm7360-protocol.c', + 'intel/tests/test-xmmrpc-xmm7360-protocol.c', + ) + plugins += {'plugin-intel': { 'plugin': true, 'module': {'sources': sources, 'include_directories': plugins_incs + [xmm_inc, intel_inc], 'c_args': common_c_args}, + 'test': {'sources': test_sources, 'include_directories': intel_inc, 'dependencies': libhelpers_dep}, }} endif diff --git a/src/plugins/sierra/mm-plugin-sierra.c b/src/plugins/sierra/mm-plugin-sierra.c index b25ebabb..7731f401 100644 --- a/src/plugins/sierra/mm-plugin-sierra.c +++ b/src/plugins/sierra/mm-plugin-sierra.c @@ -111,8 +111,8 @@ MM_PLUGIN_NAMED_CREATOR_SCOPE MMPlugin * mm_plugin_create_sierra (void) { static const gchar *subsystems[] = { "tty", "net", "usbmisc", NULL }; - static const guint16 vendor_ids[] = { 0x1199, 0 }; - static const gchar *drivers[] = { "qmi_wwan", "cdc_mbim", NULL }; + static const guint16 vendor_ids[] = { 0x1199, 0x1519, 0 }; + static const gchar *drivers[] = { "qmi_wwan", "cdc_mbim", "cdc_acm", "cdc_ncm", NULL }; return MM_PLUGIN ( g_object_new (MM_TYPE_PLUGIN_SIERRA,