130 lines
4.2 KiB
C++
130 lines
4.2 KiB
C++
#pragma once
|
|
|
|
#include "base.hpp"
|
|
|
|
#include <cstdint>
|
|
#include <optional>
|
|
|
|
struct DT1TestStatusDetailed {
|
|
std::optional<int> failureStatus;
|
|
std::optional<int> emergencyStatus;
|
|
std::optional<int> emergencyMode;
|
|
std::optional<int> feature;
|
|
bool testInProgress = false;
|
|
bool lampFailure = false;
|
|
bool batteryFailure = false;
|
|
bool functionTestActive = false;
|
|
bool durationTestActive = false;
|
|
bool testDone = false;
|
|
bool identifyActive = false;
|
|
bool physicalSelectionActive = false;
|
|
};
|
|
|
|
class DaliDT1DeviceStatus {
|
|
public:
|
|
explicit DaliDT1DeviceStatus(int raw) : raw_(raw & 0xFF) {}
|
|
|
|
int raw() const { return raw_; }
|
|
bool controlGearFailure() const { return bit(0x01); }
|
|
bool controlGearOk() const { return !controlGearFailure(); }
|
|
bool lampFailure() const { return bit(0x02); }
|
|
bool lampPoweredByEmergencyGear() const { return bit(0x04); }
|
|
bool arcPowerBit3() const { return bit(0x08); }
|
|
bool arcPowerBit4() const { return bit(0x10); }
|
|
bool resetState() const { return bit(0x20); }
|
|
bool missingShortAddress() const { return bit(0x40); }
|
|
bool arcPowerBit7() const { return bit(0x80); }
|
|
|
|
private:
|
|
int raw_ = 0;
|
|
bool bit(int mask) const { return (raw_ & mask) != 0; }
|
|
};
|
|
|
|
class DaliDT1EmergencyStatus {
|
|
public:
|
|
explicit DaliDT1EmergencyStatus(int raw) : raw_(raw & 0xFF) {}
|
|
|
|
int raw() const { return raw_; }
|
|
bool inhibitMode() const { return bit(0x01); }
|
|
bool functionTestResultValid() const { return bit(0x02); }
|
|
bool durationTestResultValid() const { return bit(0x04); }
|
|
bool batteryFullyCharged() const { return bit(0x08); }
|
|
bool functionTestRequestPending() const { return bit(0x10); }
|
|
bool durationTestRequestPending() const { return bit(0x20); }
|
|
bool identificationActive() const { return bit(0x40); }
|
|
bool physicallySelected() const { return bit(0x80); }
|
|
bool batteryChargingInProgress() const { return !batteryFullyCharged(); }
|
|
|
|
private:
|
|
int raw_ = 0;
|
|
bool bit(int mask) const { return (raw_ & mask) != 0; }
|
|
};
|
|
|
|
class DaliDT1 {
|
|
public:
|
|
explicit DaliDT1(DaliBase& base);
|
|
|
|
bool enableDT1();
|
|
|
|
bool startDT1Test(int a, int t = 1);
|
|
std::optional<int> getDT1EmergencyMode(int a);
|
|
std::optional<int> getDT1Feature(int a);
|
|
std::optional<int> getDT1FailureStatus(int a);
|
|
std::optional<int> getDT1Status(int a);
|
|
std::optional<int> getDT1SelfTestStatus(int a);
|
|
std::optional<DT1TestStatusDetailed> getDT1TestStatusDetailed(int a);
|
|
bool performDT1Test(int a, int timeout = 5);
|
|
|
|
bool rest(int a);
|
|
bool inhibit(int a);
|
|
bool reLightOrResetInhibit(int a);
|
|
bool startFunctionTestCmd(int a);
|
|
bool startDurationTestCmd(int a);
|
|
bool stopTest(int a);
|
|
bool resetFunctionTestDoneFlag(int a);
|
|
bool resetDurationTestDoneFlag(int a);
|
|
bool resetLampTime(int a);
|
|
bool resetStatusFlags(int a);
|
|
bool resetLampOperationTime(int a);
|
|
bool resetTestResults(int a);
|
|
|
|
bool storeEmergencyLevel(int a, int level);
|
|
bool storeTestDelayTimeHighByte(int a, int highByte);
|
|
bool storeTestDelayTimeLowByte(int a, int lowByte);
|
|
bool storeFunctionTestIntervalDays(int a, int days);
|
|
bool storeDurationTestIntervalWeeks(int a, int weeks);
|
|
bool storeTestDelayTime16(int a, int quartersOfHour);
|
|
bool storeProlongTimeMinutes(int a, int minutes);
|
|
bool storeRatedDurationMinutes(int a, int minutes);
|
|
bool storeEmergencyMinLevel(int a, int level);
|
|
bool storeEmergencyMaxLevel(int a, int level);
|
|
|
|
bool startIdentification(int a);
|
|
bool performDTRSelectedFunction(int a,
|
|
const std::optional<int>& dtr0 = std::nullopt,
|
|
const std::optional<int>& dtr1 = std::nullopt);
|
|
std::optional<int> getExtendedVersionDT1(int a);
|
|
|
|
std::optional<int> getEmergencyLevel(int a);
|
|
std::optional<int> getEmergencyMinLevel(int a);
|
|
std::optional<int> getEmergencyMaxLevel(int a);
|
|
std::optional<int> getProlongTimeMinutes(int a);
|
|
std::optional<int> getFunctionTestIntervalDays(int a);
|
|
std::optional<int> getDurationTestIntervalWeeks(int a);
|
|
std::optional<int> getDurationTestResult(int a);
|
|
std::optional<int> getLampEmergencyTimeMinutes(int a);
|
|
std::optional<int> getRatedDurationMinutes(int a);
|
|
|
|
std::optional<DaliDT1DeviceStatus> getDeviceStatus(int a);
|
|
std::optional<DaliDT1EmergencyStatus> getEmergencyStatusDecoded(int a);
|
|
|
|
private:
|
|
DaliBase& base_;
|
|
|
|
bool enable();
|
|
static int addrOf(int a);
|
|
bool send(int a, int code);
|
|
std::optional<int> query(int a, int code);
|
|
};
|
|
|