transmit method

  1. @override
Tuple2<SCardResult, List<int>> transmit(
  1. int hCard,
  2. int pioSendPci,
  3. List<int> pbSendBuffer
)
override

Implementation

@override
Tuple2<SCardResult, List<int>> transmit(int hCard, int pioSendPci, List<int> pbSendBuffer) {
  final sendBuffer = _allocateNativeBytes(pbSendBuffer);
  final recvBuffer = calloc<BYTE>(MAX_BUFFER_SIZE);
  final bytesReturned = calloc<DWORD>();
  bytesReturned.value = MAX_BUFFER_SIZE;

  try {
    //Call the native function
    var response = _winscard.SCardTransmit(hCard, _getPciProtocol(pioSendPci), sendBuffer, pbSendBuffer.length, _nullptr.cast(), recvBuffer, bytesReturned);
    var result = SCardResult(response);

    //Check if the call was successful
    if( !result.isSuccess ) {
      return Tuple2(result, []);
    }

    //Create a list of bytes
    List<int> byteList = _convertNativeBytes(recvBuffer, bytesReturned.value);

    //Return the result
    return Tuple2(result, byteList);
  }
  finally {
    //Free the buffers
    calloc.free(sendBuffer);
    calloc.free(recvBuffer);
    calloc.free(bytesReturned);
  }
}