2021-08-12 13:13:00 -04:00
|
|
|
/*
|
2021-08-24 18:10:20 -04:00
|
|
|
dmp/device.cpp
|
2021-08-12 13:13:00 -04:00
|
|
|
|
|
|
|
Copyright (c) 2021 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.
|
|
|
|
*/
|
|
|
|
|
2021-08-24 18:10:20 -04:00
|
|
|
#include "device.h"
|
2021-08-12 13:13:00 -04:00
|
|
|
|
2021-08-24 18:10:20 -04:00
|
|
|
namespace ACN::DMP {
|
2021-08-12 13:13:00 -04:00
|
|
|
|
|
|
|
/**
|
2021-08-24 18:10:20 -04:00
|
|
|
* @brief Device::Device
|
2021-08-12 13:13:00 -04:00
|
|
|
*/
|
2021-08-24 18:10:20 -04:00
|
|
|
Device::Device()
|
2021-08-12 13:13:00 -04:00
|
|
|
{
|
|
|
|
|
2021-08-24 18:10:20 -04:00
|
|
|
}
|
|
|
|
|
2021-08-26 17:00:15 -04:00
|
|
|
/**
|
|
|
|
* @brief Device::~Device
|
|
|
|
*/
|
|
|
|
Device::~Device()
|
|
|
|
{
|
|
|
|
delete properties;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Device::DmpReceiver
|
|
|
|
* @param block
|
|
|
|
*/
|
|
|
|
void Device::dmpReceiver(PDU::Block<DMP::Pdu> block)
|
|
|
|
{
|
|
|
|
/// \cite DMP 5.1.2 Relative Addresses
|
|
|
|
/// Relative addresses are used to specify an address as an offset from the
|
|
|
|
/// most recently used address within the same PDU Block.
|
|
|
|
last_address_used = 0;
|
|
|
|
|
|
|
|
for(const auto& dmp : *block.pdu)
|
|
|
|
{
|
|
|
|
switch (dmp->vector()) {
|
|
|
|
case GET_PROPERTY:
|
|
|
|
dmpGet(dmp);
|
|
|
|
break;
|
|
|
|
case SET_PROPERTY:
|
|
|
|
dmpSet(dmp);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-08-28 09:07:50 -04:00
|
|
|
/**
|
|
|
|
* @brief Device::dmpGet
|
|
|
|
* @param dmp
|
|
|
|
*/
|
|
|
|
void Device::dmpGet(PDU::Message<DMP::Pdu> dmp)
|
|
|
|
{
|
|
|
|
(void)dmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Device::dmpSet
|
|
|
|
* @param dmp
|
|
|
|
*/
|
|
|
|
void Device::dmpSet(PDU::Message<DMP::Pdu> dmp)
|
|
|
|
{
|
2021-08-31 11:13:36 -04:00
|
|
|
auto type = std::static_pointer_cast<address_type>(dmp->header());
|
|
|
|
auto set_data = std::static_pointer_cast<address_pair_list>(dmp->data());
|
2021-08-28 09:07:50 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-08-26 17:00:15 -04:00
|
|
|
/**
|
|
|
|
* @brief Device::getProperty
|
|
|
|
* @param address
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
uint32_t Device::getProperty(const unsigned int address) const
|
|
|
|
{
|
|
|
|
if (!properties)
|
|
|
|
return 0;
|
|
|
|
if (properties->size() < address)
|
|
|
|
return 0;
|
|
|
|
return properties->at(address);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Device::setProperty
|
|
|
|
* @param address
|
|
|
|
* @param value
|
|
|
|
*/
|
|
|
|
void Device::setProperty(const unsigned int address, const int value)
|
|
|
|
{
|
|
|
|
if (!properties)
|
|
|
|
return;
|
|
|
|
if (properties->size() < address)
|
|
|
|
return;
|
|
|
|
properties->at(address) = value;
|
|
|
|
}
|
|
|
|
|
2021-08-24 18:10:20 -04:00
|
|
|
} // namespace ACN::DMP
|