Android蓝牙AVRCP功能的实现_第1页
Android蓝牙AVRCP功能的实现_第2页
Android蓝牙AVRCP功能的实现_第3页
Android蓝牙AVRCP功能的实现_第4页
Android蓝牙AVRCP功能的实现_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android蓝牙AVRC助能的实现作者:MacroLiuAVRCP勺按键定义:sdkemulatorkeymapsAVRCP.klkey200MEDIA_PLAY_PAUSEWAKEkey201MEDIA_PLAY_PAUSEWAKEkey166MEDIA_STOPWAKEkey163MEDIA_NEXTWAKEkey165MEDIA_PREVIOUSWAKEkey168MEDIA_REWINDWAKEkey208MEDIA_FAST_FORWARDWAKEBCM(broadcom宏定义需要打开:BOARD_HAVE_BLUETOOTH_BCM:=trueBT音频控制的代码externalb

2、luetoothbluezaudiocontrol.c(1)按键的MAPstaticstructconstchar*name;uint8_tavrcp;key_map="PLAY","STOP","PAUSE",uint16_tuinput;PLAY_OP,KEY_PLAYCD,STOP_OP,KEY_STOPCD,PAUSE_OP,KEY_PAUSECD,"FORWARD",FORWARD_OP,KEY_NEXTSONG,"BACKWARD",BACKWARD_OP,KEY_PREVIOUSS

3、ONG,"REWIND",REWIND_OP,KEY_REWIND,"FASTFORWARD"FAST_FORWARD_OKEY_FASTFORWARD,NULL;(2)按键处理staticvoidhandle_panel_passthrough(structcontrol*control,for(i=0;key_!=NULL;i+)uint8_tkey_quirks;if(operands。&0x7F)!=key_mapi.avrcp)continue;DBG("AVRCP:%s%s",key_mapi.n

4、ame,status);key_quirks=control->key_quirkskey_mapi.avrcp;if(key_quirks&QUIRK_NO_RELEASE)if(!pressed)DBG("AVRCP:Ignoringrelease");break;DBG("AVRCP:treatingkeypressaspress+release");send_key(control->uinput,key_mapi.uinput,1);send_key(control->uinput,key_mapi.uinput,0)

5、;break;send_key(control->uinput,key_mapi.uinput,pressed);break;,HCIDUM数据分析以Sony耳机DRC-BT1效例#adbshell#hcidump-X左键:> ACLdata:handle12flags0x02dlen12L2CAP(d):cid0x0042len8psm00000:30110e00487c4c000.H|L.> HCICommand:ExitSniffMode(0x02|0x0004)plen20000:0c00.> ACLdata:handle12flags0x00dlen12000

6、0:08004b0032110e09487c4c00.K.2.H|L.> HCIEvent:MaxSlotsChange(0x1b)plen30000:0c0005.> HCIEvent:ModeChange(0x14)plen60000:000c00000000.> HCIEvent:CommandStatus(0x0f)plen40000:0c010408.>ACLdata:handle12flags0x02dlen12L2CAP(d):cid0x0042len8psm00000:40110e00487ccc00.H|?<ACLdata:handle12fla

7、gs0x00dlen120000:08004b0042110e09487ccc00.K.B.H|?>HCIEvent:NumberofCompletedPackets(0x13)plen50000:010c000200.播放/暂停:>ACLdata:handle12flags0x02dlen12L2CAP(d):cid0x0042len8psm00000:50110e00487c4b00P.H|K.<ACLdata:handle12flags0x00dlen120000:08004b0052110e09487c4b00.K.R.H|K.>ACLdata:handle12

8、flags0x02dlen12L2CAP(d):cid0x0042len8psm00000:60110e00487ccb00'.H|?<ACLdata:handle12flags0x00dlen120000:08004b0062110e09487ccb00.K.b.H|?>HCIEvent:NumberofCompletedPackets(0x13)plen50000:010c000200.右键:>ACLdata:handle12flags0x02dlen12L2CAP(d):cid0x0042len8psm00000:70110e00487c4600p.H|F.&l

9、t;ACLdata:handle12flags0x00dlen120000:08004b0072110e09487c4600.K.r.H|F.>ACLdata:handle12flags0x02dlen12L2CAP(d):cid0x0042len8psm00000:80110e00487cc600.H|?<ACLdata:handle12flags0x00dlen120000:08004b0082110e09487cc600.K.H|?>HCIEvent:NumberofCompletedPackets(0x13)plen50000:010c000200.>HCIEv

10、ent:MaxSlotsChange(0x1b)plen30000:0c0001.>HCIEvent:ModeChange(0x14)plen60000:000c0002c800?然后将control.c的日志打印出来:按一次”“播放/暂停键”:D/ACRVP(237):-handle_panel_passthrough-D/ACRVP(237):operands。=46对应PAUSE_OPD/ACRVP(237):key_quirks=0,pressed=1按键按下D/ACRVP(237):control->uinput=fffffffe,send_key=201对应MEDIA_

11、PLAY_PAUSED/ACRVP(237):-handle_panel_passthrough-D/ACRVP(237):operands0=c6(=0x46|0x80表示按键释放了)D/ACRVP(237):key_quirks=0,pressed=0按键释放D/ACRVP(237):control->uinput=fffffffe,send_key=201对应MEDIA_PLAY_PAUSE再按一次”“播放/暂停键”:D/ACRVP(237):-handle_panel_passthroughD/ACRVP(237):operands0=44对应PLAY_OPD/ACRVP(237

12、):key_quirks=0,pressed=1按键按下D/ACRVP(237):control->uinput=fffffffe,send_key=200对应MEDIA_PLAY_PAUSED/ACRVP(237):-handle_panel_passthroughD/ACRVP(237):operands0=c4D/ACRVP(237):key_quirks=0,pressed=0按键释放D/ACRVP(237):control->uinput=fffffffe,send_key=200对应MEDIA_PLAY_PAUSEnextkey:D/ACRVP(237):-handle

13、_panel_passthroughD/ACRVP(237):operands0=4b对应FORWARD_OPD/ACRVP(237):key_quirks=0,pressed=1D/ACRVP(237):control->uinput=fffffffe,send_key=163对应MEDIA_NEXTD/ACRVP(237):-handle_panel_passthroughD/ACRVP(237):operands0=cbD/ACRVP(237):key_quirks=0,pressed=0D/ACRVP(237):control->uinput=fffffffe,send_k

14、ey=163prevkey:D/ACRVP(237):-handle_panel_passthroughD/ACRVP(237):operands0=4c对应BACKWARD_OPD/ACRVP(237):key_quirks=0,pressed=1D/ACRVP(237):control->uinput=fffffffe,send_key=165对应D/ACRVP(237):-handle_panel_passthroughD/ACRVP(237):operands0=ccD/ACRVP(237):key_quirks=0,pressed=0D/ACRVP(237):control-&

15、gt;uinput=fffffffe,send_key=165MEDIA_PREVIOUS从上面可以看到bluetooth的协议栈blueZ是没有问题的将frameworksbaselibsuiEventHub.cpp的LOG打开,只能看到了control.c的日志,EventHub的getEvent完全不响应观察所有log日志发现,openDevice里也没有装载AVRCP.kl初步判断event有问题event分析:$adbshell# cd/proc/bus/input# catdevicescatdevices#catdevicescatdevicesI:Bus=0019Vendor=

16、0001Product=0001Version=0001参考s3c-keypad.cN:Name="s3c-keypad"input_dev->name=DEVICE_NAME;P:Phys=s3c-keypad/input0input_dev->phys="s3c-keypad/input0"S:Sysfs=/devices/virtual/input/input0virtual的?U:Uniq=H: Handlers=event0B:EV=3B:KEY=40004000I: Bus=0019Vendor=0001Product=0001V

17、ersion=0100参考vpad_buttons.cN:Name="s3c-eintkey"input->name=pdev->name,gpio_keys_device_="s3c-eintkey",P:Phys=gpio-keys/input0input->phys="gpio-keys/input0"S:Sysfs=/devices/platform/s3c-eintkey/input/input1为什么这里是platform目录?U:Uniq=H: Handlers=event1B:E

18、V=3B:KEY=100000000I: Bus=0018Vendor=0000Product=0000Version=0000参考amri_ts.cN:Name="amri_ts"amri_ts_="amri_ts"P:Phys=没有定义S:Sysfs=/devices/platform/s3c2440-i2c.0/i2c-0/0-0033/input/input2为什么这里是platform目录?U:Uniq=H: Handlers=event2B:EV=bB:KEY=4000000040000800400010000B:ABS

19、=26500000I: Bus=0000Vendor=0000Product=0000Version=0000N:Name="ecompass_data"P:Phys=S:Sysfs=/devices/virtual/input/input3U:Uniq=H:Handlers=event3B:EV=9B:ABS=307bf从上面可以看到,完全没有AVRCP勺event。解决办法:Kernel$makemenuconfig<*>User1eve1dr1versupportCONFIG_INPUT_UINPUT解决后的状况:$adbshell# cd/proc/bu

20、s/input# catdevices显示增加了一个eventI:Bus=0005Vendor=0000Product=0000Version=0000N:Name="AVRCP"P:Phys=S:Sysfs=/devices/virtual/input/input4U:Uniq=H:Handlers=event4B:EV=100007B:KEY=1030016800000B:REL=0看openDevice的信息:D/EventHub(84):EventHub二readNotifynfd:87D/EventHub(84):Openingdevice:/dev/input/

21、event4D/EventHub(84):Gettingkeys.D/EventHub(84):Gettingabsolutecontrollers.D/EventHub(84):keylayoutFilename=/system/usr/keylayout/AVRCP.klI/EventHub(84):Newkeyboard:device->id=0x10003devname='AVRCP'propName='hw.keyboards.65539.devname'keylayout='/system/usr/keylayout/AVRCP.kl&

22、#39;I/EventHub(84):Newdevice:path=/dev/input/event4name=AVRCPid=0x10003(of0x4)index=4fd=196classes=0x1D/EventHub(84):Addingdevice/dev/input/event40x361800at4,id=3,classes=0x1D/EventHub(84):Reportingdeviceopened:id=0x10003,name=/dev/input/event4按键时也可以看到EventHub的信息了:Log如下:D/ACRVP(236):-handle_panel_pa

23、ssthrough-D/ACRVP(236):operands0=46D/ACRVP(236):key_quirks=0,pressed=1control.cD/ACRVP(236):control->uinput=14,send_key=201发出201号键,按键按下了一D/EventHub(84):/dev/input/event4got:t0=937,t1=582930,type=1,code=201,v=1表示从event4得至U201号键MEDIA_PLAY_PAUSED/EventHub(84):iev.code=201keyCode=85flags=0x00000001er

24、r=0D/EventHub(84):/dev/input/event4got:t0=937,t1=600241,type=0,code=0,v=0D/AudioHardware(61):AudioStreamOutALSA:setParameters()routing=0D/ACRVP(236):-handle_panel_passthroughD/ACRVP(236):operands0=c6D/ACRVP(236):key_quirks=0,pressed=0D/ACRVP(236):control->uinput=14,send_key=c9D/EventHub(84):/dev/input/event4got:t0=937,t1=664391,type=1,code=201,v=0control.c发出201号键,按键释放了D/EventHub(84):iev.code=201keyCode=85flags=0x00000001err=0D/EventHub(84):/dev/input/event4got:t0=937,t1=664406,type=0,cod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论