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