This library reads Wiegand, saving it into a buffer, calling a callback function after it is full or a timeout is reached.

Dependents:   mbed-os-wiegand-example

This library reads Wiegand, saving it into a buffer, calling a callback function after it is full or a timeout is reached. Data can be extracted as :

  • Raw
  • Base 10 Integer
  • Base 10 String
  • Base 16 String

Always call reset after saving Wiegand data.

It automatically calibrates the timeout during the first reading unless specified.

Timeout can be set using setTimout, units are in milliseconds (first call stopCalibrating()).

EventQueue is required for deferring from ISR, it is possible to dispatch the EventQueue from the mainQueue or any other thread.

Revision:
0:4929608f96d0
Child:
1:5217baef72fd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiegand.h	Sat Apr 27 23:37:01 2019 +0000
@@ -0,0 +1,65 @@
+#ifndef MBED_MICIO_H
+#define MBED_MICIO_H
+
+#include "mbed.h"
+
+/*
+    This library reads Wiegand saving it into a buffer, calling a callback function after it is full or a timeout is reached.
+    It automatically calibrates the timeout during the first reading unless specified.
+    Timeout can be set using setTimout, units are in milliseconds (first call stopCalibrating()).
+    Always call reset after saving Wiegand data.
+    Data can be extracted as :
+        * Raw -- For manipulation
+        * Base 10 Integer 
+        * Base 10 String    
+        * Base 16 String
+    EventQueue is required for deferring from ISR, it is possible to dispatch the EventQueue from the mainQueue or any other thread. 
+*/
+
+class Wiegand {
+private:
+    Callback<void(void)>    _callback;
+    InterruptIn             _d0;
+    InterruptIn             _d1;
+    EventQueue*             _eventQueue;
+    Timer                   _interPulseGapTimer;
+    Timeout                 _timeout;
+
+    bool                    _autoCalibration;
+    unsigned char           _bits;
+    volatile unsigned char  _bitsRead;
+    uint8_t*                _buffer;
+    unsigned char           _bufferSize;
+    unsigned char           _decDigits;
+    bool                    _firstReading;
+    unsigned char           _hexDigits;
+    volatile int*           _interPulseGapBuffer;
+    unsigned int            _transmissionTimeout;
+
+    void _data0ISR(void);
+    void _data0ISRRise(void);
+    void _data1ISR(void);
+    void _data1ISRRise(void);
+    void _onWiegandISR(void);
+    void _onWiegandNonISR(void);
+    void _shift_left(volatile unsigned char *ar, int size, int shift);
+
+public:
+    Wiegand(PinName d0, PinName d1, EventQueue* eventQueue, Callback<void(void)> wiegandCallback, unsigned char bits);
+    ~Wiegand();
+
+    void            calibrateTimeout(void);
+    unsigned char   getDecDigits();
+    void            getDecString(volatile char* decString);
+    unsigned char   getHexDigits();
+    void            getHexString(volatile char* hexString);
+    uint8_t*        getRaw(void);
+    long double     getRawInt(void);
+    unsigned int    getTimeout(void);
+    void            reset(void);
+    void            setTimeout(unsigned int time);
+    void            startCalibrating(void);
+    void            stopCalibrating(void);
+};
+
+#endif
\ No newline at end of file