use a callback to send RDM data
This commit is contained in:
parent
db3da280da
commit
f1612dc60e
|
@ -118,7 +118,8 @@ Responder::~Responder()
|
||||||
*/
|
*/
|
||||||
void Responder::send(const std::vector<uint8_t> &data)
|
void Responder::send(const std::vector<uint8_t> &data)
|
||||||
{
|
{
|
||||||
(void)data;
|
if (auto sp = sender_.lock())
|
||||||
|
(*sp)(data); // sender still exists
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -146,6 +147,22 @@ void Responder::send(MsgPtr response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the message sending callback function.
|
||||||
|
* @param cb Callback function.
|
||||||
|
* @return Token that the owner of the callback must keep for it's lifetime.
|
||||||
|
*/
|
||||||
|
std::shared_ptr<void> Responder::setSender(std::function<void(const std::vector<uint8_t>&)> cb)
|
||||||
|
{
|
||||||
|
// wrap the callback with a shared pointer
|
||||||
|
auto sp = std::make_shared<std::function<void(const std::vector<uint8_t>&)>>(std::move(cb));
|
||||||
|
// store callback (as a weak pointer)
|
||||||
|
sender_ = sp;
|
||||||
|
// return token that caller must keep throughout it's scope
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Responder::receive
|
* @brief Responder::receive
|
||||||
* @param data
|
* @param data
|
||||||
|
|
|
@ -40,6 +40,8 @@ public:
|
||||||
explicit Responder(UID id, Device* parent = nullptr);
|
explicit Responder(UID id, Device* parent = nullptr);
|
||||||
virtual ~Responder();
|
virtual ~Responder();
|
||||||
|
|
||||||
|
std::shared_ptr<void> setSender(std::function<void(const std::vector<uint8_t>&)> cb);
|
||||||
|
|
||||||
union {
|
union {
|
||||||
uint16_t control_field;
|
uint16_t control_field;
|
||||||
struct {
|
struct {
|
||||||
|
@ -78,6 +80,7 @@ private:
|
||||||
uint16_t checksum_fail_counter_ = 0;
|
uint16_t checksum_fail_counter_ = 0;
|
||||||
MsgPtr last_status_message_;
|
MsgPtr last_status_message_;
|
||||||
|
|
||||||
|
std::weak_ptr<std::function<void(const std::vector<uint8_t>&)>> sender_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user