版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 危重症患者血糖管理指南
- 《GBT 34053.4-2017 纸质印刷产品印制质量检验规范 第 4 部分:中小学教科书》专题研究报告
- 《GB-T 40132-2021便携式电子产品用振动电机通 用规范》专题研究报告
- 《GB-T 26763-2011波音和空客系列飞机飞行品质监控项目规范》专题研究报告
- 《GB-T 15471-2013逻辑分析仪通 用规范》专题研究报告
- 《AQ-T 8012-2022安全生产检测检验机构诚信建设规范》专题研究报告
- 2026年三亚航空旅游职业学院单招职业技能考试题库附答案详解
- 《智慧景区服务与管理》课件-第一章 任务三 旅游景区服务质量管理
- 县域电商公共服务信息对接协议
- 智能完井滑套开关压力考试试卷和答案
- 房屋出租安全免责协议书
- 2024《整治形式主义为基层减负若干规定》全文课件
- 公共关系与人际交往能力智慧树知到期末考试答案章节答案2024年同济大学
- 中国法律史-第三次平时作业-国开-参考资料
- 2024年建筑继续教育-建筑八大员(九大员)继续教育笔试历年真题荟萃含答案
- 慢性中耳炎教学查房
- (2023年基价)井巷工程消耗量定额说明
- 放射医学技术职称考试 《相关专业知识》篇 考点汇总
- 地铁资料城市轨道交通设备系统控制中心
- 企业数字化转型发言稿
- GB/T 3089-2020不锈钢极薄壁无缝钢管
评论
0/150
提交评论