execute method
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);
}
}