This repository has been archived on 2018-05-28. You can view files and clone it, but cannot push or open issues or pull requests.
BBB-Simple-ACS/client/card_reader.cpp

50 lines
1.2 KiB
C++

#include "card_reader.hpp"
#include "factory.hpp"
#include <cstring>
namespace acs
{
card_reader::card_reader()
{
rfid_ = factory::get()->get_devices()->rfid();
rfid_->pcd_init();
}
uint32_t card_reader::find_card()
{
if (!rfid_->picc_is_new_card_present())
return 0;
if (!rfid_->picc_read_card_serial())
return 0;
last_uid_ = rfid_->uid;
uint32_t retval;
memcpy(&retval, last_uid_.uid_byte, 4);
return retval;
}
std::string card_reader::get_student_number()
{
auto status = rfid_->pcd_authenticate(
mfrc522::PICC_CMD_MF_AUTH_KEY_A, 1, &key_, &last_uid_);
if (status != mfrc522::STATUS_OK)
return {};
byte buffer[18];
byte len = 18;
status = rfid_->mifare_read(1, buffer, &len);
if (status != mfrc522::STATUS_OK || len != 18)
return {};
std::string retval;
for (auto i = 0; i < 10; ++i)
{
if (buffer[i] < 0x30)
break;
retval += buffer[i];
}
rfid_->pcd_stop_crypto1();
return retval;
}
mfrc522::mifare_key card_reader::key_ = { { 1, 2, 3, 4, 5, 6 } };
}