120a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao/*
220a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * Copyright (C) 2016, The Android Open Source Project
320a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao *
420a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * Licensed under the Apache License, Version 2.0 (the "License");
520a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * you may not use this file except in compliance with the License.
620a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * You may obtain a copy of the License at
720a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao *
820a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao *     http://www.apache.org/licenses/LICENSE-2.0
920a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao *
1020a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * Unless required by applicable law or agreed to in writing, software
1120a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * distributed under the License is distributed on an "AS IS" BASIS,
1220a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * See the License for the specific language governing permissions and
1420a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao * limitations under the License.
1520a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao */
1620a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao
1720a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao#include <vector>
1820a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao
19f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao#include "wificond/tests/offload_hal_test_constants.h"
2016b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao#include "wificond/tests/offload_test_utils.h"
2120a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao
2220a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Raousing android::hardware::wifi::offload::V1_0::ScanResult;
23f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Raousing android::hardware::wifi::offload::V1_0::ScanStats;
24f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Raousing android::hardware::wifi::offload::V1_0::ScanRecord;
2516b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Raousing android::hardware::wifi::offload::V1_0::OffloadStatus;
26e10ec9e1f15007331afe569d7c13790eae5b40deSohani Raousing android::hardware::wifi::offload::V1_0::OffloadStatusCode;
2716b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao
2816b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Raousing ::com::android::server::wifi::wificond::NativeScanResult;
2916b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Raousing ::com::android::server::wifi::wificond::NativeScanStats;
3016b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao
31f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Raousing namespace android::wificond::offload_hal_test_constants;
3220a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao
3320a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Raonamespace android {
3420a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Raonamespace wificond {
3520a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao
3620a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Raostd::vector<ScanResult> OffloadTestUtils::createOffloadScanResults() {
3720a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  std::vector<ScanResult> scanResults;
3820a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  ScanResult scanResult;
39f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  std::vector<uint8_t> ssid(kSsid1, kSsid1 + kSsid1_size);
4020a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  scanResult.tsf = kTsf;
4120a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  scanResult.rssi = kRssi;
422a270852b006b16d500ca11a6e30d3a1a16ba200Sohani Rao  scanResult.frequency = kFrequency1;
4320a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  scanResult.capability = kCapability;
4420a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  memcpy(&scanResult.bssid[0], &kBssid[0], kBssidSize);
4520a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  scanResult.networkInfo.ssid = ssid;
4620a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  scanResult.networkInfo.flags = kNetworkFlags;
4720a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  scanResults.push_back(scanResult);
4820a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao  return scanResults;
4920a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao}
5020a82c5f49ca8be325803806e62fcdb6ccc6a6fcSohani Rao
51f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani RaoScanStats OffloadTestUtils::createScanStats(NativeScanStats* nativeScanStats) {
52f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  std::vector<ScanRecord> scan_records;
53f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  std::vector<uint8_t> histogram_channels;
54f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  uint32_t scan_duration_ms = 0;
55f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  uint32_t num_channels_scanned = 0;
56f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  ScanStats scan_stats;
57f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  int numEntriesInScanRecord =
5816b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao      sizeof(kNumChannelsScanned) / sizeof(kNumChannelsScanned[0]);
59f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  for (int i = 0; i < numEntriesInScanRecord; i++) {
60f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    ScanRecord scan_record;
61f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    scan_record.durationMs = kScanDurationMs[i];
62f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    scan_duration_ms += kScanDurationMs[i];
63f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    scan_record.numChannelsScanned = kNumChannelsScanned[i];
64f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    num_channels_scanned += kNumChannelsScanned[i];
65f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    scan_record.numEntriesAggregated = 1;
66f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    scan_records.push_back(scan_record);
67f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  }
68f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  scan_stats.scanRecord = scan_records;
69f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  scan_stats.numScansRequestedByWifi = kDefaultNumScansRequestedByWifi;
70f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  scan_stats.numScansServicedByWifi = kDefaultNumScansServicedByWifi;
71f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  scan_stats.subscriptionDurationMs = kSubscriptionDurationMs;
7216b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao  uint32_t skip_tmp = 256 / num_channels_scanned;
7316b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao  for (size_t i = 0; i < 256; i++) {
74f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    if (i % skip_tmp == 0) {
7516b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao      scan_stats.histogramChannelsScanned[i] =
7616b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao          kDefaultNumTimesAChannelsIsScanned;
77f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao      histogram_channels.push_back(kDefaultNumTimesAChannelsIsScanned);
78f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    } else {
79f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao      scan_stats.histogramChannelsScanned[i] = kChannelNotScanned;
80f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao      histogram_channels.push_back(kChannelNotScanned);
81f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao    }
82f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  }
83f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  NativeScanStats native_scan_stats(kDefaultNumScansRequestedByWifi,
8416b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao                                    kDefaultNumScansServicedByWifi,
8516b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao                                    kSubscriptionDurationMs, scan_duration_ms,
8616b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao                                    num_channels_scanned, histogram_channels);
87f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  *nativeScanStats = native_scan_stats;
88f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao  return scan_stats;
89f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao}
90f33517d79737dd96e5d86ed45ab095be3a4c4773Sohani Rao
91e10ec9e1f15007331afe569d7c13790eae5b40deSohani RaoOffloadStatus OffloadTestUtils::createOffloadStatus(OffloadStatusCode code) {
92e10ec9e1f15007331afe569d7c13790eae5b40deSohani Rao  return createOffloadStatus(code, "");
93e10ec9e1f15007331afe569d7c13790eae5b40deSohani Rao}
94e10ec9e1f15007331afe569d7c13790eae5b40deSohani Rao
95e10ec9e1f15007331afe569d7c13790eae5b40deSohani RaoOffloadStatus OffloadTestUtils::createOffloadStatus(OffloadStatusCode code,
96e10ec9e1f15007331afe569d7c13790eae5b40deSohani Rao                                                    const std::string& desc) {
97e10ec9e1f15007331afe569d7c13790eae5b40deSohani Rao  return {code, desc};
98e10ec9e1f15007331afe569d7c13790eae5b40deSohani Rao}
99e10ec9e1f15007331afe569d7c13790eae5b40deSohani Rao
10016b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao}  // namespace wificond
10116b75e6e37fa9567be23e18c8a98e4132fc9d91cSohani Rao}  // namespace android
102