xref: /aosp_15_r20/hardware/interfaces/radio/aidl/compat/libradiocompat/sim/structs.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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