stubs for communicating with a widget
This commit is contained in:
parent
8f3d704d5a
commit
cb2bc6548d
|
@ -6,8 +6,10 @@ add_library(ENTTEC::Pro ALIAS ${PROJECT_NAME})
|
|||
target_sources(${PROJECT_NAME}
|
||||
PUBLIC
|
||||
pro.h
|
||||
widget.h
|
||||
PRIVATE
|
||||
pro.cpp
|
||||
widget.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
|
|
@ -0,0 +1,356 @@
|
|||
/*
|
||||
widget.cpp
|
||||
|
||||
Copyright (c) 2023 Kevin Matz (kevin.matz@gmail.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#include "widget.h"
|
||||
|
||||
namespace ENTTEC::Widget {
|
||||
|
||||
Widget::Widget()
|
||||
: usb_mode_(USBunknown)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Widget::~Widget()
|
||||
{
|
||||
switch (usb_mode_) {
|
||||
case USBdevice:
|
||||
Widget::halt();
|
||||
break;
|
||||
case USBhost:
|
||||
Widget::disconnect();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Begin operating as a USB Device
|
||||
*/
|
||||
void Widget::init()
|
||||
{
|
||||
usb_mode_ = USBdevice;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Stop operating as a USB Device
|
||||
*/
|
||||
void Widget::halt()
|
||||
{
|
||||
usb_mode_ = USBunknown;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Begin operating on the USB Host
|
||||
*/
|
||||
void Widget::connect()
|
||||
{
|
||||
usb_mode_ = USBhost;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Stop operating on the USB Host
|
||||
*/
|
||||
void Widget::disconnect()
|
||||
{
|
||||
usb_mode_ = USBunknown;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::routeRxMessage
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::routeRxMessage(std::shared_ptr<Pro::Message> msg)
|
||||
{
|
||||
switch (msg->label) {
|
||||
case Pro::OpReprogramFirmware:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgReprogramFirmware>(msg->data);
|
||||
rxMsgReprogramFirmware(data);
|
||||
}
|
||||
break;
|
||||
case Pro::OpProgramFlashPage:
|
||||
{
|
||||
switch (usb_mode_) {
|
||||
case USBdevice:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgProgramFlashPageRequest>(msg->data);
|
||||
rxMsgProgramFlashPageRequest(data);
|
||||
}
|
||||
break;
|
||||
case USBhost:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgProgramFlashPageReply>(msg->data);
|
||||
rxMsgProgramFlashPageReply(data);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Pro::OpGetWidgetParameters:
|
||||
{
|
||||
switch (usb_mode_) {
|
||||
case USBdevice:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgGetWidgetParametersRequest>(msg->data);
|
||||
rxMsgGetWidgetParametersRequest(data);
|
||||
}
|
||||
break;
|
||||
case USBhost:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgGetWidgetParametersReply>(msg->data);
|
||||
rxMsgGetWidgetParametersReply(data);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Pro::OpSetWidgetParameters:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgSetWidgetParametersRequest>(msg->data);
|
||||
rxMsgSetWidgetParametersRequest(data);
|
||||
}
|
||||
break;
|
||||
case Pro::OpRecievedDmxPacket:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgRecievedDmxPacket>(msg->data);
|
||||
rxMsgRecievedDmxPacket(data);
|
||||
}
|
||||
break;
|
||||
case Pro::OpOutputOnlySendDMX:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgOutputOnlySendDMX>(msg->data);
|
||||
rxMsgOutputOnlySendDMX(data);
|
||||
}
|
||||
break;
|
||||
case Pro::OpSendRDMData:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgSendRDMData>(msg->data);
|
||||
rxMsgSendRDMData(data);
|
||||
}
|
||||
break;
|
||||
case Pro::OpRecieveDMXOnChange:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgRecieveDMXOnChange>(msg->data);
|
||||
rxMsgRecieveDMXOnChange(data);
|
||||
}
|
||||
break;
|
||||
case Pro::OpRecievedDMXChanged:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgRecievedDMXChanged>(msg->data);
|
||||
rxMsgRecievedDMXChanged(data);
|
||||
}
|
||||
break;
|
||||
case Pro::OpGetWidgetSerial:
|
||||
{
|
||||
switch (usb_mode_) {
|
||||
case USBdevice:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgGetWidgetSerialRequest>(msg->data);
|
||||
rxMsgGetWidgetSerialRequest(data);
|
||||
}
|
||||
break;
|
||||
case USBhost:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgGetWidgetSerialReply>(msg->data);
|
||||
rxMsgGetWidgetSerialReply(data);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Pro::OpSendRDMDiscovery:
|
||||
{
|
||||
auto data = std::static_pointer_cast<Pro::MsgSendRDMDiscovery>(msg->data);
|
||||
rxMsgSendRDMDiscovery(data);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::sendMessage
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::sendMessage(std::shared_ptr<Pro::Message> msg) const
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgReprogramFirmware
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgReprogramFirmware(std::shared_ptr<Pro::MsgReprogramFirmware> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgProgramFlashPageRequest
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgProgramFlashPageRequest(std::shared_ptr<Pro::MsgProgramFlashPageRequest> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgProgramFlashPageReply
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgProgramFlashPageReply(std::shared_ptr<Pro::MsgProgramFlashPageReply> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgGetWidgetParametersRequest
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgGetWidgetParametersRequest(std::shared_ptr<Pro::MsgGetWidgetParametersRequest> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgGetWidgetParametersReply
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgGetWidgetParametersReply(std::shared_ptr<Pro::MsgGetWidgetParametersReply> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgSetWidgetParametersRequest
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgSetWidgetParametersRequest(std::shared_ptr<Pro::MsgSetWidgetParametersRequest> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgRecievedDmxPacket
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgRecievedDmxPacket(std::shared_ptr<Pro::MsgRecievedDmxPacket> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgOutputOnlySendDMX
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgOutputOnlySendDMX(std::shared_ptr<Pro::MsgOutputOnlySendDMX> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgSendRDMData
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgSendRDMData(std::shared_ptr<Pro::MsgSendRDMData> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgRecieveDMXOnChange
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgRecieveDMXOnChange(std::shared_ptr<Pro::MsgRecieveDMXOnChange> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgRecievedDMXChanged
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgRecievedDMXChanged(std::shared_ptr<Pro::MsgRecievedDMXChanged> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgGetWidgetSerialRequest
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgGetWidgetSerialRequest(std::shared_ptr<Pro::MsgGetWidgetSerialRequest> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgGetWidgetSerialReply
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgGetWidgetSerialReply(std::shared_ptr<Pro::MsgGetWidgetSerialReply> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Widget::rxMsgSendRDMDiscovery
|
||||
* @param msg
|
||||
*/
|
||||
void Widget::rxMsgSendRDMDiscovery(std::shared_ptr<Pro::MsgSendRDMDiscovery> msg)
|
||||
{
|
||||
(void)msg;
|
||||
}
|
||||
|
||||
|
||||
} // namespace ENTTEC::Widget
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
widget.h
|
||||
|
||||
Copyright (c) 2023 Kevin Matz (kevin.matz@gmail.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "pro.h"
|
||||
|
||||
#include <universe.h>
|
||||
#include <cstring>
|
||||
|
||||
namespace ENTTEC::Widget {
|
||||
|
||||
/**
|
||||
* @brief The Widget class
|
||||
*
|
||||
* Operates on either the USB Host side (computer) or USB Device side (DMX USB Pro impersonator).
|
||||
*/
|
||||
class Widget
|
||||
: public DMX::Universe
|
||||
{
|
||||
public:
|
||||
explicit Widget();
|
||||
virtual ~Widget();
|
||||
|
||||
virtual void init(); //!< USB Device start
|
||||
virtual void halt(); //!< USB Device stop
|
||||
virtual void connect(); //!< USB Host start
|
||||
virtual void disconnect(); //!< USB Host stop
|
||||
|
||||
protected:
|
||||
void routeRxMessage(std::shared_ptr<Pro::Message>);
|
||||
virtual void sendMessage(std::shared_ptr<Pro::Message>) const;
|
||||
|
||||
private:
|
||||
void rxMsgReprogramFirmware(std::shared_ptr<Pro::MsgReprogramFirmware>);
|
||||
void rxMsgProgramFlashPageRequest(std::shared_ptr<Pro::MsgProgramFlashPageRequest>);
|
||||
void rxMsgProgramFlashPageReply(std::shared_ptr<Pro::MsgProgramFlashPageReply>);
|
||||
void rxMsgGetWidgetParametersRequest(std::shared_ptr<Pro::MsgGetWidgetParametersRequest>);
|
||||
void rxMsgGetWidgetParametersReply(std::shared_ptr<Pro::MsgGetWidgetParametersReply>);
|
||||
void rxMsgSetWidgetParametersRequest(std::shared_ptr<Pro::MsgSetWidgetParametersRequest>);
|
||||
void rxMsgRecievedDmxPacket(std::shared_ptr<Pro::MsgRecievedDmxPacket>);
|
||||
void rxMsgOutputOnlySendDMX(std::shared_ptr<Pro::MsgOutputOnlySendDMX>);
|
||||
void rxMsgSendRDMData(std::shared_ptr<Pro::MsgSendRDMData>);
|
||||
void rxMsgRecieveDMXOnChange(std::shared_ptr<Pro::MsgRecieveDMXOnChange>);
|
||||
void rxMsgRecievedDMXChanged(std::shared_ptr<Pro::MsgRecievedDMXChanged>);
|
||||
void rxMsgGetWidgetSerialRequest(std::shared_ptr<Pro::MsgGetWidgetSerialRequest>);
|
||||
void rxMsgGetWidgetSerialReply(std::shared_ptr<Pro::MsgGetWidgetSerialReply>);
|
||||
void rxMsgSendRDMDiscovery(std::shared_ptr<Pro::MsgSendRDMDiscovery>);
|
||||
|
||||
enum OperatingModes {
|
||||
USBunknown,
|
||||
USBhost,
|
||||
USBdevice
|
||||
} usb_mode_;
|
||||
};
|
||||
|
||||
} // namespace ENTTEC::Widget
|
||||
|
||||
|
Loading…
Reference in New Issue