SDK Readers 1.0.1
SDK для связи со считывателями Iron logic
card_detector/main.cpp

Демонстрирует поиск карт, уведомление о поднесении/удалении карты.

#include <stdio.h>
#include <iomanip> // для std::put_time
#include <iostream>
#include "ilreaders.h"
// #define ILR_LOG // Раскомментируйте, чтобы включить отладочные сообщения
#define ILR_LOG_FILE // Писать лог в файл
using namespace ilr;
#ifdef ILR_LOG
const char kLogLevelChars[] = {'-', 'E', 'W', 'I', 'D'};
const char kLogFileName[] = "ilreaders.log"; // Путь к лог файлу
void ILR_CALL LogCallback(ilr_log_level level, const char* pContext, const char* pMessage, void*) {
#ifdef ILR_LOG_FILE // Запись в файл
std::ofstream file(kLogFileName, std::ios_base::out | std::ios_base::app);
auto& out = file;
#else // иначе в консоль
auto& out = std::cout;
#endif
auto t = std::time(nullptr);
auto tmb = std::localtime(&t);
out << std::put_time(tmb, "%d-%m-%Y %H:%M:%S") << " [" << kLogLevelChars[level] << ' '
<< pContext << "] " << pMessage << std::endl;
}
#endif
void ILR_CALL MessageCallback(ilr_reader_msg nMsg, const void* pMsgData, void*) {
try {
const ilr_card_info* pInfo = (const ilr_card_info*)pMsgData;
std::stringstream ss;
ss << " " << kMpTypeNames[pInfo->nMpType];
if (pInfo->nSL != ILR_MF_PLUS_SL_UNKNOWN)
ss << " SL" << static_cast<int>(pInfo->nSL);
std::cout << "{!} Карта найдена " << kCardTypeNames[pInfo->nType] << ' '
<< CardUIDToStr(pInfo->nType, pInfo->rUID) << ss.str() << std::endl;
else
std::cout << "{!} Карта потеряна " << kCardTypeNames[pInfo->nType] << ' '
<< CardUIDToStr(pInfo->nType, pInfo->rUID) << ss.str() << std::endl;
}
catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
}
}
int main() {
try {
#ifdef ILR_LOG
#ifdef ILR_LOG_FILE
// Очищаем лог файл
std::ofstream file(kLogFileName, std::ios_base::out | std::ios_base::trunc);
file.close();
#endif
CILR::SetLogCallback(LogCallback);
CILR::SetLogLevel(ILR_LOG_LEVEL_DEBUG);
#endif
CILR oILR;
// Ищем считыватель
CReader oReader;
{
std::cout << "Поиск считывателя..." << std::endl;
CReaderSearch oSearch(oILR.GetSearch());
#if 0
oSearch.GetOptions(rOptions);
oSearch.SetOptions(rOptions);
#endif
oSearch.Scan();
auto nCount = oSearch.GetReaderCount();
bool fFound = false;
for (size_t i = 0; i < nCount; i++) {
oSearch.GetReaderInfo(i, rInfo);
// Если порт занят, то пропускаем
if (*rInfo.pszConnect != '\0')
continue;
fFound = true;
break;
}
if (!fFound) {
std::cout << "Считыватель не найден" << std::endl;
return 0;
}
oReader = oILR.GetReader(rInfo.nPortType, rInfo.pszPortName);
// Подключаемся к считывателю
std::cout << "Подключение к считывателю [" << kPortTypeNames[rInfo.nPortType] << ": "
<< rInfo.pszPortName << "]..." << std::endl;
oReader.Connect();
}
// Получаем информацию о считывателе
oReader.GetReaderInfo(rInfo);
std::stringstream ss;
ss << kReaderModelNames[rInfo.nModel];
if (rInfo.nSn != -1)
ss << " с/н:" << rInfo.nSn;
if (rInfo.nFwVersion != 0)
ss << " прошивка:" << ReaderVersionToStr(rInfo.nFwVersion);
if (rInfo.nFwBuildDate != 0)
ss << " сборка " << TimeToStr(rInfo.nFwBuildDate);
std::cout << "Считыватель успешно подключён [" << ss.str() << ']' << std::endl;
// Подписываемся на уведомления о поднесении/удалении карты
oReader.SetMessageCallback(MessageCallback, &oReader);
// Включаем авто поиск карт (нет необходимости, т.к. включен по умолчанию)
oReader.SetAutoScan(true, false);
// Ожидаем поднесение/удаление карты
std::cout << "Ожидание поднесения карты..." << std::endl;
std::cout << "Нажмите <Enter> для выхода..." << std::endl;
std::cin.get();
}
catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
Класс для инициализации/финализации библиотеки SDK.
Definition: ilr_cpp_helpers.h:2607
CReaderSearch GetSearch()
Создаёт дескриптор поиска считывателей.
Definition: ilr_cpp_helpers.h:2761
CReader GetReader(ilr_port_type nPortType, const char *pszPortName)
Создаёт дескриптор считывателя.
Definition: ilr_cpp_helpers.h:2767
Класс поиска считывателей.
Definition: ilr_cpp_helpers.h:583
Класс считывателя.
Definition: ilr_cpp_helpers.h:996
void SetAutoScan(bool fEnable=true, bool fWait=true)
Включает/выключает автоматическое сканирование карт.
Definition: ilr_cpp_helpers.h:2242
void SetMessageCallback(ilr_reader_message_callback pCallback, void *pUserData=nullptr)
Устанавливает функцию обратного вызова для уведомлений считывателя.
Definition: ilr_cpp_helpers.h:2175
void Connect(bool fReconnect=false)
Подключается к считывателю.
Definition: ilr_cpp_helpers.h:2197
void GetReaderInfo(ilr_reader_info &rInfo) const
Возвращает информацию о считывателе.
Definition: ilr_cpp_helpers.h:2223
ilr_reader_msg
Сообщение считывателя.
Definition: ilreaders.h:502
@ ILR_MF_PLUS_UNKNOWN
Не известно.
Definition: ilreaders.h:583
@ ILR_READER_MSG_CARD_FOUND
Definition: ilreaders.h:517
@ ILR_READER_MSG_CARD_LOST
Definition: ilreaders.h:521
@ ILR_MF_PLUS_SL_UNKNOWN
Не известно.
Definition: ilreaders.h:571
@ ILR_READER_CCID
Definition: ilreaders.h:467
Заголовочный файл SDK Readers с классами-помощниками C++.
Заголовочный файл API SDK Readers.
#define ILR_CALL
Макрос, определяющий соглашение о вызове функций.
Definition: ilreaders.h:56
ilr_log_level
Уровень лога.
Definition: ilreaders.h:319
@ ILR_LOG_LEVEL_DEBUG
Отладочные сообщения.
Definition: ilreaders.h:349
@ ILR_READER_MODEL_UNKNOWN
Definition: ilreaders.h:213
Информация о карте.
Definition: ilreaders.h:596
ilr_card_type nType
Тип карты.
Definition: ilreaders.h:597
ilr_mf_plus_sl nSL
Уровень безопасности Mifare Plus.
Definition: ilreaders.h:600
ilr_mf_plus_type nMpType
Тип Mifare Plus.
Definition: ilreaders.h:601
ilr_card_uid rUID
Номер карты.
Definition: ilreaders.h:598
Информация о считывателе.
Definition: ilreaders.h:295
ilr_reader_model nModel
Definition: ilreaders.h:304
uint32_t nFwVersion
Definition: ilreaders.h:310
const char * pszConnect
Definition: ilreaders.h:302
const char * pszPortName
Definition: ilreaders.h:299
int64_t nFwBuildDate
Definition: ilreaders.h:313
ilr_port_type nPortType
Definition: ilreaders.h:297
int nSn
Definition: ilreaders.h:306
Настройки поиска считывателей.
Definition: ilreaders.h:474
uint32_t nReaderTypes
Definition: ilreaders.h:479