// 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

#ifndef HERMES_QMI_UIM_H_
#define HERMES_QMI_UIM_H_

#include <cstdint>

#include <libqrtr.h>

enum class QmiUimCommand : uint16_t {
  kReset = 0x00,
  kSendApdu = 0x3B,
  kOpenLogicalChannel = 0x42,
};
constexpr int kBufferDataSize = 260;

struct uim_qmi_result {
  uint16_t result;
  uint16_t error;
};

struct uim_card_result_t {
  uint8_t sw1;
  uint8_t sw2;
};

struct uim_open_logical_channel_req {
  uint8_t slot;
  bool aid_valid;
  uint8_t aid_len;
  uint8_t aid[kBufferDataSize];
};

struct uim_open_logical_channel_resp {
  uim_qmi_result result;
  bool channel_id_valid;
  uint8_t channel_id;
  bool card_result_valid;
  uim_card_result_t card_result;
  bool select_response_valid;
  uint8_t select_response_len;
  uint8_t select_response[kBufferDataSize];
};

struct uim_reset_req {};

struct uim_reset_resp {
  uim_qmi_result result;
};

struct uim_send_apdu_req {
  uint8_t slot;
  uint16_t apdu_len;
  uint8_t apdu[kBufferDataSize];
  bool channel_id_valid;
  uint8_t channel_id;
};

struct uim_send_apdu_resp {
  uim_qmi_result result;
  bool apdu_response_valid;
  uint16_t apdu_response_len;
  uint8_t apdu_response[kBufferDataSize];
};

extern struct qmi_elem_info uim_open_logical_channel_req_ei[];
extern struct qmi_elem_info uim_open_logical_channel_resp_ei[];
extern struct qmi_elem_info uim_reset_req_ei[];
extern struct qmi_elem_info uim_reset_resp_ei[];
extern struct qmi_elem_info uim_send_apdu_req_ei[];
extern struct qmi_elem_info uim_send_apdu_resp_ei[];

#endif  // HERMES_QMI_UIM_H_
