62 lines
1.6 KiB
C
62 lines
1.6 KiB
C
#include "key_driver.h"
|
|
#include "gpio.h"
|
|
#include "system/event.h"
|
|
#include "app_config.h"
|
|
#include "audio_config.h"
|
|
#include "rdec_key.h"
|
|
|
|
#if TCFG_RDEC_KEY_ENABLE
|
|
|
|
static const struct rdec_platform_data *__this = NULL;
|
|
|
|
u8 rdec_get_key_value(void);
|
|
|
|
struct key_driver_para rdec_key_scan_para = {
|
|
.scan_time = 10, //按键扫描频率, 单位: ms
|
|
.last_key = NO_KEY, //上一次get_value按键值, 初始化为NO_KEY;
|
|
.filter_time = 0, //按键消抖延时;
|
|
.long_time = 75, //按键判定长按数量
|
|
.hold_time = (75 + 15), //按键判定HOLD数量
|
|
.click_delay_time = 0, //按键被抬起后等待连击延时数量
|
|
.key_type = KEY_DRIVER_TYPE_RDEC,
|
|
.get_value = rdec_get_key_value,
|
|
};
|
|
extern s8 get_rdec_rdat(int i);
|
|
|
|
extern u32 timer_get_ms(void);
|
|
u8 rdec_get_key_value(void)
|
|
{
|
|
int i;
|
|
s8 rdec_data;
|
|
u8 key_value = 0;
|
|
if (!__this->enable) {
|
|
return NO_KEY;
|
|
}
|
|
for (i = 0; i < 3; i++) {
|
|
rdec_data = get_rdec_rdat(i);
|
|
if (rdec_data < 0) {
|
|
key_value = __this->rdec[i].key_value0;
|
|
return key_value;
|
|
} else if (rdec_data > 0) {
|
|
key_value = __this->rdec[i].key_value1;
|
|
return key_value;
|
|
}
|
|
}
|
|
return NO_KEY;
|
|
}
|
|
int rdec_key_init(const struct rdec_platform_data *rdec_key_data)
|
|
{
|
|
__this = rdec_key_data;
|
|
if (!__this) {
|
|
return -EINVAL;
|
|
}
|
|
if (!__this->enable) {
|
|
return KEY_NOT_SUPPORT;
|
|
}
|
|
printf("rdec_key_init >>>> ");
|
|
return rdec_init(rdec_key_data);
|
|
}
|
|
|
|
#endif /* #if TCFG_RDEC_KEY_ENABLE */
|
|
|