167 lines
4.7 KiB
C++
167 lines
4.7 KiB
C++
#pragma once
|
|
|
|
#include "dali_comm.hpp"
|
|
|
|
#include <cmath>
|
|
#include <cstdint>
|
|
#include <chrono>
|
|
#include <map>
|
|
#include <optional>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
struct DaliStatus {
|
|
bool controlGearPresent = false;
|
|
bool lampFailure = false;
|
|
bool lampPowerOn = false;
|
|
bool limitError = false;
|
|
bool fadingCompleted = false;
|
|
bool resetState = false;
|
|
bool missingShortAddress = false;
|
|
bool psFault = false;
|
|
|
|
static DaliStatus fromByte(uint8_t status);
|
|
};
|
|
|
|
class DaliBase {
|
|
public:
|
|
explicit DaliBase(DaliComm& comm);
|
|
|
|
// Runtime state mirrored from Dart DaliBase.
|
|
const int broadcast = 127;
|
|
bool isAllocAddr = false;
|
|
int lastAllocAddr = 0;
|
|
int selectedAddress = 127;
|
|
|
|
int64_t mcuTicks() const;
|
|
|
|
// Scene helpers
|
|
bool toScene(int a, int s);
|
|
bool reset(int a, int t = 2);
|
|
|
|
// Brightness helpers
|
|
int brightnessToLog(int brightness) const;
|
|
int logToBrightness(int logValue) const;
|
|
bool setBright(int a, int b);
|
|
bool setBrightPercentage(int a, double b);
|
|
bool stopFade(int a);
|
|
bool off(int a);
|
|
bool on(int a);
|
|
bool recallMaxLevel(int a);
|
|
bool recallMinLevel(int a);
|
|
|
|
int groupToAddr(int gp) const;
|
|
|
|
// Core sending wrappers
|
|
bool send(int a, uint8_t cmd);
|
|
bool sendCmd(uint8_t addr, uint8_t cmd);
|
|
bool sendExtCmd(int cmd, int value);
|
|
|
|
// DTR helpers
|
|
bool setDTR(int value);
|
|
bool setDTR1(int value);
|
|
bool setDTR2(int value);
|
|
std::optional<int> getDTR(int a);
|
|
std::optional<int> getDTR1(int a);
|
|
std::optional<int> getDTR2(int a);
|
|
bool copyCurrentBrightToDTR(int a);
|
|
|
|
// Colour value helpers (DT8 plumbing)
|
|
bool queryColourValue(int a);
|
|
bool storeDTRAsAddr(int a);
|
|
bool storeDTRAsSceneBright(int a, int s);
|
|
bool storeScene(int a, int s);
|
|
bool removeScene(int a, int s);
|
|
bool addToGroup(int a, int g);
|
|
bool removeFromGroup(int a, int g);
|
|
bool storeDTRAsFadeTime(int a);
|
|
bool storeDTRAsFadeRate(int a);
|
|
bool storeDTRAsPoweredBright(int a);
|
|
bool storeDTRAsSystemFailureLevel(int a);
|
|
bool storeDTRAsMinLevel(int a);
|
|
bool storeDTRAsMaxLevel(int a);
|
|
bool storeColourTempLimits(int a);
|
|
|
|
std::optional<bool> getOnlineStatus(int a);
|
|
std::optional<int> getBright(int a);
|
|
std::optional<int> getDeviceType(int a);
|
|
std::optional<int> getPhysicalMinLevel(int a);
|
|
std::optional<int> getDeviceVersion(int a);
|
|
|
|
bool dtSelect(int value);
|
|
bool activate(int a);
|
|
bool setDTRAsColourX(int a);
|
|
bool setDTRAsColourY(int a);
|
|
bool setDTRAsColourRGB(int a);
|
|
bool setDTRAsColourTemp(int a);
|
|
bool copyReportColourToTemp(int a);
|
|
|
|
bool setGradualChangeSpeed(int a, int value);
|
|
bool setGradualChangeRate(int a, int value);
|
|
std::optional<std::pair<int, int>> getGradualChange(int a);
|
|
std::optional<int> getGradualChangeRate(int a);
|
|
std::optional<int> getGradualChangeSpeed(int a);
|
|
|
|
bool setPowerOnLevel(int a, int value);
|
|
std::optional<int> getPowerOnLevel(int a);
|
|
bool setSystemFailureLevel(int a, int value);
|
|
std::optional<int> getSystemFailureLevel(int a);
|
|
bool setMinLevel(int a, int value);
|
|
std::optional<int> getMinLevel(int a);
|
|
bool setMaxLevel(int a, int value);
|
|
std::optional<int> getMaxLevel(int a);
|
|
bool setFadeTime(int a, int value);
|
|
std::optional<int> getFadeTime(int a);
|
|
bool setFadeRate(int a, int value);
|
|
std::optional<int> getFadeRate(int a);
|
|
std::optional<int> getNextDeviceType(int a);
|
|
|
|
std::optional<int> getGroupH(int a);
|
|
std::optional<int> getGroupL(int a);
|
|
std::optional<int> getGroup(int a);
|
|
bool setGroup(int a, int value);
|
|
|
|
std::optional<int> getScene(int a, int b);
|
|
bool setScene(int a, int b);
|
|
std::map<int, int> getScenes(int a);
|
|
|
|
std::optional<int> getStatus(int a);
|
|
std::optional<bool> getControlGearPresent(int a);
|
|
std::optional<bool> getLampFailureStatus(int a);
|
|
std::optional<bool> getLampPowerOnStatus(int a);
|
|
std::optional<bool> getLimitError(int a);
|
|
std::optional<bool> getResetStatus(int a);
|
|
std::optional<bool> getMissingShortAddress(int a);
|
|
|
|
bool terminate();
|
|
bool randomise();
|
|
bool initialiseAll();
|
|
bool initialise();
|
|
bool withdraw();
|
|
bool cancel();
|
|
bool physicalSelection();
|
|
|
|
bool queryAddressH(int addr);
|
|
bool queryAddressM(int addr);
|
|
bool queryAddressL(int addr);
|
|
bool programShortAddr(int a);
|
|
std::optional<int> queryShortAddr();
|
|
std::optional<bool> verifyShortAddr(int a);
|
|
std::optional<bool> compareAddress();
|
|
std::optional<bool> compare(int h, int m, int l);
|
|
|
|
std::optional<int> getRandomAddrH(int addr);
|
|
std::optional<int> getRandomAddrM(int addr);
|
|
std::optional<int> getRandomAddrL(int addr);
|
|
|
|
// Exposed query helpers mirroring Dart API.
|
|
std::optional<int> query(int a, uint8_t cmd);
|
|
std::optional<int> queryCmd(uint8_t addr, uint8_t cmd);
|
|
|
|
private:
|
|
DaliComm& comm_;
|
|
|
|
static uint8_t encodeCmdAddr(int dec_addr);
|
|
static uint8_t encodeArcAddr(int dec_addr);
|
|
};
|