Allow keep trying if SCard service is unavailable
This commit is contained in:
@@ -10,17 +10,24 @@ inherits(CardReader, EventEmitter);
|
||||
|
||||
function parseReadersString(buffer) {
|
||||
|
||||
const string = buffer.toString().slice(0, -1);
|
||||
try {
|
||||
|
||||
// it looks like
|
||||
// ACS ACR122U PICC Interface\u0000ACS ACR122U PICC Interface 01\u0000\u0000
|
||||
// [reader_name]\u0000[reader_name]\u0000\u0000
|
||||
// ^separator ^separator^end_separator
|
||||
const string = buffer.toString().slice(0, -1);
|
||||
|
||||
// returns readers in array
|
||||
// like [ 'ACS ACR122U PICC Interface', 'ACS ACR122U PICC Interface 01' ]
|
||||
// it looks like
|
||||
// ACS ACR122U PICC Interface\u0000ACS ACR122U PICC Interface 01\u0000\u0000
|
||||
// [reader_name]\u0000[reader_name]\u0000\u0000
|
||||
// ^separator ^separator^end_separator
|
||||
|
||||
return string.split('\u0000').slice(0, -1);
|
||||
// returns readers in array
|
||||
// like [ 'ACS ACR122U PICC Interface', 'ACS ACR122U PICC Interface 01' ]
|
||||
|
||||
return string.split('\u0000').slice(0, -1);
|
||||
|
||||
}
|
||||
catch (e) {
|
||||
return [];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -287,6 +287,11 @@ LONG PCSCLite::get_card_readers(PCSCLite* pcsclite, AsyncResult* async_result) {
|
||||
result = get_card_readers(pcsclite, async_result);
|
||||
}
|
||||
#endif
|
||||
if (result == SCARD_E_NO_SERVICE || result == SCARD_E_SERVICE_STOPPED) {
|
||||
SCardReleaseContext(pcsclite->m_card_context);
|
||||
SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &pcsclite->m_card_context);
|
||||
result = get_card_readers(pcsclite, async_result);
|
||||
}
|
||||
} else {
|
||||
/* Store the readers_name in the baton */
|
||||
async_result->readers_name = readers_name;
|
||||
|
||||
Reference in New Issue
Block a user