blob: eeea6ef3fbbb26fb527c15d899186a1c75fff73e [file] [log] [blame]
Roshan Piuse65edb12016-11-22 13:02:01 -08001/*
2 * Copyright (C) 2016 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 <android-base/logging.h>
18#include <utils/SystemClock.h>
19
20#include "hidl_struct_util.h"
21
22namespace android {
23namespace hardware {
24namespace wifi {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080025namespace V1_6 {
Roshan Piuse65edb12016-11-22 13:02:01 -080026namespace implementation {
27namespace hidl_struct_util {
28
Nate Jiang50c001d2022-01-12 16:06:01 -080029using V1_6::NanConfigRequestSupplemental;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080030
31WifiChannelWidthInMhz convertLegacyWifiChannelWidthToHidl(legacy_hal::wifi_channel_width type);
Etan Cohenb1b7a822018-02-07 14:44:32 -080032
Etan Cohenbbc0f092017-04-26 16:52:34 -070033hidl_string safeConvertChar(const char* str, size_t max_len) {
Roshan Piusabcf78f2017-10-06 16:30:38 -070034 const char* c = str;
35 size_t size = 0;
36 while (*c && (unsigned char)*c < 128 && size < max_len) {
37 ++size;
38 ++c;
39 }
40 return hidl_string(str, size);
Etan Cohenbbc0f092017-04-26 16:52:34 -070041}
42
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080043IWifiChip::ChipCapabilityMask convertLegacyLoggerFeatureToHidlChipCapability(uint32_t feature) {
Roshan Piusabcf78f2017-10-06 16:30:38 -070044 using HidlChipCaps = IWifiChip::ChipCapabilityMask;
45 switch (feature) {
46 case legacy_hal::WIFI_LOGGER_MEMORY_DUMP_SUPPORTED:
47 return HidlChipCaps::DEBUG_MEMORY_FIRMWARE_DUMP;
48 case legacy_hal::WIFI_LOGGER_DRIVER_DUMP_SUPPORTED:
49 return HidlChipCaps::DEBUG_MEMORY_DRIVER_DUMP;
50 case legacy_hal::WIFI_LOGGER_CONNECT_EVENT_SUPPORTED:
51 return HidlChipCaps::DEBUG_RING_BUFFER_CONNECT_EVENT;
52 case legacy_hal::WIFI_LOGGER_POWER_EVENT_SUPPORTED:
53 return HidlChipCaps::DEBUG_RING_BUFFER_POWER_EVENT;
54 case legacy_hal::WIFI_LOGGER_WAKE_LOCK_SUPPORTED:
55 return HidlChipCaps::DEBUG_RING_BUFFER_WAKELOCK_EVENT;
56 };
57 CHECK(false) << "Unknown legacy feature: " << feature;
58 return {};
Roshan Piusf72df2e2016-12-04 10:49:38 -080059}
60
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080061IWifiStaIface::StaIfaceCapabilityMask convertLegacyLoggerFeatureToHidlStaIfaceCapability(
62 uint32_t feature) {
Roshan Piusabcf78f2017-10-06 16:30:38 -070063 using HidlStaIfaceCaps = IWifiStaIface::StaIfaceCapabilityMask;
64 switch (feature) {
65 case legacy_hal::WIFI_LOGGER_PACKET_FATE_SUPPORTED:
66 return HidlStaIfaceCaps::DEBUG_PACKET_FATE;
67 };
68 CHECK(false) << "Unknown legacy feature: " << feature;
69 return {};
Roshan Piusf72df2e2016-12-04 10:49:38 -080070}
71
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080072V1_5::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability(uint64_t feature) {
Jimmy Chen1bdf1a72019-12-23 17:53:40 +020073 using HidlChipCaps = V1_5::IWifiChip::ChipCapabilityMask;
Roshan Piusabcf78f2017-10-06 16:30:38 -070074 switch (feature) {
75 case WIFI_FEATURE_SET_TX_POWER_LIMIT:
76 return HidlChipCaps::SET_TX_POWER_LIMIT;
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -080077 case WIFI_FEATURE_USE_BODY_HEAD_SAR:
78 return HidlChipCaps::USE_BODY_HEAD_SAR;
Roshan Piusabcf78f2017-10-06 16:30:38 -070079 case WIFI_FEATURE_D2D_RTT:
80 return HidlChipCaps::D2D_RTT;
81 case WIFI_FEATURE_D2AP_RTT:
82 return HidlChipCaps::D2AP_RTT;
Jimmy Chen1bdf1a72019-12-23 17:53:40 +020083 case WIFI_FEATURE_INFRA_60G:
84 return HidlChipCaps::WIGIG;
Ahmed ElArabawyeaf82402018-10-26 09:46:04 -070085 case WIFI_FEATURE_SET_LATENCY_MODE:
86 return HidlChipCaps::SET_LATENCY_MODE;
Jimmy Chend87a0ee2018-12-14 15:38:58 +080087 case WIFI_FEATURE_P2P_RAND_MAC:
88 return HidlChipCaps::P2P_RAND_MAC;
Roshan Piusabcf78f2017-10-06 16:30:38 -070089 };
90 CHECK(false) << "Unknown legacy feature: " << feature;
91 return {};
Roshan Pius8184d212017-07-11 08:59:29 -070092}
93
Ahmed ElArabawy687ce132022-01-11 16:42:48 -080094IWifiStaIface::StaIfaceCapabilityMask convertLegacyFeatureToHidlStaIfaceCapability(
95 uint64_t feature) {
Roshan Piusabcf78f2017-10-06 16:30:38 -070096 using HidlStaIfaceCaps = IWifiStaIface::StaIfaceCapabilityMask;
97 switch (feature) {
98 case WIFI_FEATURE_GSCAN:
99 return HidlStaIfaceCaps::BACKGROUND_SCAN;
100 case WIFI_FEATURE_LINK_LAYER_STATS:
101 return HidlStaIfaceCaps::LINK_LAYER_STATS;
102 case WIFI_FEATURE_RSSI_MONITOR:
103 return HidlStaIfaceCaps::RSSI_MONITOR;
104 case WIFI_FEATURE_CONTROL_ROAMING:
105 return HidlStaIfaceCaps::CONTROL_ROAMING;
106 case WIFI_FEATURE_IE_WHITELIST:
107 return HidlStaIfaceCaps::PROBE_IE_WHITELIST;
108 case WIFI_FEATURE_SCAN_RAND:
109 return HidlStaIfaceCaps::SCAN_RAND;
110 case WIFI_FEATURE_INFRA_5G:
111 return HidlStaIfaceCaps::STA_5G;
112 case WIFI_FEATURE_HOTSPOT:
113 return HidlStaIfaceCaps::HOTSPOT;
114 case WIFI_FEATURE_PNO:
115 return HidlStaIfaceCaps::PNO;
116 case WIFI_FEATURE_TDLS:
117 return HidlStaIfaceCaps::TDLS;
118 case WIFI_FEATURE_TDLS_OFFCHANNEL:
119 return HidlStaIfaceCaps::TDLS_OFFCHANNEL;
120 case WIFI_FEATURE_CONFIG_NDO:
121 return HidlStaIfaceCaps::ND_OFFLOAD;
122 case WIFI_FEATURE_MKEEP_ALIVE:
123 return HidlStaIfaceCaps::KEEP_ALIVE;
124 };
125 CHECK(false) << "Unknown legacy feature: " << feature;
126 return {};
Roshan Piusf72df2e2016-12-04 10:49:38 -0800127}
128
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800129bool convertLegacyFeaturesToHidlChipCapabilities(uint64_t legacy_feature_set,
130 uint32_t legacy_logger_feature_set,
131 uint32_t* hidl_caps) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700132 if (!hidl_caps) {
133 return false;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800134 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700135 *hidl_caps = {};
136 using HidlChipCaps = IWifiChip::ChipCapabilityMask;
137 for (const auto feature : {legacy_hal::WIFI_LOGGER_MEMORY_DUMP_SUPPORTED,
138 legacy_hal::WIFI_LOGGER_DRIVER_DUMP_SUPPORTED,
139 legacy_hal::WIFI_LOGGER_CONNECT_EVENT_SUPPORTED,
140 legacy_hal::WIFI_LOGGER_POWER_EVENT_SUPPORTED,
141 legacy_hal::WIFI_LOGGER_WAKE_LOCK_SUPPORTED}) {
142 if (feature & legacy_logger_feature_set) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800143 *hidl_caps |= convertLegacyLoggerFeatureToHidlChipCapability(feature);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700144 }
Roshan Pius8184d212017-07-11 08:59:29 -0700145 }
Jimmy Chen1bdf1a72019-12-23 17:53:40 +0200146 std::vector<uint64_t> features = {WIFI_FEATURE_SET_TX_POWER_LIMIT,
Jimmy Chend87a0ee2018-12-14 15:38:58 +0800147 WIFI_FEATURE_USE_BODY_HEAD_SAR,
148 WIFI_FEATURE_D2D_RTT,
149 WIFI_FEATURE_D2AP_RTT,
Jimmy Chen1bdf1a72019-12-23 17:53:40 +0200150 WIFI_FEATURE_INFRA_60G,
Jimmy Chend87a0ee2018-12-14 15:38:58 +0800151 WIFI_FEATURE_SET_LATENCY_MODE,
152 WIFI_FEATURE_P2P_RAND_MAC};
153 for (const auto feature : features) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700154 if (feature & legacy_feature_set) {
155 *hidl_caps |= convertLegacyFeatureToHidlChipCapability(feature);
156 }
157 }
Jimmy Chend87a0ee2018-12-14 15:38:58 +0800158
Roshan Piusabcf78f2017-10-06 16:30:38 -0700159 // There are no flags for these 3 in the legacy feature set. Adding them to
160 // the set because all the current devices support it.
161 *hidl_caps |= HidlChipCaps::DEBUG_RING_BUFFER_VENDOR_DATA;
162 *hidl_caps |= HidlChipCaps::DEBUG_HOST_WAKE_REASON_STATS;
163 *hidl_caps |= HidlChipCaps::DEBUG_ERROR_ALERTS;
164 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800165}
166
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800167WifiDebugRingBufferFlags convertLegacyDebugRingBufferFlagsToHidl(uint32_t flag) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700168 switch (flag) {
169 case WIFI_RING_BUFFER_FLAG_HAS_BINARY_ENTRIES:
170 return WifiDebugRingBufferFlags::HAS_BINARY_ENTRIES;
171 case WIFI_RING_BUFFER_FLAG_HAS_ASCII_ENTRIES:
172 return WifiDebugRingBufferFlags::HAS_ASCII_ENTRIES;
173 };
174 CHECK(false) << "Unknown legacy flag: " << flag;
175 return {};
Roshan Piusf72df2e2016-12-04 10:49:38 -0800176}
177
178bool convertLegacyDebugRingBufferStatusToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800179 const legacy_hal::wifi_ring_buffer_status& legacy_status,
180 WifiDebugRingBufferStatus* hidl_status) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700181 if (!hidl_status) {
182 return false;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800183 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700184 *hidl_status = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800185 hidl_status->ringName = safeConvertChar(reinterpret_cast<const char*>(legacy_status.name),
186 sizeof(legacy_status.name));
Roshan Piusabcf78f2017-10-06 16:30:38 -0700187 hidl_status->flags = 0;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800188 for (const auto flag :
189 {WIFI_RING_BUFFER_FLAG_HAS_BINARY_ENTRIES, WIFI_RING_BUFFER_FLAG_HAS_ASCII_ENTRIES}) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700190 if (flag & legacy_status.flags) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800191 hidl_status->flags |= static_cast<std::underlying_type<WifiDebugRingBufferFlags>::type>(
192 convertLegacyDebugRingBufferFlagsToHidl(flag));
Roshan Piusabcf78f2017-10-06 16:30:38 -0700193 }
194 }
195 hidl_status->ringId = legacy_status.ring_id;
196 hidl_status->sizeInBytes = legacy_status.ring_buffer_byte_size;
197 // Calculate free size of the ring the buffer. We don't need to send the
198 // exact read/write pointers that were there in the legacy HAL interface.
199 if (legacy_status.written_bytes >= legacy_status.read_bytes) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800200 hidl_status->freeSizeInBytes = legacy_status.ring_buffer_byte_size -
201 (legacy_status.written_bytes - legacy_status.read_bytes);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700202 } else {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800203 hidl_status->freeSizeInBytes = legacy_status.read_bytes - legacy_status.written_bytes;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700204 }
205 hidl_status->verboseLevel = legacy_status.verbose_level;
206 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800207}
208
209bool convertLegacyVectorOfDebugRingBufferStatusToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800210 const std::vector<legacy_hal::wifi_ring_buffer_status>& legacy_status_vec,
211 std::vector<WifiDebugRingBufferStatus>* hidl_status_vec) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700212 if (!hidl_status_vec) {
213 return false;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800214 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700215 *hidl_status_vec = {};
216 for (const auto& legacy_status : legacy_status_vec) {
217 WifiDebugRingBufferStatus hidl_status;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800218 if (!convertLegacyDebugRingBufferStatusToHidl(legacy_status, &hidl_status)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700219 return false;
220 }
221 hidl_status_vec->push_back(hidl_status);
222 }
223 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800224}
225
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800226bool convertLegacyWakeReasonStatsToHidl(const legacy_hal::WakeReasonStats& legacy_stats,
227 WifiDebugHostWakeReasonStats* hidl_stats) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700228 if (!hidl_stats) {
229 return false;
230 }
231 *hidl_stats = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800232 hidl_stats->totalCmdEventWakeCnt = legacy_stats.wake_reason_cnt.total_cmd_event_wake;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700233 hidl_stats->cmdEventWakeCntPerType = legacy_stats.cmd_event_wake_cnt;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800234 hidl_stats->totalDriverFwLocalWakeCnt = legacy_stats.wake_reason_cnt.total_driver_fw_local_wake;
235 hidl_stats->driverFwLocalWakeCntPerType = legacy_stats.driver_fw_local_wake_cnt;
236 hidl_stats->totalRxPacketWakeCnt = legacy_stats.wake_reason_cnt.total_rx_data_wake;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700237 hidl_stats->rxPktWakeDetails.rxUnicastCnt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800238 legacy_stats.wake_reason_cnt.rx_wake_details.rx_unicast_cnt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700239 hidl_stats->rxPktWakeDetails.rxMulticastCnt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800240 legacy_stats.wake_reason_cnt.rx_wake_details.rx_multicast_cnt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700241 hidl_stats->rxPktWakeDetails.rxBroadcastCnt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800242 legacy_stats.wake_reason_cnt.rx_wake_details.rx_broadcast_cnt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700243 hidl_stats->rxMulticastPkWakeDetails.ipv4RxMulticastAddrCnt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800244 legacy_stats.wake_reason_cnt.rx_multicast_wake_pkt_info.ipv4_rx_multicast_addr_cnt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700245 hidl_stats->rxMulticastPkWakeDetails.ipv6RxMulticastAddrCnt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800246 legacy_stats.wake_reason_cnt.rx_multicast_wake_pkt_info.ipv6_rx_multicast_addr_cnt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700247 hidl_stats->rxMulticastPkWakeDetails.otherRxMulticastAddrCnt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800248 legacy_stats.wake_reason_cnt.rx_multicast_wake_pkt_info.other_rx_multicast_addr_cnt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700249 hidl_stats->rxIcmpPkWakeDetails.icmpPkt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800250 legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp_pkt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700251 hidl_stats->rxIcmpPkWakeDetails.icmp6Pkt =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800252 legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_pkt;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700253 hidl_stats->rxIcmpPkWakeDetails.icmp6Ra =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800254 legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_ra;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700255 hidl_stats->rxIcmpPkWakeDetails.icmp6Na =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800256 legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_na;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700257 hidl_stats->rxIcmpPkWakeDetails.icmp6Ns =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800258 legacy_stats.wake_reason_cnt.rx_wake_pkt_classification_info.icmp6_ns;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700259 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800260}
261
Roshan Pius735ff432017-07-25 08:48:08 -0700262legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800263 V1_1::IWifiChip::TxPowerScenario hidl_scenario) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700264 switch (hidl_scenario) {
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800265 // This is the only supported scenario for V1_1
Jong Wook Kimda830c92018-07-23 15:29:38 -0700266 case V1_1::IWifiChip::TxPowerScenario::VOICE_CALL:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700267 return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL;
268 };
269 CHECK(false);
Roshan Pius735ff432017-07-25 08:48:08 -0700270}
271
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800272legacy_hal::wifi_power_scenario convertHidlTxPowerScenarioToLegacy_1_2(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800273 V1_2::IWifiChip::TxPowerScenario hidl_scenario) {
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800274 switch (hidl_scenario) {
275 // This is the only supported scenario for V1_1
Jong Wook Kimda830c92018-07-23 15:29:38 -0700276 case V1_2::IWifiChip::TxPowerScenario::VOICE_CALL:
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800277 return legacy_hal::WIFI_POWER_SCENARIO_VOICE_CALL;
278 // Those are the supported scenarios for V1_2
Jong Wook Kimda830c92018-07-23 15:29:38 -0700279 case V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_OFF:
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800280 return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_OFF;
Jong Wook Kimda830c92018-07-23 15:29:38 -0700281 case V1_2::IWifiChip::TxPowerScenario::ON_HEAD_CELL_ON:
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800282 return legacy_hal::WIFI_POWER_SCENARIO_ON_HEAD_CELL_ON;
Jong Wook Kimda830c92018-07-23 15:29:38 -0700283 case V1_2::IWifiChip::TxPowerScenario::ON_BODY_CELL_OFF:
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800284 return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_OFF;
Jong Wook Kimda830c92018-07-23 15:29:38 -0700285 case V1_2::IWifiChip::TxPowerScenario::ON_BODY_CELL_ON:
Ahmed ElArabawy6a1accf2018-01-23 10:57:29 -0800286 return legacy_hal::WIFI_POWER_SCENARIO_ON_BODY_CELL_ON;
287 };
288 CHECK(false);
289}
290
Ahmed ElArabawyeaf82402018-10-26 09:46:04 -0700291legacy_hal::wifi_latency_mode convertHidlLatencyModeToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800292 V1_3::IWifiChip::LatencyMode hidl_latency_mode) {
Ahmed ElArabawyeaf82402018-10-26 09:46:04 -0700293 switch (hidl_latency_mode) {
Ahmed ElArabawyf501a982019-07-23 15:02:22 -0700294 case V1_3::IWifiChip::LatencyMode::NORMAL:
Ahmed ElArabawyeaf82402018-10-26 09:46:04 -0700295 return legacy_hal::WIFI_LATENCY_MODE_NORMAL;
Ahmed ElArabawyf501a982019-07-23 15:02:22 -0700296 case V1_3::IWifiChip::LatencyMode::LOW:
Ahmed ElArabawyeaf82402018-10-26 09:46:04 -0700297 return legacy_hal::WIFI_LATENCY_MODE_LOW;
298 }
299 CHECK(false);
300}
301
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800302bool convertLegacyWifiMacInfoToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800303 const legacy_hal::WifiMacInfo& legacy_mac_info,
304 V1_4::IWifiChipEventCallback::RadioModeInfo* hidl_radio_mode_info) {
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800305 if (!hidl_radio_mode_info) {
306 return false;
307 }
308 *hidl_radio_mode_info = {};
309
310 hidl_radio_mode_info->radioId = legacy_mac_info.wlan_mac_id;
311 // Convert from bitmask of bands in the legacy HAL to enum value in
312 // the HIDL interface.
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800313 if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_6_0_BAND &&
314 legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND &&
315 legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_2_4_BAND) {
Jimmy Chend460df32019-11-29 17:31:22 +0200316 hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_24GHZ_5GHZ_6GHZ;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800317 } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_6_0_BAND &&
318 legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) {
Jimmy Chend460df32019-11-29 17:31:22 +0200319 hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_5GHZ_6GHZ;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800320 } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_6_0_BAND) {
Jimmy Chend460df32019-11-29 17:31:22 +0200321 hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_6GHZ;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800322 } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_2_4_BAND &&
323 legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) {
Jimmy Chend460df32019-11-29 17:31:22 +0200324 hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_24GHZ_5GHZ;
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800325 } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_2_4_BAND) {
Jimmy Chend460df32019-11-29 17:31:22 +0200326 hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_24GHZ;
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800327 } else if (legacy_mac_info.mac_band & legacy_hal::WLAN_MAC_5_0_BAND) {
Jimmy Chend460df32019-11-29 17:31:22 +0200328 hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_5GHZ;
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800329 } else {
Jimmy Chend460df32019-11-29 17:31:22 +0200330 hidl_radio_mode_info->bandInfo = V1_4::WifiBand::BAND_UNSPECIFIED;
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800331 }
Jong Wook Kimda830c92018-07-23 15:29:38 -0700332 std::vector<V1_2::IWifiChipEventCallback::IfaceInfo> iface_info_vec;
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800333 for (const auto& legacy_iface_info : legacy_mac_info.iface_infos) {
Jong Wook Kimda830c92018-07-23 15:29:38 -0700334 V1_2::IWifiChipEventCallback::IfaceInfo iface_info;
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800335 iface_info.name = legacy_iface_info.name;
336 iface_info.channel = legacy_iface_info.channel;
337 iface_info_vec.push_back(iface_info);
338 }
339 hidl_radio_mode_info->ifaceInfos = iface_info_vec;
340 return true;
341}
342
Kumar Anand2a630a32021-01-21 14:09:14 -0800343uint32_t convertHidlWifiBandToLegacyMacBand(V1_5::WifiBand hidl_band) {
344 switch (hidl_band) {
345 case V1_5::WifiBand::BAND_24GHZ:
346 return legacy_hal::WLAN_MAC_2_4_BAND;
347 case V1_5::WifiBand::BAND_5GHZ:
348 case V1_5::WifiBand::BAND_5GHZ_DFS:
349 case V1_5::WifiBand::BAND_5GHZ_WITH_DFS:
350 return legacy_hal::WLAN_MAC_5_0_BAND;
351 case V1_5::WifiBand::BAND_24GHZ_5GHZ:
352 case V1_5::WifiBand::BAND_24GHZ_5GHZ_WITH_DFS:
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800353 return (legacy_hal::WLAN_MAC_2_4_BAND | legacy_hal::WLAN_MAC_5_0_BAND);
Kumar Anand2a630a32021-01-21 14:09:14 -0800354 case V1_5::WifiBand::BAND_6GHZ:
355 return legacy_hal::WLAN_MAC_6_0_BAND;
356 case V1_5::WifiBand::BAND_5GHZ_6GHZ:
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800357 return (legacy_hal::WLAN_MAC_5_0_BAND | legacy_hal::WLAN_MAC_6_0_BAND);
Kumar Anand2a630a32021-01-21 14:09:14 -0800358 case V1_5::WifiBand::BAND_24GHZ_5GHZ_6GHZ:
359 case V1_5::WifiBand::BAND_24GHZ_5GHZ_WITH_DFS_6GHZ:
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800360 return (legacy_hal::WLAN_MAC_2_4_BAND | legacy_hal::WLAN_MAC_5_0_BAND |
Kumar Anand2a630a32021-01-21 14:09:14 -0800361 legacy_hal::WLAN_MAC_6_0_BAND);
362 case V1_5::WifiBand::BAND_60GHZ:
363 return legacy_hal::WLAN_MAC_60_0_BAND;
364 default:
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800365 return (legacy_hal::WLAN_MAC_2_4_BAND | legacy_hal::WLAN_MAC_5_0_BAND |
366 legacy_hal::WLAN_MAC_6_0_BAND | legacy_hal::WLAN_MAC_60_0_BAND);
Kumar Anand2a630a32021-01-21 14:09:14 -0800367 }
368}
369
370uint32_t convertHidlWifiIfaceModeToLegacy(uint32_t hidl_iface_mask) {
371 uint32_t legacy_iface_mask = 0;
372 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_STA) {
373 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_STA);
374 }
375 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_SOFTAP) {
376 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_SOFTAP);
377 }
378 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_P2P_CLIENT) {
379 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_P2P_CLIENT);
380 }
381 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_P2P_GO) {
382 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_P2P_GO);
383 }
384 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_NAN) {
385 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_NAN);
386 }
387 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_TDLS) {
388 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_TDLS);
389 }
390 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_MESH) {
391 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_MESH);
392 }
393 if (hidl_iface_mask & V1_5::WifiIfaceMode::IFACE_MODE_IBSS) {
394 legacy_iface_mask |= (1 << legacy_hal::WIFI_INTERFACE_IBSS);
395 }
396 return legacy_iface_mask;
397}
398
399uint32_t convertLegacyWifiInterfaceModeToHidl(uint32_t legacy_iface_mask) {
400 uint32_t hidl_iface_mask = 0;
401 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_STA)) {
402 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_STA;
403 }
404 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_SOFTAP)) {
405 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_SOFTAP;
406 }
407 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_P2P_CLIENT)) {
408 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_P2P_CLIENT;
409 }
410 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_P2P_GO)) {
411 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_P2P_GO;
412 }
413 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_NAN)) {
414 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_NAN;
415 }
416 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_TDLS)) {
417 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_TDLS;
418 }
419 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_MESH)) {
420 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_MESH;
421 }
422 if (legacy_iface_mask & (1 << legacy_hal::WIFI_INTERFACE_IBSS)) {
423 hidl_iface_mask |= V1_5::WifiIfaceMode::IFACE_MODE_IBSS;
424 }
425 return hidl_iface_mask;
426}
427
Kumar Anandaea86e02021-02-10 16:22:31 -0800428uint32_t convertHidlUsableChannelFilterToLegacy(uint32_t hidl_filter_mask) {
429 uint32_t legacy_filter_mask = 0;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800430 if (hidl_filter_mask & V1_5::IWifiChip::UsableChannelFilter::CELLULAR_COEXISTENCE) {
431 legacy_filter_mask |= legacy_hal::WIFI_USABLE_CHANNEL_FILTER_CELLULAR_COEXISTENCE;
Kumar Anandaea86e02021-02-10 16:22:31 -0800432 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800433 if (hidl_filter_mask & V1_5::IWifiChip::UsableChannelFilter::CONCURRENCY) {
434 legacy_filter_mask |= legacy_hal::WIFI_USABLE_CHANNEL_FILTER_CONCURRENCY;
Kumar Anandaea86e02021-02-10 16:22:31 -0800435 }
436 return legacy_filter_mask;
437}
438
Kumar Anand2a630a32021-01-21 14:09:14 -0800439bool convertLegacyWifiUsableChannelToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800440 const legacy_hal::wifi_usable_channel& legacy_usable_channel,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800441 V1_6::WifiUsableChannel* hidl_usable_channel) {
Kumar Anand2a630a32021-01-21 14:09:14 -0800442 if (!hidl_usable_channel) {
443 return false;
444 }
445 *hidl_usable_channel = {};
446 hidl_usable_channel->channel = legacy_usable_channel.freq;
447 hidl_usable_channel->channelBandwidth =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800448 convertLegacyWifiChannelWidthToHidl(legacy_usable_channel.width);
449 hidl_usable_channel->ifaceModeMask =
450 convertLegacyWifiInterfaceModeToHidl(legacy_usable_channel.iface_mode_mask);
Kumar Anand2a630a32021-01-21 14:09:14 -0800451
452 return true;
453}
454
455bool convertLegacyWifiUsableChannelsToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800456 const std::vector<legacy_hal::wifi_usable_channel>& legacy_usable_channels,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800457 std::vector<V1_6::WifiUsableChannel>* hidl_usable_channels) {
Kumar Anand2a630a32021-01-21 14:09:14 -0800458 if (!hidl_usable_channels) {
459 return false;
460 }
461 *hidl_usable_channels = {};
462 for (const auto& legacy_usable_channel : legacy_usable_channels) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800463 V1_6::WifiUsableChannel hidl_usable_channel;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800464 if (!convertLegacyWifiUsableChannelToHidl(legacy_usable_channel, &hidl_usable_channel)) {
Kumar Anand2a630a32021-01-21 14:09:14 -0800465 return false;
466 }
467 hidl_usable_channels->push_back(hidl_usable_channel);
468 }
469 return true;
470}
471
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800472bool convertLegacyWifiMacInfosToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800473 const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos,
474 std::vector<V1_4::IWifiChipEventCallback::RadioModeInfo>* hidl_radio_mode_infos) {
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800475 if (!hidl_radio_mode_infos) {
476 return false;
477 }
478 *hidl_radio_mode_infos = {};
479
480 for (const auto& legacy_mac_info : legacy_mac_infos) {
Jimmy Chend460df32019-11-29 17:31:22 +0200481 V1_4::IWifiChipEventCallback::RadioModeInfo hidl_radio_mode_info;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800482 if (!convertLegacyWifiMacInfoToHidl(legacy_mac_info, &hidl_radio_mode_info)) {
Roshan Pius1a7b1db2018-01-22 17:57:20 -0800483 return false;
484 }
485 hidl_radio_mode_infos->push_back(hidl_radio_mode_info);
486 }
487 return true;
488}
489
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800490bool convertLegacyFeaturesToHidlStaCapabilities(uint64_t legacy_feature_set,
491 uint32_t legacy_logger_feature_set,
492 uint32_t* hidl_caps) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700493 if (!hidl_caps) {
494 return false;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800495 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700496 *hidl_caps = {};
497 using HidlStaIfaceCaps = IWifiStaIface::StaIfaceCapabilityMask;
498 for (const auto feature : {legacy_hal::WIFI_LOGGER_PACKET_FATE_SUPPORTED}) {
499 if (feature & legacy_logger_feature_set) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800500 *hidl_caps |= convertLegacyLoggerFeatureToHidlStaIfaceCapability(feature);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700501 }
Roshan Piusf72df2e2016-12-04 10:49:38 -0800502 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700503 for (const auto feature :
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800504 {WIFI_FEATURE_GSCAN, WIFI_FEATURE_LINK_LAYER_STATS, WIFI_FEATURE_RSSI_MONITOR,
505 WIFI_FEATURE_CONTROL_ROAMING, WIFI_FEATURE_IE_WHITELIST, WIFI_FEATURE_SCAN_RAND,
506 WIFI_FEATURE_INFRA_5G, WIFI_FEATURE_HOTSPOT, WIFI_FEATURE_PNO, WIFI_FEATURE_TDLS,
507 WIFI_FEATURE_TDLS_OFFCHANNEL, WIFI_FEATURE_CONFIG_NDO, WIFI_FEATURE_MKEEP_ALIVE}) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700508 if (feature & legacy_feature_set) {
509 *hidl_caps |= convertLegacyFeatureToHidlStaIfaceCapability(feature);
510 }
511 }
512 // There is no flag for this one in the legacy feature set. Adding it to the
513 // set because all the current devices support it.
514 *hidl_caps |= HidlStaIfaceCaps::APF;
515 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800516}
517
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800518bool convertLegacyApfCapabilitiesToHidl(const legacy_hal::PacketFilterCapabilities& legacy_caps,
519 StaApfPacketFilterCapabilities* hidl_caps) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700520 if (!hidl_caps) {
521 return false;
522 }
523 *hidl_caps = {};
524 hidl_caps->version = legacy_caps.version;
525 hidl_caps->maxLength = legacy_caps.max_len;
526 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800527}
528
Roshan Pius881d1f72016-12-05 15:37:00 -0800529uint8_t convertHidlGscanReportEventFlagToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800530 StaBackgroundScanBucketEventReportSchemeMask hidl_flag) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700531 using HidlFlag = StaBackgroundScanBucketEventReportSchemeMask;
532 switch (hidl_flag) {
533 case HidlFlag::EACH_SCAN:
534 return REPORT_EVENTS_EACH_SCAN;
535 case HidlFlag::FULL_RESULTS:
536 return REPORT_EVENTS_FULL_RESULTS;
537 case HidlFlag::NO_BATCH:
538 return REPORT_EVENTS_NO_BATCH;
539 };
540 CHECK(false);
Roshan Pius881d1f72016-12-05 15:37:00 -0800541}
542
543StaScanDataFlagMask convertLegacyGscanDataFlagToHidl(uint8_t legacy_flag) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700544 switch (legacy_flag) {
545 case legacy_hal::WIFI_SCAN_FLAG_INTERRUPTED:
546 return StaScanDataFlagMask::INTERRUPTED;
547 };
548 CHECK(false) << "Unknown legacy flag: " << legacy_flag;
549 // To silence the compiler warning about reaching the end of non-void
550 // function.
551 return {};
Roshan Pius881d1f72016-12-05 15:37:00 -0800552}
553
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800554bool convertLegacyGscanCapabilitiesToHidl(const legacy_hal::wifi_gscan_capabilities& legacy_caps,
555 StaBackgroundScanCapabilities* hidl_caps) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700556 if (!hidl_caps) {
557 return false;
558 }
559 *hidl_caps = {};
560 hidl_caps->maxCacheSize = legacy_caps.max_scan_cache_size;
561 hidl_caps->maxBuckets = legacy_caps.max_scan_buckets;
562 hidl_caps->maxApCachePerScan = legacy_caps.max_ap_cache_per_scan;
563 hidl_caps->maxReportingThreshold = legacy_caps.max_scan_reporting_threshold;
564 return true;
Roshan Pius32d0ca92016-12-02 11:21:19 -0800565}
566
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800567legacy_hal::wifi_band convertHidlWifiBandToLegacy(V1_0::WifiBand band) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700568 switch (band) {
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800569 case V1_0::WifiBand::BAND_UNSPECIFIED:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700570 return legacy_hal::WIFI_BAND_UNSPECIFIED;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800571 case V1_0::WifiBand::BAND_24GHZ:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700572 return legacy_hal::WIFI_BAND_BG;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800573 case V1_0::WifiBand::BAND_5GHZ:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700574 return legacy_hal::WIFI_BAND_A;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800575 case V1_0::WifiBand::BAND_5GHZ_DFS:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700576 return legacy_hal::WIFI_BAND_A_DFS;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800577 case V1_0::WifiBand::BAND_5GHZ_WITH_DFS:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700578 return legacy_hal::WIFI_BAND_A_WITH_DFS;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800579 case V1_0::WifiBand::BAND_24GHZ_5GHZ:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700580 return legacy_hal::WIFI_BAND_ABG;
Ahmed ElArabawyfd809fc2019-11-15 18:19:15 -0800581 case V1_0::WifiBand::BAND_24GHZ_5GHZ_WITH_DFS:
Roshan Piusabcf78f2017-10-06 16:30:38 -0700582 return legacy_hal::WIFI_BAND_ABG_WITH_DFS;
583 };
584 CHECK(false);
Roshan Pius881d1f72016-12-05 15:37:00 -0800585}
586
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800587bool convertHidlGscanParamsToLegacy(const StaBackgroundScanParameters& hidl_scan_params,
588 legacy_hal::wifi_scan_cmd_params* legacy_scan_params) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700589 if (!legacy_scan_params) {
590 return false;
Roshan Pius4cf40592017-03-07 11:17:08 -0800591 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700592 *legacy_scan_params = {};
593 legacy_scan_params->base_period = hidl_scan_params.basePeriodInMs;
594 legacy_scan_params->max_ap_per_scan = hidl_scan_params.maxApPerScan;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800595 legacy_scan_params->report_threshold_percent = hidl_scan_params.reportThresholdPercent;
596 legacy_scan_params->report_threshold_num_scans = hidl_scan_params.reportThresholdNumScans;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700597 if (hidl_scan_params.buckets.size() > MAX_BUCKETS) {
598 return false;
Roshan Piuse65edb12016-11-22 13:02:01 -0800599 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700600 legacy_scan_params->num_buckets = hidl_scan_params.buckets.size();
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800601 for (uint32_t bucket_idx = 0; bucket_idx < hidl_scan_params.buckets.size(); bucket_idx++) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700602 const StaBackgroundScanBucketParameters& hidl_bucket_spec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800603 hidl_scan_params.buckets[bucket_idx];
Roshan Piusabcf78f2017-10-06 16:30:38 -0700604 legacy_hal::wifi_scan_bucket_spec& legacy_bucket_spec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800605 legacy_scan_params->buckets[bucket_idx];
Roshan Piusabcf78f2017-10-06 16:30:38 -0700606 if (hidl_bucket_spec.bucketIdx >= MAX_BUCKETS) {
607 return false;
608 }
609 legacy_bucket_spec.bucket = hidl_bucket_spec.bucketIdx;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800610 legacy_bucket_spec.band = convertHidlWifiBandToLegacy(hidl_bucket_spec.band);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700611 legacy_bucket_spec.period = hidl_bucket_spec.periodInMs;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800612 legacy_bucket_spec.max_period = hidl_bucket_spec.exponentialMaxPeriodInMs;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700613 legacy_bucket_spec.base = hidl_bucket_spec.exponentialBase;
614 legacy_bucket_spec.step_count = hidl_bucket_spec.exponentialStepCount;
615 legacy_bucket_spec.report_events = 0;
616 using HidlFlag = StaBackgroundScanBucketEventReportSchemeMask;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800617 for (const auto flag : {HidlFlag::EACH_SCAN, HidlFlag::FULL_RESULTS, HidlFlag::NO_BATCH}) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700618 if (hidl_bucket_spec.eventReportScheme &
619 static_cast<std::underlying_type<HidlFlag>::type>(flag)) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800620 legacy_bucket_spec.report_events |= convertHidlGscanReportEventFlagToLegacy(flag);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700621 }
622 }
623 if (hidl_bucket_spec.frequencies.size() > MAX_CHANNELS) {
624 return false;
625 }
626 legacy_bucket_spec.num_channels = hidl_bucket_spec.frequencies.size();
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800627 for (uint32_t freq_idx = 0; freq_idx < hidl_bucket_spec.frequencies.size(); freq_idx++) {
628 legacy_bucket_spec.channels[freq_idx].channel = hidl_bucket_spec.frequencies[freq_idx];
Roshan Piusabcf78f2017-10-06 16:30:38 -0700629 }
Roshan Piuse65edb12016-11-22 13:02:01 -0800630 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700631 return true;
Roshan Piuse65edb12016-11-22 13:02:01 -0800632}
633
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800634bool convertLegacyIeToHidl(const legacy_hal::wifi_information_element& legacy_ie,
635 WifiInformationElement* hidl_ie) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700636 if (!hidl_ie) {
637 return false;
638 }
639 *hidl_ie = {};
640 hidl_ie->id = legacy_ie.id;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800641 hidl_ie->data = std::vector<uint8_t>(legacy_ie.data, legacy_ie.data + legacy_ie.len);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700642 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -0800643}
644
Roshan Piusabcf78f2017-10-06 16:30:38 -0700645bool convertLegacyIeBlobToHidl(const uint8_t* ie_blob, uint32_t ie_blob_len,
Roshan Piuse65edb12016-11-22 13:02:01 -0800646 std::vector<WifiInformationElement>* hidl_ies) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700647 if (!ie_blob || !hidl_ies) {
648 return false;
Roshan Piuse65edb12016-11-22 13:02:01 -0800649 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700650 *hidl_ies = {};
651 const uint8_t* ies_begin = ie_blob;
652 const uint8_t* ies_end = ie_blob + ie_blob_len;
653 const uint8_t* next_ie = ies_begin;
654 using wifi_ie = legacy_hal::wifi_information_element;
655 constexpr size_t kIeHeaderLen = sizeof(wifi_ie);
656 // Each IE should atleast have the header (i.e |id| & |len| fields).
657 while (next_ie + kIeHeaderLen <= ies_end) {
658 const wifi_ie& legacy_ie = (*reinterpret_cast<const wifi_ie*>(next_ie));
659 uint32_t curr_ie_len = kIeHeaderLen + legacy_ie.len;
660 if (next_ie + curr_ie_len > ies_end) {
661 LOG(ERROR) << "Error parsing IE blob. Next IE: " << (void*)next_ie
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800662 << ", Curr IE len: " << curr_ie_len << ", IEs End: " << (void*)ies_end;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700663 break;
664 }
665 WifiInformationElement hidl_ie;
666 if (!convertLegacyIeToHidl(legacy_ie, &hidl_ie)) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800667 LOG(ERROR) << "Error converting IE. Id: " << legacy_ie.id << ", len: " << legacy_ie.len;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700668 break;
669 }
670 hidl_ies->push_back(std::move(hidl_ie));
671 next_ie += curr_ie_len;
Roshan Pius3fae9c82016-12-02 14:49:41 -0800672 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700673 // Check if the blob has been fully consumed.
674 if (next_ie != ies_end) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800675 LOG(ERROR) << "Failed to fully parse IE blob. Next IE: " << (void*)next_ie
676 << ", IEs End: " << (void*)ies_end;
Roshan Piusabcf78f2017-10-06 16:30:38 -0700677 }
678 return true;
Roshan Piuse65edb12016-11-22 13:02:01 -0800679}
680
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800681bool convertLegacyGscanResultToHidl(const legacy_hal::wifi_scan_result& legacy_scan_result,
682 bool has_ie_data, StaScanResult* hidl_scan_result) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700683 if (!hidl_scan_result) {
684 return false;
Roshan Piuse65edb12016-11-22 13:02:01 -0800685 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700686 *hidl_scan_result = {};
687 hidl_scan_result->timeStampInUs = legacy_scan_result.ts;
688 hidl_scan_result->ssid = std::vector<uint8_t>(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800689 legacy_scan_result.ssid,
690 legacy_scan_result.ssid +
691 strnlen(legacy_scan_result.ssid, sizeof(legacy_scan_result.ssid) - 1));
Roshan Piusabcf78f2017-10-06 16:30:38 -0700692 memcpy(hidl_scan_result->bssid.data(), legacy_scan_result.bssid,
693 hidl_scan_result->bssid.size());
694 hidl_scan_result->frequency = legacy_scan_result.channel;
695 hidl_scan_result->rssi = legacy_scan_result.rssi;
696 hidl_scan_result->beaconPeriodInMs = legacy_scan_result.beacon_period;
697 hidl_scan_result->capability = legacy_scan_result.capability;
698 if (has_ie_data) {
699 std::vector<WifiInformationElement> ies;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800700 if (!convertLegacyIeBlobToHidl(reinterpret_cast<const uint8_t*>(legacy_scan_result.ie_data),
701 legacy_scan_result.ie_length, &ies)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700702 return false;
703 }
704 hidl_scan_result->informationElements = std::move(ies);
705 }
706 return true;
Roshan Piuse65edb12016-11-22 13:02:01 -0800707}
708
Roshan Pius881d1f72016-12-05 15:37:00 -0800709bool convertLegacyCachedGscanResultsToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800710 const legacy_hal::wifi_cached_scan_results& legacy_cached_scan_result,
711 StaScanData* hidl_scan_data) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700712 if (!hidl_scan_data) {
713 return false;
Roshan Pius32d0ca92016-12-02 11:21:19 -0800714 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700715 *hidl_scan_data = {};
716 hidl_scan_data->flags = 0;
717 for (const auto flag : {legacy_hal::WIFI_SCAN_FLAG_INTERRUPTED}) {
718 if (legacy_cached_scan_result.flags & flag) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800719 hidl_scan_data->flags |= static_cast<std::underlying_type<StaScanDataFlagMask>::type>(
Roshan Piusabcf78f2017-10-06 16:30:38 -0700720 convertLegacyGscanDataFlagToHidl(flag));
721 }
722 }
723 hidl_scan_data->bucketsScanned = legacy_cached_scan_result.buckets_scanned;
Roshan Piuse65edb12016-11-22 13:02:01 -0800724
Roshan Piusabcf78f2017-10-06 16:30:38 -0700725 CHECK(legacy_cached_scan_result.num_results >= 0 &&
726 legacy_cached_scan_result.num_results <= MAX_AP_CACHE_PER_SCAN);
727 std::vector<StaScanResult> hidl_scan_results;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800728 for (int32_t result_idx = 0; result_idx < legacy_cached_scan_result.num_results; result_idx++) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700729 StaScanResult hidl_scan_result;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800730 if (!convertLegacyGscanResultToHidl(legacy_cached_scan_result.results[result_idx], false,
731 &hidl_scan_result)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700732 return false;
733 }
734 hidl_scan_results.push_back(hidl_scan_result);
Roshan Piuse65edb12016-11-22 13:02:01 -0800735 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700736 hidl_scan_data->results = std::move(hidl_scan_results);
737 return true;
Roshan Piuse65edb12016-11-22 13:02:01 -0800738}
739
Roshan Pius881d1f72016-12-05 15:37:00 -0800740bool convertLegacyVectorOfCachedGscanResultsToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800741 const std::vector<legacy_hal::wifi_cached_scan_results>& legacy_cached_scan_results,
742 std::vector<StaScanData>* hidl_scan_datas) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700743 if (!hidl_scan_datas) {
744 return false;
Roshan Piuse65edb12016-11-22 13:02:01 -0800745 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700746 *hidl_scan_datas = {};
747 for (const auto& legacy_cached_scan_result : legacy_cached_scan_results) {
748 StaScanData hidl_scan_data;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800749 if (!convertLegacyCachedGscanResultsToHidl(legacy_cached_scan_result, &hidl_scan_data)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700750 return false;
751 }
752 hidl_scan_datas->push_back(hidl_scan_data);
753 }
754 return true;
Roshan Piuse65edb12016-11-22 13:02:01 -0800755}
756
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800757WifiDebugTxPacketFate convertLegacyDebugTxPacketFateToHidl(legacy_hal::wifi_tx_packet_fate fate) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700758 switch (fate) {
759 case legacy_hal::TX_PKT_FATE_ACKED:
760 return WifiDebugTxPacketFate::ACKED;
761 case legacy_hal::TX_PKT_FATE_SENT:
762 return WifiDebugTxPacketFate::SENT;
763 case legacy_hal::TX_PKT_FATE_FW_QUEUED:
764 return WifiDebugTxPacketFate::FW_QUEUED;
765 case legacy_hal::TX_PKT_FATE_FW_DROP_INVALID:
766 return WifiDebugTxPacketFate::FW_DROP_INVALID;
767 case legacy_hal::TX_PKT_FATE_FW_DROP_NOBUFS:
768 return WifiDebugTxPacketFate::FW_DROP_NOBUFS;
769 case legacy_hal::TX_PKT_FATE_FW_DROP_OTHER:
770 return WifiDebugTxPacketFate::FW_DROP_OTHER;
771 case legacy_hal::TX_PKT_FATE_DRV_QUEUED:
772 return WifiDebugTxPacketFate::DRV_QUEUED;
773 case legacy_hal::TX_PKT_FATE_DRV_DROP_INVALID:
774 return WifiDebugTxPacketFate::DRV_DROP_INVALID;
775 case legacy_hal::TX_PKT_FATE_DRV_DROP_NOBUFS:
776 return WifiDebugTxPacketFate::DRV_DROP_NOBUFS;
777 case legacy_hal::TX_PKT_FATE_DRV_DROP_OTHER:
778 return WifiDebugTxPacketFate::DRV_DROP_OTHER;
779 };
780 CHECK(false) << "Unknown legacy fate type: " << fate;
Roshan Pius32d0ca92016-12-02 11:21:19 -0800781}
782
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800783WifiDebugRxPacketFate convertLegacyDebugRxPacketFateToHidl(legacy_hal::wifi_rx_packet_fate fate) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700784 switch (fate) {
785 case legacy_hal::RX_PKT_FATE_SUCCESS:
786 return WifiDebugRxPacketFate::SUCCESS;
787 case legacy_hal::RX_PKT_FATE_FW_QUEUED:
788 return WifiDebugRxPacketFate::FW_QUEUED;
789 case legacy_hal::RX_PKT_FATE_FW_DROP_FILTER:
790 return WifiDebugRxPacketFate::FW_DROP_FILTER;
791 case legacy_hal::RX_PKT_FATE_FW_DROP_INVALID:
792 return WifiDebugRxPacketFate::FW_DROP_INVALID;
793 case legacy_hal::RX_PKT_FATE_FW_DROP_NOBUFS:
794 return WifiDebugRxPacketFate::FW_DROP_NOBUFS;
795 case legacy_hal::RX_PKT_FATE_FW_DROP_OTHER:
796 return WifiDebugRxPacketFate::FW_DROP_OTHER;
797 case legacy_hal::RX_PKT_FATE_DRV_QUEUED:
798 return WifiDebugRxPacketFate::DRV_QUEUED;
799 case legacy_hal::RX_PKT_FATE_DRV_DROP_FILTER:
800 return WifiDebugRxPacketFate::DRV_DROP_FILTER;
801 case legacy_hal::RX_PKT_FATE_DRV_DROP_INVALID:
802 return WifiDebugRxPacketFate::DRV_DROP_INVALID;
803 case legacy_hal::RX_PKT_FATE_DRV_DROP_NOBUFS:
804 return WifiDebugRxPacketFate::DRV_DROP_NOBUFS;
805 case legacy_hal::RX_PKT_FATE_DRV_DROP_OTHER:
806 return WifiDebugRxPacketFate::DRV_DROP_OTHER;
807 };
808 CHECK(false) << "Unknown legacy fate type: " << fate;
Roshan Pius32d0ca92016-12-02 11:21:19 -0800809}
810
811WifiDebugPacketFateFrameType convertLegacyDebugPacketFateFrameTypeToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800812 legacy_hal::frame_type type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700813 switch (type) {
814 case legacy_hal::FRAME_TYPE_UNKNOWN:
815 return WifiDebugPacketFateFrameType::UNKNOWN;
816 case legacy_hal::FRAME_TYPE_ETHERNET_II:
817 return WifiDebugPacketFateFrameType::ETHERNET_II;
818 case legacy_hal::FRAME_TYPE_80211_MGMT:
819 return WifiDebugPacketFateFrameType::MGMT_80211;
820 };
821 CHECK(false) << "Unknown legacy frame type: " << type;
Roshan Pius32d0ca92016-12-02 11:21:19 -0800822}
823
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800824bool convertLegacyDebugPacketFateFrameToHidl(const legacy_hal::frame_info& legacy_frame,
825 WifiDebugPacketFateFrameInfo* hidl_frame) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700826 if (!hidl_frame) {
827 return false;
828 }
829 *hidl_frame = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800830 hidl_frame->frameType = convertLegacyDebugPacketFateFrameTypeToHidl(legacy_frame.payload_type);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700831 hidl_frame->frameLen = legacy_frame.frame_len;
832 hidl_frame->driverTimestampUsec = legacy_frame.driver_timestamp_usec;
833 hidl_frame->firmwareTimestampUsec = legacy_frame.firmware_timestamp_usec;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800834 const uint8_t* frame_begin =
835 reinterpret_cast<const uint8_t*>(legacy_frame.frame_content.ethernet_ii_bytes);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700836 hidl_frame->frameContent =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800837 std::vector<uint8_t>(frame_begin, frame_begin + legacy_frame.frame_len);
Roshan Piusabcf78f2017-10-06 16:30:38 -0700838 return true;
Roshan Pius32d0ca92016-12-02 11:21:19 -0800839}
840
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800841bool convertLegacyDebugTxPacketFateToHidl(const legacy_hal::wifi_tx_report& legacy_fate,
842 WifiDebugTxPacketFateReport* hidl_fate) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700843 if (!hidl_fate) {
844 return false;
845 }
846 *hidl_fate = {};
847 hidl_fate->fate = convertLegacyDebugTxPacketFateToHidl(legacy_fate.fate);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800848 return convertLegacyDebugPacketFateFrameToHidl(legacy_fate.frame_inf, &hidl_fate->frameInfo);
Roshan Pius32d0ca92016-12-02 11:21:19 -0800849}
850
Roshan Piusf72df2e2016-12-04 10:49:38 -0800851bool convertLegacyVectorOfDebugTxPacketFateToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800852 const std::vector<legacy_hal::wifi_tx_report>& legacy_fates,
853 std::vector<WifiDebugTxPacketFateReport>* hidl_fates) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700854 if (!hidl_fates) {
855 return false;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800856 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700857 *hidl_fates = {};
858 for (const auto& legacy_fate : legacy_fates) {
859 WifiDebugTxPacketFateReport hidl_fate;
860 if (!convertLegacyDebugTxPacketFateToHidl(legacy_fate, &hidl_fate)) {
861 return false;
862 }
863 hidl_fates->push_back(hidl_fate);
864 }
865 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800866}
867
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800868bool convertLegacyDebugRxPacketFateToHidl(const legacy_hal::wifi_rx_report& legacy_fate,
869 WifiDebugRxPacketFateReport* hidl_fate) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700870 if (!hidl_fate) {
871 return false;
872 }
873 *hidl_fate = {};
874 hidl_fate->fate = convertLegacyDebugRxPacketFateToHidl(legacy_fate.fate);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800875 return convertLegacyDebugPacketFateFrameToHidl(legacy_fate.frame_inf, &hidl_fate->frameInfo);
Roshan Pius32d0ca92016-12-02 11:21:19 -0800876}
877
Roshan Piusf72df2e2016-12-04 10:49:38 -0800878bool convertLegacyVectorOfDebugRxPacketFateToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800879 const std::vector<legacy_hal::wifi_rx_report>& legacy_fates,
880 std::vector<WifiDebugRxPacketFateReport>* hidl_fates) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700881 if (!hidl_fates) {
882 return false;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800883 }
Roshan Piusabcf78f2017-10-06 16:30:38 -0700884 *hidl_fates = {};
885 for (const auto& legacy_fate : legacy_fates) {
886 WifiDebugRxPacketFateReport hidl_fate;
887 if (!convertLegacyDebugRxPacketFateToHidl(legacy_fate, &hidl_fate)) {
888 return false;
889 }
890 hidl_fates->push_back(hidl_fate);
891 }
892 return true;
Roshan Piusf72df2e2016-12-04 10:49:38 -0800893}
894
Sunil Ravib0343e72018-11-13 15:52:00 -0800895bool convertLegacyLinkLayerRadioStatsToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800896 const legacy_hal::LinkLayerRadioStats& legacy_radio_stat,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800897 V1_6::StaLinkLayerRadioStats* hidl_radio_stat) {
Sunil Ravib0343e72018-11-13 15:52:00 -0800898 if (!hidl_radio_stat) {
899 return false;
900 }
901 *hidl_radio_stat = {};
902
Sunil Ravi83f79072021-03-18 20:04:46 -0700903 hidl_radio_stat->radioId = legacy_radio_stat.stats.radio;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800904 hidl_radio_stat->V1_0.onTimeInMs = legacy_radio_stat.stats.on_time;
905 hidl_radio_stat->V1_0.txTimeInMs = legacy_radio_stat.stats.tx_time;
906 hidl_radio_stat->V1_0.rxTimeInMs = legacy_radio_stat.stats.rx_time;
907 hidl_radio_stat->V1_0.onTimeInMsForScan = legacy_radio_stat.stats.on_time_scan;
908 hidl_radio_stat->V1_0.txTimeInMsPerLevel = legacy_radio_stat.tx_time_per_levels;
909 hidl_radio_stat->onTimeInMsForNanScan = legacy_radio_stat.stats.on_time_nbd;
910 hidl_radio_stat->onTimeInMsForBgScan = legacy_radio_stat.stats.on_time_gscan;
911 hidl_radio_stat->onTimeInMsForRoamScan = legacy_radio_stat.stats.on_time_roam_scan;
912 hidl_radio_stat->onTimeInMsForPnoScan = legacy_radio_stat.stats.on_time_pno_scan;
913 hidl_radio_stat->onTimeInMsForHs20Scan = legacy_radio_stat.stats.on_time_hs20;
Sunil Ravib0343e72018-11-13 15:52:00 -0800914
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800915 std::vector<V1_6::WifiChannelStats> hidl_channel_stats;
Sunil Ravib0343e72018-11-13 15:52:00 -0800916
917 for (const auto& channel_stat : legacy_radio_stat.channel_stats) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800918 V1_6::WifiChannelStats hidl_channel_stat;
Sunil Ravib0343e72018-11-13 15:52:00 -0800919 hidl_channel_stat.onTimeInMs = channel_stat.on_time;
920 hidl_channel_stat.ccaBusyTimeInMs = channel_stat.cca_busy_time;
921 /*
922 * TODO once b/119142899 is fixed,
923 * replace below code with convertLegacyWifiChannelInfoToHidl()
924 */
925 hidl_channel_stat.channel.width = WifiChannelWidthInMhz::WIDTH_20;
926 hidl_channel_stat.channel.centerFreq = channel_stat.channel.center_freq;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800927 hidl_channel_stat.channel.centerFreq0 = channel_stat.channel.center_freq0;
928 hidl_channel_stat.channel.centerFreq1 = channel_stat.channel.center_freq1;
Sunil Ravib0343e72018-11-13 15:52:00 -0800929 hidl_channel_stats.push_back(hidl_channel_stat);
930 }
931
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800932 hidl_radio_stat->channelStats = hidl_channel_stats;
Sunil Ravib0343e72018-11-13 15:52:00 -0800933
934 return true;
935}
936
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800937bool convertLegacyLinkLayerStatsToHidl(const legacy_hal::LinkLayerStats& legacy_stats,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -0800938 V1_6::StaLinkLayerStats* hidl_stats) {
Roshan Piusabcf78f2017-10-06 16:30:38 -0700939 if (!hidl_stats) {
940 return false;
941 }
942 *hidl_stats = {};
943 // iface legacy_stats conversion.
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800944 hidl_stats->iface.V1_0.beaconRx = legacy_stats.iface.beacon_rx;
945 hidl_stats->iface.V1_0.avgRssiMgmt = legacy_stats.iface.rssi_mgmt;
946 hidl_stats->iface.V1_0.wmeBePktStats.rxMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800947 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].rx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800948 hidl_stats->iface.V1_0.wmeBePktStats.txMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800949 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].tx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800950 hidl_stats->iface.V1_0.wmeBePktStats.lostMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800951 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].mpdu_lost;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800952 hidl_stats->iface.V1_0.wmeBePktStats.retries =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800953 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].retries;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800954 hidl_stats->iface.wmeBeContentionTimeStats.contentionTimeMinInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800955 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_min;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800956 hidl_stats->iface.wmeBeContentionTimeStats.contentionTimeMaxInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800957 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_max;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800958 hidl_stats->iface.wmeBeContentionTimeStats.contentionTimeAvgInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800959 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_time_avg;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800960 hidl_stats->iface.wmeBeContentionTimeStats.contentionNumSamples =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800961 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].contention_num_samples;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800962 hidl_stats->iface.V1_0.wmeBkPktStats.rxMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800963 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].rx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800964 hidl_stats->iface.V1_0.wmeBkPktStats.txMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800965 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].tx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800966 hidl_stats->iface.V1_0.wmeBkPktStats.lostMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800967 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].mpdu_lost;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800968 hidl_stats->iface.V1_0.wmeBkPktStats.retries =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800969 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].retries;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800970 hidl_stats->iface.wmeBkContentionTimeStats.contentionTimeMinInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800971 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_min;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800972 hidl_stats->iface.wmeBkContentionTimeStats.contentionTimeMaxInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800973 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_max;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800974 hidl_stats->iface.wmeBkContentionTimeStats.contentionTimeAvgInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800975 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_time_avg;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800976 hidl_stats->iface.wmeBkContentionTimeStats.contentionNumSamples =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800977 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].contention_num_samples;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800978 hidl_stats->iface.V1_0.wmeViPktStats.rxMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800979 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].rx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800980 hidl_stats->iface.V1_0.wmeViPktStats.txMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800981 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].tx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800982 hidl_stats->iface.V1_0.wmeViPktStats.lostMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800983 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].mpdu_lost;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800984 hidl_stats->iface.V1_0.wmeViPktStats.retries =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800985 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].retries;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800986 hidl_stats->iface.wmeViContentionTimeStats.contentionTimeMinInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800987 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_min;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800988 hidl_stats->iface.wmeViContentionTimeStats.contentionTimeMaxInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800989 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_max;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800990 hidl_stats->iface.wmeViContentionTimeStats.contentionTimeAvgInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800991 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_time_avg;
Mingguang Xua6d0b842021-02-12 14:53:37 -0800992 hidl_stats->iface.wmeViContentionTimeStats.contentionNumSamples =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800993 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].contention_num_samples;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800994 hidl_stats->iface.V1_0.wmeVoPktStats.rxMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800995 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].rx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800996 hidl_stats->iface.V1_0.wmeVoPktStats.txMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800997 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].tx_mpdu;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -0800998 hidl_stats->iface.V1_0.wmeVoPktStats.lostMpdu =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -0800999 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].mpdu_lost;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -08001000 hidl_stats->iface.V1_0.wmeVoPktStats.retries =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001001 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].retries;
Mingguang Xua6d0b842021-02-12 14:53:37 -08001002 hidl_stats->iface.wmeVoContentionTimeStats.contentionTimeMinInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001003 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_min;
Mingguang Xua6d0b842021-02-12 14:53:37 -08001004 hidl_stats->iface.wmeVoContentionTimeStats.contentionTimeMaxInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001005 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_max;
Mingguang Xua6d0b842021-02-12 14:53:37 -08001006 hidl_stats->iface.wmeVoContentionTimeStats.contentionTimeAvgInUsec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001007 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_time_avg;
Mingguang Xua6d0b842021-02-12 14:53:37 -08001008 hidl_stats->iface.wmeVoContentionTimeStats.contentionNumSamples =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001009 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].contention_num_samples;
Roshan Piuse9d1e7d2020-11-04 11:44:16 -08001010 hidl_stats->iface.timeSliceDutyCycleInPercent =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001011 legacy_stats.iface.info.time_slicing_duty_cycle_percent;
Mingguang Xu41242be2021-02-19 18:16:01 -08001012 // peer info legacy_stats conversion.
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08001013 std::vector<V1_6::StaPeerInfo> hidl_peers_info_stats;
Mingguang Xu41242be2021-02-19 18:16:01 -08001014 for (const auto& legacy_peer_info_stats : legacy_stats.peers) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08001015 V1_6::StaPeerInfo hidl_peer_info_stats;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001016 if (!convertLegacyPeerInfoStatsToHidl(legacy_peer_info_stats, &hidl_peer_info_stats)) {
Mingguang Xu41242be2021-02-19 18:16:01 -08001017 return false;
1018 }
1019 hidl_peers_info_stats.push_back(hidl_peer_info_stats);
1020 }
1021 hidl_stats->iface.peers = hidl_peers_info_stats;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001022 // radio legacy_stats conversion.
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08001023 std::vector<V1_6::StaLinkLayerRadioStats> hidl_radios_stats;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001024 for (const auto& legacy_radio_stats : legacy_stats.radios) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08001025 V1_6::StaLinkLayerRadioStats hidl_radio_stats;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001026 if (!convertLegacyLinkLayerRadioStatsToHidl(legacy_radio_stats, &hidl_radio_stats)) {
Sunil Ravib0343e72018-11-13 15:52:00 -08001027 return false;
1028 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07001029 hidl_radios_stats.push_back(hidl_radio_stats);
1030 }
1031 hidl_stats->radios = hidl_radios_stats;
1032 // Timestamp in the HAL wrapper here since it's not provided in the legacy
1033 // HAL API.
1034 hidl_stats->timeStampInMs = uptimeMillis();
1035 return true;
Roshan Piuse65edb12016-11-22 13:02:01 -08001036}
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001037
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001038bool convertLegacyPeerInfoStatsToHidl(const legacy_hal::WifiPeerInfo& legacy_peer_info_stats,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08001039 V1_6::StaPeerInfo* hidl_peer_info_stats) {
Mingguang Xu41242be2021-02-19 18:16:01 -08001040 if (!hidl_peer_info_stats) {
1041 return false;
1042 }
1043 *hidl_peer_info_stats = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001044 hidl_peer_info_stats->staCount = legacy_peer_info_stats.peer_info.bssload.sta_count;
1045 hidl_peer_info_stats->chanUtil = legacy_peer_info_stats.peer_info.bssload.chan_util;
Mingguang Xu41242be2021-02-19 18:16:01 -08001046
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08001047 std::vector<V1_6::StaRateStat> hidlRateStats;
Mingguang Xu41242be2021-02-19 18:16:01 -08001048 for (const auto& legacy_rate_stats : legacy_peer_info_stats.rate_stats) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08001049 V1_6::StaRateStat rateStat;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001050 if (!convertLegacyWifiRateInfoToHidl(legacy_rate_stats.rate, &rateStat.rateInfo)) {
Mingguang Xu41242be2021-02-19 18:16:01 -08001051 return false;
1052 }
1053 rateStat.txMpdu = legacy_rate_stats.tx_mpdu;
1054 rateStat.rxMpdu = legacy_rate_stats.rx_mpdu;
1055 rateStat.mpduLost = legacy_rate_stats.mpdu_lost;
1056 rateStat.retries = legacy_rate_stats.retries;
1057 hidlRateStats.push_back(rateStat);
1058 }
1059 hidl_peer_info_stats->rateStats = hidlRateStats;
1060 return true;
1061}
1062
Roshan Pius26801cb2016-12-13 14:25:45 -08001063bool convertLegacyRoamingCapabilitiesToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001064 const legacy_hal::wifi_roaming_capabilities& legacy_caps,
1065 StaRoamingCapabilities* hidl_caps) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001066 if (!hidl_caps) {
1067 return false;
1068 }
1069 *hidl_caps = {};
1070 hidl_caps->maxBlacklistSize = legacy_caps.max_blacklist_size;
1071 hidl_caps->maxWhitelistSize = legacy_caps.max_whitelist_size;
1072 return true;
Roshan Pius26801cb2016-12-13 14:25:45 -08001073}
1074
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001075bool convertHidlRoamingConfigToLegacy(const StaRoamingConfig& hidl_config,
1076 legacy_hal::wifi_roaming_config* legacy_config) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001077 if (!legacy_config) {
1078 return false;
1079 }
1080 *legacy_config = {};
1081 if (hidl_config.bssidBlacklist.size() > MAX_BLACKLIST_BSSID ||
1082 hidl_config.ssidWhitelist.size() > MAX_WHITELIST_SSID) {
1083 return false;
1084 }
1085 legacy_config->num_blacklist_bssid = hidl_config.bssidBlacklist.size();
1086 uint32_t i = 0;
1087 for (const auto& bssid : hidl_config.bssidBlacklist) {
1088 CHECK(bssid.size() == sizeof(legacy_hal::mac_addr));
1089 memcpy(legacy_config->blacklist_bssid[i++], bssid.data(), bssid.size());
1090 }
1091 legacy_config->num_whitelist_ssid = hidl_config.ssidWhitelist.size();
1092 i = 0;
1093 for (const auto& ssid : hidl_config.ssidWhitelist) {
1094 CHECK(ssid.size() <= sizeof(legacy_hal::ssid_t::ssid_str));
1095 legacy_config->whitelist_ssid[i].length = ssid.size();
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001096 memcpy(legacy_config->whitelist_ssid[i].ssid_str, ssid.data(), ssid.size());
Roshan Piusabcf78f2017-10-06 16:30:38 -07001097 i++;
1098 }
1099 return true;
Roshan Pius26801cb2016-12-13 14:25:45 -08001100}
1101
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001102legacy_hal::fw_roaming_state_t convertHidlRoamingStateToLegacy(StaRoamingState state) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001103 switch (state) {
1104 case StaRoamingState::ENABLED:
1105 return legacy_hal::ROAMING_ENABLE;
1106 case StaRoamingState::DISABLED:
1107 return legacy_hal::ROAMING_DISABLE;
1108 };
1109 CHECK(false);
Roshan Pius26801cb2016-12-13 14:25:45 -08001110}
1111
Etan Cohen67d378d2017-04-03 16:10:54 -07001112legacy_hal::NanMatchAlg convertHidlNanMatchAlgToLegacy(NanMatchAlg type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001113 switch (type) {
1114 case NanMatchAlg::MATCH_ONCE:
1115 return legacy_hal::NAN_MATCH_ALG_MATCH_ONCE;
1116 case NanMatchAlg::MATCH_CONTINUOUS:
1117 return legacy_hal::NAN_MATCH_ALG_MATCH_CONTINUOUS;
1118 case NanMatchAlg::MATCH_NEVER:
1119 return legacy_hal::NAN_MATCH_ALG_MATCH_NEVER;
1120 }
1121 CHECK(false);
Etan Cohen67d378d2017-04-03 16:10:54 -07001122}
1123
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001124legacy_hal::NanPublishType convertHidlNanPublishTypeToLegacy(NanPublishType type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001125 switch (type) {
1126 case NanPublishType::UNSOLICITED:
1127 return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED;
1128 case NanPublishType::SOLICITED:
1129 return legacy_hal::NAN_PUBLISH_TYPE_SOLICITED;
1130 case NanPublishType::UNSOLICITED_SOLICITED:
1131 return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED;
1132 }
1133 CHECK(false);
Etan Cohen67d378d2017-04-03 16:10:54 -07001134}
1135
1136legacy_hal::NanTxType convertHidlNanTxTypeToLegacy(NanTxType type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001137 switch (type) {
1138 case NanTxType::BROADCAST:
1139 return legacy_hal::NAN_TX_TYPE_BROADCAST;
1140 case NanTxType::UNICAST:
1141 return legacy_hal::NAN_TX_TYPE_UNICAST;
1142 }
1143 CHECK(false);
Etan Cohen67d378d2017-04-03 16:10:54 -07001144}
1145
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001146legacy_hal::NanSubscribeType convertHidlNanSubscribeTypeToLegacy(NanSubscribeType type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001147 switch (type) {
1148 case NanSubscribeType::PASSIVE:
1149 return legacy_hal::NAN_SUBSCRIBE_TYPE_PASSIVE;
1150 case NanSubscribeType::ACTIVE:
1151 return legacy_hal::NAN_SUBSCRIBE_TYPE_ACTIVE;
1152 }
1153 CHECK(false);
Etan Cohen67d378d2017-04-03 16:10:54 -07001154}
1155
1156legacy_hal::NanSRFType convertHidlNanSrfTypeToLegacy(NanSrfType type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001157 switch (type) {
1158 case NanSrfType::BLOOM_FILTER:
1159 return legacy_hal::NAN_SRF_ATTR_BLOOM_FILTER;
1160 case NanSrfType::PARTIAL_MAC_ADDR:
1161 return legacy_hal::NAN_SRF_ATTR_PARTIAL_MAC_ADDR;
1162 }
1163 CHECK(false);
Etan Cohen67d378d2017-04-03 16:10:54 -07001164}
1165
1166legacy_hal::NanDataPathChannelCfg convertHidlNanDataPathChannelCfgToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001167 NanDataPathChannelCfg type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001168 switch (type) {
1169 case NanDataPathChannelCfg::CHANNEL_NOT_REQUESTED:
1170 return legacy_hal::NAN_DP_CHANNEL_NOT_REQUESTED;
1171 case NanDataPathChannelCfg::REQUEST_CHANNEL_SETUP:
1172 return legacy_hal::NAN_DP_REQUEST_CHANNEL_SETUP;
1173 case NanDataPathChannelCfg::FORCE_CHANNEL_SETUP:
1174 return legacy_hal::NAN_DP_FORCE_CHANNEL_SETUP;
1175 }
1176 CHECK(false);
Etan Cohen67d378d2017-04-03 16:10:54 -07001177}
1178
Roshan Piusabcf78f2017-10-06 16:30:38 -07001179NanStatusType convertLegacyNanStatusTypeToHidl(legacy_hal::NanStatusType type) {
1180 switch (type) {
1181 case legacy_hal::NAN_STATUS_SUCCESS:
1182 return NanStatusType::SUCCESS;
1183 case legacy_hal::NAN_STATUS_INTERNAL_FAILURE:
1184 return NanStatusType::INTERNAL_FAILURE;
1185 case legacy_hal::NAN_STATUS_PROTOCOL_FAILURE:
1186 return NanStatusType::PROTOCOL_FAILURE;
1187 case legacy_hal::NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID:
1188 return NanStatusType::INVALID_SESSION_ID;
1189 case legacy_hal::NAN_STATUS_NO_RESOURCE_AVAILABLE:
1190 return NanStatusType::NO_RESOURCES_AVAILABLE;
1191 case legacy_hal::NAN_STATUS_INVALID_PARAM:
1192 return NanStatusType::INVALID_ARGS;
1193 case legacy_hal::NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID:
1194 return NanStatusType::INVALID_PEER_ID;
1195 case legacy_hal::NAN_STATUS_INVALID_NDP_ID:
1196 return NanStatusType::INVALID_NDP_ID;
1197 case legacy_hal::NAN_STATUS_NAN_NOT_ALLOWED:
1198 return NanStatusType::NAN_NOT_ALLOWED;
1199 case legacy_hal::NAN_STATUS_NO_OTA_ACK:
1200 return NanStatusType::NO_OTA_ACK;
1201 case legacy_hal::NAN_STATUS_ALREADY_ENABLED:
1202 return NanStatusType::ALREADY_ENABLED;
1203 case legacy_hal::NAN_STATUS_FOLLOWUP_QUEUE_FULL:
1204 return NanStatusType::FOLLOWUP_TX_QUEUE_FULL;
1205 case legacy_hal::NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED:
1206 return NanStatusType::UNSUPPORTED_CONCURRENCY_NAN_DISABLED;
1207 }
1208 CHECK(false);
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001209}
1210
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001211void convertToWifiNanStatus(legacy_hal::NanStatusType type, const char* str, size_t max_len,
1212 WifiNanStatus* wifiNanStatus) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001213 wifiNanStatus->status = convertLegacyNanStatusTypeToHidl(type);
1214 wifiNanStatus->description = safeConvertChar(str, max_len);
Etan Cohenbbc0f092017-04-26 16:52:34 -07001215}
1216
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001217bool convertHidlNanEnableRequestToLegacy(const V1_4::NanEnableRequest& hidl_request,
1218 legacy_hal::NanEnableRequest* legacy_request) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001219 if (!legacy_request) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001220 LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: null legacy_request";
Roshan Piusabcf78f2017-10-06 16:30:38 -07001221 return false;
1222 }
1223 *legacy_request = {};
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001224
Roshan Piusabcf78f2017-10-06 16:30:38 -07001225 legacy_request->config_2dot4g_support = 1;
1226 legacy_request->support_2dot4g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001227 hidl_request.operateInBand[(size_t)NanBandIndex::NAN_BAND_24GHZ];
Roshan Piusabcf78f2017-10-06 16:30:38 -07001228 legacy_request->config_support_5g = 1;
1229 legacy_request->support_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001230 hidl_request.operateInBand[(size_t)NanBandIndex::NAN_BAND_5GHZ];
Roshan Piusabcf78f2017-10-06 16:30:38 -07001231 legacy_request->config_hop_count_limit = 1;
1232 legacy_request->hop_count_limit_val = hidl_request.hopCountMax;
1233 legacy_request->master_pref = hidl_request.configParams.masterPref;
1234 legacy_request->discovery_indication_cfg = 0;
1235 legacy_request->discovery_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001236 hidl_request.configParams.disableDiscoveryAddressChangeIndication ? 0x1 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001237 legacy_request->discovery_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001238 hidl_request.configParams.disableStartedClusterIndication ? 0x2 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001239 legacy_request->discovery_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001240 hidl_request.configParams.disableJoinedClusterIndication ? 0x4 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001241 legacy_request->config_sid_beacon = 1;
1242 if (hidl_request.configParams.numberOfPublishServiceIdsInBeacon > 127) {
1243 LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: "
1244 "numberOfPublishServiceIdsInBeacon > 127";
1245 return false;
1246 }
1247 legacy_request->sid_beacon_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001248 (hidl_request.configParams.includePublishServiceIdsInBeacon ? 0x1 : 0x0) |
1249 (hidl_request.configParams.numberOfPublishServiceIdsInBeacon << 1);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001250 legacy_request->config_subscribe_sid_beacon = 1;
1251 if (hidl_request.configParams.numberOfSubscribeServiceIdsInBeacon > 127) {
1252 LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: "
1253 "numberOfSubscribeServiceIdsInBeacon > 127";
1254 return false;
1255 }
1256 legacy_request->subscribe_sid_beacon_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001257 (hidl_request.configParams.includeSubscribeServiceIdsInBeacon ? 0x1 : 0x0) |
1258 (hidl_request.configParams.numberOfSubscribeServiceIdsInBeacon << 1);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001259 legacy_request->config_rssi_window_size = 1;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001260 legacy_request->rssi_window_size_val = hidl_request.configParams.rssiWindowSize;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001261 legacy_request->config_disc_mac_addr_randomization = 1;
1262 legacy_request->disc_mac_addr_rand_interval_sec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001263 hidl_request.configParams.macAddressRandomizationIntervalSec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001264 legacy_request->config_2dot4g_rssi_close = 1;
Nate(Qiang) Jiang18b38eb2019-12-11 12:48:13 -08001265 if (hidl_request.configParams.bandSpecificConfig.size() != 3) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001266 LOG(ERROR) << "convertHidlNanEnableRequestToLegacy: "
Nate(Qiang) Jiang18b38eb2019-12-11 12:48:13 -08001267 "bandSpecificConfig.size() != 3";
Roshan Piusabcf78f2017-10-06 16:30:38 -07001268 return false;
1269 }
1270 legacy_request->rssi_close_2dot4g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001271 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1272 .rssiClose;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001273 legacy_request->config_2dot4g_rssi_middle = 1;
1274 legacy_request->rssi_middle_2dot4g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001275 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1276 .rssiMiddle;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001277 legacy_request->config_2dot4g_rssi_proximity = 1;
1278 legacy_request->rssi_proximity_2dot4g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001279 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1280 .rssiCloseProximity;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001281 legacy_request->config_scan_params = 1;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001282 legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] =
1283 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1284 .dwellTimeMs;
1285 legacy_request->scan_params_val.scan_period[legacy_hal::NAN_CHANNEL_24G_BAND] =
1286 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1287 .scanPeriodSec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001288 legacy_request->config_dw.config_2dot4g_dw_band =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001289 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1290 .validDiscoveryWindowIntervalVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001291 legacy_request->config_dw.dw_2dot4g_interval_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001292 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1293 .discoveryWindowIntervalVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001294 legacy_request->config_5g_rssi_close = 1;
1295 legacy_request->rssi_close_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001296 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1297 .rssiClose;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001298 legacy_request->config_5g_rssi_middle = 1;
1299 legacy_request->rssi_middle_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001300 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1301 .rssiMiddle;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001302 legacy_request->config_5g_rssi_close_proximity = 1;
1303 legacy_request->rssi_close_proximity_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001304 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1305 .rssiCloseProximity;
1306 legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] =
1307 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1308 .dwellTimeMs;
1309 legacy_request->scan_params_val.scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] =
1310 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1311 .scanPeriodSec;
1312 legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] =
1313 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1314 .dwellTimeMs;
1315 legacy_request->scan_params_val.scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] =
1316 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1317 .scanPeriodSec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001318 legacy_request->config_dw.config_5g_dw_band =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001319 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1320 .validDiscoveryWindowIntervalVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001321 legacy_request->config_dw.dw_5g_interval_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001322 hidl_request.configParams.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1323 .discoveryWindowIntervalVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001324 if (hidl_request.debugConfigs.validClusterIdVals) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001325 legacy_request->cluster_low = hidl_request.debugConfigs.clusterIdBottomRangeVal;
1326 legacy_request->cluster_high = hidl_request.debugConfigs.clusterIdTopRangeVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001327 } else { // need 'else' since not configurable in legacy HAL
1328 legacy_request->cluster_low = 0x0000;
1329 legacy_request->cluster_high = 0xFFFF;
1330 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001331 legacy_request->config_intf_addr = hidl_request.debugConfigs.validIntfAddrVal;
1332 memcpy(legacy_request->intf_addr_val, hidl_request.debugConfigs.intfAddrVal.data(), 6);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001333 legacy_request->config_oui = hidl_request.debugConfigs.validOuiVal;
1334 legacy_request->oui_val = hidl_request.debugConfigs.ouiVal;
1335 legacy_request->config_random_factor_force =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001336 hidl_request.debugConfigs.validRandomFactorForceVal;
1337 legacy_request->random_factor_force_val = hidl_request.debugConfigs.randomFactorForceVal;
1338 legacy_request->config_hop_count_force = hidl_request.debugConfigs.validHopCountForceVal;
1339 legacy_request->hop_count_force_val = hidl_request.debugConfigs.hopCountForceVal;
1340 legacy_request->config_24g_channel = hidl_request.debugConfigs.validDiscoveryChannelVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001341 legacy_request->channel_24g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001342 hidl_request.debugConfigs.discoveryChannelMhzVal[(size_t)NanBandIndex::NAN_BAND_24GHZ];
1343 legacy_request->config_5g_channel = hidl_request.debugConfigs.validDiscoveryChannelVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001344 legacy_request->channel_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001345 hidl_request.debugConfigs.discoveryChannelMhzVal[(size_t)NanBandIndex::NAN_BAND_5GHZ];
1346 legacy_request->config_2dot4g_beacons = hidl_request.debugConfigs.validUseBeaconsInBandVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001347 legacy_request->beacon_2dot4g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001348 hidl_request.debugConfigs.useBeaconsInBandVal[(size_t)NanBandIndex::NAN_BAND_24GHZ];
1349 legacy_request->config_5g_beacons = hidl_request.debugConfigs.validUseBeaconsInBandVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001350 legacy_request->beacon_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001351 hidl_request.debugConfigs.useBeaconsInBandVal[(size_t)NanBandIndex::NAN_BAND_5GHZ];
1352 legacy_request->config_2dot4g_sdf = hidl_request.debugConfigs.validUseSdfInBandVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001353 legacy_request->sdf_2dot4g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001354 hidl_request.debugConfigs.useSdfInBandVal[(size_t)NanBandIndex::NAN_BAND_24GHZ];
1355 legacy_request->config_5g_sdf = hidl_request.debugConfigs.validUseSdfInBandVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001356 legacy_request->sdf_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001357 hidl_request.debugConfigs.useSdfInBandVal[(size_t)NanBandIndex::NAN_BAND_5GHZ];
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001358
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -08001359 /* TODO: b/145609058
1360 * Missing updates needed to legacy_hal::NanEnableRequest and conversion to
1361 * it for 6GHz band */
1362
Roshan Piusabcf78f2017-10-06 16:30:38 -07001363 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001364}
1365
Nate Jiang50c001d2022-01-12 16:06:01 -08001366bool convertHidlNanEnableRequest_1_6ToLegacy(const V1_4::NanEnableRequest& hidl_request1,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001367 const NanConfigRequestSupplemental& hidl_request2,
1368 legacy_hal::NanEnableRequest* legacy_request) {
Etan Cohen9e7a4052017-12-21 13:45:26 -08001369 if (!legacy_request) {
Nate Jiang50c001d2022-01-12 16:06:01 -08001370 LOG(ERROR) << "convertHidlNanEnableRequest_1_6ToLegacy: null legacy_request";
Etan Cohen9e7a4052017-12-21 13:45:26 -08001371 return false;
1372 }
1373
1374 *legacy_request = {};
1375 if (!convertHidlNanEnableRequestToLegacy(hidl_request1, legacy_request)) {
1376 return false;
1377 }
1378
1379 legacy_request->config_discovery_beacon_int = 1;
Nate Jiang50c001d2022-01-12 16:06:01 -08001380 legacy_request->discovery_beacon_interval = hidl_request2.V1_5.V1_2.discoveryBeaconIntervalMs;
Etan Cohen9e7a4052017-12-21 13:45:26 -08001381 legacy_request->config_nss = 1;
Nate Jiang50c001d2022-01-12 16:06:01 -08001382 legacy_request->nss = hidl_request2.V1_5.V1_2.numberOfSpatialStreamsInDiscovery;
Etan Cohen9e7a4052017-12-21 13:45:26 -08001383 legacy_request->config_dw_early_termination = 1;
1384 legacy_request->enable_dw_termination =
Nate Jiang50c001d2022-01-12 16:06:01 -08001385 hidl_request2.V1_5.V1_2.enableDiscoveryWindowEarlyTermination;
Etan Cohen4f5bc6c2017-12-28 13:08:08 -08001386 legacy_request->config_enable_ranging = 1;
Nate Jiang50c001d2022-01-12 16:06:01 -08001387 legacy_request->enable_ranging = hidl_request2.V1_5.V1_2.enableRanging;
Nate Jiang3ec67812020-08-24 11:04:31 -07001388
1389 legacy_request->config_enable_instant_mode = 1;
Nate Jiang50c001d2022-01-12 16:06:01 -08001390 legacy_request->enable_instant_mode = hidl_request2.V1_5.enableInstantCommunicationMode;
1391 legacy_request->config_instant_mode_channel = 1;
1392 legacy_request->instant_mode_channel = hidl_request2.instantModeChannel;
Nate Jiang3ec67812020-08-24 11:04:31 -07001393
1394 return true;
1395}
1396
Nate Jiang50c001d2022-01-12 16:06:01 -08001397bool convertHidlNanConfigRequest_1_6ToLegacy(const V1_4::NanConfigRequest& hidl_request1,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001398 const NanConfigRequestSupplemental& hidl_request2,
1399 legacy_hal::NanConfigRequest* legacy_request) {
Nate Jiang3ec67812020-08-24 11:04:31 -07001400 if (!legacy_request) {
Nate Jiang50c001d2022-01-12 16:06:01 -08001401 LOG(ERROR) << "convertHidlNanConfigRequest_1_6ToLegacy: null legacy_request";
Nate Jiang3ec67812020-08-24 11:04:31 -07001402 return false;
1403 }
1404
1405 *legacy_request = {};
Nate Jiang50c001d2022-01-12 16:06:01 -08001406 if (!convertHidlNanConfigRequestToLegacy(hidl_request1, legacy_request)) {
Nate Jiang3ec67812020-08-24 11:04:31 -07001407 return false;
1408 }
1409
Nate Jiang50c001d2022-01-12 16:06:01 -08001410 legacy_request->config_discovery_beacon_int = 1;
1411 legacy_request->discovery_beacon_interval = hidl_request2.V1_5.V1_2.discoveryBeaconIntervalMs;
1412 legacy_request->config_nss = 1;
1413 legacy_request->nss = hidl_request2.V1_5.V1_2.numberOfSpatialStreamsInDiscovery;
1414 legacy_request->config_dw_early_termination = 1;
1415 legacy_request->enable_dw_termination =
1416 hidl_request2.V1_5.V1_2.enableDiscoveryWindowEarlyTermination;
1417 legacy_request->config_enable_ranging = 1;
1418 legacy_request->enable_ranging = hidl_request2.V1_5.V1_2.enableRanging;
1419
1420 return true;
1421
Nate Jiang3ec67812020-08-24 11:04:31 -07001422 legacy_request->config_enable_instant_mode = 1;
Nate Jiang50c001d2022-01-12 16:06:01 -08001423 legacy_request->enable_instant_mode = hidl_request2.V1_5.enableInstantCommunicationMode;
1424 legacy_request->config_instant_mode_channel = 1;
1425 legacy_request->instant_mode_channel = hidl_request2.instantModeChannel;
Etan Cohen9e7a4052017-12-21 13:45:26 -08001426
1427 return true;
1428}
1429
Nate Jiang50c001d2022-01-12 16:06:01 -08001430bool convertHidlNanPublishRequestToLegacy(const V1_6::NanPublishRequest& hidl_request,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001431 legacy_hal::NanPublishRequest* legacy_request) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001432 if (!legacy_request) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001433 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: null legacy_request";
Roshan Piusabcf78f2017-10-06 16:30:38 -07001434 return false;
1435 }
1436 *legacy_request = {};
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001437
Roshan Piusabcf78f2017-10-06 16:30:38 -07001438 legacy_request->publish_id = hidl_request.baseConfigs.sessionId;
1439 legacy_request->ttl = hidl_request.baseConfigs.ttlSec;
1440 legacy_request->period = hidl_request.baseConfigs.discoveryWindowPeriod;
1441 legacy_request->publish_count = hidl_request.baseConfigs.discoveryCount;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001442 legacy_request->service_name_len = hidl_request.baseConfigs.serviceName.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001443 if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
1444 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: service_name_len "
1445 "too large";
1446 return false;
1447 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001448 memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001449 legacy_request->service_name_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001450 legacy_request->publish_match_indicator =
1451 convertHidlNanMatchAlgToLegacy(hidl_request.baseConfigs.discoveryMatchIndicator);
1452 legacy_request->service_specific_info_len = hidl_request.baseConfigs.serviceSpecificInfo.size();
1453 if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001454 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: "
1455 "service_specific_info_len too large";
1456 return false;
1457 }
1458 memcpy(legacy_request->service_specific_info,
1459 hidl_request.baseConfigs.serviceSpecificInfo.data(),
1460 legacy_request->service_specific_info_len);
1461 legacy_request->sdea_service_specific_info_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001462 hidl_request.baseConfigs.extendedServiceSpecificInfo.size();
1463 if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001464 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: "
1465 "sdea_service_specific_info_len too large";
1466 return false;
1467 }
1468 memcpy(legacy_request->sdea_service_specific_info,
1469 hidl_request.baseConfigs.extendedServiceSpecificInfo.data(),
1470 legacy_request->sdea_service_specific_info_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001471 legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001472 if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
1473 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: "
1474 "rx_match_filter_len too large";
1475 return false;
1476 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001477 memcpy(legacy_request->rx_match_filter, hidl_request.baseConfigs.rxMatchFilter.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001478 legacy_request->rx_match_filter_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001479 legacy_request->tx_match_filter_len = hidl_request.baseConfigs.txMatchFilter.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001480 if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
1481 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: "
1482 "tx_match_filter_len too large";
1483 return false;
1484 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001485 memcpy(legacy_request->tx_match_filter, hidl_request.baseConfigs.txMatchFilter.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001486 legacy_request->tx_match_filter_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001487 legacy_request->rssi_threshold_flag = hidl_request.baseConfigs.useRssiThreshold;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001488 legacy_request->recv_indication_cfg = 0;
1489 legacy_request->recv_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001490 hidl_request.baseConfigs.disableDiscoveryTerminationIndication ? 0x1 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001491 legacy_request->recv_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001492 hidl_request.baseConfigs.disableMatchExpirationIndication ? 0x2 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001493 legacy_request->recv_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001494 hidl_request.baseConfigs.disableFollowupReceivedIndication ? 0x4 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001495 legacy_request->recv_indication_cfg |= 0x8;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001496 legacy_request->cipher_type = (unsigned int)hidl_request.baseConfigs.securityConfig.cipherType;
Nate Jiang50c001d2022-01-12 16:06:01 -08001497
1498 legacy_request->scid_len = hidl_request.baseConfigs.securityConfig.scid.size();
1499 if (legacy_request->scid_len > NAN_MAX_SCID_BUF_LEN) {
1500 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: scid_len too large";
1501 return false;
1502 }
1503 memcpy(legacy_request->scid, hidl_request.baseConfigs.securityConfig.scid.data(),
1504 legacy_request->scid_len);
1505
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001506 if (hidl_request.baseConfigs.securityConfig.securityType == NanDataPathSecurityType::PMK) {
1507 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PMK;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001508 legacy_request->key_info.body.pmk_info.pmk_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001509 hidl_request.baseConfigs.securityConfig.pmk.size();
1510 if (legacy_request->key_info.body.pmk_info.pmk_len != NAN_PMK_INFO_LEN) {
1511 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: invalid pmk_len";
Roshan Piusabcf78f2017-10-06 16:30:38 -07001512 return false;
1513 }
1514 memcpy(legacy_request->key_info.body.pmk_info.pmk,
1515 hidl_request.baseConfigs.securityConfig.pmk.data(),
1516 legacy_request->key_info.body.pmk_info.pmk_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07001517 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07001518 if (hidl_request.baseConfigs.securityConfig.securityType ==
1519 NanDataPathSecurityType::PASSPHRASE) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001520 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001521 legacy_request->key_info.body.passphrase_info.passphrase_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001522 hidl_request.baseConfigs.securityConfig.passphrase.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001523 if (legacy_request->key_info.body.passphrase_info.passphrase_len <
1524 NAN_SECURITY_MIN_PASSPHRASE_LEN) {
1525 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: "
1526 "passphrase_len too small";
1527 return false;
1528 }
1529 if (legacy_request->key_info.body.passphrase_info.passphrase_len >
1530 NAN_SECURITY_MAX_PASSPHRASE_LEN) {
1531 LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: "
1532 "passphrase_len too large";
1533 return false;
1534 }
1535 memcpy(legacy_request->key_info.body.passphrase_info.passphrase,
1536 hidl_request.baseConfigs.securityConfig.passphrase.data(),
1537 legacy_request->key_info.body.passphrase_info.passphrase_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07001538 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07001539 legacy_request->sdea_params.security_cfg =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001540 (hidl_request.baseConfigs.securityConfig.securityType != NanDataPathSecurityType::OPEN)
1541 ? legacy_hal::NAN_DP_CONFIG_SECURITY
1542 : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
Nate Jiang50c001d2022-01-12 16:06:01 -08001543
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001544 legacy_request->sdea_params.ranging_state = hidl_request.baseConfigs.rangingRequired
1545 ? legacy_hal::NAN_RANGING_ENABLE
1546 : legacy_hal::NAN_RANGING_DISABLE;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001547 legacy_request->ranging_cfg.ranging_interval_msec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001548 hidl_request.baseConfigs.rangingIntervalMsec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001549 legacy_request->ranging_cfg.config_ranging_indications =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001550 hidl_request.baseConfigs.configRangingIndications;
Etan Cohen7b8c5d72017-12-14 18:12:04 -08001551 legacy_request->ranging_cfg.distance_ingress_mm =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001552 hidl_request.baseConfigs.distanceIngressCm * 10;
1553 legacy_request->ranging_cfg.distance_egress_mm = hidl_request.baseConfigs.distanceEgressCm * 10;
1554 legacy_request->ranging_auto_response = hidl_request.baseConfigs.rangingRequired
1555 ? legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE
1556 : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
1557 legacy_request->sdea_params.range_report = legacy_hal::NAN_DISABLE_RANGE_REPORT;
1558 legacy_request->publish_type = convertHidlNanPublishTypeToLegacy(hidl_request.publishType);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001559 legacy_request->tx_type = convertHidlNanTxTypeToLegacy(hidl_request.txType);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001560 legacy_request->service_responder_policy = hidl_request.autoAcceptDataPathRequests
1561 ? legacy_hal::NAN_SERVICE_ACCEPT_POLICY_ALL
1562 : legacy_hal::NAN_SERVICE_ACCEPT_POLICY_NONE;
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001563
Roshan Piusabcf78f2017-10-06 16:30:38 -07001564 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001565}
1566
Nate Jiang50c001d2022-01-12 16:06:01 -08001567bool convertHidlNanSubscribeRequestToLegacy(const V1_0::NanSubscribeRequest& hidl_request,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001568 legacy_hal::NanSubscribeRequest* legacy_request) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001569 if (!legacy_request) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001570 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: legacy_request is null";
Roshan Piusabcf78f2017-10-06 16:30:38 -07001571 return false;
1572 }
1573 *legacy_request = {};
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001574
Roshan Piusabcf78f2017-10-06 16:30:38 -07001575 legacy_request->subscribe_id = hidl_request.baseConfigs.sessionId;
1576 legacy_request->ttl = hidl_request.baseConfigs.ttlSec;
1577 legacy_request->period = hidl_request.baseConfigs.discoveryWindowPeriod;
1578 legacy_request->subscribe_count = hidl_request.baseConfigs.discoveryCount;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001579 legacy_request->service_name_len = hidl_request.baseConfigs.serviceName.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001580 if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
1581 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1582 "service_name_len too large";
1583 return false;
1584 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001585 memcpy(legacy_request->service_name, hidl_request.baseConfigs.serviceName.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001586 legacy_request->service_name_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001587 legacy_request->subscribe_match_indicator =
1588 convertHidlNanMatchAlgToLegacy(hidl_request.baseConfigs.discoveryMatchIndicator);
1589 legacy_request->service_specific_info_len = hidl_request.baseConfigs.serviceSpecificInfo.size();
1590 if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001591 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1592 "service_specific_info_len too large";
1593 return false;
1594 }
1595 memcpy(legacy_request->service_specific_info,
1596 hidl_request.baseConfigs.serviceSpecificInfo.data(),
1597 legacy_request->service_specific_info_len);
1598 legacy_request->sdea_service_specific_info_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001599 hidl_request.baseConfigs.extendedServiceSpecificInfo.size();
1600 if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001601 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1602 "sdea_service_specific_info_len too large";
1603 return false;
1604 }
1605 memcpy(legacy_request->sdea_service_specific_info,
1606 hidl_request.baseConfigs.extendedServiceSpecificInfo.data(),
1607 legacy_request->sdea_service_specific_info_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001608 legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001609 if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
1610 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1611 "rx_match_filter_len too large";
1612 return false;
1613 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001614 memcpy(legacy_request->rx_match_filter, hidl_request.baseConfigs.rxMatchFilter.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001615 legacy_request->rx_match_filter_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001616 legacy_request->tx_match_filter_len = hidl_request.baseConfigs.txMatchFilter.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001617 if (legacy_request->tx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) {
1618 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1619 "tx_match_filter_len too large";
1620 return false;
1621 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001622 memcpy(legacy_request->tx_match_filter, hidl_request.baseConfigs.txMatchFilter.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001623 legacy_request->tx_match_filter_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001624 legacy_request->rssi_threshold_flag = hidl_request.baseConfigs.useRssiThreshold;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001625 legacy_request->recv_indication_cfg = 0;
1626 legacy_request->recv_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001627 hidl_request.baseConfigs.disableDiscoveryTerminationIndication ? 0x1 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001628 legacy_request->recv_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001629 hidl_request.baseConfigs.disableMatchExpirationIndication ? 0x2 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001630 legacy_request->recv_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001631 hidl_request.baseConfigs.disableFollowupReceivedIndication ? 0x4 : 0x0;
1632 legacy_request->cipher_type = (unsigned int)hidl_request.baseConfigs.securityConfig.cipherType;
1633 if (hidl_request.baseConfigs.securityConfig.securityType == NanDataPathSecurityType::PMK) {
1634 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PMK;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001635 legacy_request->key_info.body.pmk_info.pmk_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001636 hidl_request.baseConfigs.securityConfig.pmk.size();
1637 if (legacy_request->key_info.body.pmk_info.pmk_len != NAN_PMK_INFO_LEN) {
1638 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: invalid pmk_len";
Roshan Piusabcf78f2017-10-06 16:30:38 -07001639 return false;
1640 }
1641 memcpy(legacy_request->key_info.body.pmk_info.pmk,
1642 hidl_request.baseConfigs.securityConfig.pmk.data(),
1643 legacy_request->key_info.body.pmk_info.pmk_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07001644 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07001645 if (hidl_request.baseConfigs.securityConfig.securityType ==
1646 NanDataPathSecurityType::PASSPHRASE) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001647 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001648 legacy_request->key_info.body.passphrase_info.passphrase_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001649 hidl_request.baseConfigs.securityConfig.passphrase.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001650 if (legacy_request->key_info.body.passphrase_info.passphrase_len <
1651 NAN_SECURITY_MIN_PASSPHRASE_LEN) {
1652 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1653 "passphrase_len too small";
1654 return false;
1655 }
1656 if (legacy_request->key_info.body.passphrase_info.passphrase_len >
1657 NAN_SECURITY_MAX_PASSPHRASE_LEN) {
1658 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1659 "passphrase_len too large";
1660 return false;
1661 }
1662 memcpy(legacy_request->key_info.body.passphrase_info.passphrase,
1663 hidl_request.baseConfigs.securityConfig.passphrase.data(),
1664 legacy_request->key_info.body.passphrase_info.passphrase_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07001665 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07001666 legacy_request->sdea_params.security_cfg =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001667 (hidl_request.baseConfigs.securityConfig.securityType != NanDataPathSecurityType::OPEN)
1668 ? legacy_hal::NAN_DP_CONFIG_SECURITY
1669 : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
1670 legacy_request->sdea_params.ranging_state = hidl_request.baseConfigs.rangingRequired
1671 ? legacy_hal::NAN_RANGING_ENABLE
1672 : legacy_hal::NAN_RANGING_DISABLE;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001673 legacy_request->ranging_cfg.ranging_interval_msec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001674 hidl_request.baseConfigs.rangingIntervalMsec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001675 legacy_request->ranging_cfg.config_ranging_indications =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001676 hidl_request.baseConfigs.configRangingIndications;
Etan Cohen7b8c5d72017-12-14 18:12:04 -08001677 legacy_request->ranging_cfg.distance_ingress_mm =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001678 hidl_request.baseConfigs.distanceIngressCm * 10;
1679 legacy_request->ranging_cfg.distance_egress_mm = hidl_request.baseConfigs.distanceEgressCm * 10;
1680 legacy_request->ranging_auto_response = hidl_request.baseConfigs.rangingRequired
1681 ? legacy_hal::NAN_RANGING_AUTO_RESPONSE_ENABLE
1682 : legacy_hal::NAN_RANGING_AUTO_RESPONSE_DISABLE;
1683 legacy_request->sdea_params.range_report = legacy_hal::NAN_DISABLE_RANGE_REPORT;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001684 legacy_request->subscribe_type =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001685 convertHidlNanSubscribeTypeToLegacy(hidl_request.subscribeType);
1686 legacy_request->serviceResponseFilter = convertHidlNanSrfTypeToLegacy(hidl_request.srfType);
1687 legacy_request->serviceResponseInclude = hidl_request.srfRespondIfInAddressSet
1688 ? legacy_hal::NAN_SRF_INCLUDE_RESPOND
1689 : legacy_hal::NAN_SRF_INCLUDE_DO_NOT_RESPOND;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001690 legacy_request->useServiceResponseFilter =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001691 hidl_request.shouldUseSrf ? legacy_hal::NAN_USE_SRF : legacy_hal::NAN_DO_NOT_USE_SRF;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001692 legacy_request->ssiRequiredForMatchIndication =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001693 hidl_request.isSsiRequiredForMatch ? legacy_hal::NAN_SSI_REQUIRED_IN_MATCH_IND
1694 : legacy_hal::NAN_SSI_NOT_REQUIRED_IN_MATCH_IND;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001695 legacy_request->num_intf_addr_present = hidl_request.intfAddr.size();
1696 if (legacy_request->num_intf_addr_present > NAN_MAX_SUBSCRIBE_MAX_ADDRESS) {
1697 LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: "
1698 "num_intf_addr_present - too many";
1699 return false;
1700 }
1701 for (int i = 0; i < legacy_request->num_intf_addr_present; i++) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001702 memcpy(legacy_request->intf_addr[i], hidl_request.intfAddr[i].data(), 6);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001703 }
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001704
Roshan Piusabcf78f2017-10-06 16:30:38 -07001705 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001706}
1707
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001708bool convertHidlNanTransmitFollowupRequestToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001709 const NanTransmitFollowupRequest& hidl_request,
1710 legacy_hal::NanTransmitFollowupRequest* legacy_request) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001711 if (!legacy_request) {
1712 LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: "
1713 "legacy_request is null";
1714 return false;
1715 }
1716 *legacy_request = {};
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001717
Roshan Piusabcf78f2017-10-06 16:30:38 -07001718 legacy_request->publish_subscribe_id = hidl_request.discoverySessionId;
1719 legacy_request->requestor_instance_id = hidl_request.peerId;
1720 memcpy(legacy_request->addr, hidl_request.addr.data(), 6);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001721 legacy_request->priority = hidl_request.isHighPriority ? legacy_hal::NAN_TX_PRIORITY_HIGH
1722 : legacy_hal::NAN_TX_PRIORITY_NORMAL;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001723 legacy_request->dw_or_faw = hidl_request.shouldUseDiscoveryWindow
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001724 ? legacy_hal::NAN_TRANSMIT_IN_DW
1725 : legacy_hal::NAN_TRANSMIT_IN_FAW;
1726 legacy_request->service_specific_info_len = hidl_request.serviceSpecificInfo.size();
1727 if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001728 LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: "
1729 "service_specific_info_len too large";
1730 return false;
1731 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001732 memcpy(legacy_request->service_specific_info, hidl_request.serviceSpecificInfo.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001733 legacy_request->service_specific_info_len);
1734 legacy_request->sdea_service_specific_info_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001735 hidl_request.extendedServiceSpecificInfo.size();
1736 if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001737 LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: "
1738 "sdea_service_specific_info_len too large";
1739 return false;
1740 }
1741 memcpy(legacy_request->sdea_service_specific_info,
1742 hidl_request.extendedServiceSpecificInfo.data(),
1743 legacy_request->sdea_service_specific_info_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001744 legacy_request->recv_indication_cfg = hidl_request.disableFollowupResultIndication ? 0x1 : 0x0;
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001745
Roshan Piusabcf78f2017-10-06 16:30:38 -07001746 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001747}
1748
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001749bool convertHidlNanConfigRequestToLegacy(const V1_4::NanConfigRequest& hidl_request,
1750 legacy_hal::NanConfigRequest* legacy_request) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001751 if (!legacy_request) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001752 LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: legacy_request is null";
Roshan Piusabcf78f2017-10-06 16:30:38 -07001753 return false;
1754 }
1755 *legacy_request = {};
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001756
Roshan Piusabcf78f2017-10-06 16:30:38 -07001757 // TODO: b/34059183 tracks missing configurations in legacy HAL or uknown
1758 // defaults
1759 legacy_request->master_pref = hidl_request.masterPref;
1760 legacy_request->discovery_indication_cfg = 0;
1761 legacy_request->discovery_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001762 hidl_request.disableDiscoveryAddressChangeIndication ? 0x1 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001763 legacy_request->discovery_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001764 hidl_request.disableStartedClusterIndication ? 0x2 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001765 legacy_request->discovery_indication_cfg |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001766 hidl_request.disableJoinedClusterIndication ? 0x4 : 0x0;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001767 legacy_request->config_sid_beacon = 1;
1768 if (hidl_request.numberOfPublishServiceIdsInBeacon > 127) {
1769 LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: "
1770 "numberOfPublishServiceIdsInBeacon > 127";
1771 return false;
1772 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001773 legacy_request->sid_beacon = (hidl_request.includePublishServiceIdsInBeacon ? 0x1 : 0x0) |
1774 (hidl_request.numberOfPublishServiceIdsInBeacon << 1);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001775 legacy_request->config_subscribe_sid_beacon = 1;
1776 if (hidl_request.numberOfSubscribeServiceIdsInBeacon > 127) {
1777 LOG(ERROR) << "convertHidlNanConfigRequestToLegacy: "
1778 "numberOfSubscribeServiceIdsInBeacon > 127";
1779 return false;
1780 }
1781 legacy_request->subscribe_sid_beacon_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001782 (hidl_request.includeSubscribeServiceIdsInBeacon ? 0x1 : 0x0) |
1783 (hidl_request.numberOfSubscribeServiceIdsInBeacon << 1);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001784 legacy_request->config_rssi_window_size = 1;
1785 legacy_request->rssi_window_size_val = hidl_request.rssiWindowSize;
1786 legacy_request->config_disc_mac_addr_randomization = 1;
1787 legacy_request->disc_mac_addr_rand_interval_sec =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001788 hidl_request.macAddressRandomizationIntervalSec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001789 /* TODO : missing
1790 legacy_request->config_2dot4g_rssi_close = 1;
1791 legacy_request->rssi_close_2dot4g_val =
1792 hidl_request.bandSpecificConfig[
1793 (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiClose;
1794 legacy_request->config_2dot4g_rssi_middle = 1;
1795 legacy_request->rssi_middle_2dot4g_val =
1796 hidl_request.bandSpecificConfig[
1797 (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiMiddle;
1798 legacy_request->config_2dot4g_rssi_proximity = 1;
1799 legacy_request->rssi_proximity_2dot4g_val =
1800 hidl_request.bandSpecificConfig[
1801 (size_t) NanBandIndex::NAN_BAND_24GHZ].rssiCloseProximity;
1802 */
1803 legacy_request->config_scan_params = 1;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001804 legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_24G_BAND] =
1805 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ].dwellTimeMs;
1806 legacy_request->scan_params_val.scan_period[legacy_hal::NAN_CHANNEL_24G_BAND] =
1807 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ].scanPeriodSec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001808 legacy_request->config_dw.config_2dot4g_dw_band =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001809 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1810 .validDiscoveryWindowIntervalVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001811 legacy_request->config_dw.dw_2dot4g_interval_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001812 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_24GHZ]
1813 .discoveryWindowIntervalVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001814 /* TODO: missing
1815 legacy_request->config_5g_rssi_close = 1;
1816 legacy_request->rssi_close_5g_val =
1817 hidl_request.bandSpecificConfig[
1818 (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiClose;
1819 legacy_request->config_5g_rssi_middle = 1;
1820 legacy_request->rssi_middle_5g_val =
1821 hidl_request.bandSpecificConfig[
1822 (size_t) NanBandIndex::NAN_BAND_5GHZ].rssiMiddle;
1823 */
1824 legacy_request->config_5g_rssi_close_proximity = 1;
1825 legacy_request->rssi_close_proximity_5g_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001826 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ].rssiCloseProximity;
1827 legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] =
1828 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ].dwellTimeMs;
1829 legacy_request->scan_params_val.scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_LOW] =
1830 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ].scanPeriodSec;
1831 legacy_request->scan_params_val.dwell_time[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] =
1832 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ].dwellTimeMs;
1833 legacy_request->scan_params_val.scan_period[legacy_hal::NAN_CHANNEL_5G_BAND_HIGH] =
1834 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ].scanPeriodSec;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001835 legacy_request->config_dw.config_5g_dw_band =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001836 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1837 .validDiscoveryWindowIntervalVal;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001838 legacy_request->config_dw.dw_5g_interval_val =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001839 hidl_request.bandSpecificConfig[(size_t)NanBandIndex::NAN_BAND_5GHZ]
1840 .discoveryWindowIntervalVal;
Ahmed ElArabawy83baffd2019-11-15 19:20:41 -08001841 /* TODO: b/145609058
1842 * Missing updates needed to legacy_hal::NanConfigRequest and conversion to
1843 * it for 6GHz band */
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001844
Roshan Piusabcf78f2017-10-06 16:30:38 -07001845 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001846}
1847
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001848bool convertHidlNanDataPathInitiatorRequestToLegacy(
Nate Jiang50c001d2022-01-12 16:06:01 -08001849 const V1_0::NanInitiateDataPathRequest& hidl_request,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001850 legacy_hal::NanDataPathInitiatorRequest* legacy_request) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001851 if (!legacy_request) {
1852 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: "
1853 "legacy_request is null";
1854 return false;
1855 }
1856 *legacy_request = {};
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001857
Roshan Piusabcf78f2017-10-06 16:30:38 -07001858 legacy_request->requestor_instance_id = hidl_request.peerId;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001859 memcpy(legacy_request->peer_disc_mac_addr, hidl_request.peerDiscMacAddr.data(), 6);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001860 legacy_request->channel_request_type =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001861 convertHidlNanDataPathChannelCfgToLegacy(hidl_request.channelRequestType);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001862 legacy_request->channel = hidl_request.channel;
Etan Cohen1cefaf62019-11-25 11:41:58 -08001863 if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) {
1864 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: "
1865 "ifaceName too long";
1866 return false;
1867 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001868 strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
Roshan Piusabcf78f2017-10-06 16:30:38 -07001869 legacy_request->ndp_cfg.security_cfg =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001870 (hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
1871 ? legacy_hal::NAN_DP_CONFIG_SECURITY
1872 : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001873 legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
1874 if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
1875 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: "
1876 "ndp_app_info_len too large";
1877 return false;
Etan Cohenc58619e2017-03-14 14:54:40 -07001878 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07001879 memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
1880 legacy_request->app_info.ndp_app_info_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001881 legacy_request->cipher_type = (unsigned int)hidl_request.securityConfig.cipherType;
1882 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PMK) {
1883 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PMK;
1884 legacy_request->key_info.body.pmk_info.pmk_len = hidl_request.securityConfig.pmk.size();
1885 if (legacy_request->key_info.body.pmk_info.pmk_len != NAN_PMK_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07001886 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: "
1887 "invalid pmk_len";
1888 return false;
1889 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001890 memcpy(legacy_request->key_info.body.pmk_info.pmk, hidl_request.securityConfig.pmk.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001891 legacy_request->key_info.body.pmk_info.pmk_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07001892 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001893 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PASSPHRASE) {
1894 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE;
Roshan Piusabcf78f2017-10-06 16:30:38 -07001895 legacy_request->key_info.body.passphrase_info.passphrase_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001896 hidl_request.securityConfig.passphrase.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07001897 if (legacy_request->key_info.body.passphrase_info.passphrase_len <
1898 NAN_SECURITY_MIN_PASSPHRASE_LEN) {
1899 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: "
1900 "passphrase_len too small";
1901 return false;
1902 }
1903 if (legacy_request->key_info.body.passphrase_info.passphrase_len >
1904 NAN_SECURITY_MAX_PASSPHRASE_LEN) {
1905 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: "
1906 "passphrase_len too large";
1907 return false;
1908 }
1909 memcpy(legacy_request->key_info.body.passphrase_info.passphrase,
1910 hidl_request.securityConfig.passphrase.data(),
1911 legacy_request->key_info.body.passphrase_info.passphrase_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07001912 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07001913 legacy_request->service_name_len = hidl_request.serviceNameOutOfBand.size();
1914 if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
1915 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: "
1916 "service_name_len too large";
1917 return false;
1918 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08001919 memcpy(legacy_request->service_name, hidl_request.serviceNameOutOfBand.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07001920 legacy_request->service_name_len);
Etan Cohenf01bcaa2016-12-25 09:42:21 -08001921
Roshan Piusabcf78f2017-10-06 16:30:38 -07001922 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08001923}
1924
Nate Jiang50c001d2022-01-12 16:06:01 -08001925bool convertHidlNanDataPathInitiatorRequest_1_6ToLegacy(
1926 const V1_6::NanInitiateDataPathRequest& hidl_request,
1927 legacy_hal::NanDataPathInitiatorRequest* legacy_request) {
1928 if (!legacy_request) {
1929 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: "
1930 "legacy_request is null";
1931 return false;
1932 }
1933 *legacy_request = {};
1934
1935 legacy_request->requestor_instance_id = hidl_request.peerId;
1936 memcpy(legacy_request->peer_disc_mac_addr, hidl_request.peerDiscMacAddr.data(), 6);
1937 legacy_request->channel_request_type =
1938 convertHidlNanDataPathChannelCfgToLegacy(hidl_request.channelRequestType);
1939 legacy_request->channel = hidl_request.channel;
1940 if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) {
1941 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: "
1942 "ifaceName too long";
1943 return false;
1944 }
1945 strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
1946 legacy_request->ndp_cfg.security_cfg =
1947 (hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
1948 ? legacy_hal::NAN_DP_CONFIG_SECURITY
1949 : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
1950 legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
1951 if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
1952 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: "
1953 "ndp_app_info_len too large";
1954 return false;
1955 }
1956 memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
1957 legacy_request->app_info.ndp_app_info_len);
1958 legacy_request->cipher_type = (unsigned int)hidl_request.securityConfig.cipherType;
1959 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PMK) {
1960 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PMK;
1961 legacy_request->key_info.body.pmk_info.pmk_len = hidl_request.securityConfig.pmk.size();
1962 if (legacy_request->key_info.body.pmk_info.pmk_len != NAN_PMK_INFO_LEN) {
1963 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: "
1964 "invalid pmk_len";
1965 return false;
1966 }
1967 memcpy(legacy_request->key_info.body.pmk_info.pmk, hidl_request.securityConfig.pmk.data(),
1968 legacy_request->key_info.body.pmk_info.pmk_len);
1969 }
1970 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PASSPHRASE) {
1971 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE;
1972 legacy_request->key_info.body.passphrase_info.passphrase_len =
1973 hidl_request.securityConfig.passphrase.size();
1974 if (legacy_request->key_info.body.passphrase_info.passphrase_len <
1975 NAN_SECURITY_MIN_PASSPHRASE_LEN) {
1976 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: "
1977 "passphrase_len too small";
1978 return false;
1979 }
1980 if (legacy_request->key_info.body.passphrase_info.passphrase_len >
1981 NAN_SECURITY_MAX_PASSPHRASE_LEN) {
1982 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: "
1983 "passphrase_len too large";
1984 return false;
1985 }
1986 memcpy(legacy_request->key_info.body.passphrase_info.passphrase,
1987 hidl_request.securityConfig.passphrase.data(),
1988 legacy_request->key_info.body.passphrase_info.passphrase_len);
1989 }
1990 legacy_request->service_name_len = hidl_request.serviceNameOutOfBand.size();
1991 if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
1992 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: "
1993 "service_name_len too large";
1994 return false;
1995 }
1996 memcpy(legacy_request->service_name, hidl_request.serviceNameOutOfBand.data(),
1997 legacy_request->service_name_len);
1998 legacy_request->scid_len = hidl_request.securityConfig.scid.size();
1999 if (legacy_request->scid_len > NAN_MAX_SCID_BUF_LEN) {
2000 LOG(ERROR) << "convertHidlNanDataPathInitiatorRequest_1_6ToLegacy: scid_len too large";
2001 return false;
2002 }
2003 memcpy(legacy_request->scid, hidl_request.securityConfig.scid.data(), legacy_request->scid_len);
2004
2005 return true;
2006}
2007
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002008bool convertHidlNanDataPathIndicationResponseToLegacy(
Nate Jiang50c001d2022-01-12 16:06:01 -08002009 const V1_0::NanRespondToDataPathIndicationRequest& hidl_request,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002010 legacy_hal::NanDataPathIndicationResponse* legacy_request) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002011 if (!legacy_request) {
2012 LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: "
2013 "legacy_request is null";
2014 return false;
2015 }
2016 *legacy_request = {};
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002017
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002018 legacy_request->rsp_code = hidl_request.acceptRequest ? legacy_hal::NAN_DP_REQUEST_ACCEPT
2019 : legacy_hal::NAN_DP_REQUEST_REJECT;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002020 legacy_request->ndp_instance_id = hidl_request.ndpInstanceId;
Etan Cohen1cefaf62019-11-25 11:41:58 -08002021 if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) {
2022 LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: "
2023 "ifaceName too long";
2024 return false;
2025 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002026 strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002027 legacy_request->ndp_cfg.security_cfg =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002028 (hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
2029 ? legacy_hal::NAN_DP_CONFIG_SECURITY
2030 : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002031 legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
2032 if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
2033 LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: "
2034 "ndp_app_info_len too large";
2035 return false;
Etan Cohenc58619e2017-03-14 14:54:40 -07002036 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07002037 memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
2038 legacy_request->app_info.ndp_app_info_len);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002039 legacy_request->cipher_type = (unsigned int)hidl_request.securityConfig.cipherType;
2040 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PMK) {
2041 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PMK;
2042 legacy_request->key_info.body.pmk_info.pmk_len = hidl_request.securityConfig.pmk.size();
2043 if (legacy_request->key_info.body.pmk_info.pmk_len != NAN_PMK_INFO_LEN) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002044 LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: "
2045 "invalid pmk_len";
2046 return false;
2047 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002048 memcpy(legacy_request->key_info.body.pmk_info.pmk, hidl_request.securityConfig.pmk.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07002049 legacy_request->key_info.body.pmk_info.pmk_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07002050 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002051 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PASSPHRASE) {
2052 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002053 legacy_request->key_info.body.passphrase_info.passphrase_len =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002054 hidl_request.securityConfig.passphrase.size();
Roshan Piusabcf78f2017-10-06 16:30:38 -07002055 if (legacy_request->key_info.body.passphrase_info.passphrase_len <
2056 NAN_SECURITY_MIN_PASSPHRASE_LEN) {
2057 LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: "
2058 "passphrase_len too small";
2059 return false;
2060 }
2061 if (legacy_request->key_info.body.passphrase_info.passphrase_len >
2062 NAN_SECURITY_MAX_PASSPHRASE_LEN) {
2063 LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: "
2064 "passphrase_len too large";
2065 return false;
2066 }
2067 memcpy(legacy_request->key_info.body.passphrase_info.passphrase,
2068 hidl_request.securityConfig.passphrase.data(),
2069 legacy_request->key_info.body.passphrase_info.passphrase_len);
Etan Cohenc58619e2017-03-14 14:54:40 -07002070 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07002071 legacy_request->service_name_len = hidl_request.serviceNameOutOfBand.size();
2072 if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
2073 LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: "
2074 "service_name_len too large";
2075 return false;
2076 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002077 memcpy(legacy_request->service_name, hidl_request.serviceNameOutOfBand.data(),
Roshan Piusabcf78f2017-10-06 16:30:38 -07002078 legacy_request->service_name_len);
Etan Cohenf01bcaa2016-12-25 09:42:21 -08002079
Roshan Piusabcf78f2017-10-06 16:30:38 -07002080 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002081}
2082
Nate Jiang50c001d2022-01-12 16:06:01 -08002083bool convertHidlNanDataPathIndicationResponse_1_6ToLegacy(
2084 const V1_6::NanRespondToDataPathIndicationRequest& hidl_request,
2085 legacy_hal::NanDataPathIndicationResponse* legacy_request) {
2086 if (!legacy_request) {
2087 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: "
2088 "legacy_request is null";
2089 return false;
2090 }
2091 *legacy_request = {};
2092
2093 legacy_request->rsp_code = hidl_request.acceptRequest ? legacy_hal::NAN_DP_REQUEST_ACCEPT
2094 : legacy_hal::NAN_DP_REQUEST_REJECT;
2095 legacy_request->ndp_instance_id = hidl_request.ndpInstanceId;
2096 if (strnlen(hidl_request.ifaceName.c_str(), IFNAMSIZ + 1) == IFNAMSIZ + 1) {
2097 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: "
2098 "ifaceName too long";
2099 return false;
2100 }
2101 strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(), IFNAMSIZ + 1);
2102 legacy_request->ndp_cfg.security_cfg =
2103 (hidl_request.securityConfig.securityType != NanDataPathSecurityType::OPEN)
2104 ? legacy_hal::NAN_DP_CONFIG_SECURITY
2105 : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
2106 legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
2107 if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
2108 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: "
2109 "ndp_app_info_len too large";
2110 return false;
2111 }
2112 memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
2113 legacy_request->app_info.ndp_app_info_len);
2114 legacy_request->cipher_type = (unsigned int)hidl_request.securityConfig.cipherType;
2115 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PMK) {
2116 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PMK;
2117 legacy_request->key_info.body.pmk_info.pmk_len = hidl_request.securityConfig.pmk.size();
2118 if (legacy_request->key_info.body.pmk_info.pmk_len != NAN_PMK_INFO_LEN) {
2119 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: "
2120 "invalid pmk_len";
2121 return false;
2122 }
2123 memcpy(legacy_request->key_info.body.pmk_info.pmk, hidl_request.securityConfig.pmk.data(),
2124 legacy_request->key_info.body.pmk_info.pmk_len);
2125 }
2126 if (hidl_request.securityConfig.securityType == NanDataPathSecurityType::PASSPHRASE) {
2127 legacy_request->key_info.key_type = legacy_hal::NAN_SECURITY_KEY_INPUT_PASSPHRASE;
2128 legacy_request->key_info.body.passphrase_info.passphrase_len =
2129 hidl_request.securityConfig.passphrase.size();
2130 if (legacy_request->key_info.body.passphrase_info.passphrase_len <
2131 NAN_SECURITY_MIN_PASSPHRASE_LEN) {
2132 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: "
2133 "passphrase_len too small";
2134 return false;
2135 }
2136 if (legacy_request->key_info.body.passphrase_info.passphrase_len >
2137 NAN_SECURITY_MAX_PASSPHRASE_LEN) {
2138 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: "
2139 "passphrase_len too large";
2140 return false;
2141 }
2142 memcpy(legacy_request->key_info.body.passphrase_info.passphrase,
2143 hidl_request.securityConfig.passphrase.data(),
2144 legacy_request->key_info.body.passphrase_info.passphrase_len);
2145 }
2146 legacy_request->service_name_len = hidl_request.serviceNameOutOfBand.size();
2147 if (legacy_request->service_name_len > NAN_MAX_SERVICE_NAME_LEN) {
2148 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: "
2149 "service_name_len too large";
2150 return false;
2151 }
2152 memcpy(legacy_request->service_name, hidl_request.serviceNameOutOfBand.data(),
2153 legacy_request->service_name_len);
2154 legacy_request->scid_len = hidl_request.securityConfig.scid.size();
2155 if (legacy_request->scid_len > NAN_MAX_SCID_BUF_LEN) {
2156 LOG(ERROR) << "convertHidlNanDataPathIndicationResponse_1_6ToLegacy: scid_len too large";
2157 return false;
2158 }
2159 memcpy(legacy_request->scid, hidl_request.securityConfig.scid.data(), legacy_request->scid_len);
2160
2161 return true;
2162}
2163
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002164bool convertLegacyNanResponseHeaderToHidl(const legacy_hal::NanResponseMsg& legacy_response,
2165 WifiNanStatus* wifiNanStatus) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002166 if (!wifiNanStatus) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002167 LOG(ERROR) << "convertLegacyNanResponseHeaderToHidl: wifiNanStatus is null";
Roshan Piusabcf78f2017-10-06 16:30:38 -07002168 return false;
2169 }
2170 *wifiNanStatus = {};
Roshan Pius590744b2017-03-02 07:24:41 -08002171
Roshan Piusabcf78f2017-10-06 16:30:38 -07002172 convertToWifiNanStatus(legacy_response.status, legacy_response.nan_error,
2173 sizeof(legacy_response.nan_error), wifiNanStatus);
2174 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002175}
2176
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002177bool convertLegacyNanCapabilitiesResponseToHidl(const legacy_hal::NanCapabilities& legacy_response,
Nate Jiang50c001d2022-01-12 16:06:01 -08002178 V1_6::NanCapabilities* hidl_response) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002179 if (!hidl_response) {
2180 LOG(ERROR) << "convertLegacyNanCapabilitiesResponseToHidl: "
2181 "hidl_response is null";
2182 return false;
2183 }
2184 *hidl_response = {};
Roshan Pius590744b2017-03-02 07:24:41 -08002185
Nate Jiang50c001d2022-01-12 16:06:01 -08002186 hidl_response->maxConcurrentClusters = legacy_response.max_concurrent_nan_clusters;
2187 hidl_response->maxPublishes = legacy_response.max_publishes;
2188 hidl_response->maxSubscribes = legacy_response.max_subscribes;
2189 hidl_response->maxServiceNameLen = legacy_response.max_service_name_len;
2190 hidl_response->maxMatchFilterLen = legacy_response.max_match_filter_len;
2191 hidl_response->maxTotalMatchFilterLen = legacy_response.max_total_match_filter_len;
2192 hidl_response->maxServiceSpecificInfoLen = legacy_response.max_service_specific_info_len;
2193 hidl_response->maxExtendedServiceSpecificInfoLen =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002194 legacy_response.max_sdea_service_specific_info_len;
Nate Jiang50c001d2022-01-12 16:06:01 -08002195 hidl_response->maxNdiInterfaces = legacy_response.max_ndi_interfaces;
2196 hidl_response->maxNdpSessions = legacy_response.max_ndp_sessions;
2197 hidl_response->maxAppInfoLen = legacy_response.max_app_info_len;
2198 hidl_response->maxQueuedTransmitFollowupMsgs =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002199 legacy_response.max_queued_transmit_followup_msgs;
Nate Jiang50c001d2022-01-12 16:06:01 -08002200 hidl_response->maxSubscribeInterfaceAddresses = legacy_response.max_subscribe_address;
2201 hidl_response->supportedCipherSuites = legacy_response.cipher_suites_supported;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002202 hidl_response->instantCommunicationModeSupportFlag = legacy_response.is_instant_mode_supported;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002203
Roshan Piusabcf78f2017-10-06 16:30:38 -07002204 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002205}
2206
Roshan Piusabcf78f2017-10-06 16:30:38 -07002207bool convertLegacyNanMatchIndToHidl(const legacy_hal::NanMatchInd& legacy_ind,
Nate Jiang50c001d2022-01-12 16:06:01 -08002208 V1_6::NanMatchInd* hidl_ind) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002209 if (!hidl_ind) {
2210 LOG(ERROR) << "convertLegacyNanMatchIndToHidl: hidl_ind is null";
2211 return false;
2212 }
2213 *hidl_ind = {};
Roshan Pius590744b2017-03-02 07:24:41 -08002214
Roshan Piusabcf78f2017-10-06 16:30:38 -07002215 hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id;
2216 hidl_ind->peerId = legacy_ind.requestor_instance_id;
2217 hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002218 hidl_ind->serviceSpecificInfo = std::vector<uint8_t>(
2219 legacy_ind.service_specific_info,
2220 legacy_ind.service_specific_info + legacy_ind.service_specific_info_len);
2221 hidl_ind->extendedServiceSpecificInfo = std::vector<uint8_t>(
2222 legacy_ind.sdea_service_specific_info,
2223 legacy_ind.sdea_service_specific_info + legacy_ind.sdea_service_specific_info_len);
2224 hidl_ind->matchFilter =
2225 std::vector<uint8_t>(legacy_ind.sdf_match_filter,
2226 legacy_ind.sdf_match_filter + legacy_ind.sdf_match_filter_len);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002227 hidl_ind->matchOccuredInBeaconFlag = legacy_ind.match_occured_flag == 1;
2228 hidl_ind->outOfResourceFlag = legacy_ind.out_of_resource_flag == 1;
2229 hidl_ind->rssiValue = legacy_ind.rssi_value;
Nate Jiang50c001d2022-01-12 16:06:01 -08002230 hidl_ind->peerCipherType = (V1_6::NanCipherSuiteType)legacy_ind.peer_cipher_type;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002231 hidl_ind->peerRequiresSecurityEnabledInNdp =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002232 legacy_ind.peer_sdea_params.security_cfg == legacy_hal::NAN_DP_CONFIG_SECURITY;
2233 hidl_ind->peerRequiresRanging =
2234 legacy_ind.peer_sdea_params.ranging_state == legacy_hal::NAN_RANGING_ENABLE;
Nate Jiang50c001d2022-01-12 16:06:01 -08002235 hidl_ind->rangingMeasurementInMm = legacy_ind.range_info.range_measurement_mm;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002236 hidl_ind->rangingIndicationType = legacy_ind.range_info.ranging_event_type;
Nate Jiang50c001d2022-01-12 16:06:01 -08002237 hidl_ind->scid = std::vector<uint8_t>(legacy_ind.scid, legacy_ind.scid + legacy_ind.scid_len);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002238 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002239}
2240
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002241bool convertLegacyNanFollowupIndToHidl(const legacy_hal::NanFollowupInd& legacy_ind,
2242 NanFollowupReceivedInd* hidl_ind) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002243 if (!hidl_ind) {
2244 LOG(ERROR) << "convertLegacyNanFollowupIndToHidl: hidl_ind is null";
2245 return false;
2246 }
2247 *hidl_ind = {};
Roshan Pius590744b2017-03-02 07:24:41 -08002248
Roshan Piusabcf78f2017-10-06 16:30:38 -07002249 hidl_ind->discoverySessionId = legacy_ind.publish_subscribe_id;
2250 hidl_ind->peerId = legacy_ind.requestor_instance_id;
2251 hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr);
2252 hidl_ind->receivedInFaw = legacy_ind.dw_or_faw == 1;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002253 hidl_ind->serviceSpecificInfo = std::vector<uint8_t>(
2254 legacy_ind.service_specific_info,
2255 legacy_ind.service_specific_info + legacy_ind.service_specific_info_len);
2256 hidl_ind->extendedServiceSpecificInfo = std::vector<uint8_t>(
2257 legacy_ind.sdea_service_specific_info,
2258 legacy_ind.sdea_service_specific_info + legacy_ind.sdea_service_specific_info_len);
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002259
Roshan Piusabcf78f2017-10-06 16:30:38 -07002260 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002261}
2262
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002263bool convertLegacyNanDataPathRequestIndToHidl(const legacy_hal::NanDataPathRequestInd& legacy_ind,
2264 NanDataPathRequestInd* hidl_ind) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002265 if (!hidl_ind) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002266 LOG(ERROR) << "convertLegacyNanDataPathRequestIndToHidl: hidl_ind is null";
Roshan Piusabcf78f2017-10-06 16:30:38 -07002267 return false;
2268 }
2269 *hidl_ind = {};
Roshan Pius590744b2017-03-02 07:24:41 -08002270
Roshan Piusabcf78f2017-10-06 16:30:38 -07002271 hidl_ind->discoverySessionId = legacy_ind.service_instance_id;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002272 hidl_ind->peerDiscMacAddr = hidl_array<uint8_t, 6>(legacy_ind.peer_disc_mac_addr);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002273 hidl_ind->ndpInstanceId = legacy_ind.ndp_instance_id;
2274 hidl_ind->securityRequired =
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002275 legacy_ind.ndp_cfg.security_cfg == legacy_hal::NAN_DP_CONFIG_SECURITY;
2276 hidl_ind->appInfo = std::vector<uint8_t>(
2277 legacy_ind.app_info.ndp_app_info,
2278 legacy_ind.app_info.ndp_app_info + legacy_ind.app_info.ndp_app_info_len);
Etan Cohenf01bcaa2016-12-25 09:42:21 -08002279
Roshan Piusabcf78f2017-10-06 16:30:38 -07002280 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002281}
2282
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002283bool convertLegacyNdpChannelInfoToHidl(const legacy_hal::NanChannelInfo& legacy_struct,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002284 V1_6::NanDataPathChannelInfo* hidl_struct) {
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002285 if (!hidl_struct) {
2286 LOG(ERROR) << "convertLegacyNdpChannelInfoToHidl: hidl_struct is null";
2287 return false;
2288 }
2289 *hidl_struct = {};
2290
2291 hidl_struct->channelFreq = legacy_struct.channel;
Etan Cohenb1b7a822018-02-07 14:44:32 -08002292 hidl_struct->channelBandwidth = convertLegacyWifiChannelWidthToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002293 (legacy_hal::wifi_channel_width)legacy_struct.bandwidth);
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002294 hidl_struct->numSpatialStreams = legacy_struct.nss;
2295
2296 return true;
2297}
2298
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002299bool convertLegacyNanDataPathConfirmIndToHidl(const legacy_hal::NanDataPathConfirmInd& legacy_ind,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002300 V1_6::NanDataPathConfirmInd* hidl_ind) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002301 if (!hidl_ind) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002302 LOG(ERROR) << "convertLegacyNanDataPathConfirmIndToHidl: hidl_ind is null";
Roshan Piusabcf78f2017-10-06 16:30:38 -07002303 return false;
2304 }
2305 *hidl_ind = {};
Roshan Pius590744b2017-03-02 07:24:41 -08002306
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002307 hidl_ind->V1_0.ndpInstanceId = legacy_ind.ndp_instance_id;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002308 hidl_ind->V1_0.dataPathSetupSuccess = legacy_ind.rsp_code == legacy_hal::NAN_DP_REQUEST_ACCEPT;
2309 hidl_ind->V1_0.peerNdiMacAddr = hidl_array<uint8_t, 6>(legacy_ind.peer_ndi_mac_addr);
2310 hidl_ind->V1_0.appInfo = std::vector<uint8_t>(
2311 legacy_ind.app_info.ndp_app_info,
2312 legacy_ind.app_info.ndp_app_info + legacy_ind.app_info.ndp_app_info_len);
2313 hidl_ind->V1_0.status.status = convertLegacyNanStatusTypeToHidl(legacy_ind.reason_code);
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002314 hidl_ind->V1_0.status.description = ""; // TODO: b/34059183
2315
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002316 std::vector<V1_6::NanDataPathChannelInfo> channelInfo;
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002317 for (unsigned int i = 0; i < legacy_ind.num_channels; ++i) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002318 V1_6::NanDataPathChannelInfo hidl_struct;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002319 if (!convertLegacyNdpChannelInfoToHidl(legacy_ind.channel_info[i], &hidl_struct)) {
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002320 return false;
2321 }
2322 channelInfo.push_back(hidl_struct);
2323 }
2324 hidl_ind->channelInfo = channelInfo;
2325
2326 return true;
2327}
2328
2329bool convertLegacyNanDataPathScheduleUpdateIndToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002330 const legacy_hal::NanDataPathScheduleUpdateInd& legacy_ind,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002331 V1_6::NanDataPathScheduleUpdateInd* hidl_ind) {
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002332 if (!hidl_ind) {
2333 LOG(ERROR) << "convertLegacyNanDataPathScheduleUpdateIndToHidl: "
2334 "hidl_ind is null";
2335 return false;
2336 }
2337 *hidl_ind = {};
2338
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002339 hidl_ind->peerDiscoveryAddress = hidl_array<uint8_t, 6>(legacy_ind.peer_mac_addr);
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002340 std::vector<V1_6::NanDataPathChannelInfo> channelInfo;
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002341 for (unsigned int i = 0; i < legacy_ind.num_channels; ++i) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002342 V1_6::NanDataPathChannelInfo hidl_struct;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002343 if (!convertLegacyNdpChannelInfoToHidl(legacy_ind.channel_info[i], &hidl_struct)) {
Etan Cohenc7bd0f72017-12-26 11:52:44 -08002344 return false;
2345 }
2346 channelInfo.push_back(hidl_struct);
2347 }
2348 hidl_ind->channelInfo = channelInfo;
2349 std::vector<uint32_t> ndpInstanceIds;
2350 for (unsigned int i = 0; i < legacy_ind.num_ndp_instances; ++i) {
2351 ndpInstanceIds.push_back(legacy_ind.ndp_instance_id[i]);
2352 }
2353 hidl_ind->ndpInstanceIds = ndpInstanceIds;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002354
Roshan Piusabcf78f2017-10-06 16:30:38 -07002355 return true;
Roshan Piusf5f51fd2016-12-01 13:54:24 -08002356}
Roshan Pius3fae9c82016-12-02 14:49:41 -08002357
2358legacy_hal::wifi_rtt_type convertHidlRttTypeToLegacy(RttType type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002359 switch (type) {
2360 case RttType::ONE_SIDED:
2361 return legacy_hal::RTT_TYPE_1_SIDED;
2362 case RttType::TWO_SIDED:
2363 return legacy_hal::RTT_TYPE_2_SIDED;
2364 };
2365 CHECK(false);
Roshan Pius3fae9c82016-12-02 14:49:41 -08002366}
2367
2368RttType convertLegacyRttTypeToHidl(legacy_hal::wifi_rtt_type type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002369 switch (type) {
2370 case legacy_hal::RTT_TYPE_1_SIDED:
2371 return RttType::ONE_SIDED;
2372 case legacy_hal::RTT_TYPE_2_SIDED:
2373 return RttType::TWO_SIDED;
2374 };
2375 CHECK(false) << "Unknown legacy type: " << type;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002376}
2377
2378legacy_hal::rtt_peer_type convertHidlRttPeerTypeToLegacy(RttPeerType type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002379 switch (type) {
2380 case RttPeerType::AP:
2381 return legacy_hal::RTT_PEER_AP;
2382 case RttPeerType::STA:
2383 return legacy_hal::RTT_PEER_STA;
2384 case RttPeerType::P2P_GO:
2385 return legacy_hal::RTT_PEER_P2P_GO;
2386 case RttPeerType::P2P_CLIENT:
2387 return legacy_hal::RTT_PEER_P2P_CLIENT;
2388 case RttPeerType::NAN:
2389 return legacy_hal::RTT_PEER_NAN;
2390 };
2391 CHECK(false);
Roshan Pius3fae9c82016-12-02 14:49:41 -08002392}
2393
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002394legacy_hal::wifi_channel_width convertHidlWifiChannelWidthToLegacy(WifiChannelWidthInMhz type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002395 switch (type) {
2396 case WifiChannelWidthInMhz::WIDTH_20:
2397 return legacy_hal::WIFI_CHAN_WIDTH_20;
2398 case WifiChannelWidthInMhz::WIDTH_40:
2399 return legacy_hal::WIFI_CHAN_WIDTH_40;
2400 case WifiChannelWidthInMhz::WIDTH_80:
2401 return legacy_hal::WIFI_CHAN_WIDTH_80;
2402 case WifiChannelWidthInMhz::WIDTH_160:
2403 return legacy_hal::WIFI_CHAN_WIDTH_160;
2404 case WifiChannelWidthInMhz::WIDTH_80P80:
2405 return legacy_hal::WIFI_CHAN_WIDTH_80P80;
2406 case WifiChannelWidthInMhz::WIDTH_5:
2407 return legacy_hal::WIFI_CHAN_WIDTH_5;
2408 case WifiChannelWidthInMhz::WIDTH_10:
2409 return legacy_hal::WIFI_CHAN_WIDTH_10;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002410 case V1_6::WifiChannelWidthInMhz::WIDTH_320:
2411 return legacy_hal::WIFI_CHAN_WIDTH_320;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002412 case WifiChannelWidthInMhz::WIDTH_INVALID:
2413 return legacy_hal::WIFI_CHAN_WIDTH_INVALID;
2414 };
2415 CHECK(false);
Roshan Pius3fae9c82016-12-02 14:49:41 -08002416}
2417
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002418V1_6::WifiChannelWidthInMhz convertLegacyWifiChannelWidthToHidl(
2419 legacy_hal::wifi_channel_width type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002420 switch (type) {
2421 case legacy_hal::WIFI_CHAN_WIDTH_20:
2422 return WifiChannelWidthInMhz::WIDTH_20;
2423 case legacy_hal::WIFI_CHAN_WIDTH_40:
2424 return WifiChannelWidthInMhz::WIDTH_40;
2425 case legacy_hal::WIFI_CHAN_WIDTH_80:
2426 return WifiChannelWidthInMhz::WIDTH_80;
2427 case legacy_hal::WIFI_CHAN_WIDTH_160:
2428 return WifiChannelWidthInMhz::WIDTH_160;
2429 case legacy_hal::WIFI_CHAN_WIDTH_80P80:
2430 return WifiChannelWidthInMhz::WIDTH_80P80;
2431 case legacy_hal::WIFI_CHAN_WIDTH_5:
2432 return WifiChannelWidthInMhz::WIDTH_5;
2433 case legacy_hal::WIFI_CHAN_WIDTH_10:
2434 return WifiChannelWidthInMhz::WIDTH_10;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002435 case legacy_hal::WIFI_CHAN_WIDTH_320:
2436 return V1_6::WifiChannelWidthInMhz::WIDTH_320;
Kumar Anandea0d5012021-03-16 12:07:12 -07002437 default:
Roshan Piusabcf78f2017-10-06 16:30:38 -07002438 return WifiChannelWidthInMhz::WIDTH_INVALID;
2439 };
Roshan Pius3fae9c82016-12-02 14:49:41 -08002440}
2441
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002442legacy_hal::wifi_rtt_preamble convertHidlRttPreambleToLegacy(V1_6::RttPreamble type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002443 switch (type) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002444 case V1_6::RttPreamble::LEGACY:
Roshan Piusabcf78f2017-10-06 16:30:38 -07002445 return legacy_hal::WIFI_RTT_PREAMBLE_LEGACY;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002446 case V1_6::RttPreamble::HT:
Roshan Piusabcf78f2017-10-06 16:30:38 -07002447 return legacy_hal::WIFI_RTT_PREAMBLE_HT;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002448 case V1_6::RttPreamble::VHT:
Roshan Piusabcf78f2017-10-06 16:30:38 -07002449 return legacy_hal::WIFI_RTT_PREAMBLE_VHT;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002450 case V1_6::RttPreamble::HE:
Ahmed ElArabawyeeb53382019-10-10 20:18:31 -07002451 return legacy_hal::WIFI_RTT_PREAMBLE_HE;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002452 case V1_6::RttPreamble::EHT:
2453 return legacy_hal::WIFI_RTT_PREAMBLE_EHT;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002454 };
2455 CHECK(false);
Roshan Pius3fae9c82016-12-02 14:49:41 -08002456}
2457
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002458V1_6::RttPreamble convertLegacyRttPreambleToHidl(legacy_hal::wifi_rtt_preamble type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002459 switch (type) {
2460 case legacy_hal::WIFI_RTT_PREAMBLE_LEGACY:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002461 return V1_6::RttPreamble::LEGACY;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002462 case legacy_hal::WIFI_RTT_PREAMBLE_HT:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002463 return V1_6::RttPreamble::HT;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002464 case legacy_hal::WIFI_RTT_PREAMBLE_VHT:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002465 return V1_6::RttPreamble::VHT;
Ahmed ElArabawyeeb53382019-10-10 20:18:31 -07002466 case legacy_hal::WIFI_RTT_PREAMBLE_HE:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002467 return V1_6::RttPreamble::HE;
2468 case legacy_hal::WIFI_RTT_PREAMBLE_EHT:
2469 return V1_6::RttPreamble::EHT;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002470 };
2471 CHECK(false) << "Unknown legacy type: " << type;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002472}
2473
2474legacy_hal::wifi_rtt_bw convertHidlRttBwToLegacy(RttBw type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002475 switch (type) {
2476 case RttBw::BW_5MHZ:
2477 return legacy_hal::WIFI_RTT_BW_5;
2478 case RttBw::BW_10MHZ:
2479 return legacy_hal::WIFI_RTT_BW_10;
2480 case RttBw::BW_20MHZ:
2481 return legacy_hal::WIFI_RTT_BW_20;
2482 case RttBw::BW_40MHZ:
2483 return legacy_hal::WIFI_RTT_BW_40;
2484 case RttBw::BW_80MHZ:
2485 return legacy_hal::WIFI_RTT_BW_80;
2486 case RttBw::BW_160MHZ:
2487 return legacy_hal::WIFI_RTT_BW_160;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002488 case RttBw::BW_320MHZ:
2489 return legacy_hal::WIFI_RTT_BW_320;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002490 };
2491 CHECK(false);
Roshan Pius3fae9c82016-12-02 14:49:41 -08002492}
2493
2494RttBw convertLegacyRttBwToHidl(legacy_hal::wifi_rtt_bw type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002495 switch (type) {
2496 case legacy_hal::WIFI_RTT_BW_5:
2497 return RttBw::BW_5MHZ;
2498 case legacy_hal::WIFI_RTT_BW_10:
2499 return RttBw::BW_10MHZ;
2500 case legacy_hal::WIFI_RTT_BW_20:
2501 return RttBw::BW_20MHZ;
2502 case legacy_hal::WIFI_RTT_BW_40:
2503 return RttBw::BW_40MHZ;
2504 case legacy_hal::WIFI_RTT_BW_80:
2505 return RttBw::BW_80MHZ;
2506 case legacy_hal::WIFI_RTT_BW_160:
2507 return RttBw::BW_160MHZ;
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002508 case legacy_hal::WIFI_RTT_BW_320:
2509 return RttBw::BW_320MHZ;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002510 };
2511 CHECK(false) << "Unknown legacy type: " << type;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002512}
2513
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002514legacy_hal::wifi_motion_pattern convertHidlRttMotionPatternToLegacy(RttMotionPattern type) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002515 switch (type) {
2516 case RttMotionPattern::NOT_EXPECTED:
2517 return legacy_hal::WIFI_MOTION_NOT_EXPECTED;
2518 case RttMotionPattern::EXPECTED:
2519 return legacy_hal::WIFI_MOTION_EXPECTED;
2520 case RttMotionPattern::UNKNOWN:
2521 return legacy_hal::WIFI_MOTION_UNKNOWN;
2522 };
2523 CHECK(false);
Roshan Pius3fae9c82016-12-02 14:49:41 -08002524}
2525
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002526V1_6::WifiRatePreamble convertLegacyWifiRatePreambleToHidl(uint8_t preamble) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002527 switch (preamble) {
2528 case 0:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002529 return V1_6::WifiRatePreamble::OFDM;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002530 case 1:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002531 return V1_6::WifiRatePreamble::CCK;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002532 case 2:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002533 return V1_6::WifiRatePreamble::HT;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002534 case 3:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002535 return V1_6::WifiRatePreamble::VHT;
Ahmed ElArabawyeeb53382019-10-10 20:18:31 -07002536 case 4:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002537 return V1_6::WifiRatePreamble::HE;
2538 case 5:
2539 return V1_6::WifiRatePreamble::EHT;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002540 default:
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002541 return V1_6::WifiRatePreamble::RESERVED;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002542 };
2543 CHECK(false) << "Unknown legacy preamble: " << preamble;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002544}
2545
2546WifiRateNss convertLegacyWifiRateNssToHidl(uint8_t nss) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002547 switch (nss) {
2548 case 0:
2549 return WifiRateNss::NSS_1x1;
2550 case 1:
2551 return WifiRateNss::NSS_2x2;
2552 case 2:
2553 return WifiRateNss::NSS_3x3;
2554 case 3:
2555 return WifiRateNss::NSS_4x4;
2556 };
2557 CHECK(false) << "Unknown legacy nss: " << nss;
2558 return {};
Roshan Pius3fae9c82016-12-02 14:49:41 -08002559}
2560
2561RttStatus convertLegacyRttStatusToHidl(legacy_hal::wifi_rtt_status status) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002562 switch (status) {
2563 case legacy_hal::RTT_STATUS_SUCCESS:
2564 return RttStatus::SUCCESS;
2565 case legacy_hal::RTT_STATUS_FAILURE:
2566 return RttStatus::FAILURE;
2567 case legacy_hal::RTT_STATUS_FAIL_NO_RSP:
2568 return RttStatus::FAIL_NO_RSP;
2569 case legacy_hal::RTT_STATUS_FAIL_REJECTED:
2570 return RttStatus::FAIL_REJECTED;
2571 case legacy_hal::RTT_STATUS_FAIL_NOT_SCHEDULED_YET:
2572 return RttStatus::FAIL_NOT_SCHEDULED_YET;
2573 case legacy_hal::RTT_STATUS_FAIL_TM_TIMEOUT:
2574 return RttStatus::FAIL_TM_TIMEOUT;
2575 case legacy_hal::RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL:
2576 return RttStatus::FAIL_AP_ON_DIFF_CHANNEL;
2577 case legacy_hal::RTT_STATUS_FAIL_NO_CAPABILITY:
2578 return RttStatus::FAIL_NO_CAPABILITY;
2579 case legacy_hal::RTT_STATUS_ABORTED:
2580 return RttStatus::ABORTED;
2581 case legacy_hal::RTT_STATUS_FAIL_INVALID_TS:
2582 return RttStatus::FAIL_INVALID_TS;
2583 case legacy_hal::RTT_STATUS_FAIL_PROTOCOL:
2584 return RttStatus::FAIL_PROTOCOL;
2585 case legacy_hal::RTT_STATUS_FAIL_SCHEDULE:
2586 return RttStatus::FAIL_SCHEDULE;
2587 case legacy_hal::RTT_STATUS_FAIL_BUSY_TRY_LATER:
2588 return RttStatus::FAIL_BUSY_TRY_LATER;
2589 case legacy_hal::RTT_STATUS_INVALID_REQ:
2590 return RttStatus::INVALID_REQ;
2591 case legacy_hal::RTT_STATUS_NO_WIFI:
2592 return RttStatus::NO_WIFI;
2593 case legacy_hal::RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE:
2594 return RttStatus::FAIL_FTM_PARAM_OVERRIDE;
Etan Cohen69c89222018-03-08 13:39:19 -08002595 case legacy_hal::RTT_STATUS_NAN_RANGING_PROTOCOL_FAILURE:
2596 return RttStatus::FAILURE; // TODO: add HIDL enumeration
2597 case legacy_hal::RTT_STATUS_NAN_RANGING_CONCURRENCY_NOT_SUPPORTED:
2598 return RttStatus::FAILURE; // TODO: add HIDL enumeration
Roshan Piusabcf78f2017-10-06 16:30:38 -07002599 };
2600 CHECK(false) << "Unknown legacy status: " << status;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002601}
2602
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002603bool convertHidlWifiChannelInfoToLegacy(const WifiChannelInfo& hidl_info,
2604 legacy_hal::wifi_channel_info* legacy_info) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002605 if (!legacy_info) {
2606 return false;
2607 }
2608 *legacy_info = {};
2609 legacy_info->width = convertHidlWifiChannelWidthToLegacy(hidl_info.width);
2610 legacy_info->center_freq = hidl_info.centerFreq;
2611 legacy_info->center_freq0 = hidl_info.centerFreq0;
2612 legacy_info->center_freq1 = hidl_info.centerFreq1;
2613 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002614}
2615
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002616bool convertLegacyWifiChannelInfoToHidl(const legacy_hal::wifi_channel_info& legacy_info,
2617 WifiChannelInfo* hidl_info) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002618 if (!hidl_info) {
2619 return false;
2620 }
2621 *hidl_info = {};
2622 hidl_info->width = convertLegacyWifiChannelWidthToHidl(legacy_info.width);
2623 hidl_info->centerFreq = legacy_info.center_freq;
2624 hidl_info->centerFreq0 = legacy_info.center_freq0;
2625 hidl_info->centerFreq1 = legacy_info.center_freq1;
2626 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002627}
2628
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002629bool convertHidlRttConfigToLegacy(const V1_6::RttConfig& hidl_config,
Roshan Pius3fae9c82016-12-02 14:49:41 -08002630 legacy_hal::wifi_rtt_config* legacy_config) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002631 if (!legacy_config) {
2632 return false;
2633 }
2634 *legacy_config = {};
2635 CHECK(hidl_config.addr.size() == sizeof(legacy_config->addr));
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002636 memcpy(legacy_config->addr, hidl_config.addr.data(), hidl_config.addr.size());
Roshan Piusabcf78f2017-10-06 16:30:38 -07002637 legacy_config->type = convertHidlRttTypeToLegacy(hidl_config.type);
2638 legacy_config->peer = convertHidlRttPeerTypeToLegacy(hidl_config.peer);
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002639 if (!convertHidlWifiChannelInfoToLegacy(hidl_config.channel, &legacy_config->channel)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002640 return false;
2641 }
2642 legacy_config->burst_period = hidl_config.burstPeriod;
2643 legacy_config->num_burst = hidl_config.numBurst;
2644 legacy_config->num_frames_per_burst = hidl_config.numFramesPerBurst;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002645 legacy_config->num_retries_per_rtt_frame = hidl_config.numRetriesPerRttFrame;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002646 legacy_config->num_retries_per_ftmr = hidl_config.numRetriesPerFtmr;
2647 legacy_config->LCI_request = hidl_config.mustRequestLci;
2648 legacy_config->LCR_request = hidl_config.mustRequestLcr;
2649 legacy_config->burst_duration = hidl_config.burstDuration;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002650 legacy_config->preamble = convertHidlRttPreambleToLegacy(hidl_config.preamble);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002651 legacy_config->bw = convertHidlRttBwToLegacy(hidl_config.bw);
2652 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002653}
2654
Roshan Piuse3f72ff2016-12-05 16:18:43 -08002655bool convertHidlVectorOfRttConfigToLegacy(
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002656 const std::vector<V1_6::RttConfig>& hidl_configs,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002657 std::vector<legacy_hal::wifi_rtt_config>* legacy_configs) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002658 if (!legacy_configs) {
2659 return false;
Roshan Piuse3f72ff2016-12-05 16:18:43 -08002660 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07002661 *legacy_configs = {};
2662 for (const auto& hidl_config : hidl_configs) {
2663 legacy_hal::wifi_rtt_config legacy_config;
2664 if (!convertHidlRttConfigToLegacy(hidl_config, &legacy_config)) {
2665 return false;
2666 }
2667 legacy_configs->push_back(legacy_config);
2668 }
2669 return true;
Roshan Piuse3f72ff2016-12-05 16:18:43 -08002670}
2671
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002672bool convertHidlRttLciInformationToLegacy(const RttLciInformation& hidl_info,
2673 legacy_hal::wifi_lci_information* legacy_info) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002674 if (!legacy_info) {
2675 return false;
2676 }
2677 *legacy_info = {};
2678 legacy_info->latitude = hidl_info.latitude;
2679 legacy_info->longitude = hidl_info.longitude;
2680 legacy_info->altitude = hidl_info.altitude;
2681 legacy_info->latitude_unc = hidl_info.latitudeUnc;
2682 legacy_info->longitude_unc = hidl_info.longitudeUnc;
2683 legacy_info->altitude_unc = hidl_info.altitudeUnc;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002684 legacy_info->motion_pattern = convertHidlRttMotionPatternToLegacy(hidl_info.motionPattern);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002685 legacy_info->floor = hidl_info.floor;
2686 legacy_info->height_above_floor = hidl_info.heightAboveFloor;
2687 legacy_info->height_unc = hidl_info.heightUnc;
2688 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002689}
2690
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002691bool convertHidlRttLcrInformationToLegacy(const RttLcrInformation& hidl_info,
2692 legacy_hal::wifi_lcr_information* legacy_info) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002693 if (!legacy_info) {
2694 return false;
2695 }
2696 *legacy_info = {};
2697 CHECK(hidl_info.countryCode.size() == sizeof(legacy_info->country_code));
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002698 memcpy(legacy_info->country_code, hidl_info.countryCode.data(), hidl_info.countryCode.size());
Roshan Piusabcf78f2017-10-06 16:30:38 -07002699 if (hidl_info.civicInfo.size() > sizeof(legacy_info->civic_info)) {
2700 return false;
2701 }
2702 legacy_info->length = hidl_info.civicInfo.size();
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002703 memcpy(legacy_info->civic_info, hidl_info.civicInfo.c_str(), hidl_info.civicInfo.size());
Roshan Piusabcf78f2017-10-06 16:30:38 -07002704 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002705}
2706
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002707bool convertHidlRttResponderToLegacy(const V1_6::RttResponder& hidl_responder,
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002708 legacy_hal::wifi_rtt_responder* legacy_responder) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002709 if (!legacy_responder) {
2710 return false;
2711 }
2712 *legacy_responder = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002713 if (!convertHidlWifiChannelInfoToLegacy(hidl_responder.channel, &legacy_responder->channel)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002714 return false;
2715 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002716 legacy_responder->preamble = convertHidlRttPreambleToLegacy(hidl_responder.preamble);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002717 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002718}
2719
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002720bool convertLegacyRttResponderToHidl(const legacy_hal::wifi_rtt_responder& legacy_responder,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002721 V1_6::RttResponder* hidl_responder) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002722 if (!hidl_responder) {
2723 return false;
2724 }
2725 *hidl_responder = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002726 if (!convertLegacyWifiChannelInfoToHidl(legacy_responder.channel, &hidl_responder->channel)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002727 return false;
2728 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002729 hidl_responder->preamble = convertLegacyRttPreambleToHidl(legacy_responder.preamble);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002730 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002731}
2732
2733bool convertLegacyRttCapabilitiesToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002734 const legacy_hal::wifi_rtt_capabilities& legacy_capabilities,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002735 V1_6::RttCapabilities* hidl_capabilities) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002736 if (!hidl_capabilities) {
2737 return false;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002738 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07002739 *hidl_capabilities = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002740 hidl_capabilities->rttOneSidedSupported = legacy_capabilities.rtt_one_sided_supported;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002741 hidl_capabilities->rttFtmSupported = legacy_capabilities.rtt_ftm_supported;
2742 hidl_capabilities->lciSupported = legacy_capabilities.lci_support;
2743 hidl_capabilities->lcrSupported = legacy_capabilities.lcr_support;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002744 hidl_capabilities->responderSupported = legacy_capabilities.responder_supported;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002745 hidl_capabilities->preambleSupport = 0;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002746 for (const auto flag : {legacy_hal::WIFI_RTT_PREAMBLE_LEGACY, legacy_hal::WIFI_RTT_PREAMBLE_HT,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002747 legacy_hal::WIFI_RTT_PREAMBLE_VHT, legacy_hal::WIFI_RTT_PREAMBLE_HE,
2748 legacy_hal::WIFI_RTT_PREAMBLE_EHT}) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002749 if (legacy_capabilities.preamble_support & flag) {
2750 hidl_capabilities->preambleSupport |=
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002751 static_cast<std::underlying_type<V1_6::RttPreamble>::type>(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002752 convertLegacyRttPreambleToHidl(flag));
Roshan Piusabcf78f2017-10-06 16:30:38 -07002753 }
Roshan Pius3fae9c82016-12-02 14:49:41 -08002754 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07002755 hidl_capabilities->bwSupport = 0;
2756 for (const auto flag :
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002757 {legacy_hal::WIFI_RTT_BW_5, legacy_hal::WIFI_RTT_BW_10, legacy_hal::WIFI_RTT_BW_20,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002758 legacy_hal::WIFI_RTT_BW_40, legacy_hal::WIFI_RTT_BW_80, legacy_hal::WIFI_RTT_BW_160,
2759 legacy_hal::WIFI_RTT_BW_320}) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002760 if (legacy_capabilities.bw_support & flag) {
2761 hidl_capabilities->bwSupport |=
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002762 static_cast<std::underlying_type<RttBw>::type>(convertLegacyRttBwToHidl(flag));
Roshan Piusabcf78f2017-10-06 16:30:38 -07002763 }
2764 }
2765 hidl_capabilities->mcVersion = legacy_capabilities.mc_version;
2766 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002767}
2768
2769bool convertLegacyWifiRateInfoToHidl(const legacy_hal::wifi_rate& legacy_rate,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002770 V1_6::WifiRateInfo* hidl_rate) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002771 if (!hidl_rate) {
2772 return false;
2773 }
2774 *hidl_rate = {};
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002775 hidl_rate->preamble = convertLegacyWifiRatePreambleToHidl(legacy_rate.preamble);
Roshan Piusabcf78f2017-10-06 16:30:38 -07002776 hidl_rate->nss = convertLegacyWifiRateNssToHidl(legacy_rate.nss);
2777 hidl_rate->bw = convertLegacyWifiChannelWidthToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002778 static_cast<legacy_hal::wifi_channel_width>(legacy_rate.bw));
Roshan Piusabcf78f2017-10-06 16:30:38 -07002779 hidl_rate->rateMcsIdx = legacy_rate.rateMcsIdx;
2780 hidl_rate->bitRateInKbps = legacy_rate.bitrate;
2781 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002782}
2783
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002784bool convertLegacyRttResultToHidl(const legacy_hal::wifi_rtt_result& legacy_result,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002785 V1_6::RttResult* hidl_result) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002786 if (!hidl_result) {
2787 return false;
2788 }
2789 *hidl_result = {};
2790 CHECK(sizeof(legacy_result.addr) == hidl_result->addr.size());
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002791 memcpy(hidl_result->addr.data(), legacy_result.addr, sizeof(legacy_result.addr));
Roshan Piusabcf78f2017-10-06 16:30:38 -07002792 hidl_result->burstNum = legacy_result.burst_num;
2793 hidl_result->measurementNumber = legacy_result.measurement_number;
2794 hidl_result->successNumber = legacy_result.success_number;
2795 hidl_result->numberPerBurstPeer = legacy_result.number_per_burst_peer;
2796 hidl_result->status = convertLegacyRttStatusToHidl(legacy_result.status);
2797 hidl_result->retryAfterDuration = legacy_result.retry_after_duration;
2798 hidl_result->type = convertLegacyRttTypeToHidl(legacy_result.type);
2799 hidl_result->rssi = legacy_result.rssi;
2800 hidl_result->rssiSpread = legacy_result.rssi_spread;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002801 if (!convertLegacyWifiRateInfoToHidl(legacy_result.tx_rate, &hidl_result->txRate)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002802 return false;
2803 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002804 if (!convertLegacyWifiRateInfoToHidl(legacy_result.rx_rate, &hidl_result->rxRate)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002805 return false;
2806 }
2807 hidl_result->rtt = legacy_result.rtt;
2808 hidl_result->rttSd = legacy_result.rtt_sd;
2809 hidl_result->rttSpread = legacy_result.rtt_spread;
2810 hidl_result->distanceInMm = legacy_result.distance_mm;
2811 hidl_result->distanceSdInMm = legacy_result.distance_sd_mm;
2812 hidl_result->distanceSpreadInMm = legacy_result.distance_spread_mm;
2813 hidl_result->timeStampInUs = legacy_result.ts;
2814 hidl_result->burstDurationInMs = legacy_result.burst_duration;
2815 hidl_result->negotiatedBurstNum = legacy_result.negotiated_burst_num;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002816 if (legacy_result.LCI && !convertLegacyIeToHidl(*legacy_result.LCI, &hidl_result->lci)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002817 return false;
2818 }
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002819 if (legacy_result.LCR && !convertLegacyIeToHidl(*legacy_result.LCR, &hidl_result->lcr)) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002820 return false;
2821 }
2822 return true;
Roshan Pius3fae9c82016-12-02 14:49:41 -08002823}
Roshan Piuse3f72ff2016-12-05 16:18:43 -08002824
2825bool convertLegacyVectorOfRttResultToHidl(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002826 const std::vector<const legacy_hal::wifi_rtt_result*>& legacy_results,
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002827 std::vector<V1_6::RttResult>* hidl_results) {
Roshan Piusabcf78f2017-10-06 16:30:38 -07002828 if (!hidl_results) {
2829 return false;
Roshan Piuse3f72ff2016-12-05 16:18:43 -08002830 }
Roshan Piusabcf78f2017-10-06 16:30:38 -07002831 *hidl_results = {};
2832 for (const auto legacy_result : legacy_results) {
Ahmed ElArabawy05571e42022-01-19 11:54:11 -08002833 V1_6::RttResult hidl_result;
Roshan Piusabcf78f2017-10-06 16:30:38 -07002834 if (!convertLegacyRttResultToHidl(*legacy_result, &hidl_result)) {
2835 return false;
2836 }
2837 hidl_results->push_back(hidl_result);
2838 }
2839 return true;
Roshan Piuse3f72ff2016-12-05 16:18:43 -08002840}
Sunil Raviddab4bb2020-02-03 22:45:19 -08002841
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002842legacy_hal::wifi_interface_type convertHidlIfaceTypeToLegacy(IfaceType hidl_interface_type) {
Sunil Raviddab4bb2020-02-03 22:45:19 -08002843 switch (hidl_interface_type) {
2844 case IfaceType::STA:
2845 return legacy_hal::WIFI_INTERFACE_TYPE_STA;
2846 case IfaceType::AP:
2847 return legacy_hal::WIFI_INTERFACE_TYPE_AP;
2848 case IfaceType::P2P:
2849 return legacy_hal::WIFI_INTERFACE_TYPE_P2P;
2850 case IfaceType::NAN:
2851 return legacy_hal::WIFI_INTERFACE_TYPE_NAN;
2852 }
2853 CHECK(false);
2854}
Roshan Piuse9d1e7d2020-11-04 11:44:16 -08002855
2856legacy_hal::wifi_multi_sta_use_case convertHidlMultiStaUseCaseToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002857 V1_5::IWifiChip::MultiStaUseCase use_case) {
Roshan Piuse9d1e7d2020-11-04 11:44:16 -08002858 switch (use_case) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002859 case V1_5::IWifiChip::MultiStaUseCase::DUAL_STA_TRANSIENT_PREFER_PRIMARY:
Roshan Piuse9d1e7d2020-11-04 11:44:16 -08002860 return legacy_hal::WIFI_DUAL_STA_TRANSIENT_PREFER_PRIMARY;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002861 case V1_5::IWifiChip::MultiStaUseCase::DUAL_STA_NON_TRANSIENT_UNBIASED:
Roshan Piuse9d1e7d2020-11-04 11:44:16 -08002862 return legacy_hal::WIFI_DUAL_STA_NON_TRANSIENT_UNBIASED;
2863 }
2864 CHECK(false);
2865}
Quang Luong94bcce52020-11-25 17:52:19 -08002866
2867bool convertHidlCoexUnsafeChannelToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002868 const V1_5::IWifiChip::CoexUnsafeChannel& hidl_unsafe_channel,
2869 legacy_hal::wifi_coex_unsafe_channel* legacy_unsafe_channel) {
Quang Luong94bcce52020-11-25 17:52:19 -08002870 if (!legacy_unsafe_channel) {
2871 return false;
2872 }
2873 *legacy_unsafe_channel = {};
2874 switch (hidl_unsafe_channel.band) {
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002875 case V1_5::WifiBand::BAND_24GHZ:
Quang Luong94bcce52020-11-25 17:52:19 -08002876 legacy_unsafe_channel->band = legacy_hal::WLAN_MAC_2_4_BAND;
2877 break;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002878 case V1_5::WifiBand::BAND_5GHZ:
Quang Luong94bcce52020-11-25 17:52:19 -08002879 legacy_unsafe_channel->band = legacy_hal::WLAN_MAC_5_0_BAND;
2880 break;
2881 default:
2882 return false;
2883 };
2884 legacy_unsafe_channel->channel = hidl_unsafe_channel.channel;
2885 legacy_unsafe_channel->power_cap_dbm = hidl_unsafe_channel.powerCapDbm;
2886 return true;
2887}
2888
2889bool convertHidlVectorOfCoexUnsafeChannelToLegacy(
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002890 const std::vector<V1_5::IWifiChip::CoexUnsafeChannel>& hidl_unsafe_channels,
2891 std::vector<legacy_hal::wifi_coex_unsafe_channel>* legacy_unsafe_channels) {
Quang Luong94bcce52020-11-25 17:52:19 -08002892 if (!legacy_unsafe_channels) {
2893 return false;
2894 }
2895 *legacy_unsafe_channels = {};
2896 for (const auto& hidl_unsafe_channel : hidl_unsafe_channels) {
2897 legacy_hal::wifi_coex_unsafe_channel legacy_unsafe_channel;
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002898 if (!hidl_struct_util::convertHidlCoexUnsafeChannelToLegacy(hidl_unsafe_channel,
2899 &legacy_unsafe_channel)) {
Quang Luong94bcce52020-11-25 17:52:19 -08002900 return false;
2901 }
2902 legacy_unsafe_channels->push_back(legacy_unsafe_channel);
2903 }
2904 return true;
2905}
2906
Roshan Piuse65edb12016-11-22 13:02:01 -08002907} // namespace hidl_struct_util
2908} // namespace implementation
Ahmed ElArabawy687ce132022-01-11 16:42:48 -08002909} // namespace V1_6
Roshan Piuse65edb12016-11-22 13:02:01 -08002910} // namespace wifi
2911} // namespace hardware
2912} // namespace android