Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SCardListReaders returns SCARD_E_NO_READERS_AVAILABLE on iOS #17

Closed
dfyx opened this issue Sep 14, 2020 · 9 comments
Closed

SCardListReaders returns SCARD_E_NO_READERS_AVAILABLE on iOS #17

dfyx opened this issue Sep 14, 2020 · 9 comments

Comments

@dfyx
Copy link

dfyx commented Sep 14, 2020

I've recently upgraded the SDK from version 1.x to 3.5.59 in my iOS project for better compatibility with the latest SDK and since then I've had problems connecting to card readers.

I request bluetooth authorization through CBCentralManager. As soon as the state is poweredOn and I have authorization, I call SCardEstablishContext and SCardListReaders. This has worked great in the past but now I get a return value of SCARD_E_NO_READERS_AVAILABLE even though EAAccessoryManager tells me my bR301 is connected. I can temporarily fix this by disconnecting and reconnecting the card reader but the problem reappears after a while.

I've also seen similar behavior with the iR301 though debugging that is a bit harder since I obviously can't connect my debugger through USB at the same time as the iR301 and wifi debugging isn't possible because our test devices aren't allowed to be in our company network.

I assume with the new SDK I have to explicitly connect to the devices to make them show up in SCardListReaders but I haven't quite figured out how to do that and the documentation isn't quite clear on how to do that.

@FeitianSmartcardReader
Copy link
Owner

Thanks for your feedback, our engineer working to have check this issue, we will get back to you very soon, keep in touch,

@FeitianSmartcardReader
Copy link
Owner

FeitianSmartcardReader commented Sep 16, 2020

@dfyx did you set reader delegate? in the latest lib, it supports Bluetooth 3.0, Bluetooth Smart and lightning based readers. so in your application, please make sure you did below work:

  1. Add corebluetooth framework for Bluetooth smart device, and add ExtrnalAccessory framework for lightning and Bluetooth 3.0 readers.
  2. Set the reader delegate, the API can find in ReaderInterface.h
  3. Call setDeviceType API to set the reader type, if your reader is bR301 with Blue casing, use IR301_AND_BR301

typedef enum FTDEVICETYPE{
EMPTY_DEVICE = 0, // The reader will scan in background automatically, until find the device and then use this type by default
IR301_AND_BR301 = 1, // for lightning and Bluetooth 3.0 readers
BR301BLE_AND_BR500 = 2, //For Bluetooth Smart readers
}FTDEVICETYPE;

  1. Call SCardEstablishContext and SCardListReaders to list your reader and connect it

We provide demo source code, can find in SDK:
https://github.com/FeitianSmartcardReader/FEITIAN_MOBILE_READERS/tree/master/iOS_SDK/demo

There have a version already in Appstore, you can download and have a test too.
https://itunes.apple.com/us/app/smartcard-reader/id525954151?mt=8

smartcard-reader source code: https://github.com/FeitianSmartcardReader/FEITIAN_MOBILE_READERS/tree/master/iOS_SDK/demo/iReader_Appstore

Please take a test, any questions, contact me anytime, thanks

@FeitianSmartcardReader
Copy link
Owner

@dfyx do you still have issue on this topic? thanks and looking forward your reply,

@dfyx
Copy link
Author

dfyx commented Sep 21, 2020

Sorry, can't test it right now as I'm in home office for the next few weeks because of Corona. I'll get back to you as soon as I'm at the office again. For now we resolved the problem by downgrading back to 1.32.3 and it appears to work.

@FeitianSmartcardReader
Copy link
Owner

Noted, will keep this open status until have your test result, thanks and take care,

@dfyx
Copy link
Author

dfyx commented Dec 28, 2020

Better late than never:

It was a bit tricky to get it working with C# but now I can at least get it to read my card most of the time. Now I occasionally get SCARD_E_READER_UNSUPPORTED when calling SCardConnect which to my knowledge has never happened before. Feels strange because that should only depend on the reader, not on how I'm talking to it.

@FeitianSmartcardReader
Copy link
Owner

@dfyx with bR301BLE and bR500(Bluetooth smart), the reader name is FT_XXXXXXXXXX(which is the name of Bluetooth reader), did you input the right name?

@dfyx
Copy link
Author

dfyx commented Dec 28, 2020

I did and as said, it only happens occasionally. In my last test it happened when I read the same card with the same reader for the fourth time in a row. So maybe it has something to do with not freeing some handles correctly, I'm not sure.

Edit: once it happens, I can only fix it by restarting my app which would confirm that there are some dangling handles.

@dfyx
Copy link
Author

dfyx commented Dec 28, 2020

Alright, my last problem seems to have been a race condition in my app that caused it to not always wait for the callback. It's fixed now. Thanks a lot for your support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants