Enhance DALI device type discovery and query handling

- Introduce DaliDeviceTypeDiscovery struct for managing device type queries.
- Implement discoverDeviceTypes method in DaliBase for improved device type detection.
- Update DaliComm to handle query responses more robustly, including handling multiple device replies.
- Add setDetectedDeviceTypes method in DaliDevice to manage detected device types and capabilities.
This commit is contained in:
Tony
2026-04-25 12:59:16 +08:00
parent bbcfcd11f6
commit 32e7329b3e
7 changed files with 225 additions and 14 deletions
+15
View File
@@ -23,6 +23,14 @@ struct DaliStatus {
static DaliStatus fromByte(uint8_t status);
};
struct DaliDeviceTypeDiscovery {
std::optional<int> rawQueryType;
std::vector<int> types;
std::optional<int> primaryType() const;
std::vector<int> extraTypes() const;
};
class DaliBase {
public:
explicit DaliBase(DaliComm& comm);
@@ -85,6 +93,8 @@ class DaliBase {
std::optional<bool> getOnlineStatus(int a);
std::optional<int> getBright(int a);
std::optional<int> getDeviceType(int a);
std::optional<DaliDeviceTypeDiscovery> discoverDeviceTypes(
int a, const std::vector<int>& fallbackTypes = {}, int maxNextTypes = 16);
std::optional<int> getPhysicalMinLevel(int a);
std::optional<int> getDeviceVersion(int a);
@@ -161,6 +171,11 @@ class DaliBase {
private:
DaliComm& comm_;
std::vector<int> discoverNextDeviceTypes(int a, int maxNextTypes);
std::vector<int> probeSupportedDeviceTypes(int a, const std::vector<int>& fallbackTypes);
std::optional<int> queryExtendedVersionForDeviceType(int a, int deviceType);
static bool isRealDeviceTypeValue(int value);
static uint8_t encodeCmdAddr(int dec_addr);
static uint8_t encodeArcAddr(int dec_addr);
};