/* ********************************************************************************************************* * 函 数 名: bsp_DetectButton * 功能说明: 检测一个按键。非阻塞状态,必须被周期性的调用。 * 形 参:按键结构变量指针 * 返 回 值: 无 ********************************************************************************************************* */ static void bsp_DetectButton(BUTTON_T *_pBtn) { /* 如果没有初始化按键函数,则报错 if (_pBtn->IsKeyDownFunc == 0) { printf("Fault : DetectButton(), _pBtn->IsKeyDownFunc undefine"); } */ if (_pBtn->IsKeyDownFunc()) { if (_pBtn->Count < _pBtn->FilterTime) { _pBtn->Count = _pBtn->FilterTime; } else if(_pBtn->Count < 2 * _pBtn->FilterTime) { _pBtn->Count++; } else { if (_pBtn->State == 0) { _pBtn->State = 1; /* 发送按钮按下的消息 */ if (_pBtn->KeyCodeDown > 0) { /* 键值放入按键FIFO */ bsp_PutKey(_pBtn->KeyCodeDown); } } if (_pBtn->LongTime > 0) { if (_pBtn->LongCount < _pBtn->LongTime) { /* 发送按钮持续按下的消息 */ if (++_pBtn->LongCount == _pBtn->LongTime) { /* 键值放入按键FIFO */ bsp_PutKey(_pBtn->KeyCodeLong); } } else { if (_pBtn->RepeatSpeed > 0) { if (++_pBtn->RepeatCount >= _pBtn->RepeatSpeed) { _pBtn->RepeatCount = 0; /* 常按键后,每隔10ms发送1个按键 */ bsp_PutKey(_pBtn->KeyCodeDown); } } } } } } else { if(_pBtn->Count > _pBtn->FilterTime) { _pBtn->Count = _pBtn->FilterTime; } else if(_pBtn->Count != 0) { _pBtn->Count--; } else { if (_pBtn->State == 1) { _pBtn->State = 0; /* 发送按钮弹起的消息 */ if (_pBtn->KeyCodeUp > 0) { /* 键值放入按键FIFO */ bsp_PutKey(_pBtn->KeyCodeUp); } } } _pBtn->LongCount = 0; _pBtn->RepeatCount = 0; } }
/* ********************************************************************************************************* * 函 数 名: bsp_DetectKey * 功能说明: 检测一个按键。非阻塞状态,必须被周期性的调用。 * 形 参: 按键结构变量指针 * 返 回 值: 无 ********************************************************************************************************* */ static void bsp_DetectKey(uint8_t i) { KEY_T *pBtn; /* 如果没有初始化按键函数,则报错 if (s_tBtn[i].IsKeyDownFunc == 0) { printf("Fault : DetectButton(), s_tBtn[i].IsKeyDownFunc undefine"); } */ pBtn = &s_tBtn[i]; if (pBtn->IsKeyDownFunc()) { if (pBtn->Count < KEY_FILTER_TIME) { pBtn->Count = KEY_FILTER_TIME; } else if(pBtn->Count < 2 * KEY_FILTER_TIME) { pBtn->Count++; } else { if (pBtn->State == 0) { pBtn->State = 1; /* 发送按钮按下的消息 */ bsp_PutKey((uint8_t)(3 * i + 1)); } if (pBtn->LongTime > 0) { if (pBtn->LongCount < pBtn->LongTime) { /* 发送按钮持续按下的消息 */ if (++pBtn->LongCount == pBtn->LongTime) { /* 键值放入按键FIFO */ bsp_PutKey((uint8_t)(3 * i + 3)); } } else { if (pBtn->RepeatSpeed > 0) { if (++pBtn->RepeatCount >= pBtn->RepeatSpeed) { pBtn->RepeatCount = 0; /* 常按键后,每隔10ms发送1个按键 */ bsp_PutKey((uint8_t)(3 * i + 1)); } } } } } } else { if(pBtn->Count > KEY_FILTER_TIME) { pBtn->Count = KEY_FILTER_TIME; } else if(pBtn->Count != 0) { pBtn->Count--; } else { if (pBtn->State == 1) { pBtn->State = 0; /* 发送按钮弹起的消息 */ bsp_PutKey((uint8_t)(3 * i + 2)); } } pBtn->LongCount = 0; pBtn->RepeatCount = 0; } }