| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- * Copyright (c) 2016 Zibin Zheng <[email protected]>
- * All rights reserved
- */
- #ifndef _MULTI_BUTTON_H_
- #define _MULTI_BUTTON_H_
- //#include "stdint.h"
- #include "TypeDef.h"
- #include "string.h"
- //According to your need to modify the constants.
- #define TICKS_INTERVAL 6 //ms
- #define DEBOUNCE_TICKS 3 //MAX 8
- #define SHORT_TICKS (120 /TICKS_INTERVAL)
- #define LONG_TICKS (2000 /TICKS_INTERVAL)
- #define LONG_TICKS_TRIG (120 /TICKS_INTERVAL) //³¤°´,ÖÜÆÚÐÔµ÷ÓÃ
- typedef void ( *BtnCallback ) ( void* );
- typedef enum
- {
- PRESS_DOWN = 0,
- PRESS_UP,
- PRESS_REPEAT,
- SINGLE_CLICK,
- DOUBLE_CLICK,
- LONG_RRESS_START,
- LONG_PRESS_HOLD,
- number_of_event,
- NONE_PRESS
- } PressEvent;
- typedef struct Button
- {
- uint16_t ticks;
- uint8_t repeat : 4;
- uint8_t event : 4;
- uint8_t state : 3;
- uint8_t debounce_cnt : 3;
- uint8_t active_level : 1;
- uint8_t button_level : 1;
- uint8_t ( *hal_button_Level ) ( void );
- BtnCallback cb[number_of_event];
- struct Button* next;
- } Button;
- #ifdef __cplusplus
- extern "C" {
- #endif
- void button_init_Head ( void );
- void button_init ( struct Button* handle, uint8_t ( *pin_level ) (), uint8_t active_level );
- void button_attach ( struct Button* handle, PressEvent event, BtnCallback cb );
- PressEvent get_button_event ( struct Button* handle );
- int button_start ( struct Button* handle );
- void button_stop ( struct Button* handle );
- void button_ticks ( void );
- #ifdef __cplusplus
- }
- #endif
- #endif
|