controller does not subclass responder

This commit is contained in:
Kevin Matz 2021-08-10 13:02:58 -04:00
parent 9127ad45b9
commit 5bc4c58b0e
4 changed files with 34 additions and 93 deletions

View File

@ -30,12 +30,9 @@ namespace RDM {
* @brief Controller::Controller * @brief Controller::Controller
*/ */
Controller::Controller() Controller::Controller()
: Responder() : next_transaction_(0)
, next_transaction_(0)
{ {
deviceModelID = 2;
deviceModelDescription = "Basic RDM Controller";
deviceProductCategory = PRODUCT_CATEGORY_CONTROL_CONTROLLER;
} }

View File

@ -23,7 +23,9 @@
*/ */
#pragma once #pragma once
#include "responder.h" #include "message.h"
#include <cstdint>
namespace RDM { namespace RDM {
@ -31,7 +33,6 @@ namespace RDM {
* @brief The Controller class * @brief The Controller class
*/ */
class Controller class Controller
: public Responder
{ {
public: public:
Controller(); Controller();

View File

@ -174,20 +174,6 @@ void Responder::receive(const std::vector<uint8_t> &data)
} }
/**
* @brief Responder::send
*/
void Responder::send()
{
if (queued_messages_.empty())
return;
auto message = queued_messages_.front();
queued_messages_.pop();
send(message);
}
/** /**
* @brief Responder::send * @brief Responder::send
* @param data * @param data
@ -250,46 +236,38 @@ void Responder::send(Message *message)
*/ */
void Responder::receive(const Message *message) void Responder::receive(const Message *message)
{ {
Message * response = nullptr; if (message->commandClass != DISCOVERY_COMMAND ||
if (message->commandClass == DISCOVERY_COMMAND || message->commandClass != GET_COMMAND ||
message->commandClass == GET_COMMAND || message->commandClass != SET_COMMAND)
message->commandClass == SET_COMMAND) return;
{
// 6.2.8.1 Message Count field for Controller Generated Messages
// The Message Count shall be set to 0x00 in all controller generated requests.
if (message->messageCount != 0)
return;
response = new Message(); // 6.2.8.1 Message Count field for Controller Generated Messages
response->source = id; // The Message Count shall be set to 0x00 in all controller generated requests.
response->destination = message->source; if (message->messageCount != 0)
response->subDevice = message->subDevice; return;
response->propertyID = message->propertyID;
response->transaction = message->transaction; auto response = new Message();
} response->source = id;
response->destination = message->source;
response->subDevice = message->subDevice;
response->propertyID = message->propertyID;
response->transaction = message->transaction;
switch (message->commandClass) { switch (message->commandClass) {
case DISCOVERY_COMMAND: case DISCOVERY_COMMAND:
rxDiscovery(message, response); rxDiscovery(message, response);
return; break;
case DISCOVERY_COMMAND_RESPONSE:
rxDiscoveryResponse(message);
return;
case GET_COMMAND: case GET_COMMAND:
rxGet(message, response); rxGet(message, response);
return; break;
case GET_COMMAND_RESPONSE:
rxGetResponse(message);
return;
case SET_COMMAND: case SET_COMMAND:
rxSet(message, response); rxSet(message, response);
return; break;
case SET_COMMAND_RESPONSE:
rxSetResponse(message);
return;
default: default:
return; break;
} }
delete message;
message = nullptr;
} }
@ -301,17 +279,7 @@ void Responder::rxDiscovery(__attribute__((unused)) const Message *message,
Message* response) Message* response)
{ {
response->commandClass = DISCOVERY_COMMAND_RESPONSE; response->commandClass = DISCOVERY_COMMAND_RESPONSE;
send(response); queued_messages_.push(response);
}
/**
* @brief Responder::rxDiscoveryResponse
* @param message
*/
void Responder::rxDiscoveryResponse(__attribute__((unused)) const Message *message)
{
} }
@ -331,14 +299,14 @@ void Responder::rxGet(const Message *message,
{ {
response->responseType = RESPONSE_TYPE_NACK_REASON; response->responseType = RESPONSE_TYPE_NACK_REASON;
response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE); response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE);
send(response); queued_messages_.push(response);
return; return;
} }
if (message->subDevice == 0) if (message->subDevice == 0)
{ {
get(message, response); get(message, response);
send(response); queued_messages_.push(response);
return; return;
} }
@ -346,22 +314,12 @@ void Responder::rxGet(const Message *message,
{ {
response->responseType = RESPONSE_TYPE_NACK_REASON; response->responseType = RESPONSE_TYPE_NACK_REASON;
response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE); response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE);
send(response); queued_messages_.push(response);
return; return;
} }
sub_devices_.at(message->subDevice)->get(message, response); sub_devices_.at(message->subDevice)->get(message, response);
send(response); queued_messages_.push(response);
}
/**
* @brief Responder::rxGetResponse
* @param message
*/
void Responder::rxGetResponse(__attribute__((unused)) const Message *message)
{
} }
@ -375,7 +333,7 @@ void Responder::rxSet(const Message *message,
if (message->subDevice == 0) if (message->subDevice == 0)
{ {
set(message, response); set(message, response);
send(response); queued_messages_.push(response);
return; return;
} }
@ -389,7 +347,6 @@ void Responder::rxSet(const Message *message,
queued_messages_.push(rsp); queued_messages_.push(rsp);
} }
delete response; delete response;
send();
return; return;
} }
@ -397,22 +354,12 @@ void Responder::rxSet(const Message *message,
{ {
response->responseType = RESPONSE_TYPE_NACK_REASON; response->responseType = RESPONSE_TYPE_NACK_REASON;
response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE); response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE);
send(response); queued_messages_.push(response);
return; return;
} }
sub_devices_.at(message->subDevice)->set(message, response); sub_devices_.at(message->subDevice)->set(message, response);
send(response); queued_messages_.push(response);
}
/**
* @brief Responder::rxSetResponse
* @param message
*/
void Responder::rxSetResponse(__attribute__((unused)) const Message *message)
{
} }

View File

@ -42,17 +42,13 @@ public:
void receive(const std::vector<uint8_t>& data); void receive(const std::vector<uint8_t>& data);
protected: protected:
virtual void send();
virtual void send(const std::vector<uint8_t>& data); virtual void send(const std::vector<uint8_t>& data);
virtual void send(Message* message); virtual void send(Message* message);
virtual void receive(const Message* message); virtual void receive(const Message* message);
virtual void rxDiscovery(const Message* message, Message* response); virtual void rxDiscovery(const Message* message, Message* response);
virtual void rxDiscoveryResponse(const Message* message);
virtual void rxGet(const Message* message, Message* response); virtual void rxGet(const Message* message, Message* response);
virtual void rxGetResponse(const Message* message);
virtual void rxSet(const Message* message, Message* response); virtual void rxSet(const Message* message, Message* response);
virtual void rxSetResponse(const Message* message);
std::queue<Message*> queued_messages_; std::queue<Message*> queued_messages_;