public int purgeINData() { int var1 = this.driverParameters.getBufferCount(); InBuffer var2 = null; boolean var3 = false; ByteBuffer var4 = this.d; synchronized (this.d) { int cbRead; try { do { this.sourceChannel.configureBlocking(false); cbRead = this.sourceChannel.read(this.d); this.d.clear(); } while (cbRead != 0); } catch (Exception var6) { var6.printStackTrace(); } this.clearCbAvailableToRead(); for (int var5 = 0; var5 < var1; ++var5) { var2 = this.getBuffer(var5); if (var2.isSomeStatus() && var2.getLength() > 2) { var2.purge(); } } return 0; } }
public void processBulkInData(InBuffer inBuffer) throws D2xxException { byte signalEvents = 0; byte signalLineEvents = 0; boolean signalRxChar = false; try { int cbSomeCount = inBuffer.getLength(); if (cbSomeCount < 2) { inBuffer.getByteBuffer().clear(); return; } int cbBufferFree; int var7; synchronized (this.mSinkFullLock) { cbBufferFree = this.cbBufferFree(); var7 = cbSomeCount - 2; if (cbBufferFree < var7) { Log.d("ProcessBulkIn::", " Buffer is full, waiting for read...."); this.processEventChars(signalRxChar, signalEvents, signalLineEvents); this.mInFullLock.lock(); this.mSinkFull = true; } } if (cbBufferFree < var7) { this.mFullCon.await(); this.mInFullLock.unlock(); } this.extractReadData(inBuffer); } catch (InterruptedException var10) { this.mInFullLock.unlock(); Log.e("ProcessInCtrl", "Exception in Full await!"); var10.printStackTrace(); } catch (Exception var11) { Log.e("ProcessInCtrl", "Exception in ProcessBulkIN"); var11.printStackTrace(); throw new D2xxException("Fatal error in BulkIn."); } }
private void extractReadData(InBuffer inBuffer) throws InterruptedException { int cbTotalData = 0; long cbWritten = 0L; short var9 = 0; short var10 = 0; boolean var11 = false; ByteBuffer byteBuffer = inBuffer.getByteBuffer(); int cbSomeCount = inBuffer.getLength(); if (cbSomeCount > 0) { int var18 = cbSomeCount / this.cbMaxPacketSizeIn + (cbSomeCount % this.cbMaxPacketSizeIn > 0 ? 1 : 0); for (int var13 = 0; var13 < var18; ++var13) { int var19; int var20; if (var13 == var18 - 1) { var20 = cbSomeCount; byteBuffer.limit(cbSomeCount); var19 = var13 * this.cbMaxPacketSizeIn; byteBuffer.position(var19); byte bNext = byteBuffer.get(); var9 = (short) (this.ftDevice.ftDeviceInfoListNode.modemStatus ^ (short) (bNext & 240)); this.ftDevice.ftDeviceInfoListNode.modemStatus = (short) (bNext & 240); byte bNextNext = byteBuffer.get(); this.ftDevice.ftDeviceInfoListNode.lineStatus = (short) (bNextNext & 255); var19 += 2; if (byteBuffer.hasRemaining()) { var10 = (short) (this.ftDevice.ftDeviceInfoListNode.lineStatus & 30); } else { var10 = 0; } } else { var20 = (var13 + 1) * this.cbMaxPacketSizeIn; byteBuffer.limit(var20); var19 = var13 * this.cbMaxPacketSizeIn + 2; byteBuffer.position(var19); } cbTotalData += var20 - var19; this.byteBuffers[var13] = byteBuffer.slice(); } if (cbTotalData != 0) { var11 = true; try { cbWritten = this.sinkChannel.write(this.byteBuffers, 0, var18); if (cbWritten != (long) cbTotalData) { Log.d( "extractReadData::", "written != totalData, written= " + cbWritten + " totalData=" + cbTotalData); } this.incCbAvailableToRead((int) cbWritten); this.qLock.lock(); this.qCondition.signalAll(); this.qLock.unlock(); } catch (Exception e) { Log.d("extractReadData::", "Write data to sink failed!!"); e.printStackTrace(); } } byteBuffer.clear(); this.processEventChars(var11, var9, var10); } }