1 Star 0 Fork 8

Anderson/vtor_elec_module

forked from vtor3478/vtor_elec_module 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
vtor_key.c 2.66 KB
一键复制 编辑 原始数据 按行查看 历史
#include "vtor_key.h"
#ifdef __VTOR_KEY__
VtorKey* vtorKeyHeader = NULL;
uint8_t VtorKey_Scan(uint16_t scanTime)
{
uint8_t handlerFlag = 0;
VtorKey* curVtorKey = vtorKeyHeader;
// 用户自定义,获取按键电平
VtorKey_GetLevel();
while(curVtorKey != NULL)
{
// 针对电平时长进行统计,如果电平变化,则时间清零
if (curVtorKey->curLevel != curVtorKey->lastLevel)
{
curVtorKey->holdTime = 0;
}
else
{
// 对时长最大值进行限制,防止太大,导致数据溢出
if (curVtorKey->holdTime <= VTOR_KEY_TIME_MAX)
{
curVtorKey->holdTime += scanTime;
}
}
curVtorKey->lastState = curVtorKey->curState;
// 时长足够长消抖之后,才能确定按键状态 按下 或弹起状态
if (curVtorKey->holdTime > VTOR_KEY_TIME_SHAKE)
{
// 更新state,从而下次更新event
if (VTOR_KEY_LEVEL_DOWN == curVtorKey->curLevel)
{
// 时间足够长时,设定为长按模式
if (curVtorKey->holdTime > VTOR_KEY_TIME_LONG_DOWN)
{
curVtorKey->curState = VTOR_KEY_STATS_LONG_DOWN;
}
else
{
curVtorKey->curState = VTOR_KEY_STATS_DOWN;
}
}
else
{
if (curVtorKey->holdTime > VTOR_KEY_TIME_LONG_UP)
{
curVtorKey->curState = VTOR_KEY_STATS_LONG_UP;
}
else
{
curVtorKey->curState = VTOR_KEY_STATS_UP;
}
}
}
else
{
curVtorKey->curState = VTOR_KEY_STATS_SHAKE;
}
// 根据curState与lastState,分析组合状态
if (curVtorKey->curState != curVtorKey->lastState)
{
// 当前状态是弹起,触发释放回调
if (VTOR_KEY_STATS_UP == curVtorKey->curState)
{
VtorKey_ReleaseHandler(curVtorKey);
handlerFlag = VTOR_KEY_STATS_UP;
}
// 如果是长弹起,触发combine回调,同时清零combine
if (VTOR_KEY_STATS_LONG_UP == curVtorKey->curState)
{
VtorKey_CombineHandler(curVtorKey);
handlerFlag = VTOR_KEY_STATS_LONG_UP;
curVtorKey->combineAction = 0;
}
// 当上次是弹起,本次是按下,触发action down回调
if (VTOR_KEY_STATS_DOWN == curVtorKey->curState)
{
VtorKey_PressHandler(curVtorKey);
handlerFlag = VTOR_KEY_STATS_DOWN;
curVtorKey->combineAction *= 10;
curVtorKey->combineAction += VTOR_KEY_COMBINE_SHORT_CLICK;
}
else if(VTOR_KEY_STATS_LONG_DOWN == curVtorKey->curState)
{
// 因为长按的前一个状态是短按
// 所以先从 短按 恢复成 没按,再设置成 长按
curVtorKey->combineAction -= VTOR_KEY_COMBINE_SHORT_CLICK;
curVtorKey->combineAction += VTOR_KEY_COMBINE_LONG_CLICK;
}
curVtorKey->combineAction %= 1000;
}
curVtorKey = curVtorKey->next;
}
return handlerFlag;
}
#endif // __VTOR_I2C__
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Thomas_Ti/vtor_elec_module.git
git@gitee.com:Thomas_Ti/vtor_elec_module.git
Thomas_Ti
vtor_elec_module
vtor_elec_module
main

搜索帮助

0d507c66 1850385 C8b1a773 1850385