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