nrf51822蓝牙触摸屏驱动总结

跟老大一起出来创业有一段时间了,以前一直在做android手机camera驱动和调试方面,这段时间是基本上什么都做,做了蓝牙4.0模块,android app,还要做手机sensor实现游戏场进720度的东东,学习了app反编译,了解了smali语言等等,好多原来都没有接触过,虽然确实很累,但是也学到了不少东西。打算这段时间好好总结一下。首先总结下关于我写的蓝牙触摸屏方面的知识。


其实说是蓝牙触摸屏和普通触摸屏没有区别,在写所有触摸屏的流程基本都是以下 步骤:

1.注册中断

2.进入中断,高级点的系统可以有中断低半步,

3.在中断低半部中读取寄存器中的信息,解读出id,x,y坐标,是否是按下或者松开

4.上报id,坐标信息


一个最简单的触摸屏事件,需要上报一下几点:

1.finger_id(0x2f)mt_id,mt协议中用来唯一标示一个手指的id号

2.id(0x39)动态分配的id号

3.x(0x35),y(0x36)号

4.触摸按键事件(按下或者松开)

5,sync同步


一个最简单的上报事件(上报坐标点为500,500)

0x3, 0x2f,finger_id

0x3, 0x39,id

0x3, 0x35,x
0x3, 0x36,y

0x1,0x14a,(按下为1,松开为0)

0x0,0x0,0x0

然后当所有手指都松开的时候需要上报0x39也就是动态id为-1

0x3, 0x2f,finger_id

0x3, 0x39,-1

0x1,0x14a,(当所有手指都松开的时候上报0)

0x0,0x0,0x0


如下是我写的一个扫描两指:


	for (i = 0; i < ts_event->touch_point; i++)
	{
		add_td(0x3, 0x2f,ts_event->au8_finger_id[i]);
		if(ts_event->au8_touch_event[i] == 0||ts_event->au8_touch_event[i]==2){
			int16_t id = get_id(ts_event->au8_finger_id[i]);
			if(id == 0){
				id = input_mt_new_trkid();
				set_id(ts_event->au8_finger_id[i],id);
			}
			add_td(0x3, 0x39,id);
			add_td(0x3, 0x35,ts_event->au16_x[i]);
			add_td(0x3, 0x36,ts_event->au16_y[i]);
			touch_num++;
		}else{
			add_td(0x3, 0x39,0xFFFF);
			set_id(ts_event->au8_finger_id[i],0);;
		}
	}

	add_td(0x1, 0x14a,touch_num>0);
	add_td(0x0, 0x0,0x0);

扫描两指上报事件,通过蓝牙模块发送的手机端,具体发送流程下次再讲吧!



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值