status method

  1. @override
Tuple2<SCardResult, SCardStatus> status(
  1. int hCard
)
override

Implementation

@override
Tuple2<SCardResult, SCardStatus> status(int hCard) {
  final pdwState = calloc<DWORD>();
  final pdwProtocol = calloc<DWORD>();

  final pcchReaderLen = calloc<DWORD>()..value = MAX_BUFFER_SIZE;
  final mszReaderName = calloc<ffi.Char>(pcchReaderLen.value);

  final pcbAtrLen = calloc<DWORD>()..value = MAX_ATR_SIZE;
  final pbAtr = calloc<BYTE>(pcbAtrLen.value);

  try {
    var response = _winscard.SCardStatus(hCard, mszReaderName, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen);
    var result = SCardResult(response);

    if( !result.isSuccess ) {
      return Tuple2(result, SCardStatus("", 0, 0, []));
    }

    var nameString = _convertNativeString(mszReaderName);
    var attributeList = _convertNativeBytes(pbAtr, pcbAtrLen.value);

    return Tuple2(SCardResult(response), SCardStatus(nameString, pdwState.value, pdwProtocol.value, attributeList));
  }
  finally {
    calloc.free(mszReaderName);
    calloc.free(pcchReaderLen);
    calloc.free(pdwState);
    calloc.free(pdwProtocol);
    calloc.free(pbAtr);
    calloc.free(pcbAtrLen);
  }
}