| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include "rfid-worker.h"
- RfidWorker::RfidWorker() {
- }
- RfidWorker::~RfidWorker() {
- }
- void RfidWorker::start_read() {
- reader.start(RfidReader::Type::Normal);
- }
- bool RfidWorker::read() {
- static const uint8_t data_size = LFRFID_KEY_SIZE;
- uint8_t data[data_size] = {0};
- LfrfidKeyType type;
- bool result = reader.read(&type, data, data_size);
- if(result) {
- key.set_type(type);
- key.set_data(data, data_size);
- };
- return result;
- }
- void RfidWorker::stop_read() {
- reader.stop();
- }
- void RfidWorker::start_write() {
- write_result = WriteResult::Nothing;
- write_sequence = new TickSequencer();
- validate_counts = 0;
- write_sequence->do_every_tick(1, std::bind(&RfidWorker::sq_write, this));
- write_sequence->do_after_tick(2, std::bind(&RfidWorker::sq_write_start_validate, this));
- write_sequence->do_after_tick(15, std::bind(&RfidWorker::sq_write_validate, this));
- write_sequence->do_every_tick(1, std::bind(&RfidWorker::sq_write_stop_validate, this));
- }
- RfidWorker::WriteResult RfidWorker::write() {
- write_sequence->tick();
- return write_result;
- }
- void RfidWorker::stop_write() {
- delete write_sequence;
- reader.stop();
- }
- void RfidWorker::start_emulate() {
- emulator.start(key.get_type(), key.get_data(), key.get_type_data_count());
- }
- void RfidWorker::stop_emulate() {
- emulator.stop();
- }
- void RfidWorker::sq_write() {
- // TODO expand this
- switch(key.get_type()) {
- case LfrfidKeyType::KeyEM4100:
- writer.start();
- writer.write_em(key.get_data());
- writer.stop();
- break;
- case LfrfidKeyType::KeyH10301:
- writer.start();
- writer.write_hid(key.get_data());
- writer.stop();
- break;
- default:
- break;
- }
- }
- void RfidWorker::sq_write_start_validate() {
- reader.start(RfidReader::Type::Normal);
- }
- void RfidWorker::sq_write_validate() {
- static const uint8_t data_size = LFRFID_KEY_SIZE;
- uint8_t data[data_size] = {0};
- LfrfidKeyType type;
- bool result = reader.read(&type, data, data_size);
- if(result) {
- if(type == key.get_type()) {
- if(memcmp(data, key.get_data(), key.get_type_data_count()) == 0) {
- write_result = WriteResult::Ok;
- validate_counts = 0;
- } else {
- validate_counts++;
- }
- } else {
- validate_counts++;
- }
- if(validate_counts > 5) {
- write_result = WriteResult::NotWritable;
- }
- };
- }
- void RfidWorker::sq_write_stop_validate() {
- reader.stop();
- }
|