8static const char *
const TAG =
"wiegand";
9static const char *
const KEYS =
"0123456789*#";
40 uint64_t mask = 1LL << start;
41 for (
int i = 0; i <
length; i++, mask <<= 1) {
50 uint64_t mask = 1LL << start;
51 for (
int i = 0; i <
length; i++, mask <<= 1) {
68 ESP_LOGV(TAG,
"received %d-bit value: %llx", count, value);
70 trigger->trigger(count, value);
72 std::string tag =
to_string((value >> 1) & 0xffffff);
73 ESP_LOGD(TAG,
"received 26-bit tag: %s", tag.c_str());
75 ESP_LOGW(TAG,
"invalid parity");
79 trigger->trigger(tag);
80 }
else if (count == 34) {
81 std::string tag =
to_string((value >> 1) & 0xffffffff);
82 ESP_LOGD(TAG,
"received 34-bit tag: %s", tag.c_str());
84 ESP_LOGW(TAG,
"invalid parity");
88 trigger->trigger(tag);
89 }
else if (count == 37) {
90 std::string tag =
to_string((value >> 1) & 0x7ffffffff);
91 ESP_LOGD(TAG,
"received 37-bit tag: %s", tag.c_str());
93 ESP_LOGW(TAG,
"invalid parity");
97 trigger->trigger(tag);
98 }
else if (count == 4) {
100 trigger->trigger(value);
102 uint8_t key = KEYS[value];
105 }
else if (count == 8) {
106 if ((value ^ 0xf0) >> 4 == (value & 0xf)) {
109 trigger->trigger(value);
111 uint8_t key = KEYS[value];
116 ESP_LOGD(TAG,
"received unknown %d-bit value: %llx", count, value);
121 ESP_LOGCONFIG(TAG,
"Wiegand reader:");
122 LOG_PIN(
" D0 pin: ", this->
d0_pin_);
123 LOG_PIN(
" D1 pin: ", this->
d1_pin_);
void attach_interrupt(void(*func)(T *), T *arg, gpio::InterruptType type) const
virtual ISRInternalGPIOPin to_isr() const =0
void send_key_(uint8_t key)
InternalGPIOPin * d1_pin_
void dump_config() override
std::vector< WiegandKeyTrigger * > key_triggers_
InternalGPIOPin * d0_pin_
std::vector< WiegandTagTrigger * > tag_triggers_
std::vector< WiegandRawTrigger * > raw_triggers_
bool check_eparity(uint64_t value, int start, int length)
bool check_oparity(uint64_t value, int start, int length)
Providing packet encoding functions for exchanging data with a remote host.
std::string to_string(int value)
uint32_t IRAM_ATTR HOT millis()
static void d0_gpio_intr(WiegandStore *arg)
static void d1_gpio_intr(WiegandStore *arg)
volatile uint32_t last_bit_time