1 /*
2 * Copyright (C) 2021 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "structs.h"
18
19 #include "commonStructs.h"
20
21 #include "collections.h"
22
23 #include <android-base/logging.h>
24
25 namespace android::hardware::radio::compat {
26
27 namespace aidl = ::aidl::android::hardware::radio::sim;
28
toHidl(const aidl::IccIo & icc)29 V1_0::IccIo toHidl(const aidl::IccIo& icc) {
30 return {
31 .command = icc.command,
32 .fileId = icc.fileId,
33 .path = icc.path,
34 .p1 = icc.p1,
35 .p2 = icc.p2,
36 .p3 = icc.p3,
37 .data = icc.data,
38 .pin2 = icc.pin2,
39 .aid = icc.aid,
40 };
41 }
42
toHidl(const aidl::SimApdu & apdu)43 V1_0::SimApdu toHidl(const aidl::SimApdu& apdu) {
44 return {
45 .sessionId = apdu.sessionId,
46 .cla = apdu.cla,
47 .instruction = apdu.instruction,
48 .p1 = apdu.p1,
49 .p2 = apdu.p2,
50 .p3 = apdu.p3,
51 .data = apdu.data,
52 };
53 }
54
toAidl(const V1_0::Carrier & carrier)55 aidl::Carrier toAidl(const V1_0::Carrier& carrier) {
56 return {
57 .mcc = carrier.mcc,
58 .mnc = carrier.mnc,
59 .matchType = static_cast<int32_t>(carrier.matchType),
60 .matchData = carrier.matchData,
61 };
62 }
63
toHidl(const aidl::Carrier & carrier)64 V1_0::Carrier toHidl(const aidl::Carrier& carrier) {
65 return {
66 .mcc = carrier.mcc,
67 .mnc = carrier.mnc,
68 .matchType = static_cast<V1_0::CarrierMatchType>(carrier.matchType),
69 .matchData = carrier.matchData,
70 };
71 }
72
toCarrierInfo(const aidl::Carrier & carrier)73 static aidl::CarrierInfo toCarrierInfo(const aidl::Carrier& carrier) {
74 return {
75 .mcc = carrier.mcc,
76 .mnc = carrier.mnc,
77 };
78 }
79
toCarrierInfos(const std::vector<aidl::Carrier> & carriers)80 static std::vector<aidl::CarrierInfo> toCarrierInfos(const std::vector<aidl::Carrier>& carriers) {
81 std::vector<aidl::CarrierInfo> infos(carriers.size());
82 for (size_t i = 0; i < carriers.size(); i++) {
83 infos[i] = toCarrierInfo(carriers[i]);
84 }
85 return infos;
86 }
87
toHidl(const aidl::CarrierInfo & carrierInfo)88 V1_0::Carrier toHidl(const aidl::CarrierInfo& carrierInfo) {
89 return {
90 .mcc = carrierInfo.mcc,
91 .mnc = carrierInfo.mnc,
92 };
93 }
94
toAidl(const V1_0::CarrierRestrictions & cr)95 aidl::CarrierRestrictions toAidl(const V1_0::CarrierRestrictions& cr) {
96 auto allowedCarriers = toAidl(cr.allowedCarriers);
97 auto excludedCarriers = toAidl(cr.excludedCarriers);
98 return {
99 .allowedCarriers = allowedCarriers,
100 .excludedCarriers = excludedCarriers,
101 .allowedCarriersPrioritized = true,
102 .allowedCarrierInfoList = toCarrierInfos(allowedCarriers),
103 .excludedCarrierInfoList = toCarrierInfos(excludedCarriers),
104 };
105 }
106
toAidl(const V1_4::CarrierRestrictionsWithPriority & cr)107 aidl::CarrierRestrictions toAidl(const V1_4::CarrierRestrictionsWithPriority& cr) {
108 auto allowedCarriers = toAidl(cr.allowedCarriers);
109 auto excludedCarriers = toAidl(cr.excludedCarriers);
110 return {
111 .allowedCarriers = allowedCarriers,
112 .excludedCarriers = excludedCarriers,
113 .allowedCarriersPrioritized = cr.allowedCarriersPrioritized,
114 .allowedCarrierInfoList = toCarrierInfos(allowedCarriers),
115 .excludedCarrierInfoList = toCarrierInfos(excludedCarriers),
116 };
117 }
118
toHidl(const aidl::CarrierRestrictions & cr)119 V1_4::CarrierRestrictionsWithPriority toHidl(const aidl::CarrierRestrictions& cr) {
120 return {
121 .allowedCarriers = (cr.allowedCarriers.size() > cr.allowedCarrierInfoList.size())
122 ? toHidl(cr.allowedCarriers)
123 : toHidl(cr.allowedCarrierInfoList),
124 .excludedCarriers = (cr.excludedCarriers.size() > cr.excludedCarrierInfoList.size())
125 ? toHidl(cr.excludedCarriers)
126 : toHidl(cr.excludedCarrierInfoList),
127 .allowedCarriersPrioritized = cr.allowedCarriersPrioritized,
128 };
129 }
130
toHidl(const aidl::ImsiEncryptionInfo & info)131 V1_1::ImsiEncryptionInfo toHidl(const aidl::ImsiEncryptionInfo& info) {
132 return {
133 .mcc = info.mcc,
134 .mnc = info.mnc,
135 .carrierKey = info.carrierKey,
136 .keyIdentifier = info.keyIdentifier,
137 .expirationTime = info.expirationTime,
138 };
139 }
140
toHidl_1_6(const aidl::ImsiEncryptionInfo & info)141 V1_6::ImsiEncryptionInfo toHidl_1_6(const aidl::ImsiEncryptionInfo& info) {
142 return {
143 .base = toHidl(info),
144 .keyType = static_cast<V1_6::PublicKeyType>(info.keyType),
145 };
146 }
147
toHidl(const aidl::SelectUiccSub & sub)148 V1_0::SelectUiccSub toHidl(const aidl::SelectUiccSub& sub) {
149 return {
150 .slot = sub.slot,
151 .appIndex = sub.appIndex,
152 .subType = {},
153 .actStatus = {},
154 };
155 }
156
toAidl(const V1_6::PhonebookRecordInfo & info)157 aidl::PhonebookRecordInfo toAidl(const V1_6::PhonebookRecordInfo& info) {
158 return {
159 .recordId = static_cast<int32_t>(info.recordId),
160 .name = info.name,
161 .number = info.number,
162 .emails = toAidl(info.emails),
163 .additionalNumbers = toAidl(info.additionalNumbers),
164 };
165 }
166
toHidl(const aidl::PhonebookRecordInfo & info)167 V1_6::PhonebookRecordInfo toHidl(const aidl::PhonebookRecordInfo& info) {
168 return {
169 .recordId = static_cast<uint32_t>(info.recordId),
170 .name = info.name,
171 .number = info.number,
172 .emails = toHidl(info.emails),
173 .additionalNumbers = toHidl(info.additionalNumbers),
174 };
175 }
176
toAidl(const V1_0::SimRefreshResult & res)177 aidl::SimRefreshResult toAidl(const V1_0::SimRefreshResult& res) {
178 return {
179 .type = static_cast<int32_t>(res.type),
180 .efId = res.efId,
181 .aid = res.aid,
182 };
183 }
184
toAidl(const V1_0::CardStatus & status)185 aidl::CardStatus toAidl(const V1_0::CardStatus& status) {
186 return toAidl(V1_2::CardStatus{status, 0, "", ""});
187 }
188
toAidl(const V1_2::CardStatus & status)189 aidl::CardStatus toAidl(const V1_2::CardStatus& status) {
190 return toAidl(V1_4::CardStatus{status, ""});
191 }
192
toAidl(const V1_4::CardStatus & status)193 aidl::CardStatus toAidl(const V1_4::CardStatus& status) {
194 auto aidlStatus = toAidl(V1_5::CardStatus{status, {}});
195 aidlStatus.applications = toAidl(status.base.base.applications);
196 return aidlStatus;
197 }
198
toAidl(const V1_5::CardStatus & status)199 aidl::CardStatus toAidl(const V1_5::CardStatus& status) {
200 return {
201 .cardState = static_cast<int32_t>(status.base.base.base.cardState),
202 .universalPinState = aidl::PinState(status.base.base.base.universalPinState),
203 .gsmUmtsSubscriptionAppIndex = status.base.base.base.gsmUmtsSubscriptionAppIndex,
204 .cdmaSubscriptionAppIndex = status.base.base.base.cdmaSubscriptionAppIndex,
205 .imsSubscriptionAppIndex = status.base.base.base.imsSubscriptionAppIndex,
206 .applications = toAidl(status.applications),
207 .atr = status.base.base.atr,
208 .iccid = status.base.base.iccid,
209 .eid = status.base.eid,
210 .slotMap = {static_cast<int32_t>(status.base.base.physicalSlotId), 0},
211 };
212 }
213
toAidl(const V1_0::AppStatus & status)214 aidl::AppStatus toAidl(const V1_0::AppStatus& status) {
215 return toAidl({status, V1_5::PersoSubstate(status.persoSubstate)});
216 }
217
toAidl(const V1_5::AppStatus & status)218 aidl::AppStatus toAidl(const V1_5::AppStatus& status) {
219 return {
220 .appType = static_cast<int32_t>(status.base.appType),
221 .appState = static_cast<int32_t>(status.base.appState),
222 .persoSubstate = aidl::PersoSubstate(status.persoSubstate),
223 .aidPtr = status.base.aidPtr,
224 .appLabelPtr = status.base.appLabelPtr,
225 .pin1Replaced = (status.base.pin1Replaced != 0),
226 .pin1 = aidl::PinState(status.base.pin1),
227 .pin2 = aidl::PinState(status.base.pin2),
228 };
229 }
230
toAidl(const V1_6::PhonebookCapacity & c)231 aidl::PhonebookCapacity toAidl(const V1_6::PhonebookCapacity& c) {
232 return {
233 .maxAdnRecords = c.maxAdnRecords,
234 .usedAdnRecords = c.usedAdnRecords,
235 .maxEmailRecords = c.maxEmailRecords,
236 .usedEmailRecords = c.usedEmailRecords,
237 .maxAdditionalNumberRecords = c.maxAdditionalNumberRecords,
238 .usedAdditionalNumberRecords = c.usedAdditionalNumberRecords,
239 .maxNameLen = c.maxNameLen,
240 .maxNumberLen = c.maxNumberLen,
241 .maxEmailLen = c.maxEmailLen,
242 .maxAdditionalNumberLen = c.maxAdditionalNumberLen,
243 };
244 }
245
toAidl(const V1_0::IccIoResult & iir)246 aidl::IccIoResult toAidl(const V1_0::IccIoResult& iir) {
247 return {
248 .sw1 = iir.sw1,
249 .sw2 = iir.sw2,
250 .simResponse = iir.simResponse,
251 };
252 }
253
254 } // namespace android::hardware::radio::compat
255