#pragma once //#include "decoder_analyzer.h" #include "decoder_gpio_out.h" #include "decoder_emmarin.h" #include "decoder_hid26.h" #include "decoder_indala.h" #include "decoder_ioprox.h" #include "key_info.h" //#define RFID_GPIO_DEBUG 1 class RfidReader { public: enum class Type : uint8_t { Normal, Indala, }; RfidReader(); void start(); void start_forced(RfidReader::Type type); void stop(); bool read(LfrfidKeyType* type, uint8_t* data, uint8_t data_size, bool switch_enable = true); bool detect(); bool any_read(); private: friend struct RfidReaderAccessor; //DecoderAnalyzer decoder_analyzer; #ifdef RFID_GPIO_DEBUG DecoderGpioOut decoder_gpio_out; #endif DecoderEMMarin decoder_em; DecoderHID26 decoder_hid26; DecoderIndala decoder_indala; DecoderIoProx decoder_ioprox; uint32_t last_dwt_value; void start_comparator(void); void stop_comparator(void); void decode(bool polarity); uint32_t detect_ticks; uint32_t switch_os_tick_last; bool switch_timer_elapsed(); void switch_timer_reset(); void switch_mode(); LfrfidKeyType last_read_type; uint8_t last_read_data[LFRFID_KEY_SIZE]; uint8_t last_read_count; Type type = Type::Normal; };