22#include "IllegalArgumentException.h"
28using namespace keyple::core::util;
29using namespace keyple::core::util::cpp::exception;
32const int CmdSamReadEventCounter::MAX_COUNTER_NUMB = 26;
33const int CmdSamReadEventCounter::MAX_COUNTER_REC_NUMB = 3;
35const std::map<const int, const std::shared_ptr<StatusProperties>>
36 CmdSamReadEventCounter::STATUS_TABLE = initStatusTable();
47 if (operationType == SamEventCounterOperationType::COUNTER_RECORD) {
48 if (index < 1 || index > MAX_COUNTER_REC_NUMB) {
49 throw IllegalArgumentException(
"Record Number must be between 1 and " +
50 std::to_string(MAX_COUNTER_REC_NUMB) +
54 p2 =
static_cast<uint8_t
>(0xE0 + index);
58 if (index < 0 || index > MAX_COUNTER_NUMB) {
59 throw IllegalArgumentException(
"Counter Number must be between 0 and " +
60 std::to_string(MAX_COUNTER_NUMB) +
64 p2 =
static_cast<uint8_t
>(0x80 + index);
68 std::make_shared<ApduRequestAdapter>(
72const std::map<const int, const std::shared_ptr<StatusProperties>>
73 CmdSamReadEventCounter::initStatusTable()
75 std::map<const int, const std::shared_ptr<StatusProperties>> m =
79 std::make_shared<StatusProperties>(
"An event counter cannot be incremented.",
82 std::make_shared<StatusProperties>(
"Incorrect P2.",
83 typeid(CalypsoSamIllegalParameterException))});
85 std::make_shared<StatusProperties>(
"Correct execution with warning: data not signed.",
96const std::map<const int, const std::shared_ptr<StatusProperties>>&
virtual const std::shared_ptr< ApduResponseApi > getApduResponse() const final
virtual bool isSuccessful() const final
virtual void setApduRequest(const std::shared_ptr< ApduRequestAdapter > apduRequest) final
static const std::map< const int, const std::shared_ptr< StatusProperties > > STATUS_TABLE
static const CalypsoSamCommand READ_EVENT_COUNTER
uint8_t getInstructionByte() const override
const std::map< const int, const std::shared_ptr< StatusProperties > > & getStatusTable() const override
CmdSamReadEventCounter(const CalypsoSam::ProductType productType, const SamEventCounterOperationType operationType, const int index)
SamEventCounterOperationType
const std::vector< uint8_t > getCounterData() const
static uint8_t getClassByte(const ProductType productType)
CalypsoSam::ProductType ProductType