licheepi nano BS8112A触摸按键之长按短按

上一节中介绍了BS8112A芯片在荔枝派nano上的驱动实现过程。但是现在需要用到触摸按键的长按短按功能,需要稍加修改。

在BS8112A_probe函数中,设置了__clear_bit(EV_REP, input->evbit); 即取消了上报按键重发的功能,所以我们将其开启。

改为__set_bit(EV_REP, input->evbit);其余什么也不用改,这样,按键长按时驱动就会上报新的事件。

input_report_key(input, keycodes, keyval);这个函数,keycodes是键值,keyval是按下、抬起及长按标志,按下=1 抬起=0  长按=2

所以在应用层可以做如下操作实现长按短按。

if(event.type == EV_KEY)
{
	if( event.value > 0 )
	{
		if(     event.value == STA_KEY_DOWN)//按键按下
		{
			keyrepateCnt = 0;
			printf("KEY DOWN:code:%d,val:%d\n", event.code,event.value);
		}
		else if(event.value == STA_KEY_REPATE)//按键重复发送
		{
			++keyrepateCnt;
			if(keyrepateCnt>=KEY_REPATE_CNT_MAX)
			{
				keyrepateCnt = 0;
				if(!onceflag)//only do once
				{
					onceflag = 1;
					printf("KEY REPATE:code:%d,val:%d\n", event.code,event.value);
				}
			}
		}
	}
	else									//按键抬起
	{
		onceflag = 0;
		keyrepateCnt = 0;
		printf("KEY UP:code:%d,val:%d\n", event.code,event.value);
	}
}

 

你可能感兴趣的:(linux驱动)