execute method

  1. @override
Tuple2<SCardResult, SCardStatus> execute(
  1. _PcscContext ctx
)
override

Implementation

@override
Tuple2<SCardResult, SCardStatus> execute(_PcscContext ctx) {
  final pdwState = calloc<DWORD>();
  final pdwProtocol = calloc<DWORD>();
  final pcchReaderLen = calloc<DWORD>()..value = MAX_BUFFER_SIZE;
  final mszReaderName = calloc<ffi.Char>(MAX_BUFFER_SIZE);
  final pcbAtrLen = calloc<DWORD>()..value = MAX_ATR_SIZE;
  final pbAtr = calloc<BYTE>(MAX_ATR_SIZE);

  try {
    final ret = ctx.winscard.SCardStatus(hCard, mszReaderName, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen);
    final result = SCardResult(ret);
    if (!result.isSuccess) return Tuple2(result, SCardStatus("", 0, 0, []));

    return Tuple2(result, SCardStatus(
      _NativeUtils.convertString(mszReaderName),
      pdwState.value,
      pdwProtocol.value,
      _NativeUtils.convertBytes(pbAtr.cast<ffi.Uint8>(), pcbAtrLen.value)
    ));
  } finally {
    calloc.free(pdwState);
    calloc.free(pdwProtocol);
    calloc.free(pcchReaderLen);
    calloc.free(mszReaderName);
    calloc.free(pcbAtrLen);
    calloc.free(pbAtr);
  }
}