1
0
Fork 0

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
*/
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
#include "responder.h"
#include "message.h"
#include <cstdint>
namespace RDM {
@ -31,7 +33,6 @@ namespace RDM {
* @brief The Controller class
*/
class Controller
: public Responder
{
public:
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
* @param data
@ -250,46 +236,38 @@ void Responder::send(Message *message)
*/
void Responder::receive(const Message *message)
{
Message * response = nullptr;
if (message->commandClass == DISCOVERY_COMMAND ||
message->commandClass == GET_COMMAND ||
message->commandClass == SET_COMMAND)
{
// 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;
if (message->commandClass != DISCOVERY_COMMAND ||
message->commandClass != GET_COMMAND ||
message->commandClass != SET_COMMAND)
return;
response = new Message();
response->source = id;
response->destination = message->source;
response->subDevice = message->subDevice;
response->propertyID = message->propertyID;
response->transaction = message->transaction;
}
// 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;
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) {
case DISCOVERY_COMMAND:
rxDiscovery(message, response);
return;
case DISCOVERY_COMMAND_RESPONSE:
rxDiscoveryResponse(message);
return;
break;
case GET_COMMAND:
rxGet(message, response);
return;
case GET_COMMAND_RESPONSE:
rxGetResponse(message);
return;
break;
case SET_COMMAND:
rxSet(message, response);
return;
case SET_COMMAND_RESPONSE:
rxSetResponse(message);
return;
break;
default:
return;
break;
}
delete message;
message = nullptr;
}
@ -301,17 +279,7 @@ void Responder::rxDiscovery(__attribute__((unused)) const Message *message,
Message* response)
{
response->commandClass = DISCOVERY_COMMAND_RESPONSE;
send(response);
}
/**
* @brief Responder::rxDiscoveryResponse
* @param message
*/
void Responder::rxDiscoveryResponse(__attribute__((unused)) const Message *message)
{
queued_messages_.push(response);
}
@ -331,14 +299,14 @@ void Responder::rxGet(const Message *message,
{
response->responseType = RESPONSE_TYPE_NACK_REASON;
response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE);
send(response);
queued_messages_.push(response);
return;
}
if (message->subDevice == 0)
{
get(message, response);
send(response);
queued_messages_.push(response);
return;
}
@ -346,22 +314,12 @@ void Responder::rxGet(const Message *message,
{
response->responseType = RESPONSE_TYPE_NACK_REASON;
response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE);
send(response);
queued_messages_.push(response);
return;
}
sub_devices_.at(message->subDevice)->get(message, response);
send(response);
}
/**
* @brief Responder::rxGetResponse
* @param message
*/
void Responder::rxGetResponse(__attribute__((unused)) const Message *message)
{
queued_messages_.push(response);
}
@ -375,7 +333,7 @@ void Responder::rxSet(const Message *message,
if (message->subDevice == 0)
{
set(message, response);
send(response);
queued_messages_.push(response);
return;
}
@ -389,7 +347,6 @@ void Responder::rxSet(const Message *message,
queued_messages_.push(rsp);
}
delete response;
send();
return;
}
@ -397,22 +354,12 @@ void Responder::rxSet(const Message *message,
{
response->responseType = RESPONSE_TYPE_NACK_REASON;
response->appendData<uint16_t>(NR_SUB_DEVICE_OUT_OF_RANGE);
send(response);
queued_messages_.push(response);
return;
}
sub_devices_.at(message->subDevice)->set(message, response);
send(response);
}
/**
* @brief Responder::rxSetResponse
* @param message
*/
void Responder::rxSetResponse(__attribute__((unused)) const Message *message)
{
queued_messages_.push(response);
}

View File

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