blob: 234f526afde1398a6bc4cce5b949c0bd11a7f107 [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 {
25namespace V1_0 {
26namespace implementation {
27namespace hidl_struct_util {
28
29uint8_t ConvertHidlReportEventFlagToLegacy(
30 StaBackgroundScanBucketEventReportSchemeMask hidl_flag) {
31 using HidlFlag = StaBackgroundScanBucketEventReportSchemeMask;
32 switch (hidl_flag) {
33 case HidlFlag::EACH_SCAN:
34 return REPORT_EVENTS_EACH_SCAN;
35 case HidlFlag::FULL_RESULTS:
36 return REPORT_EVENTS_FULL_RESULTS;
37 case HidlFlag::NO_BATCH:
38 return REPORT_EVENTS_NO_BATCH;
39 };
40}
41
42bool convertHidlScanParamsToLegacy(
43 const StaBackgroundScanParameters& hidl_scan_params,
44 legacy_hal::wifi_scan_cmd_params* legacy_scan_params) {
45 if (!legacy_scan_params) {
46 return false;
47 }
48 legacy_scan_params->base_period = hidl_scan_params.basePeriodInMs;
49 legacy_scan_params->max_ap_per_scan = hidl_scan_params.maxApPerScan;
50 legacy_scan_params->report_threshold_percent =
51 hidl_scan_params.reportThresholdPercent;
52 legacy_scan_params->report_threshold_num_scans =
53 hidl_scan_params.reportThresholdNumScans;
54 // TODO(b/33194311): Expose these max limits in the HIDL interface.
55 if (hidl_scan_params.buckets.size() > MAX_BUCKETS) {
56 return false;
57 }
58 legacy_scan_params->num_buckets = hidl_scan_params.buckets.size();
59 for (uint32_t bucket_idx = 0; bucket_idx < hidl_scan_params.buckets.size();
60 bucket_idx++) {
61 const StaBackgroundScanBucketParameters& hidl_bucket_spec =
62 hidl_scan_params.buckets[bucket_idx];
63 legacy_hal::wifi_scan_bucket_spec& legacy_bucket_spec =
64 legacy_scan_params->buckets[bucket_idx];
65 legacy_bucket_spec.bucket = bucket_idx;
66 legacy_bucket_spec.band =
67 static_cast<legacy_hal::wifi_band>(hidl_bucket_spec.band);
68 legacy_bucket_spec.period = hidl_bucket_spec.periodInMs;
69 legacy_bucket_spec.max_period = hidl_bucket_spec.exponentialMaxPeriodInMs;
70 legacy_bucket_spec.base = hidl_bucket_spec.exponentialBase;
71 legacy_bucket_spec.step_count = hidl_bucket_spec.exponentialStepCount;
72 legacy_bucket_spec.report_events = 0;
73 using HidlFlag = StaBackgroundScanBucketEventReportSchemeMask;
74 for (const auto flag :
75 {HidlFlag::EACH_SCAN, HidlFlag::FULL_RESULTS, HidlFlag::NO_BATCH}) {
76 if (hidl_bucket_spec.eventReportScheme &
77 static_cast<std::underlying_type<HidlFlag>::type>(flag)) {
78 legacy_bucket_spec.report_events |=
79 ConvertHidlReportEventFlagToLegacy(flag);
80 }
81 }
82 // TODO(b/33194311): Expose these max limits in the HIDL interface.
83 if (hidl_bucket_spec.frequencies.size() > MAX_CHANNELS) {
84 return false;
85 }
86 legacy_bucket_spec.num_channels = hidl_bucket_spec.frequencies.size();
87 for (uint32_t freq_idx = 0; freq_idx < hidl_bucket_spec.frequencies.size();
88 freq_idx++) {
89 legacy_bucket_spec.channels[freq_idx].channel =
90 hidl_bucket_spec.frequencies[freq_idx];
91 }
92 }
93 return true;
94}
95
96bool convertLegacyIeBlobToHidl(const uint8_t* ie_blob,
97 uint32_t ie_blob_len,
98 std::vector<WifiInformationElement>* hidl_ies) {
99 if (!ie_blob || !hidl_ies) {
100 return false;
101 }
102 const uint8_t* ies_begin = ie_blob;
103 const uint8_t* ies_end = ie_blob + ie_blob_len;
104 const uint8_t* next_ie = ies_begin;
105 using wifi_ie = legacy_hal::wifi_information_element;
106 constexpr size_t kIeHeaderLen = sizeof(wifi_ie);
107 // Each IE should atleast have the header (i.e |id| & |len| fields).
108 while (next_ie + kIeHeaderLen <= ies_end) {
109 const wifi_ie& legacy_ie = (*reinterpret_cast<const wifi_ie*>(next_ie));
110 uint32_t curr_ie_len = kIeHeaderLen + legacy_ie.len;
111 if (next_ie + curr_ie_len > ies_end) {
112 return false;
113 }
114 WifiInformationElement hidl_ie;
115 hidl_ie.id = legacy_ie.id;
116 hidl_ie.data =
117 std::vector<uint8_t>(legacy_ie.data, legacy_ie.data + legacy_ie.len);
118 hidl_ies->push_back(std::move(hidl_ie));
119 next_ie += curr_ie_len;
120 }
121 // Ensure that the blob has been fully consumed.
122 return (next_ie == ies_end);
123}
124
125bool convertLegacyScanResultToHidl(
126 const legacy_hal::wifi_scan_result& legacy_scan_result,
127 bool has_ie_data,
128 StaScanResult* hidl_scan_result) {
129 if (!hidl_scan_result) {
130 return false;
131 }
132 hidl_scan_result->timeStampInUs = legacy_scan_result.ts;
133 hidl_scan_result->ssid = std::vector<uint8_t>(
134 legacy_scan_result.ssid,
135 legacy_scan_result.ssid + sizeof(legacy_scan_result.ssid));
136 memcpy(hidl_scan_result->bssid.data(),
137 legacy_scan_result.bssid,
138 hidl_scan_result->bssid.size());
139 hidl_scan_result->frequency = legacy_scan_result.channel;
140 hidl_scan_result->rssi = legacy_scan_result.rssi;
141 hidl_scan_result->beaconPeriodInMs = legacy_scan_result.beacon_period;
142 hidl_scan_result->capability = legacy_scan_result.capability;
143 if (has_ie_data) {
144 std::vector<WifiInformationElement> ies;
145 if (!convertLegacyIeBlobToHidl(
146 reinterpret_cast<const uint8_t*>(legacy_scan_result.ie_data),
147 legacy_scan_result.ie_length,
148 &ies)) {
149 return false;
150 }
151 hidl_scan_result->informationElements = std::move(ies);
152 }
153 return true;
154}
155
156bool convertLegacyCachedScanResultsToHidl(
157 const legacy_hal::wifi_cached_scan_results& legacy_cached_scan_result,
158 StaScanData* hidl_scan_data) {
159 if (!hidl_scan_data) {
160 return false;
161 }
162 hidl_scan_data->flags = legacy_cached_scan_result.flags;
163 hidl_scan_data->bucketsScanned = legacy_cached_scan_result.buckets_scanned;
164
165 CHECK(legacy_cached_scan_result.num_results >= 0 &&
166 legacy_cached_scan_result.num_results <= MAX_AP_CACHE_PER_SCAN);
167 std::vector<StaScanResult> hidl_scan_results;
168 for (int32_t result_idx = 0;
169 result_idx < legacy_cached_scan_result.num_results;
170 result_idx++) {
171 StaScanResult hidl_scan_result;
172 if (!convertLegacyScanResultToHidl(
173 legacy_cached_scan_result.results[result_idx],
174 false,
175 &hidl_scan_result)) {
176 return false;
177 }
178 hidl_scan_results.push_back(hidl_scan_result);
179 }
180 hidl_scan_data->results = std::move(hidl_scan_results);
181 return true;
182}
183
184bool convertLegacyVectorOfCachedScanResultsToHidl(
185 const std::vector<legacy_hal::wifi_cached_scan_results>&
186 legacy_cached_scan_results,
187 std::vector<StaScanData>* hidl_scan_datas) {
188 if (!hidl_scan_datas) {
189 return false;
190 }
191 for (const auto& legacy_cached_scan_result : legacy_cached_scan_results) {
192 StaScanData hidl_scan_data;
193 if (!convertLegacyCachedScanResultsToHidl(legacy_cached_scan_result,
194 &hidl_scan_data)) {
195 return false;
196 }
197 hidl_scan_datas->push_back(hidl_scan_data);
198 }
199 return true;
200}
201
202bool convertLegacyLinkLayerStatsToHidl(
203 const legacy_hal::LinkLayerStats& legacy_stats,
204 StaLinkLayerStats* hidl_stats) {
205 if (!hidl_stats) {
206 return false;
207 }
208 // iface legacy_stats conversion.
209 hidl_stats->iface.beaconRx = legacy_stats.iface.beacon_rx;
210 hidl_stats->iface.avgRssiMgmt = legacy_stats.iface.rssi_mgmt;
211 hidl_stats->iface.wmeBePktStats.rxMpdu =
212 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].rx_mpdu;
213 hidl_stats->iface.wmeBePktStats.txMpdu =
214 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].tx_mpdu;
215 hidl_stats->iface.wmeBePktStats.lostMpdu =
216 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].mpdu_lost;
217 hidl_stats->iface.wmeBePktStats.retries =
218 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BE].retries;
219 hidl_stats->iface.wmeBkPktStats.rxMpdu =
220 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].rx_mpdu;
221 hidl_stats->iface.wmeBkPktStats.txMpdu =
222 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].tx_mpdu;
223 hidl_stats->iface.wmeBkPktStats.lostMpdu =
224 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].mpdu_lost;
225 hidl_stats->iface.wmeBkPktStats.retries =
226 legacy_stats.iface.ac[legacy_hal::WIFI_AC_BK].retries;
227 hidl_stats->iface.wmeViPktStats.rxMpdu =
228 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].rx_mpdu;
229 hidl_stats->iface.wmeViPktStats.txMpdu =
230 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].tx_mpdu;
231 hidl_stats->iface.wmeViPktStats.lostMpdu =
232 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].mpdu_lost;
233 hidl_stats->iface.wmeViPktStats.retries =
234 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VI].retries;
235 hidl_stats->iface.wmeVoPktStats.rxMpdu =
236 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].rx_mpdu;
237 hidl_stats->iface.wmeVoPktStats.txMpdu =
238 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].tx_mpdu;
239 hidl_stats->iface.wmeVoPktStats.lostMpdu =
240 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].mpdu_lost;
241 hidl_stats->iface.wmeVoPktStats.retries =
242 legacy_stats.iface.ac[legacy_hal::WIFI_AC_VO].retries;
243 // radio legacy_stats conversion.
244 hidl_stats->radio.onTimeInMs = legacy_stats.radio.on_time;
245 hidl_stats->radio.txTimeInMs = legacy_stats.radio.tx_time;
246 hidl_stats->radio.rxTimeInMs = legacy_stats.radio.rx_time;
247 hidl_stats->radio.onTimeInMsForScan = legacy_stats.radio.on_time_scan;
248 hidl_stats->radio.txTimeInMsPerLevel = legacy_stats.radio_tx_time_per_levels;
249 // Timestamp in the HAL wrapper here since it's not provided in the legacy
250 // HAL API.
251 hidl_stats->timeStampInMs = uptimeMillis();
252 return true;
253}
Roshan Piusf5f51fd2016-12-01 13:54:24 -0800254
255legacy_hal::NanPublishType convertHidlNanPublishTypeToLegacy(
256 NanPublishType type) {
257 switch (type) {
258 case NanPublishType::UNSOLICITED:
259 return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED;
260 case NanPublishType::SOLICITED:
261 return legacy_hal::NAN_PUBLISH_TYPE_SOLICITED;
262 case NanPublishType::UNSOLICITED_SOLICITED:
263 return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED;
264 };
265}
266
267legacy_hal::NanTxType convertHidlNanTxTypeToLegacy(NanTxType type) {
268 switch (type) {
269 case NanTxType::BROADCAST:
270 return legacy_hal::NAN_TX_TYPE_BROADCAST;
271 case NanTxType::UNICAST:
272 return legacy_hal::NAN_TX_TYPE_UNICAST;
273 };
274}
275
276legacy_hal::NanMatchAlg convertHidlNanMatchAlgToLegacy(NanMatchAlg type) {
277 switch (type) {
278 case NanMatchAlg::MATCH_ONCE:
279 return legacy_hal::NAN_MATCH_ALG_MATCH_ONCE;
280 case NanMatchAlg::MATCH_CONTINUOUS:
281 return legacy_hal::NAN_MATCH_ALG_MATCH_CONTINUOUS;
282 case NanMatchAlg::MATCH_NEVER:
283 return legacy_hal::NAN_MATCH_ALG_MATCH_NEVER;
284 };
285}
286
287legacy_hal::NanSubscribeType convertHidlNanSubscribeTypeToLegacy(
288 NanSubscribeType type) {
289 switch (type) {
290 case NanSubscribeType::ACTIVE:
291 return legacy_hal::NAN_SUBSCRIBE_TYPE_ACTIVE;
292 case NanSubscribeType::PASSIVE:
293 return legacy_hal::NAN_SUBSCRIBE_TYPE_PASSIVE;
294 };
295}
296
297legacy_hal::NanSRFType convertHidlNanSrfTypeToLegacy(NanSrfType type) {
298 switch (type) {
299 case NanSrfType::BLOOM_FILTER:
300 return legacy_hal::NAN_SRF_ATTR_BLOOM_FILTER;
301 case NanSrfType::PARTIAL_MAC_ADDR:
302 return legacy_hal::NAN_SRF_ATTR_PARTIAL_MAC_ADDR;
303 };
304}
305
306legacy_hal::NanSRFIncludeType convertHidlNanSrfIncludeTypeToLegacy(
307 NanSrfIncludeType type) {
308 switch (type) {
309 case NanSrfIncludeType::DO_NOT_RESPOND:
310 return legacy_hal::NAN_SRF_INCLUDE_DO_NOT_RESPOND;
311 case NanSrfIncludeType::RESPOND:
312 return legacy_hal::NAN_SRF_INCLUDE_RESPOND;
313 };
314}
315
316NanStatusType convertLegacyNanStatusTypeToHidl(
317 legacy_hal::NanStatusType /* type */) {
318 // TODO: The |NanStatusType| has changed in legacy HAL and no longer in sync
319 // with the HIDL interface.
320 return NanStatusType::SUCCESS;
321}
322
323NanResponseType convertLegacyNanResponseTypeToHidl(
324 legacy_hal::NanResponseType type) {
325 switch (type) {
326 case legacy_hal::NAN_RESPONSE_ENABLED:
327 return NanResponseType::ENABLED;
328 case legacy_hal::NAN_RESPONSE_DISABLED:
329 return NanResponseType::DISABLED;
330 case legacy_hal::NAN_RESPONSE_PUBLISH:
331 return NanResponseType::PUBLISH;
332 case legacy_hal::NAN_RESPONSE_PUBLISH_CANCEL:
333 return NanResponseType::PUBLISH_CANCEL;
334 case legacy_hal::NAN_RESPONSE_TRANSMIT_FOLLOWUP:
335 return NanResponseType::TRANSMIT_FOLLOWUP;
336 case legacy_hal::NAN_RESPONSE_SUBSCRIBE:
337 return NanResponseType::SUBSCRIBE;
338 case legacy_hal::NAN_RESPONSE_SUBSCRIBE_CANCEL:
339 return NanResponseType::SUBSCRIBE_CANCEL;
340 case legacy_hal::NAN_RESPONSE_STATS:
341 // Not present in HIDL. Is going to be deprecated in legacy HAL as well.
342 CHECK(0);
343 case legacy_hal::NAN_RESPONSE_CONFIG:
344 return NanResponseType::CONFIG;
345 case legacy_hal::NAN_RESPONSE_TCA:
346 // Not present in HIDL. Is going to be deprecated in legacy HAL as well.
347 CHECK(0);
348 case legacy_hal::NAN_RESPONSE_ERROR:
349 return NanResponseType::ERROR;
350 case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD:
351 return NanResponseType::BEACON_SDF_PAYLOAD;
352 case legacy_hal::NAN_GET_CAPABILITIES:
353 return NanResponseType::GET_CAPABILITIES;
354 case legacy_hal::NAN_DP_INTERFACE_CREATE:
355 return NanResponseType::DP_INTERFACE_CREATE;
356 case legacy_hal::NAN_DP_INTERFACE_DELETE:
357 return NanResponseType::DP_INTERFACE_DELETE;
358 case legacy_hal::NAN_DP_INITIATOR_RESPONSE:
359 return NanResponseType::DP_INITIATOR_RESPONSE;
360 case legacy_hal::NAN_DP_RESPONDER_RESPONSE:
361 return NanResponseType::DP_RESPONDER_RESPONSE;
362 case legacy_hal::NAN_DP_END:
363 return NanResponseType::DP_END;
364 };
365}
366
367bool convertHidlNanEnableRequestToLegacy(
368 const NanEnableRequest& hidl_request,
369 legacy_hal::NanEnableRequest* legacy_request) {
370 if (!legacy_request) {
371 return false;
372 }
373 legacy_request->master_pref = hidl_request.masterPref;
374 legacy_request->cluster_low = hidl_request.clusterLow;
375 legacy_request->cluster_high = hidl_request.clusterHigh;
376 legacy_request->config_support_5g = hidl_request.validSupport5gVal;
377 legacy_request->support_5g_val = hidl_request.support5gVal;
378 legacy_request->config_sid_beacon = hidl_request.validSidBeaconVal;
379 legacy_request->sid_beacon_val = hidl_request.sidBeaconVal;
380 legacy_request->config_2dot4g_rssi_close =
381 hidl_request.valid2dot4gRssiCloseVal;
382 legacy_request->rssi_close_2dot4g_val = hidl_request.rssiClose2dot4gVal;
383 legacy_request->config_2dot4g_rssi_middle =
384 hidl_request.valid2dot4gRssiMiddleVal;
385 legacy_request->rssi_middle_2dot4g_val = hidl_request.rssiMiddle2dot4gVal;
386 legacy_request->config_2dot4g_rssi_proximity =
387 hidl_request.valid2dot4gRssiProximityVal;
388 legacy_request->rssi_proximity_2dot4g_val =
389 hidl_request.rssiProximity2dot4gVal;
390 legacy_request->config_hop_count_limit = hidl_request.validHopCountLimitVal;
391 legacy_request->hop_count_limit_val = hidl_request.hopCountLimitVal;
392 legacy_request->config_2dot4g_support = hidl_request.valid2dot4gSupportVal;
393 legacy_request->support_2dot4g_val = hidl_request.support2dot4gVal;
394 legacy_request->config_2dot4g_beacons = hidl_request.valid2dot4gBeaconsVal;
395 legacy_request->beacon_2dot4g_val = hidl_request.beacon2dot4gVal;
396 legacy_request->config_2dot4g_sdf = hidl_request.valid2dot4gSdfVal;
397 legacy_request->sdf_2dot4g_val = hidl_request.sdf2dot4gVal;
398 legacy_request->config_5g_beacons = hidl_request.valid5gBeaconsVal;
399 legacy_request->beacon_5g_val = hidl_request.beacon5gVal;
400 legacy_request->config_5g_sdf = hidl_request.valid5gSdfVal;
401 legacy_request->sdf_5g_val = hidl_request.sdf5gVal;
402 legacy_request->config_5g_rssi_close = hidl_request.valid5gRssiCloseVal;
403 legacy_request->rssi_close_5g_val = hidl_request.rssiClose5gVal;
404 legacy_request->config_5g_rssi_middle = hidl_request.valid5gRssiMiddleVal;
405 legacy_request->rssi_middle_5g_val = hidl_request.rssiMiddle5gVal;
406 legacy_request->config_5g_rssi_close_proximity =
407 hidl_request.valid5gRssiCloseProximityVal;
408 legacy_request->rssi_close_proximity_5g_val =
409 hidl_request.rssiCloseProximity5gVal;
410 legacy_request->config_rssi_window_size = hidl_request.validRssiWindowSizeVal;
411 legacy_request->rssi_window_size_val = hidl_request.rssiWindowSizeVal;
412 legacy_request->config_oui = hidl_request.validOuiVal;
413 legacy_request->oui_val = hidl_request.ouiVal;
414 legacy_request->config_intf_addr = hidl_request.validIntfAddrVal;
415 CHECK(hidl_request.intfAddrVal.size() ==
416 sizeof(legacy_request->intf_addr_val));
417 memcpy(legacy_request->intf_addr_val,
418 hidl_request.intfAddrVal.data(),
419 hidl_request.intfAddrVal.size());
420 legacy_request->config_cluster_attribute_val =
421 hidl_request.configClusterAttributeVal;
422 legacy_request->config_scan_params = hidl_request.validScanParamsVal;
423 if (hidl_request.scanParamsVal.dwellTime.size() >
424 sizeof(legacy_request->scan_params_val.dwell_time)) {
425 return false;
426 }
427 memcpy(legacy_request->scan_params_val.dwell_time,
428 hidl_request.scanParamsVal.dwellTime.data(),
429 hidl_request.scanParamsVal.dwellTime.size());
430 if (hidl_request.scanParamsVal.scanPeriod.size() >
431 sizeof(legacy_request->scan_params_val.scan_period)) {
432 return false;
433 }
434 memcpy(legacy_request->scan_params_val.scan_period,
435 hidl_request.scanParamsVal.scanPeriod.data(),
436 hidl_request.scanParamsVal.scanPeriod.size());
437 legacy_request->config_random_factor_force =
438 hidl_request.validRandomFactorForceVal;
439 legacy_request->random_factor_force_val = hidl_request.randomFactorForceVal;
440 legacy_request->config_hop_count_force = hidl_request.validHopCountLimitVal;
441 legacy_request->hop_count_force_val = hidl_request.hopCountLimitVal;
442 legacy_request->config_24g_channel = hidl_request.valid24gChannelVal;
443 legacy_request->channel_24g_val = hidl_request.channel24gVal;
444 legacy_request->config_5g_channel = hidl_request.valid5gChannelVal;
445 legacy_request->channel_5g_val = hidl_request.channel5gVal;
446 return true;
447}
448
449bool convertHidlNanPublishRequestToLegacy(
450 const NanPublishRequest& hidl_request,
451 legacy_hal::NanPublishRequest* legacy_request) {
452 if (!legacy_request) {
453 return false;
454 }
455 legacy_request->publish_id = hidl_request.publishId;
456 legacy_request->ttl = hidl_request.ttl;
457 legacy_request->period = hidl_request.period;
458 legacy_request->publish_type =
459 convertHidlNanPublishTypeToLegacy(hidl_request.publishType);
460 legacy_request->tx_type = convertHidlNanTxTypeToLegacy(hidl_request.txType);
461 legacy_request->publish_count = hidl_request.publishCount;
462 if (hidl_request.serviceName.size() > sizeof(legacy_request->service_name)) {
463 return false;
464 }
465 legacy_request->service_name_len = hidl_request.serviceName.size();
466 memcpy(legacy_request->service_name,
467 hidl_request.serviceName.c_str(),
468 hidl_request.serviceName.size());
469 legacy_request->publish_match_indicator =
470 convertHidlNanMatchAlgToLegacy(hidl_request.publishMatchIndicator);
471 if (hidl_request.serviceSpecificInfo.size() >
472 sizeof(legacy_request->service_specific_info)) {
473 return false;
474 }
475 legacy_request->service_specific_info_len =
476 hidl_request.serviceSpecificInfo.size();
477 memcpy(legacy_request->service_specific_info,
478 hidl_request.serviceSpecificInfo.data(),
479 hidl_request.serviceSpecificInfo.size());
480 if (hidl_request.rxMatchFilter.size() >
481 sizeof(legacy_request->rx_match_filter)) {
482 return false;
483 }
484 legacy_request->rx_match_filter_len = hidl_request.rxMatchFilter.size();
485 memcpy(legacy_request->rx_match_filter,
486 hidl_request.rxMatchFilter.data(),
487 hidl_request.rxMatchFilter.size());
488 if (hidl_request.txMatchFilter.size() >
489 sizeof(legacy_request->tx_match_filter)) {
490 return false;
491 }
492 legacy_request->tx_match_filter_len = hidl_request.txMatchFilter.size();
493 memcpy(legacy_request->tx_match_filter,
494 hidl_request.txMatchFilter.data(),
495 hidl_request.txMatchFilter.size());
496 legacy_request->rssi_threshold_flag = hidl_request.useRssiThreshold;
497 legacy_request->connmap = hidl_request.connmap;
498 legacy_request->recv_indication_cfg = hidl_request.recvIndicationCfg;
499 return true;
500}
501
502bool convertHidlNanPublishCancelRequestToLegacy(
503 const NanPublishCancelRequest& hidl_request,
504 legacy_hal::NanPublishCancelRequest* legacy_request) {
505 legacy_request->publish_id = hidl_request.publishId;
506 return true;
507}
508
509bool convertHidlNanSubscribeRequestToLegacy(
510 const NanSubscribeRequest& hidl_request,
511 legacy_hal::NanSubscribeRequest* legacy_request) {
512 if (!legacy_request) {
513 return false;
514 }
515 legacy_request->subscribe_id = hidl_request.subscribeId;
516 legacy_request->ttl = hidl_request.ttl;
517 legacy_request->period = hidl_request.period;
518 legacy_request->subscribe_type =
519 convertHidlNanSubscribeTypeToLegacy(hidl_request.subscribeType);
520 legacy_request->serviceResponseFilter =
521 convertHidlNanSrfTypeToLegacy(hidl_request.serviceResponseFilter);
522 legacy_request->serviceResponseInclude =
523 convertHidlNanSrfIncludeTypeToLegacy(hidl_request.serviceResponseInclude);
524 legacy_request->useServiceResponseFilter =
525 hidl_request.shouldUseServiceResponseFilter
526 ? legacy_hal::NAN_USE_SRF
527 : legacy_hal::NAN_DO_NOT_USE_SRF;
528 legacy_request->ssiRequiredForMatchIndication =
529 hidl_request.isSsiRequiredForMatchIndication
530 ? legacy_hal::NAN_SSI_REQUIRED_IN_MATCH_IND
531 : legacy_hal::NAN_SSI_NOT_REQUIRED_IN_MATCH_IND;
532 legacy_request->subscribe_match_indicator =
533 convertHidlNanMatchAlgToLegacy(hidl_request.subscribeMatchIndicator);
534 legacy_request->subscribe_count = hidl_request.subscribeCount;
535 if (hidl_request.serviceName.size() > sizeof(legacy_request->service_name)) {
536 return false;
537 }
538 legacy_request->service_name_len = hidl_request.serviceName.size();
539 memcpy(legacy_request->service_name,
540 hidl_request.serviceName.c_str(),
541 hidl_request.serviceName.size());
542 if (hidl_request.serviceSpecificInfo.size() >
543 sizeof(legacy_request->service_specific_info)) {
544 return false;
545 }
546 legacy_request->service_specific_info_len =
547 hidl_request.serviceSpecificInfo.size();
548 memcpy(legacy_request->service_specific_info,
549 hidl_request.serviceSpecificInfo.data(),
550 hidl_request.serviceSpecificInfo.size());
551 if (hidl_request.rxMatchFilter.size() >
552 sizeof(legacy_request->rx_match_filter)) {
553 return false;
554 }
555 legacy_request->rx_match_filter_len = hidl_request.rxMatchFilter.size();
556 memcpy(legacy_request->rx_match_filter,
557 hidl_request.rxMatchFilter.data(),
558 hidl_request.rxMatchFilter.size());
559 if (hidl_request.txMatchFilter.size() >
560 sizeof(legacy_request->tx_match_filter)) {
561 return false;
562 }
563 legacy_request->tx_match_filter_len = hidl_request.txMatchFilter.size();
564 memcpy(legacy_request->tx_match_filter,
565 hidl_request.txMatchFilter.data(),
566 hidl_request.txMatchFilter.size());
567 legacy_request->rssi_threshold_flag = hidl_request.useRssiThreshold;
568 legacy_request->connmap = hidl_request.connmap;
569 if (hidl_request.intfAddr.size() > NAN_MAX_SUBSCRIBE_MAX_ADDRESS) {
570 return false;
571 }
572 legacy_request->num_intf_addr_present = hidl_request.intfAddr.size();
573 for (uint32_t i = 0; i < hidl_request.intfAddr.size(); i++) {
574 CHECK(hidl_request.intfAddr[i].size() ==
575 sizeof(legacy_request->intf_addr[i]));
576 memcpy(legacy_request->intf_addr[i],
577 hidl_request.intfAddr[i].data(),
578 hidl_request.intfAddr[i].size());
579 }
580 legacy_request->recv_indication_cfg = hidl_request.recvIndicationCfg;
581 return true;
582}
583
584bool convertHidlNanSubscribeCancelRequestToLegacy(
585 const NanSubscribeCancelRequest& /* hidl_request */,
586 legacy_hal::NanSubscribeCancelRequest* /* legacy_request */) {
587 return false;
588}
589
590bool convertHidlNanTransmitFollowupRequestToLegacy(
591 const NanTransmitFollowupRequest& /* hidl_request */,
592 legacy_hal::NanTransmitFollowupRequest* /* legacy_request */) {
593 return false;
594}
595
596bool convertHidlNanConfigRequestToLegacy(
597 const NanConfigRequest& /* hidl_request */,
598 legacy_hal::NanConfigRequest* /* legacy_request */) {
599 return false;
600}
601
602bool convertHidlNanBeaconSdfPayloadRequestToLegacy(
603 const NanBeaconSdfPayloadRequest& /* hidl_request */,
604 legacy_hal::NanBeaconSdfPayloadRequest* /* legacy_request */) {
605 return false;
606}
607
608bool convertHidlNanDataPathInitiatorRequestToLegacy(
609 const NanDataPathInitiatorRequest& /* hidl_request */,
610 legacy_hal::NanDataPathInitiatorRequest* /* legacy_request */) {
611 return false;
612}
613
614bool convertHidlNanDataPathIndicationResponseToLegacy(
615 const NanDataPathIndicationResponse& /* hidl_response */,
616 legacy_hal::NanDataPathIndicationResponse* /* legacy_response */) {
617 return false;
618}
619
620bool convertHidlNanDataPathEndRequestToLegacy(
621 const NanDataPathEndRequest& /* hidl_request */,
622 legacy_hal::NanDataPathEndRequest* /* legacy_request */) {
623 return false;
624}
625
626bool convertLegacyNanResponseHeaderToHidl(
627 const legacy_hal::NanResponseMsg& legacy_response,
628 NanResponseMsgHeader* hidl_response) {
629 if (!hidl_response) {
630 return false;
631 }
632 hidl_response->status =
633 convertLegacyNanStatusTypeToHidl(legacy_response.status);
634 hidl_response->value = legacy_response.value;
635 hidl_response->responseType =
636 convertLegacyNanResponseTypeToHidl(legacy_response.response_type);
637 return true;
638}
639
640bool convertLegacyNanPublishResponseToHidl(
641 const legacy_hal::NanPublishResponse& /* legacy_response */,
642 NanPublishResponse* /* hidl_response */) {
643 return false;
644}
645
646bool convertLegacyNanSubscribeResponseToHidl(
647 const legacy_hal::NanSubscribeResponse& /* legacy_response */,
648 NanSubscribeResponse* /* hidl_response */) {
649 return false;
650}
651
652bool convertLegacyNanDataPathResponseToHidl(
653 const legacy_hal::NanDataPathRequestResponse& /* legacy_response */,
654 NanDataPathResponse* /* hidl_response */) {
655 return false;
656}
657
658bool convertLegacyNanCapabilitiesResponseToHidl(
659 const legacy_hal::NanCapabilities& /* legacy_response */,
660 NanCapabilitiesResponse* /* hidl_response */) {
661 return false;
662}
663
664bool convertLegacyNanPublishTerminatedIndToHidl(
665 const legacy_hal::NanPublishTerminatedInd& /* legacy_ind */,
666 NanPublishTerminatedInd* /* hidl_ind */) {
667 return false;
668}
669
670bool convertLegacyNanMatchIndToHidl(
671 const legacy_hal::NanMatchInd& /* legacy_ind */,
672 NanMatchInd* /* hidl_ind */) {
673 return false;
674}
675
676bool convertLegacyNanMatchExpiredIndToHidl(
677 const legacy_hal::NanMatchExpiredInd& /* legacy_ind */,
678 NanMatchExpiredInd* /* hidl_ind */) {
679 return false;
680}
681
682bool convertLegacyNanSubscribeTerminatedIndToHidl(
683 const legacy_hal::NanSubscribeTerminatedInd& /* legacy_ind */,
684 NanSubscribeTerminatedInd* /* hidl_ind */) {
685 return false;
686}
687
688bool convertLegacyNanFollowupIndToHidl(
689 const legacy_hal::NanFollowupInd& /* legacy_ind */,
690 NanFollowupInd* /* hidl_ind */) {
691 return false;
692}
693
694bool convertLegacyNanDiscEngEventIndToHidl(
695 const legacy_hal::NanDiscEngEventInd& /* legacy_ind */,
696 NanDiscEngEventInd* /* hidl_ind */) {
697 return false;
698}
699
700bool convertLegacyNanDisabledIndToHidl(
701 const legacy_hal::NanDisabledInd& /* legacy_ind */,
702 NanDisabledInd* /* hidl_ind */) {
703 return false;
704}
705
706bool convertLegacyNanBeaconSdfPayloadIndToHidl(
707 const legacy_hal::NanBeaconSdfPayloadInd& /* legacy_ind */,
708 NanBeaconSdfPayloadInd* /* hidl_ind */) {
709 return false;
710}
711
712bool convertLegacyNanDataPathRequestIndToHidl(
713 const legacy_hal::NanDataPathRequestInd& /* legacy_ind */,
714 NanDataPathRequestInd* /* hidl_ind */) {
715 return false;
716}
717
718bool convertLegacyNanDataPathConfirmIndToHidl(
719 const legacy_hal::NanDataPathConfirmInd& /* legacy_ind */,
720 NanDataPathConfirmInd* /* hidl_ind */) {
721 return false;
722}
723
724bool convertLegacyNanDataPathEndIndToHidl(
725 const legacy_hal::NanDataPathEndInd& /* legacy_ind */,
726 NanDataPathEndInd* /* hidl_ind */) {
727 return false;
728}
729
730bool convertLegacyNanTransmitFollowupIndToHidl(
731 const legacy_hal::NanTransmitFollowupInd& /* legacy_ind */,
732 NanTransmitFollowupInd* /* hidl_ind */) {
733 return false;
734}
Roshan Piuse65edb12016-11-22 13:02:01 -0800735} // namespace hidl_struct_util
736} // namespace implementation
737} // namespace V1_0
738} // namespace wifi
739} // namespace hardware
740} // namespace android