跟老大一起出来创业有一段时间了,以前一直在做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);
扫描两指上报事件,通过蓝牙模块发送的手机端,具体发送流程下次再讲吧!