@@ -220,13 +220,11 @@ int ScopeDevice::bulkTransfer( unsigned char endpoint, const unsigned char *data
220
220
int ScopeDevice::bulkReadMulti ( unsigned char *data, unsigned length, bool bigBlock, int attempts ) {
221
221
if ( !handle )
222
222
return LIBUSB_ERROR_NO_DEVICE;
223
- const unsigned packetLength = 512 * 128 ;
224
223
int retCode = 0 ;
225
224
// printf("USBDevice::bulkReadMulti( %d )\n", length );
226
225
if ( bigBlock ) {
227
226
// more stable if fast data is read as one big block (up to 4 MB)
228
227
retCode = bulkTransfer ( HANTEK_EP_IN, data, length, attempts, HANTEK_TIMEOUT_MULTI * length / inPacketLength );
229
- QWriteLocker locker ( &lock );
230
228
if ( retCode < 0 )
231
229
received = 0 ;
232
230
else
@@ -235,28 +233,26 @@ int ScopeDevice::bulkReadMulti( unsigned char *data, unsigned length, bool bigBl
235
233
return retCode;
236
234
} else {
237
235
// slow data is read in smaller chunks -> quick screen update
236
+ const unsigned packetLength = 512 * 78 ; // 50 blocks for one screen width of 20000
238
237
retCode = int ( packetLength );
239
238
unsigned int packet;
240
- {
241
- QWriteLocker locker ( &lock );
242
- received = 0 ;
243
- }
239
+ received = 0 ;
244
240
for ( packet = 0 ; unsigned ( received ) < length && retCode == int ( packetLength ); ++packet ) {
245
241
if ( hasStopped () )
246
242
break ;
247
243
retCode = bulkTransfer ( HANTEK_EP_IN, data + packet * packetLength, qMin ( length - unsigned ( received ), packetLength ),
248
244
attempts, HANTEK_TIMEOUT_MULTI * 10 );
249
- if ( ( packet + 1 ) * packetLength < length ) { // clear the next+1 packet
250
- unsigned char *dp = data + ( packet + 1 ) * packetLength;
251
- for ( unsigned iii = ( packet + 1 ) * packetLength; iii < qMin ( ( packet + 2 ) * packetLength, length ); ++iii )
252
- *dp++ = 0x80 ;
253
- }
254
- if ( retCode > 0 ) {
255
- QWriteLocker locker ( &lock );
245
+ unsigned next = ( packet + 1 ) * packetLength;
246
+ if ( next > length )
247
+ next = 0 ;
248
+ unsigned char *dp = data + next;
249
+ unsigned end = qMin ( next + packetLength, length );
250
+ for ( unsigned iii = next; iii < end; ++iii )
251
+ *dp++ = 0x80 ;
252
+ if ( retCode > 0 )
256
253
received += unsigned ( retCode );
257
- }
258
254
}
259
- // printf( "total packets: %d, received: %d\n", packet + 1 , received );
255
+ // printf( "total packets: %d, received: %d\n", packet, received );
260
256
if ( received > 0 )
261
257
retCode = int ( received );
262
258
return retCode;
0 commit comments