代码拉取完成,页面将自动刷新
同步操作将从 vtor3478/vtor_elec_module 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#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__
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。