-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuim_cmd.h
177 lines (148 loc) · 3.94 KB
/
uim_cmd.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
// Copyright 2018 The ChromiumOS Authors
// 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_