1
0
Fork 0

mutex for NULL Start Code data

This commit is contained in:
Kevin Matz 2021-08-31 11:33:02 -04:00
parent ae5732e2fd
commit 00b1c1299f
4 changed files with 19 additions and 26 deletions

View File

@ -33,7 +33,9 @@ namespace DMX {
Universe::Universe(int timeout_period)
: rx_timeout_period_(timeout_period)
{
null_start_mutex.lock();
null_start_data.fill(0);
null_start_mutex.unlock();
}
@ -45,16 +47,6 @@ Universe::~Universe()
}
/**
* @brief Universe::data
* @return
*/
const DimmerData * Universe::data() const
{
return &null_start_data;
}
/**
* @brief Universe::slot
* @param address
@ -66,7 +58,12 @@ uint8_t Universe::slot(const uint16_t address) const
return 0;
if (address > null_start_data.size() - 1)
return 0;
return null_start_data[address];
null_start_mutex.lock();
uint8_t val = null_start_data[address];
null_start_mutex.unlock();
return val;
}
@ -96,7 +93,9 @@ void Universe::setData(std::vector<uint8_t> vect) {
{
case E111_NULL_START:
vect.resize(null_start_data.size(), 0); // pad shorter, truncate larger
null_start_mutex.lock();
std::copy(vect.begin(), vect.end(), null_start_data.begin());
null_start_mutex.unlock();
rx_timeout_(true);
for (const auto &cb : callbacks_)
cb(this);
@ -118,7 +117,10 @@ void Universe::setValue(const uint16_t address, const uint8_t value)
return;
if (address > null_start_data.size() - 1)
return;
null_start_mutex.lock();
null_start_data[address] = value;
null_start_mutex.unlock();
}
@ -135,8 +137,11 @@ void Universe::setValue(const uint16_t start, const uint16_t footprint,
return;
if (start + footprint > null_start_data.size() - 1)
return;
null_start_mutex.lock();
for (int i = 0; i < footprint; i++)
null_start_data[start + i] = profile[i];
null_start_mutex.unlock();
}

View File

@ -28,6 +28,7 @@
#include <chrono>
#include <cstdint>
#include <functional>
#include <mutex>
#include <queue>
#include <vector>
@ -49,7 +50,6 @@ class Universe {
Universe (int timeout_period = E111_DATA_LOSS_TIMEOUT);
virtual ~Universe ();
virtual const DimmerData * data() const;
virtual uint8_t slot (const uint16_t) const;
virtual double rxRate();
@ -61,6 +61,8 @@ class Universe {
protected:
DimmerData null_start_data; //!< NULL Start Code data
mutable std::mutex null_start_mutex; //!< memory protect Null Start data
std::vector<DataHandler> callbacks_; //!< list of calback functions
private:

View File

@ -188,19 +188,6 @@ void ArbitratingUniverse::synchronize(uint8_t sequence_number)
}
/**
* @brief MergeProxyUniverse::data
* @return
*/
const DMX::DimmerData * ArbitratingUniverse::data() const
{
auto universe = dominant_();
if (!universe)
return nullptr;
return universe->data();
}
/**
* @brief MergeProxyUniverse::slot
* @param s

View File

@ -76,7 +76,6 @@ public:
void synchronize(uint8_t = 0) override;
// DMX::Universe Overrides:
const DMX::DimmerData *data() const override;
uint8_t slot(const uint16_t) const override;
double rxRate() override;