// // Created by robin on 6/28/15. // #ifndef LIBPCSC_CPPTOOLS_SCREADER_H # define LIBPCSC_CPPTOOLS_SCREADER_H # include # include # include # include "ScCommand.h" # include "ScResult.h" class ScReader { public: inline ScReader(std::string name); virtual ~ScReader(); static std::vector> getReaders(); static LONG getLastStaticResult(); static inline std::string getLastStaticResultString(); static inline std::string getResultString(const LONG& result); inline LONG getLastResult(); inline std::string getLastResultString(); static bool establishContext(); static bool freeContext(); bool connect(DWORD shareMode = SCARD_SHARE_SHARED, DWORD protocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, DWORD disposition = SCARD_LEAVE_CARD); bool disconnect(DWORD disposition = SCARD_LEAVE_CARD); std::shared_ptr transmit(const ScCommand& command, DWORD size = 2048); inline const std::string getName() const; std::string getAttribute(DWORD attr); inline std::string getAtr(); private: std::string _name; static /*thread_local*/ LPSCARDCONTEXT _context; static /*thread_local*/ LONG _lastStaticResult; LPSCARDHANDLE _card; LPDWORD _proto; SCARD_IO_REQUEST _sendPci; LONG _lastResult; }; # include "ScReader.hxx" #endif //LIBPCSC_CPPTOOLS_SCREADER_H