bool putBuffer() { Lock<Mutex> _(_dataAccessMutex); if(_inUseBuffers.size() >= MAX_BUFFER_COUNT) { logger(LOG_WARNING) << "USBBulkStreamer: Dropping a frame because of slow forward pipeline." << std::endl; _inUseBuffers.pop_front(); } auto f = _rawBuffers.get(); RawDataFramePtr &raw = *f; if(!raw || raw->data.size() != usbBuffer.size()) { raw = RawDataFramePtr(new RawDataFrame()); raw->data.resize(usbBuffer.size()); } memcpy(raw->data.data(), usbBuffer.data(), usbBuffer.size() - BULK_XFER_EXTRA_SIZE); raw->timestamp = _timer.getCurentRealTime(); // in micro seconds _inUseBuffers.push_back(f); _dataAvailableCondition.notify_all(); return true; }
inline void TriggerTimer::Cancel() { boost::lock_guard<Mutex> lock(m_mutex); if(!m_isPending) { return; } m_isPending = false; m_publisher.Push(Timer::Result::CANCELED); m_trigger.notify_all(); }
/* static */ void Vimpc::CreateEvent(int Event, EventData const & Data) { UniqueLock<Mutex> Lock(QueueMutex); Queue.push_back(std::make_pair(Event, Data)); Condition.notify_all(); }
inline void TriggerTimer::Trigger() { boost::lock_guard<Mutex> lock(m_mutex); m_isPending = false; m_publisher.Push(Timer::Result::EXPIRED); m_trigger.notify_all(); }