14#include "keyple/plugin/pcsc/cpp/Card.hpp"
18#include "keyple/plugin/pcsc/cpp/exception/CardException.hpp"
25using keyple::plugin::pcsc::cpp::exception::CardException;
28 const std::shared_ptr<CardTerminal> cardTerminal,
29 const SCARDHANDLE handle,
30 const std::vector<uint8_t> atr,
32 const SCARD_IO_REQUEST ioRequest)
34, mIORequest(ioRequest)
37, mCardTerminal(cardTerminal)
42const std::vector<uint8_t>&
51 SCardBeginTransaction(mHandle);
57 SCardEndTransaction(mHandle, SCARD_LEAVE_CARD);
61Card::disconnect(
const bool reset)
63 SCardDisconnect(mHandle, reset ? SCARD_RESET_CARD : SCARD_LEAVE_CARD);
67Card::getProtocol()
const
70 case SCARD_PROTOCOL_T0:
72 case SCARD_PROTOCOL_T1:
79std::shared_ptr<CardChannel>
80Card::getBasicChannel()
82 return std::make_shared<CardChannel>(shared_from_this(), 0);
85const std::vector<uint8_t>
86Card::transmitControlCommand(
87 const int commandId,
const std::vector<uint8_t>& command)
90 DWORD dwRecv =
sizeof(r_apdu);
92 LONG rv = SCardControl(
95 (LPCBYTE)command.data(),
96 (DWORD)command.size(),
98 (DWORD)
sizeof(r_apdu),
100 if (rv != SCARD_S_SUCCESS) {
102 "SCardControl failed with error: %\n",
103 std::string(pcsc_stringify_error(rv)));
104 throw CardException(
"SCardControl failed");
107 std::vector<uint8_t> response(r_apdu, r_apdu + dwRecv);