33using namespace keyple::core::util;
34using namespace keyple::core::util::cpp;
36const std::map<const int, const std::shared_ptr<StatusProperties>>
37 CmdCardIncreaseOrDecrease::STATUS_TABLE = initStatusTable();
40 const bool isDecreaseCommand,
43 const uint8_t counterNumber,
44 const int incDecValue)
47 mCounterNumber(counterNumber),
48 mIncDecValue(incDecValue)
50 const uint8_t cla = calypsoCardClass.
getValue();
56 std::vector<uint8_t> valueBuffer(3);
57 valueBuffer[0] = ((incDecValue >> 16) & 0xFF);
58 valueBuffer[1] = ((incDecValue >> 8) & 0xFF);
59 valueBuffer[2] = (incDecValue & 0xFF);
61 const uint8_t p2 = sfi * 8;
65 std::make_shared<ApduRequestAdapter>(
73 std::stringstream extraInfo;
74 extraInfo <<
"SFI:" << sfi <<
"h, "
75 <<
"COUNTER:" << mCounterNumber <<
", ";
76 if (isDecreaseCommand) {
77 extraInfo <<
"DECREMENT";
79 extraInfo <<
"INCREMENT";
81 extraInfo <<
":" << incDecValue;
98 return mCounterNumber;
106const std::map<const int, const std::shared_ptr<StatusProperties>>
107 CmdCardIncreaseOrDecrease::initStatusTable()
109 std::map<const int, const std::shared_ptr<StatusProperties>> m;
112 std::make_shared<StatusProperties>(
"Too many modifications in session.",
115 std::make_shared<StatusProperties>(
"Lc value not supported.",
116 typeid(CardIllegalParameterException))});
118 std::make_shared<StatusProperties>(
"The current EF is not a Counters or Simulated " \
120 typeid(CardDataAccessException))});
122 std::make_shared<StatusProperties>(
"Security conditions not fulfilled (no session, " \
123 "wrong key, encryption required).",
124 typeid(CardSecurityContextException))});
126 std::make_shared<StatusProperties>(
"Access forbidden (Never access mode, DF is " \
127 "invalidated, etc.)",
128 typeid(CardAccessForbiddenException))});
130 std::make_shared<StatusProperties>(
"Command not allowed (no current EF).",
131 typeid(CardDataAccessException))});
133 std::make_shared<StatusProperties>(
"Overflow error.",
134 typeid(CardDataOutOfBoundsException))});
136 std::make_shared<StatusProperties>(
"File not found.",
137 typeid(CardDataAccessException))});
139 std::make_shared<StatusProperties>(
"P1 or P2 value not supported.",
140 typeid(CardDataAccessException))});
142 std::make_shared<StatusProperties>(
"Successful execution (possible only in ISO7816 " \
149const std::map<const int, const std::shared_ptr<StatusProperties>>&
virtual void addSubName(const std::string &subName) final
virtual void setApduRequest(const std::shared_ptr< ApduRequestAdapter > apduRequest) final
const CalypsoCardCommand & getCommandRef() const override
bool isSessionBufferUsed() const override
CmdCardIncreaseOrDecrease(const bool isDecreaseCommand, const CalypsoCardClass calypsoCardClass, const uint8_t sfi, const uint8_t counterValue, const int incDecValue)
uint8_t getCounterNumber() const
int getIncDecValue() const
const std::map< const int, const std::shared_ptr< StatusProperties > > & getStatusTable() const override