#ifndef __BUTTON_H_
#define __BUTTON_H_

#include <stdint.h>
#include "nrfx_gpiote.h"



/*** Defines */

#ifndef BUTTONS_ACTIVE_STATE
#define BUTTONS_ACTIVE_STATE            0
#endif /* BUTTONS_ACTIVE_STATE */

#define BTN_DEBOUNCE_INTERVAL_MS        10
#define BTN_PRESS_PERIOD_MS             1000
#define BTN_DOUBLE_CLICK_MS             300
#define BTN_LONG_PRESS_MS               1000
#define BTN_PRESS_TIMEOUT_MS            10000

#define BTN_LONG_PRESS_CNT              (BTN_LONG_PRESS_MS / BTN_PRESS_PERIOD_MS)
#define BTN_PRESS_TIMEOUT_CNT           (BTN_PRESS_TIMEOUT_MS / BTN_PRESS_PERIOD_MS)



/* Type definitions */

typedef enum btn_evt_e {
    BTN_EVT_CLICK,
    BTN_EVT_DOUBLE_CLICK,
    BTN_EVT_LONG_PRESS,
    BTN_EVT_TIMEOUT,
} btn_evt_t;

typedef void (*btn_handler_cb_t)(nrfx_gpiote_pin_t button_pin, btn_evt_t btn_evt);



/*** Interface functions */

void btn_init(btn_handler_cb_t cb);



#endif /* __CTRL_BUTTON_H_ */
