blob: 8a255025d3e5ec1da29d13c701a9986c67bc215b [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GARNET_DRIVERS_WLAN_WLAN_PROBE_SEQUENCE_H_
#define GARNET_DRIVERS_WLAN_WLAN_PROBE_SEQUENCE_H_
#include <wlan/common/tx_vector.h>
#include <array>
namespace wlan {
class ProbeSequence {
public:
static constexpr uint8_t kNumProbeSequece = 8;
static constexpr tx_vec_idx_t kSequenceLength = 1 + kMaxValidIdx - kStartIdx;
using ProbeTable = std::array<std::array<tx_vec_idx_t, kSequenceLength>, kNumProbeSequece>;
class Entry {
private:
friend class ProbeSequence;
uint8_t sequence_idx = kNumProbeSequece - 1;
tx_vec_idx_t probe_idx = kSequenceLength - 1;
};
static ProbeSequence RandomSequence() { return ProbeSequence(RandomProbeTable()); }
ProbeSequence(ProbeTable&& table) : probe_table(std::move(table)) {}
// returns true if probe_idx has wrapped around, which means we have probed all tx vectors
bool Next(Entry* entry, tx_vec_idx_t* idx) const;
private:
static ProbeTable RandomProbeTable();
const ProbeTable probe_table;
};
} // namespace wlan
#endif // GARNET_DRIVERS_WLAN_WLAN_PROBE_SEQUENCE_H_