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); } }
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(); }
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); }