1
0
Fork 0

enable label=0 as ping/echo

This commit is contained in:
Kevin Matz 2023-04-06 12:22:26 -04:00
parent 9168f1b98c
commit e1e9c9d473
3 changed files with 36 additions and 2 deletions

View File

@ -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)
};

View File

@ -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

View File

@ -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_;