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#ifndef CHRE_WIFI_OFFLOAD_SCAN_STATS_H_
183f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#define CHRE_WIFI_OFFLOAD_SCAN_STATS_H_
193f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
203f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/wifi_offload.h"
213f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
223f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/channel_histogram.h"
233f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/flatbuffers_types_generated.h"
243f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/rpc_log_record.h"
253f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/scan_record.h"
263f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
273f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehnamespace wifi_offload {
283f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
293f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh/**
303f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Defines the scan statistics to be returned to the framework
313f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh */
323f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehclass ScanStats {
333f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh public:
343f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  /* Corresponding flatbuffers-generated data-type used to serialize and
353f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh   * deserialize instances of this class */
363f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  using FbsType = fbs::ScanStats;
373f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
383f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  ScanStats();
393f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  ~ScanStats() = default;
403f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
413f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  bool operator==(const ScanStats &other) const;
423f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
433f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  flatbuffers::Offset<ScanStats::FbsType> Serialize(
443f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh      flatbuffers::FlatBufferBuilder *builder) const;
453f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
463f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  bool Deserialize(const ScanStats::FbsType &fbs_stats);
473f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
483f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  uint32_t num_scans_requested_by_nanoapp_;
493f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  uint32_t num_scans_serviced_by_hardware_;
503f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  uint32_t num_scans_serviced_by_cache_;
513f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  uint32_t updated_at_chre_ms_;
523f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  uint32_t sent_at_chre_ms_;
533f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  /* The duration between when the framework subscribed for scan results to min
543f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh   * of time when the framework unsubscribed vs. current time */
553f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  uint32_t last_subscription_duration_ms_;
563f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
573f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  ChannelHistogram channel_histogram_;
583f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
593f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  Vector<ScanRecord> scan_records_;
603f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  Vector<RpcLogRecord> rpc_log_records_;
613f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh};
623f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
633f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}  // namespace wifi_offload
643f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
653f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#endif  // CHRE_WIFI_OFFLOAD_SCAN_STATS_H_
66