Android系统:L版本怎样识别耳机按键长按or短按?

L版本accdet驱动已经不再检测耳机按键是短按还是长按,是由上层来做的。

L版本accdet驱动不管耳机按键长按或短按,上报的key都是统一的。

alps\kernel-3.10\drivers\misc\mediatek\accdet\mt6580\accdet.c

static void multi_key_detection(int current_status)
{
	int m_key = 0;
	int cali_voltage=0;
	
	if(0 == current_status){
	cali_voltage = PMIC_IMM_GetOneChannelValue(MULTIKEY_ADC_CHANNEL,1,1);
	ACCDET_DEBUG("[Accdet]adc cali_voltage1 = %d mv\n", cali_voltage);
	m_key = cur_key = key_check(cali_voltage);
	}
	mdelay(30);
	#ifdef ACCDET_EINT_IRQ
	if((pmic_pwrap_read(ACCDET_IRQ_STS) & EINT_IRQ_STATUS_BIT)!=EINT_IRQ_STATUS_BIT){
	#else ifdef ACCDET_EINT
	if((pmic_pwrap_read(ACCDET_IRQ_STS) & IRQ_STATUS_BIT)!=IRQ_STATUS_BIT){
	#endif
		send_key_event(cur_key, !current_status);
	}else{
	send_key_event(cur_key, !current_status);
	
		ACCDET_DEBUG("[Accdet]plug out side effect key press, do not report key = %d\n", cur_key);
		cur_key = NO_KEY;
	}
	if(current_status){
		cur_key = NO_KEY;
	}
}
static void send_key_event(int keycode,int flag)
{
	switch (keycode)
	{
	case DW_KEY:

		input_report_key(kpd_accdet_dev, KEY_VOLUMEDOWN, flag);
		input_sync(kpd_accdet_dev);
		ACCDET_DEBUG("[accdet]KEY_NEXTSONG/KEY_VOLUMEDOWN %d\n",flag);
		break;
	case UP_KEY:

		input_report_key(kpd_accdet_dev, KEY_VOLUMEUP, flag);
		input_sync(kpd_accdet_dev);
		ACCDET_DEBUG("[accdet]KEY_PREVIOUSSONG/KEY_VOLUMEUP %d\n",flag);
		break;
	case MD_KEY:
		input_report_key(kpd_accdet_dev, KEY_PLAYPAUSE, flag);
		input_sync(kpd_accdet_dev);
		ACCDET_DEBUG("[accdet]KEY_PLAYPAUSE %d\n",flag);
		break;
#ifdef FOUR_KEY_HEADSET
	case AS_KEY:
		input_report_key(kpd_accdet_dev, KEY_VOICECOMMAND, flag);
		input_sync(kpd_accdet_dev);
		ACCDET_DEBUG("[accdet]KEY_VOICECOMMAND %d\n",flag);
		break;
#endif
	}
}
在L版本accdet驱动里面,不管耳机按键长按or短按

down key上报    KEY_VOLUMEDOWN
up key上报        KEY_VOLUMEUP

MD key上报      KEY_PLAYPAUSE
至于切换歌曲、调大调小声音等操作,上层APK都可以根据这些固定的sanCode来做调整。
上层耳机按键长按or短按检测方法:
底层会报keycode down和keycode up,上层会计算up和down之间的时间,
如果大于500ms(此事件客户可以指定)就是长按,小于就是短按。上层有个onLongClick函数。
Demo code随便在andorid 的source code中搜onLongClick就可以搜到。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值