// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// NOTE: THIS FILE IS AUTOMATICALLY GENERATED - DO NOT MODIFY

#include "hermes/qmi_uim.h"

struct qmi_elem_info uim_qmi_result_ei[] = {
    {
        .data_type = QMI_UNSIGNED_2_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint16_t),
        .offset = offsetof(struct uim_qmi_result, result),
    },
    {
        .data_type = QMI_UNSIGNED_2_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint16_t),
        .offset = offsetof(struct uim_qmi_result, error),
    },
    {}};

struct qmi_elem_info uim_card_result_t_ei[] = {
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .offset = offsetof(struct uim_card_result_t, sw1),
    },
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .offset = offsetof(struct uim_card_result_t, sw2),
    },
    {}};

struct qmi_elem_info uim_open_logical_channel_req_ei[] = {
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .tlv_type = 0x01,
        .offset = offsetof(struct uim_open_logical_channel_req, slot),
    },
    {
        .data_type = QMI_OPT_FLAG,
        .elem_len = 1,
        .elem_size = sizeof(bool),
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_open_logical_channel_req, aid_valid),
    },
    {
        .data_type = QMI_DATA_LEN,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_open_logical_channel_req, aid_len),
    },
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = kBufferDataSize,
        .elem_size = sizeof(uint8_t),
        .array_type = VAR_LEN_ARRAY,
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_open_logical_channel_req, aid),
    },
    {}};

struct qmi_elem_info uim_open_logical_channel_resp_ei[] = {
    {
        .data_type = QMI_STRUCT,
        .elem_len = 1,
        .elem_size = sizeof(uim_qmi_result),
        .tlv_type = 0x2,
        .offset = offsetof(struct uim_open_logical_channel_resp, result),
        .ei_array = uim_qmi_result_ei,
    },
    {
        .data_type = QMI_OPT_FLAG,
        .elem_len = 1,
        .elem_size = sizeof(bool),
        .tlv_type = 0x10,
        .offset =
            offsetof(struct uim_open_logical_channel_resp, channel_id_valid),
    },
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_open_logical_channel_resp, channel_id),
    },
    {
        .data_type = QMI_OPT_FLAG,
        .elem_len = 1,
        .elem_size = sizeof(bool),
        .tlv_type = 0x11,
        .offset =
            offsetof(struct uim_open_logical_channel_resp, card_result_valid),
    },
    {
        .data_type = QMI_STRUCT,
        .elem_len = 1,
        .elem_size = sizeof(uim_card_result_t),
        .tlv_type = 0x11,
        .offset = offsetof(struct uim_open_logical_channel_resp, card_result),
        .ei_array = uim_card_result_t_ei,
    },
    {
        .data_type = QMI_OPT_FLAG,
        .elem_len = 1,
        .elem_size = sizeof(bool),
        .tlv_type = 0x12,
        .offset = offsetof(struct uim_open_logical_channel_resp,
                           select_response_valid),
    },
    {
        .data_type = QMI_DATA_LEN,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .tlv_type = 0x12,
        .offset =
            offsetof(struct uim_open_logical_channel_resp, select_response_len),
    },
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = kBufferDataSize,
        .elem_size = sizeof(uint8_t),
        .array_type = VAR_LEN_ARRAY,
        .tlv_type = 0x12,
        .offset =
            offsetof(struct uim_open_logical_channel_resp, select_response),
    },
    {}};

struct qmi_elem_info uim_reset_req_ei[] = {{}};

struct qmi_elem_info uim_reset_resp_ei[] = {
    {
        .data_type = QMI_STRUCT,
        .elem_len = 1,
        .elem_size = sizeof(uim_qmi_result),
        .tlv_type = 0x2,
        .offset = offsetof(struct uim_reset_resp, result),
        .ei_array = uim_qmi_result_ei,
    },
    {}};

struct qmi_elem_info uim_send_apdu_req_ei[] = {
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .tlv_type = 0x01,
        .offset = offsetof(struct uim_send_apdu_req, slot),
    },
    {
        .data_type = QMI_DATA_LEN,
        .elem_len = 1,
        .elem_size = sizeof(uint16_t),
        .tlv_type = 0x02,
        .offset = offsetof(struct uim_send_apdu_req, apdu_len),
    },
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = kBufferDataSize,
        .elem_size = sizeof(uint8_t),
        .array_type = VAR_LEN_ARRAY,
        .tlv_type = 0x02,
        .offset = offsetof(struct uim_send_apdu_req, apdu),
    },
    {
        .data_type = QMI_OPT_FLAG,
        .elem_len = 1,
        .elem_size = sizeof(bool),
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_send_apdu_req, channel_id_valid),
    },
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = 1,
        .elem_size = sizeof(uint8_t),
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_send_apdu_req, channel_id),
    },
    {}};

struct qmi_elem_info uim_send_apdu_resp_ei[] = {
    {
        .data_type = QMI_STRUCT,
        .elem_len = 1,
        .elem_size = sizeof(uim_qmi_result),
        .tlv_type = 0x2,
        .offset = offsetof(struct uim_send_apdu_resp, result),
        .ei_array = uim_qmi_result_ei,
    },
    {
        .data_type = QMI_OPT_FLAG,
        .elem_len = 1,
        .elem_size = sizeof(bool),
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_send_apdu_resp, apdu_response_valid),
    },
    {
        .data_type = QMI_DATA_LEN,
        .elem_len = 1,
        .elem_size = sizeof(uint16_t),
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_send_apdu_resp, apdu_response_len),
    },
    {
        .data_type = QMI_UNSIGNED_1_BYTE,
        .elem_len = kBufferDataSize,
        .elem_size = sizeof(uint8_t),
        .array_type = VAR_LEN_ARRAY,
        .tlv_type = 0x10,
        .offset = offsetof(struct uim_send_apdu_resp, apdu_response),
    },
    {}};
