MakerLabs ACM
wiegand_reader.h
Go to the documentation of this file.
1 #pragma once
6 
7 #include <atomic>
8 #include <bitset>
9 #include <experimental/optional>
10 
11 #include "timestamp.h"
12 
13 #include "esp_attr.h"
14 
15 using TagBits = std::bitset<26>;
16 
17 struct TagRead
18 {
19  uint64_t tag_id;
21 };
22 
24 {
25 public:
26  struct Config
27  {
28  int data0_pin;
29  int data1_pin;
30  int hold_pin;
34  };
35 
36  struct State
37  {
39  uint32_t current_bit = 0;
41  };
42 
43  struct CallbackInfo
44  {
46  bool is_data1;
47  };
48 
49  using TagReadEvent = std::experimental::optional<TagRead>;
50 
51  explicit WiegandReader(const Config& config = {});
52 
53  bool set_hold(bool enabled) IRAM_ATTR;
54  bool set_red_led(bool enabled) IRAM_ATTR;
55  bool set_green_led(bool enabled) IRAM_ATTR;
56  bool set_beeper(bool enabled) IRAM_ATTR;
57 
58  TagReadEvent get_current_tag() IRAM_ATTR;
59 
60  //std::atomic<State> state;
62 
63 private:
64  bool _set_output(int pin, bool enabled) IRAM_ATTR;
65  Config config;
66 
67  // We give out the address to the global callback, though
68  CallbackInfo data0_callback;
69  CallbackInfo data1_callback;
70 };
int hold_pin
Definition: wiegand_reader.h:30
int beeper_pin
Definition: wiegand_reader.h:33
WiegandReader(const Config &config={})
Definition: wiegand_reader.cpp:66
Definition: wiegand_reader.h:26
bool set_green_led(bool enabled)
Definition: wiegand_reader.cpp:139
std::experimental::optional< TagRead > TagReadEvent
Definition: wiegand_reader.h:49
Definition: config.production.yml:1
int data0_pin
Definition: wiegand_reader.h:28
Definition: wiegand_reader.h:17
bool set_red_led(bool enabled)
Definition: wiegand_reader.cpp:133
Definition: wiegand_reader.h:36
int green_led_pin
Definition: wiegand_reader.h:32
Definition: wiegand_reader.h:43
int data1_pin
Definition: wiegand_reader.h:29
bool is_data1
Definition: wiegand_reader.h:46
bool set_beeper(bool enabled)
Definition: wiegand_reader.cpp:145
int red_led_pin
Definition: wiegand_reader.h:31
std::chrono::microseconds TimeDuration
Definition: timestamp.h:19
State & state
Definition: wiegand_reader.h:45
uint64_t tag_id
Definition: wiegand_reader.h:19
State state
Definition: wiegand_reader.h:61
TagBits current_tag_bits
Definition: wiegand_reader.h:38
TimeDuration timestamp
Definition: wiegand_reader.h:20
Definition: wiegand_reader.h:23
TimeDuration last_bit_timestamp
Definition: wiegand_reader.h:40
std::bitset< 26 > TagBits
Definition: wiegand_reader.h:15
bool set_hold(bool enabled)
Definition: wiegand_reader.cpp:127
uint32_t current_bit
Definition: wiegand_reader.h:39
TagReadEvent get_current_tag()
Definition: wiegand_reader.cpp:181