[FL-1063} LF-RFID Cli (#515)
* App lfrfid: update emulator to process external data. * App lfrfid: cleanup emulator * App lfrfid: cli interface * Lib: arguments parser lib Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
33
applications/lf-rfid/helpers/key-info.cpp
Normal file
33
applications/lf-rfid/helpers/key-info.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include "key-info.h"
|
||||
|
||||
const char* lfrfid_key_get_type_string(LfrfidKeyType type) {
|
||||
switch(type) {
|
||||
case LfrfidKeyType::KeyEM4100:
|
||||
return "EM4100";
|
||||
break;
|
||||
case LfrfidKeyType::KeyH10301:
|
||||
return "H10301";
|
||||
break;
|
||||
case LfrfidKeyType::KeyI40134:
|
||||
return "I40134";
|
||||
break;
|
||||
}
|
||||
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
uint8_t lfrfid_key_get_type_data_count(LfrfidKeyType type) {
|
||||
switch(type) {
|
||||
case LfrfidKeyType::KeyEM4100:
|
||||
return 5;
|
||||
break;
|
||||
case LfrfidKeyType::KeyH10301:
|
||||
return 3;
|
||||
break;
|
||||
case LfrfidKeyType::KeyI40134:
|
||||
return 3;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@@ -4,7 +4,10 @@
|
||||
static const uint8_t LFRFID_KEY_SIZE = 8;
|
||||
|
||||
enum class LfrfidKeyType : uint8_t {
|
||||
KeyEmarine,
|
||||
KeyHID,
|
||||
KeyIndala,
|
||||
};
|
||||
KeyEM4100,
|
||||
KeyH10301,
|
||||
KeyI40134,
|
||||
};
|
||||
|
||||
const char* lfrfid_key_get_type_string(LfrfidKeyType type);
|
||||
uint8_t lfrfid_key_get_type_data_count(LfrfidKeyType type);
|
@@ -71,12 +71,12 @@ bool RfidReader::read(LfrfidKeyType* type, uint8_t* data, uint8_t data_size) {
|
||||
bool result = false;
|
||||
|
||||
if(decoder_em.read(data, data_size)) {
|
||||
*type = LfrfidKeyType::KeyEmarine;
|
||||
*type = LfrfidKeyType::KeyEM4100;
|
||||
result = true;
|
||||
}
|
||||
|
||||
if(decoder_hid26.read(data, data_size)) {
|
||||
*type = LfrfidKeyType::KeyHID;
|
||||
*type = LfrfidKeyType::KeyH10301;
|
||||
result = true;
|
||||
}
|
||||
|
||||
|
@@ -6,7 +6,7 @@ RfidTimerEmulator::RfidTimerEmulator() {
|
||||
}
|
||||
|
||||
RfidTimerEmulator::~RfidTimerEmulator() {
|
||||
std::map<Type, EncoderGeneric*>::iterator it;
|
||||
std::map<LfrfidKeyType, EncoderGeneric*>::iterator it;
|
||||
|
||||
for(it = encoders.begin(); it != encoders.end(); ++it) {
|
||||
delete it->second;
|
||||
@@ -14,38 +14,28 @@ RfidTimerEmulator::~RfidTimerEmulator() {
|
||||
}
|
||||
}
|
||||
|
||||
void RfidTimerEmulator::start(Type type) {
|
||||
void RfidTimerEmulator::start(LfrfidKeyType type, const uint8_t* data, uint8_t data_size) {
|
||||
if(encoders.count(type)) {
|
||||
current_encoder = encoders.find(type)->second;
|
||||
uint8_t em_data[5] = {0x53, 0x00, 0x5F, 0xB3, 0xC2};
|
||||
uint8_t hid_data[3] = {0xED, 0x87, 0x70};
|
||||
uint8_t indala_data[3] = {0x1F, 0x2E, 0x3D};
|
||||
|
||||
switch(type) {
|
||||
case Type::EM:
|
||||
current_encoder->init(em_data, 5);
|
||||
break;
|
||||
case Type::HID_H10301:
|
||||
current_encoder->init(hid_data, 3);
|
||||
break;
|
||||
case Type::Indala_40134:
|
||||
current_encoder->init(indala_data, 3);
|
||||
break;
|
||||
if(lfrfid_key_get_type_data_count(type) == data_size) {
|
||||
current_encoder->init(data, data_size);
|
||||
|
||||
api_hal_rfid_tim_emulate(125000);
|
||||
api_hal_rfid_pins_emulate();
|
||||
|
||||
api_interrupt_add(timer_update_callback, InterruptTypeTimerUpdate, this);
|
||||
|
||||
// TODO make api for interrupts priority
|
||||
for(size_t i = WWDG_IRQn; i <= DMAMUX1_OVR_IRQn; i++) {
|
||||
HAL_NVIC_SetPriority(static_cast<IRQn_Type>(i), 15, 0);
|
||||
}
|
||||
|
||||
HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn);
|
||||
|
||||
api_hal_rfid_tim_emulate_start();
|
||||
}
|
||||
|
||||
api_hal_rfid_tim_emulate(125000);
|
||||
api_hal_rfid_pins_emulate();
|
||||
|
||||
api_interrupt_add(timer_update_callback, InterruptTypeTimerUpdate, this);
|
||||
|
||||
for(size_t i = WWDG_IRQn; i <= DMAMUX1_OVR_IRQn; i++) {
|
||||
HAL_NVIC_SetPriority(static_cast<IRQn_Type>(i), 15, 0);
|
||||
}
|
||||
|
||||
HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn);
|
||||
|
||||
api_hal_rfid_tim_emulate_start();
|
||||
} else {
|
||||
// not found
|
||||
}
|
||||
|
@@ -10,24 +10,18 @@
|
||||
|
||||
class RfidTimerEmulator {
|
||||
public:
|
||||
enum class Type : uint8_t {
|
||||
EM,
|
||||
HID_H10301,
|
||||
Indala_40134,
|
||||
};
|
||||
|
||||
RfidTimerEmulator();
|
||||
~RfidTimerEmulator();
|
||||
void start(Type type);
|
||||
void start(LfrfidKeyType type, const uint8_t* data, uint8_t data_size);
|
||||
void stop();
|
||||
|
||||
private:
|
||||
EncoderGeneric* current_encoder = nullptr;
|
||||
|
||||
std::map<Type, EncoderGeneric*> encoders = {
|
||||
{Type::EM, new EncoderEM()},
|
||||
{Type::HID_H10301, new EncoderHID_H10301()},
|
||||
{Type::Indala_40134, new EncoderIndala_40134()},
|
||||
std::map<LfrfidKeyType, EncoderGeneric*> encoders = {
|
||||
{LfrfidKeyType::KeyEM4100, new EncoderEM()},
|
||||
{LfrfidKeyType::KeyH10301, new EncoderHID_H10301()},
|
||||
{LfrfidKeyType::KeyI40134, new EncoderIndala_40134()},
|
||||
};
|
||||
|
||||
PulseJoiner pulse_joiner;
|
||||
|
Reference in New Issue
Block a user