Enhance DaliBase and BridgeModel: add readMemoryLocation method and support for readMemoryIdentity operation
Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -72,6 +72,7 @@ class DaliBase {
|
||||
std::optional<int> getDTR(int a);
|
||||
std::optional<int> getDTR1(int a);
|
||||
std::optional<int> getDTR2(int a);
|
||||
std::optional<int> readMemoryLocation(int a, int bank, int location);
|
||||
bool copyCurrentBrightToDTR(int a);
|
||||
|
||||
// Colour value helpers (DT8 plumbing)
|
||||
|
||||
@@ -121,6 +121,7 @@ enum class BridgeOperation {
|
||||
setColourRGBCW = 81,
|
||||
setColourRGBWAF = 82,
|
||||
setTemporaryRGBWAFDimLevels = 83,
|
||||
readMemoryIdentity = 84,
|
||||
};
|
||||
|
||||
enum class BridgeValueEncoding {
|
||||
@@ -195,4 +196,4 @@ const char* bridgeOperationToString(BridgeOperation operation);
|
||||
BridgeOperation bridgeOperationFromString(const std::string& value);
|
||||
|
||||
const char* bridgeValueEncodingToString(BridgeValueEncoding encoding);
|
||||
BridgeValueEncoding bridgeValueEncodingFromString(const std::string& value);
|
||||
BridgeValueEncoding bridgeValueEncodingFromString(const std::string& value);
|
||||
|
||||
@@ -112,6 +112,16 @@ std::optional<int> DaliBase::getDTR1(int a) { return query(a, DALI_CMD_QUERY_CON
|
||||
|
||||
std::optional<int> DaliBase::getDTR2(int a) { return query(a, DALI_CMD_QUERY_CONTENT_DTR2); }
|
||||
|
||||
std::optional<int> DaliBase::readMemoryLocation(int a, int bank, int location) {
|
||||
if (!setDTR1(bank & 0xFF)) {
|
||||
return std::nullopt;
|
||||
}
|
||||
if (!setDTR(location & 0xFF)) {
|
||||
return std::nullopt;
|
||||
}
|
||||
return query(a, DALI_CMD_READ_MEMORY_LOCATION);
|
||||
}
|
||||
|
||||
bool DaliBase::copyCurrentBrightToDTR(int a) {
|
||||
return sendExtCmd(encodeCmdAddr(a), DALI_CMD_STORE_ACTUAL_LEVEL_IN_THE_DTR);
|
||||
}
|
||||
|
||||
@@ -164,6 +164,7 @@ bool isReadOperation(BridgeOperation operation) {
|
||||
case BridgeOperation::dt1GetRatedDuration:
|
||||
case BridgeOperation::dt1GetExtendedVersion:
|
||||
case BridgeOperation::dt1GetEmergencyDeviceType:
|
||||
case BridgeOperation::readMemoryIdentity:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
||||
@@ -478,6 +478,8 @@ const char* bridgeOperationToString(BridgeOperation operation) {
|
||||
return "dt1_get_extended_version";
|
||||
case BridgeOperation::dt1GetEmergencyDeviceType:
|
||||
return "dt1_get_emergency_device_type";
|
||||
case BridgeOperation::readMemoryIdentity:
|
||||
return "read_memory_identity";
|
||||
case BridgeOperation::unknown:
|
||||
default:
|
||||
return "unknown";
|
||||
@@ -623,6 +625,9 @@ BridgeOperation bridgeOperationFromString(const std::string& value) {
|
||||
if (normalized == "dt1_get_emergency_device_type" || normalized == "dt1_get_type") {
|
||||
return BridgeOperation::dt1GetEmergencyDeviceType;
|
||||
}
|
||||
if (normalized == "read_memory_identity" || normalized == "get_memory_identity") {
|
||||
return BridgeOperation::readMemoryIdentity;
|
||||
}
|
||||
if (normalized == "search_address_range") return BridgeOperation::searchAddressRange;
|
||||
if (normalized == "allocate_all_short_addresses" || normalized == "allocate_all_addr") {
|
||||
return BridgeOperation::allocateAllShortAddresses;
|
||||
@@ -655,4 +660,4 @@ BridgeValueEncoding bridgeValueEncodingFromString(const std::string& value) {
|
||||
if (normalized == "percentage") return BridgeValueEncoding::percentage;
|
||||
if (normalized == "kelvin") return BridgeValueEncoding::kelvin;
|
||||
return BridgeValueEncoding::none;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user