Exemplo n.º 1
0
  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;
  }
Exemplo n.º 2
0
 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();
 }
Exemplo n.º 3
0
/* static */ void Vimpc::CreateEvent(int Event, EventData const & Data)
{
   UniqueLock<Mutex> Lock(QueueMutex);
   Queue.push_back(std::make_pair(Event, Data));
   Condition.notify_all();
}
Exemplo n.º 4
0
 inline void TriggerTimer::Trigger() {
   boost::lock_guard<Mutex> lock(m_mutex);
   m_isPending = false;
   m_publisher.Push(Timer::Result::EXPIRED);
   m_trigger.notify_all();
 }