3D Low Frequency Wakeup Receiver

Revision:
1:944583d4b1de
Parent:
0:19b363e50103
Child:
3:2de552c4ffbc
--- a/AS3933.h	Wed Mar 07 13:48:11 2018 +0000
+++ b/AS3933.h	Wed Mar 07 13:56:26 2018 +0000
@@ -0,0 +1,1002 @@
+/**
+ * @brief       AS3933.h
+ * @details     3D Low Frequency Wakeup Receiver.
+ *              Header file.
+ *
+ *
+ * @return      N/A
+ *
+ * @author      Manuel Caballero
+ * @date        7/March/2018
+ * @version     7/March/2018    The ORIGIN
+ * @pre         N/A.
+ * @warning     N/A
+ * @pre         This code belongs to Nimbus Centre ( http://unbarquero.blogspot.com ).
+ */
+#ifndef AS3933_H
+#define AS3933_H
+
+#include "mbed.h"
+/**
+    Example:
+
+    [TODO]
+
+*/
+
+
+/*!
+ Library for the AS3933 3D Low Frequency Wakeup Receiver.
+*/
+class AS3933
+{
+public:
+    /* SPI COMMAND STRUCTURE */
+    /**
+      * @brief   MODE. ( B15:B14 )
+      */
+    typedef enum {
+        AS3933_WRITE            =   ( 0x00 << 6 ),  /*!<  WRITE                 */
+        AS3933_READ             =   ( 0x01 << 6 ),  /*!<  READ                  */
+        AS3933_DIRECT_COMMAND   =   ( 0x03 << 6 )   /*!<  DIRECT COMMAND        */
+    } AS3933_spi_command_structure_mode_t;
+
+
+    /**
+      * @brief   READ/WRITE REGISTER ( B13:B8 )
+      */
+    typedef enum {
+        AS3933_R0               =   0x00,           /*!<  R0  register          */
+        AS3933_R1               =   0x01,           /*!<  R1  register          */
+        AS3933_R2               =   0x02,           /*!<  R3  register          */
+        AS3933_R3               =   0x03,           /*!<  R4  register          */
+        AS3933_R4               =   0x04,           /*!<  R5  register          */
+        AS3933_R5               =   0x05,           /*!<  R6  register          */
+        AS3933_R6               =   0x06,           /*!<  R7  register          */
+        AS3933_R7               =   0x07,           /*!<  R8  register          */
+        AS3933_R8               =   0x08,           /*!<  R9  register          */
+        AS3933_R9               =   0x09,           /*!<  R10 register          */
+        AS3933_R10              =   0x0A,           /*!<  R11 register          */
+        AS3933_R11              =   0x0B,           /*!<  R11 register          */
+        AS3933_R12              =   0x0C,           /*!<  R12 register          */
+        AS3933_R13              =   0x0D,           /*!<  R13 register          */
+        AS3933_R14              =   0x0E,           /*!<  R14 register          */
+        AS3933_R15              =   0x0F,           /*!<  R15 register          */
+        AS3933_R16              =   0x10,           /*!<  R16 register          */
+        AS3933_R17              =   0x11,           /*!<  R17 register          */
+        AS3933_R18              =   0x12,           /*!<  R18 register          */
+        AS3933_R19              =   0x13            /*!<  R19 register          */
+    } AS3933_spi_command_structure_registers_t;
+
+
+    /* SPI DIRECT COMMANDS */
+    /**
+      * @brief   DIRECT COMMANDS. ( B13:B8 )
+      */
+    typedef enum {
+        CLEAR_WAKE              =   0x00,           /*!<  Clears the wake state of the chip. In case the chip has woken up ( WAKE pin is high ) the chip is set back to listening mode  */
+        RESET_RSSI              =   0x01,           /*!<  Resets the RSSI measurement                                                                                                   */
+        CALIB_RC_OSC            =   0x02,           /*!<  Starts the trimming procedure of the internal RC oscillator                                                                   */
+        CLEAR_FALSE             =   0x03,           /*!<  Resets the false wakeup register ( R13 = 00 )                                                                                 */
+        PRESET_DEFAULT          =   0x04,           /*!<  Sets all register in the default mode                                                                                         */
+        CALIB_RCO_LC            =   0x05            /*!<  Calibration of the RC-oscillator with the external LC tank                                                                    */
+    } AS3933_spi_direct_commands_t;
+
+
+    /* R0 REGISTER. COMMANDS */
+    /**
+      * @brief   PATT32 ( R0<7> ). Pattern extended to 32 bits
+      *
+      *          NOTE: Default value: PATT32_16_BITS
+      */
+    typedef enum {
+        PATT32_MASK             =   ( 1 << 7 ),     /*!<  PATT32 mask                                   */
+        PATT32_16_BITS          =   ( 0 << 7 ),     /*!<  16-bits pattern extended                      */
+        PATT32_32_BITS          =   ( 1 << 7 )      /*!<  32-bits pattern extended                      */
+    } AS3933_r0_patt32_value_t;
+
+
+    /**
+      * @brief   DAT_MASK ( R0<6> ). Masks data on DAT pin before wakeup happens
+      *
+      *          NOTE: Default value: DAT_MASK_DISABLED
+      */
+    typedef enum {
+        DAT_MASK_MASK           =   ( 1 << 6 ),     /*!<  DAT_MASK mask                                 */
+        DAT_MASK_DISABLED       =   ( 0 << 6 ),     /*!<  Data is not masked on DAT pin                 */
+        DAT_MASK_ENABLED        =   ( 1 << 6 )      /*!<  Data is masked on DAT pin                     */
+    } AS3933_r0_dat_mask_value_t;
+
+
+    /**
+      * @brief   ON_OFF ( R0<5> ). On/Off operation mode. ( Duty-cycle defined in the register R4<7:6> )
+      *
+      *          NOTE: Default value: ON_OFF_DISABLED
+      */
+    typedef enum {
+        ON_OFF_MASK             =   ( 1 << 5 ),     /*!<  ON_OFF mask                                   */
+        ON_OFF_DISABLED         =   ( 0 << 5 ),     /*!<  ON_OFF is disabled                            */
+        ON_OFF_ENABLED          =   ( 1 << 5 )      /*!<  ON_OFF is enabled                             */
+    } AS3933_r0_on_off_value_t;
+
+
+    /**
+      * @brief   MUX_123 ( R0<4> ). Scan mode enable
+      *
+      *          NOTE: Default value: MUX_123_DISABLED
+      */
+    typedef enum {
+        MUX_123_MASK             =   ( 1 << 4 ),     /*!<  MUX_123 mask                                 */
+        MUX_123_DISABLED         =   ( 0 << 4 ),     /*!<  Scan mode enable is disabled                 */
+        MUX_123_ENABLED          =   ( 1 << 4 )      /*!<  Scan mode enable is enabled                  */
+    } AS3933_r0_mux_123_value_t;
+
+
+    /**
+      * @brief   EN_A2 ( R0<3> ). Channel 2 enable
+      *
+      *          NOTE: Default value: EN_A2_ENABLED
+      */
+    typedef enum {
+        EN_A2_MASK              =   ( 1 << 3 ),     /*!<  EN_A2 mask                                    */
+        EN_A2_DISABLED          =   ( 0 << 3 ),     /*!<  Channel 2 is disabled                         */
+        EN_A2_ENABLED           =   ( 1 << 3 )      /*!<  Channel 2 is enabled                          */
+    } AS3933_r0_en_a2_value_t;
+
+
+    /**
+      * @brief   EN_A3 ( R0<2> ). Channel 3 enable
+      *
+      *          NOTE: Default value: EN_A3_ENABLED
+      */
+    typedef enum {
+        EN_A3_MASK              =   ( 1 << 2 ),     /*!<  EN_A3 mask                                    */
+        EN_A3_DISABLED          =   ( 0 << 2 ),     /*!<  Channel 3 is disabled                         */
+        EN_A3_ENABLED           =   ( 1 << 2 )      /*!<  Channel 3 is enabled                          */
+    } AS3933_r0_en_a3_value_t;
+
+
+    /**
+      * @brief   EN_A1 ( R0<1> ). Channel 1 enable
+      *
+      *          NOTE: Default value: EN_A1_ENABLED
+      */
+    typedef enum {
+        EN_A1_MASK              =   ( 1 << 1 ),     /*!<  EN_A1 mask                                    */
+        EN_A1_DISABLED          =   ( 0 << 1 ),     /*!<  Channel 1 is disabled                         */
+        EN_A1_ENABLED           =   ( 1 << 1 )      /*!<  Channel 1 is enabled                          */
+    } AS3933_r0_en_a1_value_t;
+
+
+    /* R1 REGISTER. COMMANDS */
+    /**
+      * @brief   ABS_HY ( R1<7> ). Enable Data slicer absolute reference
+      *
+      *          NOTE: Default value: ABS_HY_DISABLED
+      */
+    typedef enum {
+        ABS_HY_MASK             =   ( 1 << 7 ),     /*!<  ABS_HY mask                                   */
+        ABS_HY_DISABLED         =   ( 0 << 7 ),     /*!<  Data slicer absolute reference is disabled    */
+        ABS_HY_ENABLED          =   ( 1 << 7 )      /*!<  Data slicer absolute reference is enabled     */
+    } AS3933_r1_abs_hy_value_t;
+
+
+    /**
+      * @brief   AGC_TLIM ( R1<6> ). AGC acting only on the first carrier burst
+      *
+      *          NOTE: Default value: AGC_TLIM_DISABLED
+      */
+    typedef enum {
+        AGC_TLIM_MASK           =   ( 1 << 6 ),     /*!<  AGC_TLIM mask                                   */
+        AGC_TLIM_DISABLED       =   ( 0 << 6 ),     /*!<  AGC is disabled                                 */
+        AGC_TLIM_ENABLED        =   ( 1 << 6 )      /*!<  AGC is enabled                                  */
+    } AS3933_r1_agc_tlim_value_t;
+
+
+    /**
+      * @brief   AGC_UD ( R1<5> ). AGC operating in both direction (up-down)
+      *
+      *          NOTE: Default value: AGC_UD_UP_DOWN_MODE
+      */
+    typedef enum {
+        AGC_UD_MASK             =   ( 1 << 5 ),     /*!<  AGC_UD mask                                       */
+        AGC_UD_DOWN_MODE        =   ( 0 << 5 ),     /*!<  AGC down mode only                                */
+        AGC_UD_UP_DOWN_MODE     =   ( 1 << 5 )      /*!<  AGC up and down mode                              */
+    } AS3933_r1_agc_ud_value_t;
+
+
+    /**
+      * @brief   ATT_ON ( R1<4> ). Antenna damper enable
+      *
+      *          NOTE: Default value: ATT_ON_DISABLED
+      */
+    typedef enum {
+        ATT_ON_MASK             =   ( 1 << 4 ),     /*!<  ATT_ON mask                                       */
+        ATT_ON_DISABLED         =   ( 0 << 4 ),     /*!<  Antenna damper disabled                           */
+        ATT_ON_ENABLED          =   ( 1 << 4 )      /*!<  Antenna damper enabled                            */
+    } AS3933_r1_att_on_value_t;
+
+
+    /**
+      * @brief   EN_MANCH ( R1<3> ). Manchester decoder enable
+      *
+      *          NOTE: Default value: EN_MANCH_DISABLED
+      */
+    typedef enum {
+        EN_MANCH_MASK           =   ( 1 << 3 ),     /*!<  EN_MANCH mask                                         */
+        EN_MANCH_DISABLED       =   ( 0 << 3 ),     /*!<  Manchester decoder disabled                           */
+        EN_MANCH_ENABLED        =   ( 1 << 3 )      /*!<  Manchester decoder enabled                            */
+    } AS3933_r1_en_manch_value_t;
+
+
+    /**
+      * @brief   EN_PAT2 ( R1<2> ). Double wakeup pattern correlation
+      *
+      *          NOTE: Default value: EN_PAT2_DISABLED
+      */
+    typedef enum {
+        EN_PAT2_MASK            =   ( 1 << 2 ),     /*!<  EN_PAT2 mask                                          */
+        EN_PAT2_DISABLED        =   ( 0 << 2 ),     /*!<  Double wakeup pattern correlation disabled            */
+        EN_PAT2_ENABLED         =   ( 1 << 2 )      /*!<  Double wakeup pattern correlation enabled             */
+    } AS3933_r1_en_pat2_value_t;
+
+
+    /**
+      * @brief   EN_WPAT ( R1<1> ). Correlator enable
+      *
+      *          NOTE: Default value: EN_WPAT_ENABLED
+      */
+    typedef enum {
+        EN_WPAT_MASK            =   ( 1 << 1 ),     /*!<  EN_WPAT mask                                          */
+        EN_WPAT_DISABLED        =   ( 0 << 1 ),     /*!<  Correlator disabled                                   */
+        EN_WPAT_ENABLED         =   ( 1 << 1 )      /*!<  Correlator enabled                                    */
+    } AS3933_r1_en_wpat_value_t;
+
+
+    /**
+      * @brief   EN_XTAL ( R1<0> ). Crystal oscillator enable
+      *
+      *          NOTE: Default value: EN_XTAL_ENABLED
+      */
+    typedef enum {
+        EN_XTAL_MASK            =   ( 1 << 0 ),     /*!<  EN_XTAL mask                                          */
+        EN_XTAL_DISABLED        =   ( 0 << 0 ),     /*!<  Crystal oscillator disabled                           */
+        EN_XTAL_ENABLED         =   ( 1 << 0 )      /*!<  Crystal oscillator enabled                            */
+    } AS3933_r1_en_xtal_value_t;
+
+
+    /* R2 REGISTER. COMMANDS */
+    /**
+      * @brief   S_ABSH ( R2<7> ). Data slicer absolute threshold reduction
+      *
+      *          NOTE: Default value: S_ABSH_DISABLED
+      */
+    typedef enum {
+        S_ABSH_MASK             =   ( 1 << 7 ),     /*!<  S_ABSH mask                                           */
+        S_ABSH_DISABLED         =   ( 0 << 7 ),     /*!<  Data slicer absolute threshold reduction is disabled  */
+        S_ABSH_ENABLED          =   ( 1 << 7 )      /*!<  Data slicer absolute threshold reduction is enabled   */
+    } AS3933_r2_s_absh_value_t;
+
+
+    /**
+      * @brief   EN_EXT_CLK ( R2<6> ). Enables external clock generator
+      *
+      *          NOTE: Default value: EN_EXT_CLK_DISABLED
+      */
+    typedef enum {
+        EN_EXT_CLK_MASK         =   ( 1 << 6 ),     /*!<  EN_EXT_CLK mask                                   */
+        EN_EXT_CLK_DISABLED     =   ( 0 << 6 ),     /*!<  Enables external clock generator is disabled      */
+        EN_EXT_CLK_ENABLED      =   ( 1 << 6 )      /*!<  Enables external clock generator is enabled       */
+    } AS3933_r2_en_ext_clk_value_t;
+
+
+    /**
+      * @brief   G_BOOST ( R2<5> ). +3dB Amplifier Gain Boost
+      *
+      *          NOTE: Default value: G_BOOST_DISABLED
+      */
+    typedef enum {
+        G_BOOST_MASK            =   ( 1 << 5 ),     /*!<  G_BOOST mask                                      */
+        G_BOOST_DISABLED        =   ( 0 << 5 ),     /*!<  Gain Boost is disabled                            */
+        G_BOOST_ENABLED         =   ( 1 << 5 )      /*!<  Gain Boost is enabled                             */
+    } AS3933_r2_g_boost_value_t;
+
+
+    /**
+      * @brief   S_WU1 ( R2<1:0> ). Tolerance setting for the stage wakeup ( 20 to 150 kHz )
+      *
+      *          NOTE: Default value: S_WU1_20_150_KHZ_TOLERANCE_16_3
+      */
+    typedef enum {
+        S_WU1_20_150_KHZ_MASK               =   ( 0b11 << 0 ),  /*!<  S_WU1 mask ( 20 to 150 kHz )          */
+        S_WU1_20_150_KHZ_TOLERANCE_16_3     =   ( 0b00 << 0 ),  /*!<  M = 8 +/- 3                           */
+        S_WU1_20_150_KHZ_TOLERANCE_16_2     =   ( 0b01 << 0 ),  /*!<  M = 8 +/- 2                           */
+        S_WU1_20_150_KHZ_TOLERANCE_16_1     =   ( 0b10 << 0 )   /*!<  M = 8 +/- 1                           */
+    } AS3933_r2_s_wu1_20_150_khz_value_t;
+
+
+
+    /**
+      * @brief   S_WU1 ( R2<1:0> ). Tolerance setting for the stage wakeup ( 15 to 20 kHz )
+      *
+      *          NOTE: Default value: S_WU1_15_20_KHZ_TOLERANCE_8_3
+      */
+    typedef enum {
+        S_WU1_15_20_KHZ_MASK            =   ( 0b11 << 0 ),  /*!<  S_WU1 mask ( 15 to 20 kHz )               */
+        S_WU1_15_20_KHZ_TOLERANCE_8_3   =   ( 0b00 << 0 ),  /*!<  M = 8 +/- 3                               */
+        S_WU1_15_20_KHZ_TOLERANCE_8_2   =   ( 0b01 << 0 ),  /*!<  M = 8 +/- 2                               */
+        S_WU1_15_20_KHZ_TOLERANCE_8_1   =   ( 0b10 << 0 )   /*!<  M = 8 +/- 1                               */
+    } AS3933_r2_s_wu1_15_20_khz_value_t;
+
+
+    /* R3 REGISTER. COMMANDS */
+    /**
+      * @brief   HY_20m ( R3<7> ). Data slicer hysteresis
+      *
+      *          NOTE: Default value: HY_20M_COMPARATOR_HYSTERESIS_40MV
+      */
+    typedef enum {
+        HY_20M_MASK                         =   ( 1 << 7 ), /*!<  HY_20m mask                               */
+        HY_20M_COMPARATOR_HYSTERESIS_40MV   =   ( 0 << 7 ), /*!<  Comparator hysteresis = 40mV              */
+        HY_20M_COMPARATOR_HYSTERESIS_20MV   =   ( 1 << 7 )  /*!<  Comparator hysteresis = 20mV              */
+    } AS3933_r3_hy_20m_value_t;
+
+
+    /**
+      * @brief   HY_POS ( R3<6> ). Data slicer hysteresis
+      *
+      *          NOTE: Default value: HY_POS_HYSTERESIS_POSITIVE_EDGES
+      */
+    typedef enum {
+        HY_POS_MASK                         =   ( 1 << 6 ), /*!<  HY_POS mask                               */
+        HY_POS_HYSTERESIS_POSITIVE_EDGES    =   ( 0 << 6 ), /*!<  Hysteresis only positive edges            */
+        HY_POS_HYSTERESIS_BOTH_EDGES        =   ( 1 << 6 )  /*!<  Hysteresis positive and negative edges    */
+    } AS3933_r3_hy_pos_value_t;
+
+
+    /**
+      * @brief   FS_SCL ( R3<3:5> ). Data slices time constant
+      *
+      *          NOTE: Default value: FS_SCL_PREAMBLE_LENGTH_2_3
+      */
+    typedef enum {
+        FS_SCL_MASK                     =   ( 0b111 << 3 ),     /*!<  FS_SCL mask                           */
+        FS_SCL_PREAMBLE_LENGTH_0_8      =   ( 0b000 << 3 ),     /*!<  Minimum Preamble Length: 0.8ms        */
+        FS_SCL_PREAMBLE_LENGTH_1_15     =   ( 0b001 << 3 ),     /*!<  Minimum Preamble Length: 1.15ms       */
+        FS_SCL_PREAMBLE_LENGTH_1_55     =   ( 0b010 << 3 ),     /*!<  Minimum Preamble Length: 1.55ms       */
+        FS_SCL_PREAMBLE_LENGTH_1_9      =   ( 0b011 << 3 ),     /*!<  Minimum Preamble Length: 1.9ms        */
+        FS_SCL_PREAMBLE_LENGTH_2_3      =   ( 0b100 << 3 ),     /*!<  Minimum Preamble Length: 2.3ms        */
+        FS_SCL_PREAMBLE_LENGTH_2_65     =   ( 0b101 << 3 ),     /*!<  Minimum Preamble Length: 2.65ms       */
+        FS_SCL_PREAMBLE_LENGTH_3        =   ( 0b110 << 3 ),     /*!<  Minimum Preamble Length: 3ms          */
+        FS_SCL_PREAMBLE_LENGTH_3_5      =   ( 0b111 << 3 )      /*!<  Minimum Preamble Length: 3.5ms        */
+    } AS3933_r3_fs_scl_value_t;
+
+
+    /**
+      * @brief   FS_ENV ( R3<2:0> ). Envelop detector time constant
+      *
+      *          NOTE: Default value: FS_ENV_SYMBOL_RATE_4096
+      */
+    typedef enum {
+        FS_ENV_MASK                 =   ( 0b111 << 0 ),     /*!<  FS_ENV mask                               */
+        FS_ENV_SYMBOL_RATE_4096     =   ( 0b000 << 0 ),     /*!<  Symbol Rate [Manchester symbol/s]: 4096   */
+        FS_ENV_SYMBOL_RATE_2184     =   ( 0b001 << 0 ),     /*!<  Symbol Rate [Manchester symbol/s]: 2184   */
+        FS_ENV_SYMBOL_RATE_1490     =   ( 0b010 << 0 ),     /*!<  Symbol Rate [Manchester symbol/s]: 1490   */
+        FS_ENV_SYMBOL_RATE_1130     =   ( 0b011 << 0 ),     /*!<  Symbol Rate [Manchester symbol/s]: 1130   */
+        FS_ENV_SYMBOL_RATE_910      =   ( 0b100 << 0 ),     /*!<  Symbol Rate [Manchester symbol/s]: 910    */
+        FS_ENV_SYMBOL_RATE_762      =   ( 0b101 << 0 ),     /*!<  Symbol Rate [Manchester symbol/s]: 762    */
+        FS_ENV_SYMBOL_RATE_655      =   ( 0b110 << 0 ),     /*!<  Symbol Rate [Manchester symbol/s]: 655    */
+        FS_ENV_SYMBOL_RATE_512      =   ( 0b111 << 0 )      /*!<  Symbol Rate [Manchester symbol/s]: 512    */
+    } AS3933_r3_fs_env_value_t;
+
+
+    /* R4 REGISTER. COMMANDS */
+    /**
+      * @brief   T_OFF ( R4<7:6> ). Off time in ON/OFF operation mode
+      *
+      *          NOTE: Default value: T_OFF_1_MS
+      */
+    typedef enum {
+        T_OFF_MASK      =   ( 0b11 << 6 ),                 /*!<  T_OFF mask                                 */
+        T_OFF_1_MS      =   ( 0b00 << 6 ),                 /*!<  Off time: 1ms                              */
+        T_OFF_2_MS      =   ( 0b01 << 6 ),                 /*!<  Off time: 2ms                              */
+        T_OFF_4_MS      =   ( 0b10 << 6 ),                 /*!<  Off time: 4ms                              */
+        T_OFF_8_MS      =   ( 0b11 << 6 )                  /*!<  Off time: 8ms                              */
+    } AS3933_r4_t_off_value_t;
+
+
+    /**
+      * @brief   D_RES ( R4<5:4> ). Antenna damping resistor ( Shunt Resistor ( parallel to the resonator at 125 kHz ) )
+      *
+      *          NOTE: Default value: D_RES_PARALLEL_SHUNT_RESISTOR_3_KOHM
+      */
+    typedef enum {
+        D_RES_MASK                              =   ( 0b11 << 4 ),      /*!<  D_RES mask                    */
+        D_RES_PARALLEL_SHUNT_RESISTOR_1_KOHM    =   ( 0b00 << 4 ),      /*!<  Shunt Resistor: 1kOhm         */
+        D_RES_PARALLEL_SHUNT_RESISTOR_3_KOHM    =   ( 0b01 << 4 ),      /*!<  Shunt Resistor: 3kOhm         */
+        D_RES_PARALLEL_SHUNT_RESISTOR_9_KOHM    =   ( 0b10 << 4 ),      /*!<  Shunt Resistor: 9kOhm         */
+        D_RES_PARALLEL_SHUNT_RESISTOR_27_KOHM   =   ( 0b11 << 4 )       /*!<  Shunt Resistor: 27kOhm        */
+    } AS3933_r4_d_res_value_t;
+
+
+    /**
+      * @brief   GR ( R4<3:0> ). Gain reduction
+      *
+      *          NOTE: Default value: GR_GAIN_REDUCTION_NO_GAIN_REDUCTION
+      */
+    typedef enum {
+        GR_MASK                             =   ( 0b1111 << 0 ),        /*!<  GR mask                       */
+        GR_GAIN_REDUCTION_NO_GAIN_REDUCTION =   ( 0b0000 << 0 ),        /*!<  No Gain Reduction             */
+        GR_GAIN_REDUCTION_MINUS_4_DB        =   ( 0b0100 << 0 ),        /*!<  Gain Reduction: -4dB          */
+        GR_GAIN_REDUCTION_MINUS_8_DB        =   ( 0b0110 << 0 ),        /*!<  Gain Reduction: -8dB          */
+        GR_GAIN_REDUCTION_MINUS_12_DB       =   ( 0b1000 << 0 ),        /*!<  Gain Reduction: -12dB         */
+        GR_GAIN_REDUCTION_MINUS_16_DB       =   ( 0b1010 << 0 ),        /*!<  Gain Reduction: -16dB         */
+        GR_GAIN_REDUCTION_MINUS_20_DB       =   ( 0b1100 << 0 ),        /*!<  Gain Reduction: -20dB         */
+        GR_GAIN_REDUCTION_MINUS_24_DB       =   ( 0b1110 << 0 )         /*!<  Gain Reduction: -24dB         */
+    } AS3933_r4_gr_value_t;
+
+
+    /* R5 REGISTER. COMMANDS */
+    /**
+      * @brief   TS2 ( R5<7:0> ). 2nd Byte of wakeup pattern
+      *
+      *          NOTE: Default value: TS2_WAKEUP_PATTERN_MSB
+      */
+    typedef enum {
+        TS2_PATT2B_MASK             =   ( 0xFF          << 0 ),     /*!<  TS2 mask                       */
+        TS2_WAKEUP_PATTERN_PATT2B   =   ( 0b01101001    << 0 )      /*!<  Default value                  */
+    } AS3933_r5_ts2_value_t;
+
+
+    /* R6 REGISTER. COMMANDS */
+    /**
+      * @brief   TS1 ( R6<7:0> ). 1st Byte of wakeup pattern
+      *
+      *          NOTE: Default value: TS1_WAKEUP_PATTERN_LSB
+      */
+    typedef enum {
+        TS1_PATT1B_MASK             =   ( 0xFF          << 0 ),     /*!<  TS1 mask                       */
+        TS1_WAKEUP_PATTERN_PATT1B   =   ( 0b10010110    << 0 )      /*!<  Default value                  */
+    } AS3933_r6_ts2_value_t;
+
+
+    /* R7 REGISTER. COMMANDS */
+    /**
+      * @brief   T_OUT ( R7<7:5> ). Automatic time-out
+      *
+      *          NOTE: Default value: T_OUT_0_SEC
+      */
+    typedef enum {
+        T_OUT_MASK          =   ( 0b111 << 5 ),                 /*!<  T_OUT mask                            */
+        T_OUT_0_SEC         =   ( 0b000 << 5 ),                 /*!<  Timeout: 0sec                         */
+        T_OUT_50_MSEC       =   ( 0b001 << 5 ),                 /*!<  Timeout: 50msec                       */
+        T_OUT_100_MSEC      =   ( 0b010 << 5 ),                 /*!<  Timeout: 100mecs                      */
+        T_OUT_150_MSEC      =   ( 0b011 << 5 ),                 /*!<  Timeout: 150msec                      */
+        T_OUT_200_MSEC      =   ( 0b100 << 5 ),                 /*!<  Timeout: 200msec                      */
+        T_OUT_250_MSEC      =   ( 0b101 << 5 ),                 /*!<  Timeout: 250msec                      */
+        T_OUT_300_MSEC      =   ( 0b110 << 5 ),                 /*!<  Timeout: 300msec                      */
+        T_OUT_350_MSEC      =   ( 0b111 << 5 )                  /*!<  Timeout: 350msec                      */
+    } AS3933_r7_t_out_value_t;
+
+
+    /**
+      * @brief   T_HBIT ( R7<4:0> ). Bit rate definition
+      *
+      *          NOTE: Default value: T_HBIT_BIT_RATE_12
+      */
+    typedef enum {
+        T_HBIT_MASK         =   ( 0b11111 << 0 ),                 /*!<  T_HBIT mask                                  */
+        T_HBIT_BIT_RATE_4   =   ( 0b00011 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 4   */
+        T_HBIT_BIT_RATE_5   =   ( 0b00100 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 5   */
+        T_HBIT_BIT_RATE_6   =   ( 0b00101 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 6   */
+        T_HBIT_BIT_RATE_7   =   ( 0b00110 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 7   */
+        T_HBIT_BIT_RATE_8   =   ( 0b00111 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 8   */
+        T_HBIT_BIT_RATE_9   =   ( 0b01000 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 9   */
+        T_HBIT_BIT_RATE_10  =   ( 0b01001 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 10  */
+        T_HBIT_BIT_RATE_11  =   ( 0b01010 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 11  */
+        T_HBIT_BIT_RATE_12  =   ( 0b01011 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 12  */
+        T_HBIT_BIT_RATE_13  =   ( 0b01100 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 13  */
+        T_HBIT_BIT_RATE_14  =   ( 0b01101 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 14  */
+        T_HBIT_BIT_RATE_15  =   ( 0b01110 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 15  */
+        T_HBIT_BIT_RATE_16  =   ( 0b01111 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 16  */
+        T_HBIT_BIT_RATE_17  =   ( 0b10000 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 17  */
+        T_HBIT_BIT_RATE_18  =   ( 0b10001 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 18  */
+        T_HBIT_BIT_RATE_19  =   ( 0b10010 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 19  */
+        T_HBIT_BIT_RATE_20  =   ( 0b10011 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 20  */
+        T_HBIT_BIT_RATE_21  =   ( 0b10100 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 21  */
+        T_HBIT_BIT_RATE_22  =   ( 0b10101 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 22  */
+        T_HBIT_BIT_RATE_23  =   ( 0b10110 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 23  */
+        T_HBIT_BIT_RATE_24  =   ( 0b10111 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 24  */
+        T_HBIT_BIT_RATE_25  =   ( 0b11000 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 25  */
+        T_HBIT_BIT_RATE_26  =   ( 0b11001 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 26  */
+        T_HBIT_BIT_RATE_27  =   ( 0b11010 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 27  */
+        T_HBIT_BIT_RATE_28  =   ( 0b11011 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 28  */
+        T_HBIT_BIT_RATE_29  =   ( 0b11100 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 29  */
+        T_HBIT_BIT_RATE_30  =   ( 0b11101 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 30  */
+        T_HBIT_BIT_RATE_31  =   ( 0b11110 << 0 ),                 /*!<  Bit Duration in Clock Generator Periods: 31  */
+        T_HBIT_BIT_RATE_32  =   ( 0b11111 << 0 )                  /*!<  Bit Duration in Clock Generator Periods: 32  */
+    } AS3933_r7_t_hbit_value_t;
+
+
+    /* R8 REGISTER. COMMANDS */
+    /**
+      * @brief   BAND_SEL ( R8<7:5> ). Band selection
+      *
+      *          NOTE: Default value: BAND_SEL_RANGE_95_150_KHZ
+      */
+    typedef enum {
+        BAND_SEL_MASK               =   ( 0b111 << 5 ),             /*!<  BAND_SEL mask                                     */
+        BAND_SEL_RANGE_95_150_KHZ   =   ( 0b000 << 5 ),             /*!<  N = 4,  Operating Frequency Range [kHz]: 95-150   */
+        BAND_SEL_RANGE_65_95_KHZ    =   ( 0b000 << 5 ),             /*!<  N = 6,  Operating Frequency Range [kHz]: 65-95    */
+        BAND_SEL_RANGE_40_65_KHZ    =   ( 0b000 << 5 ),             /*!<  N = 10, Operating Frequency Range [kHz]: 40-65    */
+        BAND_SEL_RANGE_23_40_KHZ    =   ( 0b000 << 5 ),             /*!<  N = 18, Operating Frequency Range [kHz]: 23-40    */
+        BAND_SEL_RANGE_15_23_KHZ    =   ( 0b000 << 5 )              /*!<  N = 14, Operating Frequency Range [kHz]: 15-23    */
+    } AS3933_r8_band_sel_value_t;
+
+
+    /**
+      * @brief   T_AUTO ( R8<2:0> ). Artificial wake-up
+      *
+      *          NOTE: Default value: T_AUTO_NO_ARTIFICIAL_WAKEUP
+      */
+    typedef enum {
+        T_AUTO_MASK                     =   ( 0b111 << 0 ),         /*!<  T_AUTO mask                                       */
+        T_AUTO_NO_ARTIFICIAL_WAKEUP     =   ( 0b000 << 0 ),         /*!<  No artificial wake-up                             */
+        T_AUTO_ARTIFICIAL_WAKEUP_1_SEC  =   ( 0b001 << 0 ),         /*!<  Artificial wake-up 1sec                           */
+        T_AUTO_ARTIFICIAL_WAKEUP_5_SEC  =   ( 0b010 << 0 ),         /*!<  Artificial wake-up 5sec                           */
+        T_AUTO_ARTIFICIAL_WAKEUP_20_SEC =   ( 0b011 << 0 ),         /*!<  Artificial wake-up 20sec                          */
+        T_AUTO_ARTIFICIAL_WAKEUP_2_MIN  =   ( 0b100 << 0 ),         /*!<  Artificial wake-up 2min                           */
+        T_AUTO_ARTIFICIAL_WAKEUP_15_MIN =   ( 0b101 << 0 ),         /*!<  Artificial wake-up 15min                          */
+        T_AUTO_ARTIFICIAL_WAKEUP_1_HOUR =   ( 0b110 << 0 ),         /*!<  Artificial wake-up 1hour                          */
+        T_AUTO_ARTIFICIAL_WAKEUP_2_HOUR =   ( 0b111 << 0 ),         /*!<  Artificial wake-up 2hour                          */
+    } AS3933_r8_t_auto_value_t;
+
+
+    /* R9 REGISTER. COMMANDS */
+    /**
+      * @brief   BLOCK_AGC ( R9<7> ). Disables AGC
+      *
+      *          NOTE: Default value: BLOCK_AGC_ENABLED
+      */
+    typedef enum {
+        BLOCK_AGC_MASK      =   ( 1 << 7 ),             /*!<  BLOCK_AGC mask                       */
+        BLOCK_AGC_DISABLED  =   ( 1 << 7 ),             /*!<  AGC is disabled                      */
+        BLOCK_AGC_ENABLED   =   ( 0 << 7 )              /*!<  AGC is enabled                       */
+    } AS3933_r9_block_agc_value_t;
+
+
+
+    /* R10 REGISTER. COMMANDS */
+    /**
+      * @brief   RSSI1 ( R10<4:0> ). RSSI channel 1
+      *
+      */
+    typedef enum {
+        RSSI1_MASK      =   ( 0b11111 << 0 )              /*!<  RSSI1 mask                        */
+    } AS3933_r10_rssi1_value_t;
+
+
+    /* R11 REGISTER. COMMANDS */
+    /**
+      * @brief   RSSI3 ( R11<4:0> ). RSSI channel 3
+      *
+      */
+    typedef enum {
+        RSSI3_MASK      =   ( 0b11111 << 0 )              /*!<  RSSI3 mask                        */
+    } AS3933_r11_rssi3_value_t;
+
+
+    /* R12 REGISTER. COMMANDS */
+    /**
+      * @brief   RSSI2 ( R11<4:0> ). RSSI channel 2
+      *
+      */
+    typedef enum {
+        RSSI2_MASK      =   ( 0b11111 << 0 )              /*!<  RSSI2 mask                        */
+    } AS3933_r11_rssi2_value_t;
+
+
+    /* R14 REGISTER. COMMANDS */
+    /**
+      * @brief   RC_CAL_KO ( R14<7> ). Unsuccessful RC calibration
+      *
+      */
+    typedef enum {
+        RC_CAL_KO_MASK  =   ( 1 << 7 ),                 /*!<  RC_CAL_KO mask                        */
+        RC_CAL_KO_HIGH  =   ( 1 << 7 ),                 /*!<  RC_CAL_KO Unsuccessful RC calibration */
+        RC_CAL_KO_LOW   =   ( 0 << 7 )                  /*!<  RC_CAL_KO Reset state                 */
+    } AS3933_r14_rc_cal_ko_value_t;
+
+
+    /**
+      * @brief   RC_CAL_OK ( R14<6> ). Successful RC calibration
+      *
+      */
+    typedef enum {
+        RC_CAL_OK_MASK  =   ( 1 << 6 ),                 /*!<  RC_CAL_OK mask                        */
+        RC_CAL_OK_HIGH  =   ( 1 << 6 ),                 /*!<  RC_CAL_OK Successful RC calibration   */
+        RC_CAL_OK_LOW   =   ( 0 << 6 )                  /*!<  RC_CAL_OK Reset state                 */
+    } AS3933_r14_rc_cal_ok_value_t;
+
+
+    /**
+      * @brief   RC_OSC_TAPS ( R14<5:0> ). RC-Oscillator taps setting
+      *
+      */
+    typedef enum {
+        RC_OSC_TAPS_MASK  =   ( 0b111111 << 0 )         /*!<  RC_OSC_TAPS mask                        */
+    } AS3933_r14_rc_osc_taps_value_t;
+
+
+    /* R15 REGISTER. COMMANDS */
+    /**
+      * @brief   LC_OSC_KO ( R15<7> ). LC-Oscillator not working
+      *
+      */
+    typedef enum {
+        LC_OSC_KO_MASK  =   ( 1 << 7 ),                 /*!<  LC_OSC_KO mask                        */
+        LC_OSC_KO_HIGH  =   ( 1 << 7 ),                 /*!<  LC-Oscillator not working             */
+        LC_OSC_KO_LOW   =   ( 0 << 7 )                  /*!<  LC_OSC_KO Reset state                 */
+    } AS3933_r15_lc_osc_ko_value_t;
+
+
+    /**
+      * @brief   LC_OSC_OK ( R15<6> ). LC-Oscillator working
+      *
+      */
+    typedef enum {
+        LC_OSC_OK_MASK  =   ( 1 << 6 ),                 /*!<  LC_OSC_OK mask                        */
+        LC_OSC_OK_HIGH  =   ( 1 << 6 ),                 /*!<  LC_OSC_OK LC-Oscillator working       */
+        LC_OSC_OK_LOW   =   ( 0 << 6 )                  /*!<  LC_OSC_OK Reset state                 */
+    } AS3933_r15_lc_osc_ok_value_t;
+
+
+    /* R16 REGISTER. COMMANDS */
+    /**
+      * @brief   CLOCK_GEN_DIS ( R16<7> ). The Clock Generator output signal displayed on CL_DAT pin
+      *
+      *          NOTE: Default value: CLOCK_GEN_DIS_DISABLED
+      */
+    typedef enum {
+        CLOCK_GEN_DIS_MASK      =   ( 1 << 7 ),         /*!<  CLOCK_GEN_DIS mask                    */
+        CLOCK_GEN_DIS_ENABLED   =   ( 1 << 7 ),         /*!<  CLOCK on CL_DAT pin                   */
+        CLOCK_GEN_DIS_DISABLED  =   ( 0 << 7 )          /*!<  NO CLOCK on CL_DAT pin                */
+    } AS3933_r16_clock_gen_dis_value_t;
+
+
+    /**
+      * @brief   LC_OSC_DIS ( R16<6> ). The LC-oscillator output signal displayed on DAT pin
+      *
+      *          NOTE: Default value: LC_OSC_DIS_DISABLED
+      */
+    typedef enum {
+        LC_OSC_DIS_MASK      =   ( 1 << 6 ),         /*!<  LC_OSC_DIS mask                          */
+        LC_OSC_DIS_ENABLED   =   ( 1 << 6 ),         /*!<  LC-CLOCK on CL_DAT pin                   */
+        LC_OSC_DIS_DISABLED  =   ( 0 << 6 )          /*!<  NO LC-CLOCK on CL_DAT pin                */
+    } AS3933_r16_lc_osc_dis_value_t;
+
+
+
+    /**
+      * @brief   RC_OSC_MIN ( R16<5> ). Sets the RC-oscillator to minimum frequency
+      *
+      *          NOTE: Default value: RC_OSC_MIN_DISABLED
+      */
+    typedef enum {
+        RC_OSC_MIN_MASK      =   ( 1 << 5 ),         /*!<  RC_OSC_MIN mask                                  */
+        RC_OSC_MIN_ENABLED   =   ( 1 << 5 ),         /*!<  RC-oscillator to minimum frequency enabled       */
+        RC_OSC_MIN_DISABLED  =   ( 0 << 5 )          /*!<  RC-oscillator to minimum frequency disabled      */
+    } AS3933_r16_rc_osc_min_value_t;
+
+
+    /**
+      * @brief   RC_OSC_MIN ( R16<4> ). Sets the RC-oscillator to maximum frequency
+      *
+      *          NOTE: Default value: RC_OSC_MAX_DISABLED
+      */
+    typedef enum {
+        RC_OSC_MAX_MASK      =   ( 1 << 4 ),         /*!<  RC_OSC_MAX mask                                  */
+        RC_OSC_MAX_ENABLED   =   ( 1 << 4 ),         /*!<  RC-oscillator to maximum frequency enabled       */
+        RC_OSC_MAX_DISABLED  =   ( 0 << 4 )          /*!<  RC-oscillator to maximum frequency disabled      */
+    } AS3933_r16_rc_osc_max_value_t;
+
+
+    /**
+      * @brief   LC_OSC_MUX3 ( R16<2> ). Connects LF3P to the LCO
+      *
+      *          NOTE: Default value: LC_OSC_MUX3_LF3P_AND_LCO_DISCONNECTED
+      */
+    typedef enum {
+        LC_OSC_MUX3_MASK                        =   ( 1 << 2 ),     /*!<  LC_OSC_MUX3 mask                  */
+        LC_OSC_MUX3_LF3P_AND_LCO_CONNECTED      =   ( 1 << 2 ),     /*!<  LF3P and LCO connected            */
+        LC_OSC_MUX3_LF3P_AND_LCO_DISCONNECTED   =   ( 0 << 2 )      /*!<  LF3P and LCO disconnected         */
+    } AS3933_r16_lc_osc_mux3_value_t;
+
+
+    /**
+      * @brief   LC_OSC_MUX2 ( R16<1> ). Connects LF2P to the LCO
+      *
+      *          NOTE: Default value: LC_OSC_MUX2_LF2P_AND_LCO_DISCONNECTED
+      */
+    typedef enum {
+        LC_OSC_MUX2_MASK                        =   ( 1 << 1 ),     /*!<  LC_OSC_MUX2 mask                  */
+        LC_OSC_MUX2_LF2P_AND_LCO_CONNECTED      =   ( 1 << 1 ),     /*!<  LF2P and LCO connected            */
+        LC_OSC_MUX2_LF2P_AND_LCO_DISCONNECTED   =   ( 0 << 1 )      /*!<  LF2P and LCO disconnected         */
+    } AS3933_r16_lc_osc_mux2_value_t;
+
+
+    /**
+      * @brief   LC_OSC_MUX1 ( R16<0> ). Connects LF1P to the LCO
+      *
+      *          NOTE: Default value: LC_OSC_MUX1_LF1P_AND_LCO_DISCONNECTED
+      */
+    typedef enum {
+        LC_OSC_MUX1_MASK                        =   ( 1 << 0 ),     /*!<  LC_OSC_MUX1 mask                  */
+        LC_OSC_MUX1_LF1P_AND_LCO_CONNECTED      =   ( 1 << 0 ),     /*!<  LF1P and LCO connected            */
+        LC_OSC_MUX1_LF1P_AND_LCO_DISCONNECTED   =   ( 0 << 0 )      /*!<  LF1P and LCO disconnected         */
+    } AS3933_r16_lc_osc_mux1_value_t;
+
+
+
+    /* R17 REGISTER. COMMANDS */
+    /**
+      * @brief   CAPS_CH1 ( R17<4:0> ). Capacitor banks on the channel1
+      *
+      *          NOTE: Default value: CAPS_CH1_ADDS_NONE
+      */
+    typedef enum {
+        CAPS_CH1_MASK       =   ( 0b11111 << 0 ),           /*!<  CAPS_CH1 mask                                 */
+        CAPS_CH1_ADDS_NONE  =   ( 0b00000 << 0 ),           /*!<  None      to LF1P                             */
+        CAPS_CH1_ADDS_1PF   =   ( 0b00001 << 0 ),           /*!<  Adds 1pF  to LF1P                             */
+        CAPS_CH1_ADDS_2PF   =   ( 0b00010 << 0 ),           /*!<  Adds 2pF  to LF1P                             */
+        CAPS_CH1_ADDS_4PF   =   ( 0b00100 << 0 ),           /*!<  Adds 4pF  to LF1P                             */
+        CAPS_CH1_ADDS_8PF   =   ( 0b01000 << 0 ),           /*!<  Adds 8pF  to LF1P                             */
+        CAPS_CH1_ADDS_16PF  =   ( 0b10000 << 0 )            /*!<  Adds 16pF to LF1P                             */
+    } AS3933_r17_caps_ch1_value_t;
+
+
+    /* R18 REGISTER. COMMANDS */
+    /**
+      * @brief   CAPS_CH2 ( R18<4:0> ). Capacitor banks on the channel2
+      *
+      *          NOTE: Default value: CAPS_CH2_ADDS_NONE
+      */
+    typedef enum {
+        CAPS_CH2_MASK       =   ( 0b11111 << 0 ),           /*!<  CAPS_CH2 mask                                 */
+        CAPS_CH2_ADDS_NONE  =   ( 0b00000 << 0 ),           /*!<  None      to LF2P                             */
+        CAPS_CH2_ADDS_1PF   =   ( 0b00001 << 0 ),           /*!<  Adds 1pF  to LF2P                             */
+        CAPS_CH2_ADDS_2PF   =   ( 0b00010 << 0 ),           /*!<  Adds 2pF  to LF2P                             */
+        CAPS_CH2_ADDS_4PF   =   ( 0b00100 << 0 ),           /*!<  Adds 4pF  to LF2P                             */
+        CAPS_CH2_ADDS_8PF   =   ( 0b01000 << 0 ),           /*!<  Adds 8pF  to LF2P                             */
+        CAPS_CH2_ADDS_16PF  =   ( 0b10000 << 0 )            /*!<  Adds 16pF to LF2P                             */
+    } AS3933_r18_caps_ch2_value_t;
+
+
+    /* R19 REGISTER. COMMANDS */
+    /**
+      * @brief   CAPS_CH3 ( R19<4:0> ). Capacitor banks on the channel3
+      *
+      *          NOTE: Default value: CAPS_CH3_ADDS_NONE
+      */
+    typedef enum {
+        CAPS_CH3_MASK       =   ( 0b11111 << 0 ),           /*!<  CAPS_CH3 mask                                 */
+        CAPS_CH3_ADDS_NONE  =   ( 0b00000 << 0 ),           /*!<  None      to LF3P                             */
+        CAPS_CH3_ADDS_1PF   =   ( 0b00001 << 0 ),           /*!<  Adds 1pF  to LF3P                             */
+        CAPS_CH3_ADDS_2PF   =   ( 0b00010 << 0 ),           /*!<  Adds 2pF  to LF3P                             */
+        CAPS_CH3_ADDS_4PF   =   ( 0b00100 << 0 ),           /*!<  Adds 4pF  to LF3P                             */
+        CAPS_CH3_ADDS_8PF   =   ( 0b01000 << 0 ),           /*!<  Adds 8pF  to LF3P                             */
+        CAPS_CH3_ADDS_16PF  =   ( 0b10000 << 0 )            /*!<  Adds 16pF to LF3P                             */
+    } AS3933_r19_caps_ch3_value_t;
+
+
+
+
+    /* DRIVER COMMANDS */
+    /**
+      * @brief   CHANNEL ENABLED
+      *
+      *          NOTE: p.14 8.1.1 Listening Mode
+      */
+    typedef enum {
+        AS3933_CH1_OFF_CH2_OFF_CH3_OFF  =   0,              /*!<  All channels disabled                         */
+        AS3933_CH1_ON_CH2_OFF_CH3_OFF   =   1,              /*!<  Channels 1 enabled                            */
+        AS3933_CH1_OFF_CH2_ON_CH3_OFF   =   2,              /*!<  Channel 2 enabled                             */
+        AS3933_CH1_ON_CH2_ON_CH3_OFF    =   3,              /*!<  Channels 1 and 2 enabled                      */
+        AS3933_CH1_OFF_CH2_OFF_CH3_ON   =   4,              /*!<  Channel 3 enabled                             */
+        AS3933_CH1_ON_CH2_OFF_CH3_ON    =   5,              /*!<  Channels 1 and 3 enabled                      */
+        AS3933_CH1_OFF_CH2_ON_CH3_ON    =   6,              /*!<  Channels 2 and 3 enabled                      */
+        AS3933_CH1_ON_CH2_ON_CH3_ON     =   7               /*!<  All channels enabled                          */
+    } AS3933_channels_enable_t;
+
+
+    /**
+      * @brief   LISTENING MODE ( LOW POWER MODE )
+      *
+      *          NOTE: p.14 8.1.1 Listening Mode
+      */
+    typedef enum {
+        AS3933_STANDARD_LISTENING_MODE  =   0,              /*!<  All channels are active at the same time      */
+        AS3933_SCANNING_MODE            =   1,              /*!<  Low Power mode 1                              */
+        AS3933_ON_OFF_MODE              =   2               /*!<  Low Power mode 2                              */
+    } AS3933_scanning_mode_t;
+
+
+    /**
+      * @brief   TOLERANCE SETTINGS
+      *
+      *          NOTE: p.23 8.3.1 Frequency Detector / RSSI / Channel Selector
+      *                The tolerance depends on the frequency detection band.
+      */
+    typedef enum {
+        AS3933_TOLERANCE_MASK       =   ( 0b11 << 0 ),      /*!<  Tolerance mask                            */
+        AS3933_TOLERANCE_TIGHT      =   ( 0b00 << 0 ),
+        AS3933_TOLERANCE_MEDIUM     =   ( 0b01 << 0 ),
+        AS3933_TOLERANCE_RELAX      =   ( 0b10 << 0 )
+    } AS3933_tolerance_settings_t;
+
+
+    /**
+      * @brief   CHANNELS ( Parallel Tuning Capacitance )
+      *
+      */
+    typedef enum {
+        AS3933_CHANNEL_LF1P  =   0,                 /*!<  Channel 1         */
+        AS3933_CHANNEL_LF2P  =   1,                 /*!<  Channel 2         */
+        AS3933_CHANNEL_LF3P  =   2                  /*!<  Channel 3         */
+    } AS3933_parallel_tuning_channels_t;
+
+
+    /**
+      * @brief   CAPACITANCE ( Parallel Tuning Capacitance )
+      *
+      */
+    typedef enum {
+        AS3933_CAPACITANCE_MASK       =   ( 0b11111 << 0 ),           /*!<  AS3933_CAPACITANCE mask                 */
+        AS3933_CAPACITANCE_ADDS_NONE  =   ( 0b00000 << 0 ),           /*!<  None      to chosen channel             */
+        AS3933_CAPACITANCE_ADDS_1PF   =   ( 0b00001 << 0 ),           /*!<  Adds 1pF  to chosen channel             */
+        AS3933_CAPACITANCE_ADDS_2PF   =   ( 0b00010 << 0 ),           /*!<  Adds 2pF  to chosen channel             */
+        AS3933_CAPACITANCE_ADDS_4PF   =   ( 0b00100 << 0 ),           /*!<  Adds 4pF  to chosen channel             */
+        AS3933_CAPACITANCE_ADDS_8PF   =   ( 0b01000 << 0 ),           /*!<  Adds 8pF  to chosen channel             */
+        AS3933_CAPACITANCE_ADDS_16PF  =   ( 0b10000 << 0 )            /*!<  Adds 16pF to chosen channel             */
+    } AS3933_parallel_tuning_capacitance_t;
+
+
+
+#ifndef AS3933_VECTOR_STRUCT_H
+#define AS3933_VECTOR_STRUCT_H
+    /* AS3933 DATA */
+    typedef struct {
+        int8_t      f_wake;                  /*!<  False wakeup register                */
+        uint8_t     patt2b;                  /*!<  Wakeup pattern PATT2B ( Manchester ) */
+        uint8_t     patt1b;                  /*!<  Wakeup pattern PATT1B ( Manchester ) */
+        uint8_t     rssi1;                   /*!<  RSSI1 Channel 1                      */
+        uint8_t     rssi2;                   /*!<  RSSI2 Channel 2                      */
+        uint8_t     rssi3;                   /*!<  RSSI3 Channel 3                      */
+
+        uint32_t    data;                    /*!<  Data                                 */
+    } AS3933_data_t;
+#endif
+
+
+
+    /**
+      * @brief   INTERNAL CONSTANTS
+      */
+    typedef enum {
+        AS3933_SUCCESS     =       0,
+        AS3933_FAILURE     =       1,
+        SPI_SUCCESS        =       1
+    } AS3933_status_t;
+
+
+
+
+    /** Create an AS3933 object connected to the specified SPI pins.
+      *
+      * @param mosi     SPI Master Output Slave Input
+      * @param miso     SPI Master Input Slave Output
+      * @param sclk     SPI clock
+      * @param cs       SPI Chip Select
+      * @param freq     SPI frequency in Hz.
+      */
+    AS3933 ( PinName mosi, PinName miso, PinName sclk, PinName cs, uint32_t freq );
+
+    /** Delete AS3933 object.
+     */
+    ~AS3933();
+
+    /** It configures the low power mode.
+    */
+    AS3933_status_t  AS3933_SetLowPowerMode                 ( AS3933_channels_enable_t myEnabledChannels, AS3933_scanning_mode_t myLowPowerMode, AS3933_r4_t_off_value_t myT_Off     );
+
+    /** It configures the artificial wakeup.
+        */
+    AS3933_status_t  AS3933_SetArtificialWakeUp             ( AS3933_r8_t_auto_value_t myArtificialWakeUp                                                                            );
+
+    /** It gets feedback on the surrounding environment reading the false wakeup register.
+        */
+    AS3933_status_t  AS3933_ReadFalseWakeUpRegister         ( AS3933_data_t* myF_WAKE                                                                                                );
+
+    /** It configures the clock generator.
+        */
+    AS3933_status_t  AS3933_SetClockGenerator               ( AS3933_r1_en_xtal_value_t myClockGenerator, AS3933_r16_clock_gen_dis_value_t myClockGeneratorOutputMode                );
+
+    /** It calibrates RC oscillator ( Self Calibration only ).
+        */
+    AS3933_status_t  AS3933_CalibrateRC_Oscillator          ( void                                                                                                                   );
+
+    /** It configures the antenna damper.
+        */
+    AS3933_status_t  AS3933_SetAntennaDamper                ( AS3933_r1_att_on_value_t myAntennaDamperMode, AS3933_r4_d_res_value_t myShuntResistor                                  );
+
+    /** It configures the envelop detector for different symbol rates.
+        */
+    AS3933_status_t  AS3933_SetEnvelopDetector              ( AS3933_r3_fs_env_value_t mySymbolRates                                                                                 );
+
+    /** It configures the data slicer for different preamble length.
+        */
+    AS3933_status_t  AS3933_SetDataSlicer                   ( AS3933_r1_abs_hy_value_t myAbsoluteThresholdMode, AS3933_r3_fs_scl_value_t myMinimumPreambleLength                     );
+
+    /** It configures the hysteresis on the data slicer comparator.
+        */
+    AS3933_status_t  AS3933_SetComparatorHysteresis         ( AS3933_r3_hy_pos_value_t myHysteresisMode, AS3933_r3_hy_20m_value_t myHysteresisRange                                  );
+
+    /** It configures the gain reduction.
+        */
+    AS3933_status_t  AS3933_SetGainReduction                ( AS3933_r4_gr_value_t myGainReductionValue                                                                              );
+
+    /** It configures the operating frequency range.
+        */
+    AS3933_status_t  AS3933_SetOperatingFrequencyRange      ( AS3933_r8_band_sel_value_t myOperatingFrequencyRange                                                                   );
+
+    /** It configures the frequency detection tolerance.
+        */
+    AS3933_status_t  AS3933_SetFrequencyDetectionTolerance  ( AS3933_tolerance_settings_t myTolerance                                                                                );
+
+    /** It configures the +3dB gain boost.
+        */
+    AS3933_status_t  AS3933_SetGainBoost                    ( AS3933_r2_g_boost_value_t myGainBoostMode                                                                              );
+
+    /** It configures the Automatic Gain Control ( AGC ).
+        */
+    AS3933_status_t  AS3933_SetAGC                          ( AS3933_r1_agc_tlim_value_t myAGC_CarrierBurstMode, AS3933_r1_agc_ud_value_t myAGC_OperatingDirection                   );
+
+    /** It configures the mask data before wakeup.
+        */
+    AS3933_status_t  AS3933_SetDataMask                     ( AS3933_r0_dat_mask_value_t myDataMaskMode                                                                              );
+
+    /** It configures the correlator and the Manchester Decoder.
+        */
+    AS3933_status_t  AS3933_SetCorrelator                   ( AS3933_r1_en_wpat_value_t myCorrelatorMode, AS3933_r0_patt32_value_t mySymbolPattern, AS3933_r7_t_hbit_value_t myRate,
+                                                              AS3933_r1_en_manch_value_t myManchesterDecoderMode                                                                     );
+
+    /** It sets the wakeup pattern ( Manchester ).
+        */
+    AS3933_status_t  AS3933_SetWakeUpPattern                ( AS3933_data_t myWakeUpPattern                                                                                          );
+
+    /** It gets the wakeup pattern ( Manchester ).
+        */
+    AS3933_status_t  AS3933_GetWakeUpPattern                ( AS3933_data_t* myWakeUpPattern                                                                                         );
+
+    /** It sets the automatic time-out setup.
+        */
+    AS3933_status_t  AS3933_SetAutomaticTimeOut             ( AS3933_r7_t_out_value_t myAutomaticTimeOut                                                                             );
+
+    /** It sets the parallel tuning capacitance on the chosen channel.
+        */
+    AS3933_status_t  AS3933_SetParallelTuningCapacitance    ( AS3933_parallel_tuning_channels_t myChannel, AS3933_parallel_tuning_capacitance_t myAddedCapacitance                   );
+
+    /** It gets the RSSI for all channels.
+        */
+    AS3933_status_t  AS3933_GetRSSI                         ( AS3933_data_t* myChannelRSSI                                                                                           );
+
+    /** It sends a direct command
+        */
+    AS3933_status_t  AS3933_Send_DirectCommand              ( AS3933_spi_direct_commands_t myDirectCommand                                                                           );
+
+private:
+    SPI         _spi;
+    DigitalOut  _cs;
+};
+
+#endif