📄 cap_keys_task.c
字号:
/*************************************************************************
*
* Used with ICCARM and AARM.
*
* (c) Copyright IAR Systems 2007
*
* File name : cap_keys_task.h
* Description : Capacitive keys task
*
* History :
* 1. Date : January 18, 2007
* Author : Stanimir Bonev
* Description : Create
*
* Check all keys, analyze result and send messages with keys status
* and state
*
* $Revision: 1.0 $
**************************************************************************/
#define __CAP_KEY_TASK_GLOBALS
#include "cap_keys_task.h"
static CapKeysMessage_t CapKeyMbBuffer[3];
/*************************************************************************
* Function Name: CapKeysTask
* Parameters: none
* Return: none
*
* Description: Check all keys, analyze result and send message when
* key/s is pressed or by some hardware fault
*
*************************************************************************/
void CapKeysTask (void)
{
unsigned int ButtCnt;
CapKeysMessage_t CapKey;
unsigned int KeyPressLevel[_CAP_BUTTONS_NUMB];
unsigned int KeyUnpressLevel[_CAP_BUTTONS_NUMB];
static unsigned int HoldKeysState = 0;
OS_CREATEMB(&CapKeyMb, // Mail box ctlr block
sizeof(CapKeysMessage_t), // Size of a message in bytes
sizeof(CapKeyMbBuffer)/sizeof(CapKeysMessage_t), // Maximum number of messages
CapKeyMbBuffer); // Mail box buffer
// Init unpressed and pressed buttons levels
for(int i = 0; i < _CAP_BUTTONS_NUMB; ++i)
{
KeyUnpressLevel[i] = \
KeyPressLevel[i] = 0xffffffff;
}
OS_PutMail(&CapKeyMb,&HoldKeysState); // no pressed keys or error message
while(1)
{
CapKey.Data = 0;
for(int i = 0; i < _CAP_BUTTONS_NUMB; ++i)
{
if(BSP_GetButton(i,&ButtCnt) != BUTT_OK)
{
ButtCnt = 0;
CapKey.KeyErrorMask |= 1UL << i;
}
else
{
// analyzing key counter and calculate key press level
// assume that unpressed level is minimum value of button's counter
if(ButtCnt < KeyUnpressLevel[i])
{
KeyUnpressLevel[i] = ButtCnt;
KeyPressLevel[i] = ButtCnt + (ButtCnt/2);
}
if (ButtCnt >= KeyPressLevel[i])
{
// The key is pressed
CapKey.PressedKeysMask |= 1UL << i;
}
}
}
if(HoldKeysState != CapKey.Data)
{
// Send message when key/s is pressed or
// when hardware error flag/s is set
OS_PutMail(&CapKeyMb,&CapKey);
HoldKeysState = CapKey.Data;
}
OS_Delay(KEYS_SCAN_TO);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -