Android 藍牙AVRCP功能的實現_第1頁
Android 藍牙AVRCP功能的實現_第2頁
Android 藍牙AVRCP功能的實現_第3頁
Android 藍牙AVRCP功能的實現_第4頁
Android 藍牙AVRCP功能的實現_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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完全不響響應觀察所有l(wèi)log日志志發(fā)現,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發(fā)發(fā)出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發(fā)出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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論