Android 蓝牙AVRCP功能的实现_第1页
Android 蓝牙AVRCP功能的实现_第2页
Android 蓝牙AVRCP功能的实现_第3页
Android 蓝牙AVRCP功能的实现_第4页
Android 蓝牙AVRCP功能的实现_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、Androoid 蓝蓝牙AVRRCP功能能的实现作者:Maacro LiuAVRCPP的按键定定义:sdkemullatorrkeyymapssAVRRCP.kklkey 2200 MEDDIA_PPLAY_PAUSSE WAKKEkey 2201 MEDDIA_PPLAY_PAUSSE WAKKEkey 1166 MEDDIA_SSTOP WAKKEkey 1163 MEDDIA_NNEXT WAKKEkey 1165 MEDDIA_PPREVIIOUS WAKKEkey 1168 MEDDIA_RREWINND WAKKEkey 2208 MEDDIA_FFAST_FORWWARD WAK

2、KEBCM(bbroaddcom)宏定义需要要打开:BOARDD_HAVVE_BLLUETOOOTH_BCM := ttrueBT音频控控制的代码码exterrnalblueetootthblluezaudiiocoontrool.c(1) 按按键的MAAPstatiic sttructt consst chhar *namee;uintt8_t avrccp;uintt16_tt uinnput; keyy_mapp = PPLAY,PLAYY_OP,KEY_PLAYYCD , SSTOP,STOPP_OP,KEY_STOPPCD , PPAUSEE,PAUSSE_OPP,KEY_PAUSS

3、ECD , FFORWAARD,FORWWARD_OP,KEY_NEXTTSONGG , BBACKWWARD,BACKKWARDD_OP,KEY_PREVVIOUSSSONGG , RREWINND,REWIIND_OOP,KEY_REWIIND , FFAST FORWWARD,FASTT_FORRWARDD_OP,KEY_FASTTFORWWARD , NUULL ;(2) 按按键处理statiic vooid hhandlle_paanel_passsthroough(struuct ccontrrol *conttrol, for (i = 0; key_mapi.nname !=

4、NNULL; i+) uinnt8_tt keyy_quiirks;if (opperannds00 & 0 x7FF) != keyy_mappi.avrccp)coontinnue;DBGG(AVVRCP: %s %s, keyy_e, sttatuss);keyy_quiirks = coontrool-kkey_qquirkkskeey_maapi.avrrcp;if (keyy_quiirks & QUUIRK_NO_RRELEAASE) iff (!ppresssed) DDBG(AVRCCP: IIgnorring releease);bbreakk;DBBG

5、(AAVRCPP: trreatiing kkey ppresss as presss + releease);seend_kkey(ccontrrol-uinpput, key_mapi.uuinpuut, 11);seend_kkey(ccontrrol-uinpput, key_mapi.uuinpuut, 00);brreak;sennd_keey(coontrool-uuinpuut, kkey_mmapii.uiinputt, prresseed);breeak;HCIDUUMP数据据分析以Sonyy耳机DRRC-BTT15为例例#adb shelll#hciddump X左键:

6、ACLL datta: hhandlle 122 flaags 00 x02 dlenn 12 LL2CAPP(d): cidd 0 x00042 len 8 ppsm 00 00000: 330 111 0e 00 448 7cc 4c 000 00.HH|L. HCII Commmandd: Exxit SSnifff Modde (00 x02|0 x00004) plenn 2 00000: 00c 000 . HCII Eveent: Max Slotts Chhangee (0 xx1b) plenn 3 00000: 00c 000 05 . HCII Eveent: Modee

7、 Chaange (0 x114) pplen 6 00000: 000 0cc 00 00 000 000 . HCII Eveent: Commmand Stattus (0 x0ff) pllen 44 00000: 00c 011 04 08 . ACLL datta: hhandlle 122 flaags 00 x02 dlenn 12 LL2CAPP(d): cidd 0 x00042 len 8 ppsm 00 00000: 440 111 0e 00 448 7cc cc 00 .H|? HCII Eveent: Numbber oof Coompleeted Packket

8、s (0 x113) pplen 5 00000: 001 0cc 00 02 000 .播放/暂停停: ACLL datta: hhandlle 122 flaags 00 x02 dlenn 12 LL2CAPP(d): cidd 0 x00042 len 8 ppsm 00 00000: 550 111 0e 00 448 7cc 4b 00 P.H|KK. ACLL datta: hhandlle 122 flaags 00 x02 dlenn 12 LL2CAPP(d): cidd 0 x00042 len 8 ppsm 00 00000: 660 111 0e 00 448 7cc

9、 cb 00 .H|? HCII Eveent: Numbber oof Coompleeted Packkets (0 x113) pplen 5 00000: 001 0cc 00 02 000 .右键: ACLL datta: hhandlle 122 flaags 00 x02 dlenn 12 LL2CAPP(d): cidd 0 x00042 len 8 ppsm 00 00000: 770 111 0e 00 448 7cc 46 00 p.H|FF. ACLL datta: hhandlle 122 flaags 00 x02 dlenn 12 LL2CAPP(d): cidd

10、 0 x00042 len 8 ppsm 00 00000: 880 111 0e 00 448 7cc c6 00 .H|? HCII Eveent: Numbber oof Coompleeted Packkets (0 x113) pplen 5 00000: 001 0cc 00 02 000 . HCII Eveent: Max Slotts Chhangee (0 xx1b) plenn 3 00000: 00c 000 01 . HCII Eveent: Modee Chaange (0 x114) pplen 6 00000: 000 0cc 00 02 cc8 000 .?然

11、后将coontrool.c的日志打印出出来:按一次”“播放/暂暂停键”:D/ACRRVP ( 237): - haandlee_pannel_ppasstthrouugh -D/ACRRVP ( 237): opperannds00 = 46 对应PPAUSEE_OPD/ACRRVP ( 237): keey_quuirkss = 00, prresseed = 1按键按按下D/ACRRVP ( 237): coontrool-uuinpuut = ffffffffee,sennd_keey = 201对对应MEDDIA_PPLAY_PAUSSED/ACRRVP ( 237): - haand

12、lee_pannel_ppasstthrouugh -D/ACRRVP ( 237): opperannds00 = c6 (= 00 x46 0 xx80 表表示按键释释放了)D/ACRRVP ( 237): keey_quuirkss = 00, prresseed = 0按键释释放D/ACRRVP ( 237): coontrool-uuinpuut = ffffffffee,sennd_keey = 201 对应MEEDIA_PLAYY_PAUUSE再按一次”“播放/暂暂停键”:D/ACRRVP ( 237): - haandlee_pannel_ppasstthrouugh -D/A

13、CRRVP ( 237): opperannds00 = 44 对应PPLAY_OPD/ACRRVP ( 237): keey_quuirkss = 00, prresseed = 1 按键键按下D/ACRRVP ( 237): coontrool-uuinpuut = ffffffffee,sennd_keey = 200 对应MMEDIAA_PLAAY_PAAUSED/ACRRVP ( 237): - haandlee_pannel_ppasstthrouugh -D/ACRRVP ( 237): opperannds00 = c4D/ACRRVP ( 237): keey_quuirks

14、s = 00, prresseed = 0 按按键释放D/ACRRVP ( 237): coontrool-uuinpuut = ffffffffee,sennd_keey = 200 对应MEEDIA_PLAYY_PAUUSEnext key:D/ACRRVP ( 237): - haandlee_pannel_ppasstthrouugh -D/ACRRVP ( 237): opperannds00 = 4b对应应FORWWARD_OPD/ACRRVP ( 237): keey_quuirkss = 00, prresseed = 1D/ACRRVP ( 237): coontrool-u

15、uinpuut = ffffffffee,sennd_keey = 163 对应MEEDIA_NEXTTD/ACRRVP ( 237): - haandlee_pannel_ppasstthrouugh -D/ACRRVP ( 237): opperannds00 = cbD/ACRRVP ( 237): keey_quuirkss = 00, prresseed = 0D/ACRRVP ( 237): coontrool-uuinpuut = ffffffffee,sennd_keey = 163prev key:D/ACRRVP ( 237): - haandlee_pannel_ppas

16、stthrouugh -D/ACRRVP ( 237): opperannds00 = 4c 对应应BACKKWARDD_OPD/ACRRVP ( 237): keey_quuirkss = 00, prresseed = 1D/ACRRVP ( 237): coontrool-uuinpuut = ffffffffee,sennd_keey = 165 对应D/ACRRVP ( 237): - haandlee_pannel_ppasstthrouugh -D/ACRRVP ( 237): opperannds00 = ccD/ACRRVP ( 237): keey_quuirkss = 0

17、0, prresseed = 0D/ACRRVP ( 237): coontrool-uuinpuut = ffffffffee,sennd_keey = 165 MEDIIA_PRREVIOOUS从上面可以以看到blluetoooth的的协议栈bblueZZ是没有问问题的将 fraamewoorksbaseelibbsuiiEveentHuub.cppp的LOOG打开,只只能看到了了conttrol.c的日志志,EveentHuub的getEEventt完全不响响应观察所有llog日志志发现,oopenDDevicce里也没没有装载AAVRCPP.kl初步判断eeventt有问题eventt

18、分析:$ adbb sheell# cd /prooc/buus/innput# catt devvicesscat ddevicces# catt devvicesscat ddeviccesI: Buus=00019 VVendoor=00001 PProduuct=00001 Verssion=00011 参考考s3c-keeypadd.cN: Naame=s3c-keeypadd inpuut_deev-nname = DEEVICEE_NAMME;P: Phhys=ss3c-keeypadd/inpput0 innput_dev-phyys = s3cc-keyypad/inpuut

19、0;S: Syysfs=/devvicess/virrtuall/inpput/iinputt0 virttual的的?U: Unniq=H: Haandleers=eeventt0B: EVV=3B: KEEY=400004000 0I: Buus=00019 VVendoor=00001 PProduuct=00001 Verssion=01000参考vpaad_buuttonns.cN: Naame=s3c-eiintkeey inpuut-nname = pddev-namee, gppio_kkeys_deviice_ddriveer.naame= ss3c-eiintkeey,P:

20、 Phhys=ggpio-keyss/inpput0 inpuut-pphys = ggpio-keyss/inpput0S: Syysfs=/devvicess/plaatforrm/s33c-eiintkeey/innput/inpuut1 为什么么这里是pplatfform目目录?U: Unniq=H: Haandleers=eeventt1B: EVV=3B: KEEY=10000000 0 00 0I: Buus=00018 VVendoor=00000 PProduuct=00000 Verssion=00000 参考amrri_tss.cN: Naame=amrii_ts amr

21、ii_ts_drivver.nname = aamri_tsP: Phhys= 没没有定义S: Syysfs=/devvicess/plaatforrm/s33c24440-i22c.0/i2c-0/0-00033/iinputt/inpput2 为什什么这里是是plattformm目录?U: Unniq=H: Haandleers=eeventt2B: EVV=bB: KEEY=4000 0 0 0 0 0 4000008000 40 0 0 100000B: ABBS=266500000 0I: Buus=00000 VVendoor=00000 PProduuct=00000 Verss

22、ion=00000N: Naame=ecommpasss_dattaP: Phhys=S: Syysfs=/devvicess/virrtuall/inpput/iinputt3U: Unniq=H: Haandleers=eeventt3B: EVV=9B: ABBS=3007bf从上面可以以看到,完完全没有AAVRCPP的eveent。解决办法:Kerneel$ makke meenucoonfiggCONFIIG_INNPUT_UINPPUT解决后的状状况:$ adbb sheell# cd /prooc/buus/innput# catt devvicess显示增加了了一个evvent

23、I: Buus=00005 VVendoor=00000 PProduuct=00000 Verssion=00000N: Naame=AVRCCPP: Phhys=S: Syysfs=/devvicess/virrtuall/inpput/iinputt4U: Unniq=H: Haandleers=eeventt4B: EVV=1000007B: KEEY=100300 168 0 0 0 0 0B: REEL=0看opennDeviice的信信息:D/EveentHuub( 84): EvventHHub:readdNotiify nnfd: 87D/EveentHuub( 84): O

24、ppeninng deevicee: /ddev/iinputt/eveent4D/EveentHuub( 84): Geettinng keeys.D/EveentHuub( 84): Geettinng abbsoluute ccontrrolleers.D/EveentHuub( 84): keeylayyoutFFilenname = /ssysteem/ussr/keeylayyout/AVRCCP.kll I/EveentHuub( 84): Neew keeyboaard: deviice-id=00 x100003 ddevnaame=AVRCCP ppropNName=hw.

25、keybboardds.655539.devnname keyylayoout=/sysstem/usr/keyllayouut/AVVRCP.klI/EveentHuub( 84): Neew deevicee: paath=/dev/inpuut/evvent44 namme=AVVRCP id=00 x100003 (of 00 x4) indeex=4 fd=1196 cclassses=00 x1D/EveentHuub( 84): Adddingg devvice /devv/inpput/eeventt4 0 xx3618800 aat 4, id = 3, claassess

26、= 00 x1D/EveentHuub( 84): Reeportting deviice oopeneed: iid=0 xx100003, nname=/devv/inpput/eeventt4按键时也可可以看到EEventtHub的的信息了:Log如下下:D/ACRRVP ( 236): - haandlee_pannel_ppasstthrouugh -D/ACRRVP ( 236): opperannds00 = 46D/ACRRVP ( 236): keey_quuirkss = 00, prresseed = 1D/ACRRVP ( 236): coontrool-uuinpuu

27、t = 14,ssend_key = 2001 coontrool.c发发出2011号键,按按键按下了了D/EveentHuub( 84): /ddev/iinputt/eveent4 got: t0=937, t1=5829930, typee=1, codee=2011, v=1 表示从eeventt4得到2201号键键 MEDDIA_PPLAY_PAUSSED/EveentHuub( 84): ieev.coode=2201 kkeyCoode=885 fllags=0 x0000000001 eerr=00D/EveentHuub( 84): /ddev/iinputt/eveent4

28、 got: t0=937, t1=6002241, typee=0, codee=0, v=0D/AuddioHaardwaare( 611): AAudiooStreeamOuutALSSA:ssetPaarameeterss() rroutiing=00D/ACRRVP ( 236): - haandlee_pannel_ppasstthrouugh -D/ACRRVP ( 236): opperannds00 = c6D/ACRRVP ( 236): keey_quuirkss = 00, prresseed = 0D/ACRRVP ( 236): coontrool-uuinpuut

29、= 14,ssend_key = c99D/EveentHuub( 84): /ddev/iinputt/eveent4 got: t0=937, t1=6643391, typee=1, codee=2011, v=0 conttrol.c发出2201号键键,按键释释放了D/EveentHuub( 84): ieev.coode=2201 kkeyCoode=885 fllags=0 x0000000001 eerr=00D/EveentHuub( 84): /ddev/iinputt/eveent4 got: t0=937, t1=6644406, typee=0, codee=0, v=0D/A2DDP ( 61): a22dp_sstopD/A2DDP ( 61): blluetoooth_stoppE/BluuetooothEvventLLoop.cpp(

温馨提示

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

评论

0/150

提交评论