| // 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_UIM_CMD_H_ |
| #define HERMES_UIM_CMD_H_ |
| |
| #include <cstdint> |
| |
| #include <base/check.h> |
| #include <base/logging.h> |
| #include <libqrtr.h> |
| |
| #include "hermes/qmi_cmd_interface.h" |
| |
| class UimCmd : public QmiCmdInterface { |
| public: |
| enum QmiType : uint16_t { |
| kReset = 0x00, |
| kSendApdu = 0x3B, |
| kOpenLogicalChannel = 0x42, |
| kSwitchSlot = 0x46, |
| kGetSlots = 0x47, |
| }; |
| |
| explicit UimCmd(QmiType qmi_type) |
| : service_(Service::kUim), qmi_type_(qmi_type) {} |
| |
| uint16_t qmi_type() const override { |
| return static_cast<uint16_t>(qmi_type_); |
| } |
| |
| Service service() const override { return service_; } |
| |
| const char* ToString() { |
| switch (qmi_type_) { |
| case QmiType::kReset: |
| return "Reset"; |
| case QmiType::kSendApdu: |
| return "SendApdu"; |
| case QmiType::kOpenLogicalChannel: |
| return "OpenLogicalChannel"; |
| case QmiType::kSwitchSlot: |
| return "SwitchSlot"; |
| case QmiType::kGetSlots: |
| return "GetSlots"; |
| default: |
| CHECK(false) << "Unrecognized value: " |
| << static_cast<uint16_t>(qmi_type_); |
| return ""; |
| } |
| } |
| |
| private: |
| Service service_; |
| QmiType qmi_type_; |
| }; |
| |
| constexpr int kIccidMaxSize = 20; |
| |
| 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; |
| bool procedure_bytes_valid; |
| uint8_t procedure_bytes; |
| }; |
| |
| struct uim_send_apdu_resp { |
| uim_qmi_result result; |
| bool apdu_response_valid; |
| uint16_t apdu_response_len; |
| uint8_t apdu_response[kBufferDataSize]; |
| }; |
| |
| struct uim_physical_slot_status { |
| enum physical_card_status_t : uint32_t { |
| kCardUnknown = 0, |
| kCardAbsent = 1, |
| kCardPresent = 2, |
| } physical_card_status; |
| enum physical_slot_state_t : uint32_t { |
| kSlotInactive = 0, |
| kSlotActive = 1, |
| } physical_slot_state; |
| uint8_t logical_slot; |
| uint8_t iccid_len; |
| uint8_t iccid[kIccidMaxSize]; |
| }; |
| |
| struct uim_slot_eid_info { |
| uint8_t eid_len; |
| uint8_t eid[255]; |
| }; |
| |
| struct uim_physical_slot_info { |
| uint32_t card_protocol; |
| uint8_t num_app; |
| uint8_t atr_len; |
| uint8_t atr[255]; |
| uint8_t is_euicc; |
| }; |
| |
| struct uim_get_slots_req {}; |
| |
| struct uim_get_slots_resp { |
| uim_qmi_result result; |
| bool status_valid; |
| uint8_t status_len; |
| uim_physical_slot_status status[10]; |
| bool slot_info_valid; |
| uint8_t slot_info_len; |
| uim_physical_slot_info slot_info[10]; |
| bool eid_info_valid; |
| uint8_t eid_info_len; |
| uim_slot_eid_info eid_info[10]; |
| }; |
| |
| struct uim_switch_slot_req { |
| uint8_t logical_slot; |
| uint32_t physical_slot; |
| }; |
| |
| struct uim_switch_slot_resp { |
| uim_qmi_result result; |
| }; |
| |
| 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[]; |
| extern struct qmi_elem_info uim_get_slots_req_ei[]; |
| extern struct qmi_elem_info uim_get_slots_resp_ei[]; |
| extern struct qmi_elem_info uim_switch_slot_req_ei[]; |
| extern struct qmi_elem_info uim_switch_slot_resp_ei[]; |
| |
| #endif // HERMES_UIM_CMD_H_ |