query_store.hpp 2.57 KB
/*
 * Copyright (c) 2015-2016, Arkadiusz Materek (arekmat@poczta.fm)
 *
 * Licensed under GNU General Public License 3.0 or later.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */

#ifndef DALI_CONTROLLER_QUERY_HPP_
#define DALI_CONTROLLER_QUERY_HPP_

#include "lamp.hpp"
#include "memory.hpp"

namespace dali {
namespace controller {

class QueryStore {

public:
  explicit QueryStore(Memory* memory, Lamp* lamp);
  virtual ~QueryStore() {};

  Status reset();
  virtual Status storeActualLevelInDtr();
  Status storeDtrAsMaxLevel();
  Status storeDtrAsMinLevel();
  virtual Status storeDtrAsFailureLevel();
  virtual Status storePowerOnLevel();
  Status storeDtrAsFadeTime();
  Status storeDtrAsFadeRate();
  virtual Status storeDtrAsScene(uint8_t scene);
  virtual Status removeFromScene(uint8_t scene);
  Status addToGroup(uint8_t group);
  Status removeFromGroup(uint8_t group);
  Status storeDtrAsShortAddr();
  uint8_t queryStatus();
  bool queryLampFailure() { return mLampController->isFailure(); }
  bool queryLampPowerOn() { return mLampController->isPowerOn(); }
  bool queryLampLimitError() { return mLampController->isLimitError(); }
  virtual bool queryIsFading();
  bool queryResetState() { return mMemoryController->isReset(); }
  bool queryMissingShortAddr() { return mMemoryController->getShortAddr() == DALI_MASK; }
  bool queryLampPowerSet() { return mLampController->isPowerSet(); }
  virtual uint8_t queryActualLevel() { return mLampController->getLevel(); }
  uint8_t queryMaxLevel() { return mMemoryController->getMaxLevel(); }
  uint8_t queryMinLevel() { return mMemoryController->getMinLevel(); }
  virtual uint8_t queryPowerOnLevel();
  virtual uint8_t queryFaliureLevel();
  uint8_t queryFadeRateOrTime();
  virtual uint8_t queryLevelForScene(uint8_t scene);
  uint8_t queryGroupsL();
  uint8_t queryGroupsH();
  uint8_t queryRandomAddrH();
  uint8_t queryRandomAddrM();
  uint8_t queryRandomAddrL();

protected:
  Memory* const getMemoryController() { return mMemoryController; }
  Lamp* const getLampController() { return mLampController; }

private:
  bool isMemoryValid() { return mMemoryController->isValid(); }

  QueryStore(const QueryStore& other) = delete;
  QueryStore& operator=(const QueryStore&) = delete;

  Memory* const mMemoryController;
  Lamp* const mLampController;
};

} // namespace controller
} // namespace dali

#endif // DALI_CONTROLLER_QUERY_HPP_