Exemplo n.º 1
0
void TransferPool::onTransferComplete(TransferPool::Transfer* t)
{
  if(t->transfer->status == LIBUSB_TRANSFER_CANCELLED)
  {
    t->setStopped(true);
    return;
  }

  // process data
  processTransfer(t->transfer);

  if(!enable_submit_)
  {
    t->setStopped(true);
    return;
  }

  // resubmit self
  int r = libusb_submit_transfer(t->transfer);

  if(r != LIBUSB_SUCCESS)
  {
    LOG_ERROR << "failed to submit transfer: " << WRITE_LIBUSB_ERROR(r);
    t->setStopped(true);
  }
}
Exemplo n.º 2
0
void SerialServer::run()
{
    m_in.open(QIODevice::ReadOnly);
    m_out.open(QIODevice::WriteOnly);
    mkdir(TEMP_PATH, 0);

    qWarning("SerialServer::run() looping");
    QByteArray header;
    while (!m_quit) {
        header.clear();
        if(readPacket(&header)) {
            processTransfer(header);
        }
    }
    m_quit = false;
    m_in.close();
    m_out.close();
}
Exemplo n.º 3
0
void TransferPool::onTransferComplete(libusb_transfer* transfer)
{
  // remove transfer from pending queue - should be fast as it is somewhere at the front
  TransferQueue::iterator it = std::find(pending_transfers_.begin(), pending_transfers_.end(), transfer);

  if(it == pending_transfers_.end())
  {
    // TODO: error reporting
  }

  pending_transfers_.erase(it);

  // process data
  processTransfer(transfer);

  // put transfer back in idle queue
  idle_transfers_.push_back(transfer);

  // submit new transfer
  submit(1);
}