1
0
Fork 0

smart pointers for messages

This commit is contained in:
Kevin Matz 2021-08-11 10:28:03 -04:00
parent 32c5a37f57
commit ec80a809db
12 changed files with 97 additions and 107 deletions

View File

@ -50,7 +50,7 @@ Controller::~Controller()
* @brief Controller::rxDiscoveryResponse
* @param message
*/
void Controller::rxDiscoveryResponse(__attribute__((unused)) const Message* message)
void Controller::rxDiscoveryResponse(__attribute__((unused)) const MsgPtr message)
{
}
@ -60,7 +60,7 @@ void Controller::rxDiscoveryResponse(__attribute__((unused)) const Message* mess
* @brief Controller::rxGetResponse
* @param message
*/
void Controller::rxGetResponse(__attribute__((unused)) const Message* message)
void Controller::rxGetResponse(__attribute__((unused)) const MsgPtr message)
{
}
@ -70,7 +70,7 @@ void Controller::rxGetResponse(__attribute__((unused)) const Message* message)
* @brief Controller::rxSetResponse
* @param message
*/
void Controller::rxSetResponse(__attribute__((unused)) const Message* message)
void Controller::rxSetResponse(__attribute__((unused)) const MsgPtr message)
{
}

View File

@ -39,9 +39,9 @@ public:
~Controller();
protected:
virtual void rxDiscoveryResponse(const Message* message);
virtual void rxGetResponse(const Message* message);
virtual void rxSetResponse(const Message* message);
virtual void rxDiscoveryResponse(const MsgPtr message);
virtual void rxGetResponse(const MsgPtr message);
virtual void rxSetResponse(const MsgPtr message);
private:
uint8_t next_transaction_;

View File

@ -263,7 +263,7 @@ void Device::addProductDetailId(uint16_t id)
* @param message
* @param response
*/
void Device::get(const Message *message, Message *response)
void Device::get(const MsgPtr message, MsgPtr response)
{
if (!actionPrep_(message, response))
return;
@ -276,7 +276,7 @@ void Device::get(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::set(const Message *message, Message *response)
void Device::set(const MsgPtr message, MsgPtr response)
{
if (!actionPrep_(message, response))
return;
@ -288,7 +288,7 @@ void Device::set(const Message *message, Message *response)
* @brief Device::actionPrep
* @return
*/
bool Device::actionPrep_(const Message *message, Message *response)
bool Device::actionPrep_(const MsgPtr message, MsgPtr response)
{
if (!parameters_.count(message->propertyID))
{
@ -311,7 +311,7 @@ bool Device::actionPrep_(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionGetSupportedParameters(const Message *message, Message *response)
void Device::actionGetSupportedParameters(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -346,7 +346,7 @@ void Device::actionGetSupportedParameters(const Message *message, Message *respo
* @param message
* @param response
*/
void Device::actionGetDeviceInfo(const Message *message, Message *response)
void Device::actionGetDeviceInfo(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -370,7 +370,7 @@ void Device::actionGetDeviceInfo(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionGetProductDetailIdList(const Message *message, Message *response)
void Device::actionGetProductDetailIdList(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -391,7 +391,7 @@ void Device::actionGetProductDetailIdList(const Message *message, Message *respo
* @param message
* @param response
*/
void Device::actionGetDevModelDescription(const Message *message, Message *response)
void Device::actionGetDevModelDescription(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -411,7 +411,7 @@ void Device::actionGetDevModelDescription(const Message *message, Message *respo
* @param message
* @param response
*/
void Device::actionGetManufacturerLabel(const Message *message, Message *response)
void Device::actionGetManufacturerLabel(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -432,7 +432,7 @@ void Device::actionGetManufacturerLabel(const Message *message, Message *respons
* @param message
* @param response
*/
void Device::actionGetLanguage(const Message *message, Message *response)
void Device::actionGetLanguage(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -449,7 +449,7 @@ void Device::actionGetLanguage(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionSetLanguage(const Message *message, Message *response)
void Device::actionSetLanguage(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(2, response))
return;
@ -473,7 +473,7 @@ void Device::actionSetLanguage(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionGetSoftwareVersionLabel(const Message *message, Message *response)
void Device::actionGetSoftwareVersionLabel(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -494,7 +494,7 @@ void Device::actionGetSoftwareVersionLabel(const Message *message, Message *resp
* @param message
* @param response
*/
void Device::actionGetDmxPersonality(const Message *message, Message *response)
void Device::actionGetDmxPersonality(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -510,7 +510,7 @@ void Device::actionGetDmxPersonality(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionSetDmxPersonality(const Message *message, Message *response)
void Device::actionSetDmxPersonality(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(1, response))
return;
@ -534,7 +534,7 @@ void Device::actionSetDmxPersonality(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionGetDmxPersonalityDesc(const Message *message, Message *response)
void Device::actionGetDmxPersonalityDesc(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(1, response))
return;
@ -563,7 +563,7 @@ void Device::actionGetDmxPersonalityDesc(const Message *message, Message *respon
* @param message
* @param response
*/
void Device::actionGetDmxStartAddress(const Message *message, Message *response)
void Device::actionGetDmxStartAddress(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -581,7 +581,7 @@ void Device::actionGetDmxStartAddress(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionSetDmxStartAddress(const Message *message, Message *response)
void Device::actionSetDmxStartAddress(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(2, response))
return;
@ -602,7 +602,7 @@ void Device::actionSetDmxStartAddress(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionSensorDispatch(const Message *message, Message *response)
void Device::actionSensorDispatch(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(1, response))
return;
@ -662,7 +662,7 @@ void Device::actionSensorDispatch(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionGetIdentifyDevice(const Message *message, Message *response)
void Device::actionGetIdentifyDevice(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -677,7 +677,7 @@ void Device::actionGetIdentifyDevice(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionSetIdentifyDevice(const Message *message, Message *response)
void Device::actionSetIdentifyDevice(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(1, response))
return;
@ -692,7 +692,7 @@ void Device::actionSetIdentifyDevice(const Message *message, Message *response)
* @param message
* @param response
*/
void Device::actionSetResetDevice(const Message *message, Message *response)
void Device::actionSetResetDevice(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(1, response))
return;

View File

@ -47,8 +47,8 @@ public:
uint16_t subDeviceCount() const;
void addProductDetailId(uint16_t);
void get(const Message* message, Message* response);
void set(const Message* message, Message* response);
void get(const MsgPtr message, MsgPtr response);
void set(const MsgPtr message, MsgPtr response);
virtual void identify(bool state) { identifying_ = state; }
virtual void reset(bool hard) { (void)hard; }
@ -64,25 +64,25 @@ protected:
std::vector<Sensor*> sensors_;
std::list<uint16_t> product_detail_list_;
bool actionPrep_(const Message *message, Message *response);
bool actionPrep_(const MsgPtr message, MsgPtr response);
void actionGetSupportedParameters (const Message *message, Message *response);
void actionGetDeviceInfo (const Message *message, Message *response);
void actionGetProductDetailIdList (const Message *message, Message *response);
void actionGetDevModelDescription (const Message *message, Message *response);
void actionGetManufacturerLabel (const Message *message, Message *response);
void actionGetLanguage (const Message *message, Message *response);
void actionSetLanguage (const Message *message, Message *response);
void actionGetSoftwareVersionLabel(const Message *message, Message *response);
void actionGetDmxPersonality (const Message *message, Message *response);
void actionSetDmxPersonality (const Message *message, Message *response);
void actionGetDmxPersonalityDesc (const Message *message, Message *response);
void actionGetDmxStartAddress (const Message *message, Message *response);
void actionSetDmxStartAddress (const Message *message, Message *response);
void actionSensorDispatch (const Message *message, Message *response);
void actionGetIdentifyDevice (const Message *message, Message *response);
void actionSetIdentifyDevice (const Message *message, Message *response);
void actionSetResetDevice (const Message *message, Message *response);
void actionGetSupportedParameters (const MsgPtr message, MsgPtr response);
void actionGetDeviceInfo (const MsgPtr message, MsgPtr response);
void actionGetProductDetailIdList (const MsgPtr message, MsgPtr response);
void actionGetDevModelDescription (const MsgPtr message, MsgPtr response);
void actionGetManufacturerLabel (const MsgPtr message, MsgPtr response);
void actionGetLanguage (const MsgPtr message, MsgPtr response);
void actionSetLanguage (const MsgPtr message, MsgPtr response);
void actionGetSoftwareVersionLabel(const MsgPtr message, MsgPtr response);
void actionGetDmxPersonality (const MsgPtr message, MsgPtr response);
void actionSetDmxPersonality (const MsgPtr message, MsgPtr response);
void actionGetDmxPersonalityDesc (const MsgPtr message, MsgPtr response);
void actionGetDmxStartAddress (const MsgPtr message, MsgPtr response);
void actionSetDmxStartAddress (const MsgPtr message, MsgPtr response);
void actionSensorDispatch (const MsgPtr message, MsgPtr response);
void actionGetIdentifyDevice (const MsgPtr message, MsgPtr response);
void actionSetIdentifyDevice (const MsgPtr message, MsgPtr response);
void actionSetResetDevice (const MsgPtr message, MsgPtr response);
private:
Device* parent_;

View File

@ -303,7 +303,7 @@ uint16_t Message::checksum() const
* @param response
* @return
*/
bool Message::requiredLength(const size_t length, Message *response) const
bool Message::requiredLength(const size_t length, MsgPtr response) const
{
if (data_.size() != length)
{

View File

@ -24,12 +24,17 @@
#pragma once
#include <cstdint>
#include <memory>
#include <vector>
#include "rdm.h"
#include "uid.h"
namespace RDM {
struct Message;
using MsgPtr = std::shared_ptr<Message>;
struct Message
{
Message();
@ -68,7 +73,7 @@ struct Message
const std::vector<uint8_t>* data() const { return &data_; }
uint8_t length() const { return data_.size(); }
uint16_t checksum() const;
bool requiredLength(const size_t length, Message* response) const;
bool requiredLength(const size_t length, MsgPtr response) const;
template<typename T>
void appendData(const T & val)
@ -117,7 +122,8 @@ private:
}
return sum;
}
};
}; // struct Message
} // namespace RDM

View File

@ -46,7 +46,7 @@ Parameter::~Parameter()
* @param message
* @param response
*/
void Parameter::disc(const Message *message, Message *response) const
void Parameter::disc(const MsgPtr message, MsgPtr response) const
{
if (!discover_)
{
@ -64,8 +64,7 @@ void Parameter::disc(const Message *message, Message *response) const
* @param ack
* @param nak
*/
void Parameter::get(__attribute__((unused)) const Message* message,
Message* response) const
void Parameter::get(const MsgPtr message, MsgPtr response) const
{
if (!getter_){
response->nak(NR_UNSUPPORTED_COMMAND_CLASS);
@ -82,8 +81,7 @@ void Parameter::get(__attribute__((unused)) const Message* message,
* @param ack
* @param nak
*/
void Parameter::set(__attribute__((unused)) const Message* message,
Message* response) const
void Parameter::set(const MsgPtr message, MsgPtr response) const
{
if (!setter_)
{

View File

@ -30,7 +30,7 @@
namespace RDM {
using PidAction = std::function<void(const Message* message, Message* response)>;
using PidAction = std::function<void(const MsgPtr message, MsgPtr response)>;
/**
* @brief The Parameter class
@ -41,9 +41,9 @@ public:
Parameter();
~Parameter();
void disc(const Message* message, Message* response) const;
void get(const Message* message, Message* response) const;
void set(const Message* message, Message* response) const;
void disc(const MsgPtr message, MsgPtr response) const;
void get(const MsgPtr message, MsgPtr response) const;
void set(const MsgPtr message, MsgPtr response) const;
void discAction(const PidAction action) { getter_ = action; };
void getAction(const PidAction action) { getter_ = action; };

View File

@ -105,16 +105,13 @@ void Responder::send(__attribute__((unused)) const std::vector<uint8_t> &data)
* @brief Responder::send
* @param message
*/
void Responder::send(Message *response)
void Responder::send(MsgPtr response)
{
if (!response)
return;
if (response->do_no_send)
{
delete response;
return;
}
// 6.2.8.2 Message Count field for Responder Generated Messages
// If a responder has more than 255 messages queued, then the Message Count
@ -125,7 +122,6 @@ void Responder::send(Message *response)
std::vector<uint8_t> data;
response->write(data);
send(data);
delete response;
}
@ -135,9 +131,8 @@ void Responder::send(Message *response)
*/
void Responder::receive(const std::vector<uint8_t> &data)
{
auto message = new Message(data);
auto message = MsgPtr(new Message(data));
receive(message);
delete message;
}
@ -145,7 +140,7 @@ void Responder::receive(const std::vector<uint8_t> &data)
* @brief Responder::receive
* @param message
*/
void Responder::receive(const Message *message)
void Responder::receive(const MsgPtr message)
{
if (message->short_message)
{
@ -184,7 +179,7 @@ void Responder::receive(const Message *message)
message->commandClass == SET_COMMAND_RESPONSE)
return;
auto response = new Message();
auto response = MsgPtr(new Message());
response->source = id;
response->destination = message->source;
response->subDevice = message->subDevice;
@ -205,7 +200,6 @@ void Responder::receive(const Message *message)
rxSet(message, response);
break;
default:
delete response;
return;
}
@ -217,16 +211,10 @@ void Responder::receive(const Message *message)
/// responders shall not send a response.
if (message->destination.isBroadcast() &&
message->commandClass != DISCOVERY_COMMAND)
{
delete response;
return;
}
return;
if (response->do_no_send)
{
delete response;
return;
}
return;
send(response);
}
@ -250,7 +238,7 @@ void Responder::reset(bool hard)
* @brief Responder::rxDiscovery
* @param message
*/
void Responder::rxDiscovery(const Message *message, Message* response)
void Responder::rxDiscovery(const MsgPtr message, MsgPtr response)
{
if (message->subDevice != 0)
{
@ -269,7 +257,7 @@ void Responder::rxDiscovery(const Message *message, Message* response)
* @brief Responder::rxGet
* @param message
*/
void Responder::rxGet(const Message *message, Message* response)
void Responder::rxGet(const MsgPtr message, MsgPtr response)
{
// 9.2.2 Using Sub-Devices
// Broadcast GET commands sent to the SUB_DEVICE_ALL_CALL Sub-Device ID are
@ -302,7 +290,7 @@ void Responder::rxGet(const Message *message, Message* response)
* @brief Responder::rxSet
* @param message
*/
void Responder::rxSet(const Message *message, Message* response)
void Responder::rxSet(const MsgPtr message, MsgPtr response)
{
if (message->subDevice == 0)
{
@ -314,13 +302,11 @@ void Responder::rxSet(const Message *message, Message* response)
{
for (auto& [num, dev] : sub_devices_)
{
Message * rsp = new Message(*response);
auto rsp = MsgPtr(new Message());
rsp->subDevice = num;
dev->set(message, rsp);
if (message->destination.isBroadcast())
delete rsp;
else
queued_messages_.push(rsp);
if (!message->destination.isBroadcast())
send(rsp);
}
response->do_no_send = true;
return;
@ -341,7 +327,7 @@ void Responder::rxSet(const Message *message, Message* response)
* @param message
* @param response
*/
void Responder::actionDiscoverUniqueBranch(const Message *message, Message *response)
void Responder::actionDiscoverUniqueBranch(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(12, response))
return;
@ -379,7 +365,7 @@ void Responder::actionDiscoverUniqueBranch(const Message *message, Message *resp
* @param message
* @param response
*/
void Responder::actionDiscoveryMute(const Message *message, Message *response)
void Responder::actionDiscoveryMute(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -396,7 +382,7 @@ void Responder::actionDiscoveryMute(const Message *message, Message *response)
* @param message
* @param response
*/
void Responder::actionDiscoveryUnmute(const Message *message, Message *response)
void Responder::actionDiscoveryUnmute(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -413,7 +399,7 @@ void Responder::actionDiscoveryUnmute(const Message *message, Message *response)
* @param message
* @param response
*/
void Responder::actionGetCommsStatus(const Message *message, Message *response)
void Responder::actionGetCommsStatus(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;
@ -430,7 +416,7 @@ void Responder::actionGetCommsStatus(const Message *message, Message *response)
* @param message
* @param response
*/
void Responder::actionSetCommsStatus(const Message *message, Message *response)
void Responder::actionSetCommsStatus(const MsgPtr message, MsgPtr response)
{
if (!message->requiredLength(0, response))
return;

View File

@ -54,18 +54,18 @@ public:
protected:
virtual void send(const std::vector<uint8_t>& data);
virtual void send(Message* message);
virtual void receive(const Message* message);
virtual void send(MsgPtr message);
virtual void receive(const MsgPtr message);
virtual void rxDiscovery(const Message* message, Message* response);
virtual void rxGet(const Message* message, Message* response);
virtual void rxSet(const Message* message, Message* response);
virtual void rxDiscovery(const MsgPtr message, MsgPtr response);
virtual void rxGet(const MsgPtr message, MsgPtr response);
virtual void rxSet(const MsgPtr message, MsgPtr response);
void actionDiscoverUniqueBranch (const Message *message, Message *response);
void actionDiscoveryMute (const Message *message, Message *response);
void actionDiscoveryUnmute (const Message *message, Message *response);
void actionGetCommsStatus (const Message *message, Message *response);
void actionSetCommsStatus (const Message *message, Message *response);
void actionDiscoverUniqueBranch (const MsgPtr message, MsgPtr response);
void actionDiscoveryMute (const MsgPtr message, MsgPtr response);
void actionDiscoveryUnmute (const MsgPtr message, MsgPtr response);
void actionGetCommsStatus (const MsgPtr message, MsgPtr response);
void actionSetCommsStatus (const MsgPtr message, MsgPtr response);
std::queue<Message*> queued_messages_;

View File

@ -117,7 +117,7 @@ void Sensor::clearMemory()
* @param message
* @param response
*/
void Sensor::actionGetSensorDefinition(uint8_t index, Message *response)
void Sensor::actionGetSensorDefinition(uint8_t index, MsgPtr response)
{
response->responseType = RESPONSE_TYPE_ACK;
response->appendData(index);
@ -143,7 +143,7 @@ void Sensor::actionGetSensorDefinition(uint8_t index, Message *response)
* @param message
* @param response
*/
void Sensor::actionGetSensorValue(uint8_t index, Message *response)
void Sensor::actionGetSensorValue(uint8_t index, MsgPtr response)
{
response->responseType = RESPONSE_TYPE_ACK;
response->appendData(index);
@ -159,7 +159,7 @@ void Sensor::actionGetSensorValue(uint8_t index, Message *response)
* @param message
* @param response
*/
void Sensor::actionSetSensorValue(uint8_t index, Message *response)
void Sensor::actionSetSensorValue(uint8_t index, MsgPtr response)
{
clearMemory();
@ -189,7 +189,7 @@ void Sensor::actionSetSensorValue(uint8_t index, Message *response)
* @param message
* @param response
*/
void Sensor::actionSetRecordSensors(Message *response)
void Sensor::actionSetRecordSensors(MsgPtr response)
{
save();
response->responseType = RESPONSE_TYPE_ACK;

View File

@ -69,10 +69,10 @@ public:
int16_t maximum() const;
// PID behaviors
void actionGetSensorDefinition (uint8_t index, Message *response);
void actionGetSensorValue (uint8_t index, Message *response);
void actionSetSensorValue (uint8_t index, Message *response);
void actionSetRecordSensors (Message *response);
void actionGetSensorDefinition (uint8_t index, MsgPtr response);
void actionGetSensorValue (uint8_t index, MsgPtr response);
void actionSetSensorValue (uint8_t index, MsgPtr response);
void actionSetRecordSensors (MsgPtr response);
private:
int16_t min_;