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_result_message.h"
183f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/vector_serialization.h"
193f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
203f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehnamespace wifi_offload {
213f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
223f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehvoid ScanResultMessage::SetScanResults(const Vector<ScanResult> &results) {
233f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  scan_results_.clear();
243f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  scan_results_.reserve(results.size());
253f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  for (const auto &result : results) {
263f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    scan_results_.emplace_back(result);
273f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
283f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
293f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
303f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehvoid ScanResultMessage::GetScanResults(Vector<ScanResult> *results) {
313f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  if (results == nullptr) {
323f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    LOGE("ScanResultsMessage output pointer is null in GetScanResults.");
333f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    return;
343f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
353f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
363f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  results->clear();
373f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  results->reserve(scan_results_.size());
383f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  for (const auto &result : scan_results_) {
393f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    results->emplace_back(result);
403f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
413f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
423f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
433f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehflatbuffers::Offset<ScanResultMessage::FbsType> ScanResultMessage::Serialize(
443f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    flatbuffers::FlatBufferBuilder *builder) const {
453f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  auto results = SerializeVector(scan_results_, builder);
463f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  return fbs::CreateScanResultMessage(*builder, results);
473f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
483f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
493f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehbool ScanResultMessage::Deserialize(
503f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    const ScanResultMessage::FbsType &fbs_result_message) {
513f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  const auto &fbs_results = fbs_result_message.scan_results();
523f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  if (fbs_results == nullptr || fbs_results->size() == 0) {
533f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    LOGE(
543f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh        "Failed to deserialize ScanResultsMessage. Null or incomplete "
553f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh        "members.");
563f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    return false;
573f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
583f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
593f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  if (!DeserializeVector<ScanResult>(*fbs_results, &scan_results_)) {
603f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    LOGE(
613f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh        "Failed to deserialize ScanResultMessage. Null or incomplete members.");
623f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    return false;
633f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
643f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
653f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  return true;
663f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
673f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
683f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}  // namespace wifi_offload
69