controller does not subclass responder
This commit is contained in:
parent
9127ad45b9
commit
5bc4c58b0e
|
@ -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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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_;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user