blob: 824cbbf37e7cafd530860a60ee216b8457ca3247 [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_LIB_WLAN_MLME_INCLUDE_WLAN_MLME_PS_CFG_H_
#define GARNET_LIB_WLAN_MLME_INCLUDE_WLAN_MLME_PS_CFG_H_
#include <wlan/mlme/ap/tim.h>
namespace wlan {
// Power Saving configuration managing TIM and DTIM.
class PsCfg {
public:
void SetDtimPeriod(uint8_t dtim_period) {
// DTIM period of 0 is reserved.
ZX_DEBUG_ASSERT(dtim_period > 0);
dtim_period_ = dtim_period;
dtim_count_ = dtim_period - 1;
}
uint8_t dtim_period() const { return dtim_period_; }
uint8_t dtim_count() const { return dtim_count_; }
TrafficIndicationMap* GetTim() { return &tim_; }
const TrafficIndicationMap* GetTim() const { return &tim_; }
uint8_t NextDtimCount() {
if (IsDtim()) {
dtim_count_ = dtim_period_ - 1;
return dtim_count_;
}
return --dtim_count_;
}
uint8_t LastDtimCount() {
if (dtim_count_ == dtim_period_ - 1) { return 0; }
return dtim_count_ + 1;
}
bool IsDtim() const { return dtim_count_ == 0; }
private:
TrafficIndicationMap tim_;
uint8_t dtim_period_ = 1;
uint8_t dtim_count_ = 0;
};
} // namespace wlan
#endif // GARNET_LIB_WLAN_MLME_INCLUDE_WLAN_MLME_PS_CFG_H_