mutex for NULL Start Code data
This commit is contained in:
parent
ae5732e2fd
commit
00b1c1299f
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue