You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#ifndef _KEY_H_
#define _KEY_H_
#include "port.h"
#include "pwm.h"
#define POWER_KEY_TRIGGER_TIME 3000
#define KEY_SCAN_PERIOD 20 //ɨ������20ms
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
#define ZKEY_INIT(_name, _get_key_state) \
{ .name = _name, .get_key_state = _get_key_state } #define ZMODULE_INIT(_keys, _onkey) /**/ \
{ /**/ \ .keys = _keys, /**/ \ .nkey = ARRAY_SIZE(_keys), /**/ \ .onkey = _onkey /**/ \ }
typedef bool (*get_key_state_t)(void); typedef enum { // mode1
zks_keep, zks_rising_edge, //�����ذ������´�0-1
zks_falling_edge, //�½��ذ���̧��1-0
// mode2
zks_trigger_event, //����
zks_longtime_trigger_event, //��ʱ�䴥��
} zkey_state_t;
/**
* @brief zkey */ typedef struct { const char *name; get_key_state_t get_key_state; bool last_io_state;
zkey_state_t cur_state; //��ǰ��״̬
uint32_t keep_state_count; /*������ǰ״̬�����˶���*/
bool hasProcessed; /*useful for user*/ bool after_filter_state;
uint32_t currentstatekeep_count; //����ʹ��
bool last_real_state; //����ʹ��
} zkey_t;
/**
* @brief zkey_module */ typedef struct { zkey_t *keys; int nkey; void (*onkey)(zkey_t *key, zkey_state_t key_state); } zkey_module_t;
void zkey_init(zkey_module_t *module); void zkey_do_loop_in_each_period(void *_null); #endif
|