enable label=0 as ping/echo
This commit is contained in:
parent
9168f1b98c
commit
e1e9c9d473
|
@ -55,6 +55,7 @@ enum FIRMWARE_TYPE {
|
|||
* @brief All message labels from API 1.44
|
||||
*/
|
||||
enum MESSAGE_LABEL {
|
||||
OpNoop = 0, //!< null message, out-of-spec definition. Not in API!
|
||||
OpReprogramFirmware = 1, //!< Reprogram Firmware Request
|
||||
OpProgramFlashPage = 2, //!< Program Flash Page Request / Reply
|
||||
OpGetWidgetParameters = 3, //!< Get Widget Parameters Request / Reply
|
||||
|
@ -78,8 +79,16 @@ struct MessageData
|
|||
/**
|
||||
* @brief Initialize MessageData with the appropriate Label
|
||||
* @param l Label
|
||||
*
|
||||
* While null messages (label = 0) are not present in the API spec., allow their IO,
|
||||
* perhaps to act as a "ping/echo" to detect emulated devices.
|
||||
*/
|
||||
MessageData(uint8_t l) : label(l) {};
|
||||
MessageData(uint8_t l = 0) : label(l) {};
|
||||
|
||||
size_t streamSize() const override { return 0; };
|
||||
void iStream(std::shared_ptr<bufferstream>) override {};
|
||||
void oStream(std::shared_ptr<bufferstream>) const override{};
|
||||
|
||||
const uint8_t label; //!< Message ID label (OpCode)
|
||||
};
|
||||
|
||||
|
|
|
@ -296,7 +296,11 @@ bool Widget::writeFirmware(const uint8_t *data, const size_t size)
|
|||
*/
|
||||
void Widget::routeRxMessage(std::shared_ptr<Pro::MessageData> msg)
|
||||
{
|
||||
switch (msg->label) {
|
||||
switch (msg->label)
|
||||
{
|
||||
case Pro::OpNoop:
|
||||
rxMsgHello(msg);
|
||||
break;
|
||||
case Pro::OpReprogramFirmware:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgReprogramFirmware>(msg);
|
||||
|
@ -537,6 +541,25 @@ void Widget::sendDmx(bool trimmed) const
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgHello
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgHello(std::shared_ptr<Pro::MessageData> msg)
|
||||
{
|
||||
switch (usb_mode_) {
|
||||
case USBdevice:
|
||||
sendMessage(msg); // mirror the message back to the host
|
||||
break;
|
||||
case USBhost:
|
||||
reply_hello_.set_value(true); // device was polite
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgReprogramFirmware
|
||||
* @param msg
|
||||
|
|
|
@ -101,6 +101,7 @@ protected:
|
|||
std::vector<uint8_t> user_configuration; //!< User defined configuration data.
|
||||
|
||||
private:
|
||||
void rxMsgHello(std::shared_ptr<Pro::MessageData>);
|
||||
void rxMsgReprogramFirmware(std::shared_ptr<Pro::MsgReprogramFirmware>);
|
||||
void rxMsgProgramFlashPageRequest(std::shared_ptr<Pro::MsgProgramFlashPageRequest>);
|
||||
void rxMsgProgramFlashPageReply(std::shared_ptr<Pro::MsgProgramFlashPageReply>);
|
||||
|
@ -125,6 +126,7 @@ private:
|
|||
|
||||
mutable std::mutex mtx_metadata_;
|
||||
std::shared_ptr<void> token_data_changed_;
|
||||
std::promise<bool> reply_hello_;
|
||||
std::promise<bool> reply_firmwarePage_;
|
||||
std::promise<bool> reply_parameters_;
|
||||
std::promise<bool> reply_serialNumber_;
|
||||
|
|
Loading…
Reference in New Issue