예제 #1
0
  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;
    }
  }
예제 #2
0
  InBuffer acquireWritableBuffer(int iBuffer) throws InterruptedException {
    InBuffer result = null;
    this.mWritable[iBuffer].acquire();
    result = this.getBuffer(iBuffer);
    if (result.setSomeStatus(iBuffer) == null) {
      result = null;
    }

    return result;
  }
예제 #3
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.");
    }
  }
예제 #4
0
  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);
    }
  }