Enhance DALI communication: introduce DaliQueryResult structure, update query handling, and improve logging of query results
Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -6,6 +6,26 @@
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
enum class DaliQueryStatus {
|
||||
success = 0,
|
||||
noResponse,
|
||||
invalidFrame,
|
||||
unknownFrame,
|
||||
sendFailed,
|
||||
transportUnavailable,
|
||||
timeout,
|
||||
};
|
||||
|
||||
const char* daliQueryStatusName(DaliQueryStatus status);
|
||||
|
||||
struct DaliQueryResult {
|
||||
DaliQueryStatus status{DaliQueryStatus::transportUnavailable};
|
||||
std::optional<uint8_t> value;
|
||||
std::vector<uint8_t> raw;
|
||||
|
||||
bool hasValue() const { return status == DaliQueryStatus::success && value.has_value(); }
|
||||
};
|
||||
|
||||
// Lightweight communicator for DALI gateway type 1 (USB UART new frame format).
|
||||
// Frames:
|
||||
// - Send: [0x10, addr, cmd]
|
||||
@@ -43,6 +63,8 @@ class DaliComm {
|
||||
bool sendExtRawNew(uint8_t addr, uint8_t cmd) const;
|
||||
std::optional<uint8_t> queryRaw(uint8_t addr, uint8_t cmd) const;
|
||||
std::optional<uint8_t> queryRawNew(uint8_t addr, uint8_t cmd) const;
|
||||
DaliQueryResult queryRawResult(uint8_t addr, uint8_t cmd) const;
|
||||
DaliQueryResult queryRawNewResult(uint8_t addr, uint8_t cmd) const;
|
||||
bool send(int dec_addr, uint8_t cmd) const;
|
||||
std::optional<uint8_t> query(int dec_addr, uint8_t cmd) const;
|
||||
bool getBusStatus() const;
|
||||
@@ -54,6 +76,7 @@ class DaliComm {
|
||||
// Send query frame (0x12) and parse single-byte response. Returns nullopt on no/invalid response,
|
||||
// except COMPARE where 0xFD collisions are treated as a positive match.
|
||||
std::optional<uint8_t> queryCmd(uint8_t addr, uint8_t cmd) const;
|
||||
DaliQueryResult queryCmdResult(uint8_t addr, uint8_t cmd) const;
|
||||
|
||||
// Helpers to mirror Dart address conversion (DEC short address -> DALI odd/even encoded).
|
||||
static uint8_t toCmdAddr(int dec_addr); // odd address for commands
|
||||
|
||||
Reference in New Issue
Block a user