13f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh/* 23f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Copyright (C) 2017 The Android Open Source Project 33f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * 43f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Licensed under the Apache License, Version 2.0 (the "License"); 53f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * you may not use this file except in compliance with the License. 63f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * You may obtain a copy of the License at 73f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * 83f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * http://www.apache.org/licenses/LICENSE-2.0 93f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * 103f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Unless required by applicable law or agreed to in writing, software 113f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * distributed under the License is distributed on an "AS IS" BASIS, 123f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * See the License for the specific language governing permissions and 143f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * limitations under the License. 153f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh */ 163f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 173f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/scan_filter.h" 183f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/vector_serialization.h" 193f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 203f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehnamespace wifi_offload { 213f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 223f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehScanFilter::ScanFilter() : min_rssi_threshold_dbm_(0) {} 233f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 243f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehbool ScanFilter::operator==(const ScanFilter &other) const { 253f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh if (this == &other) { 263f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return true; 273f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 283f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return networks_to_match_ == other.networks_to_match_ && 293f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh min_rssi_threshold_dbm_ == other.min_rssi_threshold_dbm_; 303f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 313f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 323f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehflatbuffers::Offset<ScanFilter::FbsType> ScanFilter::Serialize( 333f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh flatbuffers::FlatBufferBuilder *builder) const { 343f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh auto netList = SerializeVector(networks_to_match_, builder); 353f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return fbs::CreateScanFilter(*builder, netList, min_rssi_threshold_dbm_); 363f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 373f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 383f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehbool ScanFilter::Deserialize(const ScanFilter::FbsType &fbs_filter) { 393f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh const auto &fbsNetList = fbs_filter.networks_to_match(); 403f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh if (fbsNetList == nullptr) { 413f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGE("Failed to deserialize ScanFilter. Null or incomplete members."); 423f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return false; 433f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 443f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 453f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh if (!DeserializeVector<PreferredNetwork>(*fbsNetList, &networks_to_match_)) { 463f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGE("Failed to deserialize ScanFilter. Null or incomplete members."); 473f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return false; 483f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 493f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 503f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh min_rssi_threshold_dbm_ = fbs_filter.min_rssi_threshold_dbm(); 513f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return true; 523f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 533f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 543f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehvoid ScanFilter::Log() const { 553f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGI("ScanFilter:"); 563f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGI(" min rssi threshold: %" PRId8 "dBm", min_rssi_threshold_dbm_); 573f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGI(" number of networks to match: %zu", networks_to_match_.size()); 583f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh for (auto &net : networks_to_match_) { 593f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh net.Log(); 603f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 613f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 623f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 633f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} // namespace wifi_offload 64