control method

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

Implementation

@override
Tuple2<SCardResult, List<int>> control(int hCard, int dwControlCode, List<int> pbSendBuffer) {
  final sendBuffer = _allocateNativeBytes(pbSendBuffer);
  final recvBuffer = calloc<ffi.Uint8>(MAX_BUFFER_SIZE);
  final bytesReturned = calloc<DWORD>();

  try {
    //Call the native function
    var response = _winscard.SCardControl(hCard, dwControlCode, sendBuffer.cast<ffi.Void>(), pbSendBuffer.length, recvBuffer.cast<ffi.Void>(), MAX_BUFFER_SIZE, 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.cast<BYTE>(), bytesReturned.value);

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