@@ -12,7 +12,6 @@ static constexpr int maxAsyncTransfers = 16;
1212USBDMAEmulation::USBDMAEmulation (std::shared_ptr<IUSB > port, uint8_t endpoint, DataTransferDirection dir)
1313 : port(port)
1414 , counters{}
15- , lastRequestIndex(0 )
1615 , endpoint(endpoint)
1716 , dir(dir)
1817 , continuous(false )
@@ -99,7 +98,6 @@ OpStatus USBDMAEmulation::Enable(bool enable)
9998 }
10099
101100 counters.transfersCompleted = 0 ;
102- lastRequestIndex = 0 ;
103101
104102 // for USB nothing is needed to be done to just enable DMA
105103 isEnabled = true ;
@@ -121,7 +119,7 @@ OpStatus USBDMAEmulation::EnableContinuous(bool enable, uint32_t maxTransferSize
121119 return OpStatus::Success;
122120 // For continuous transferring, preemptively request data to be transferred
123121 std::unique_lock lck{ queuesMutex };
124- lastRequestIndex = 0 ;
122+ int lastRequestIndex = 0 ;
125123 port->FlushEndpoint ();
126124 while (!transfers.empty ())
127125 {
@@ -144,7 +142,7 @@ void USBDMAEmulation::UpdateProducerStates()
144142 {
145143 AsyncXfer* async = pendingXfers.front ();
146144 assert (async);
147- int timeout_ms = 100 ; // just checking if the transfer is complete, not waiting .
145+ const int timeout_ms = 0 ; // just check if transfer is completed. Do not wait .
148146 OpStatus status = port->WaitForXfer (async->xfer , timeout_ms);
149147 if (status != OpStatus::Success)
150148 break ;
@@ -154,8 +152,6 @@ void USBDMAEmulation::UpdateProducerStates()
154152 ++counters.transfersCompleted ;
155153 counters.transfersCompleted &= 0xFFFF ;
156154 }
157- if (!continuous)
158- return ;
159155}
160156
161157USBDMAEmulation::State USBDMAEmulation::GetCounters ()
@@ -172,20 +168,16 @@ OpStatus USBDMAEmulation::SubmitRequest(uint64_t index, uint32_t bytesCount, Dat
172168 assert (bytesCount > 0 );
173169 assert (index < mappings.size ());
174170
175- int count = 1 ;
176171 std::unique_lock lck{ queuesMutex };
177- count = std::min (size_t (count), transfers.size ());
178- if (!transfers.empty () && count > 0 )
172+ if (!transfers.empty ())
179173 {
180174 AsyncXfer* async = transfers.front ();
181175 async->requestedSize = bytesCount;
182176 OpStatus status = port->BeginDataXfer (async->xfer , mappings[index].buffer , async->requestedSize , endpoint);
183- lastRequestIndex = index; // (lastRequestIndex + 1) % mappings.size();
184177 if (status != OpStatus::Success)
185178 return OpStatus::Error;
186179 transfers.pop ();
187180 pendingXfers.push (async);
188- --count;
189181 return OpStatus::Success;
190182 }
191183 return OpStatus::Error;
0 commit comments