




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Android 藍(lán)牙AVRCP功能的實(shí)現(xiàn)作者:Macro LiuAVRCP的按按鍵定義:sdkemmulatoorkeyymapsAVRCPP.klkey 2000 MEEDIA_PPLAY_PPAUSE WAAKEkey 2011 MEEDIA_PPLAY_PPAUSE WAAKEkey 1666 MEEDIA_SSTOP WAAKEkey 1633 MEEDIA_NNEXT WAAKEkey 1655 MEEDIA_PPREVIOOUS WAAKEkey 1688 MEEDIA_RREWINDD WAAKEkey 2088 MEEDIA_FFAST_FFORWARRD WAAKEBCM(b
2、rooadcomm)宏定義需要打打開(kāi):BOARD_HHAVE_BBLUETOOOTH_BBCM := trueeBT音頻控制的的代碼externaalbluuetootthbluuezauudioccontrool.c(1) 按鍵的的MAPstatic strucct const char *namee;uint8_t avrrcp;uint166_t uiinput; key_mmap = PLAAY,PLAY_OP,KEY_PPLAYCDD , STOOP,STOP_OP,KEY_SSTOPCDD , PAUUSE,PAUSEE_OP,KEY_PPAUSECCD , FORRWARD,FO
3、RWAARD_OPP,KEY_NNEXTSOONG , BACCKWARDD,BACKWWARD_OOP,KEY_PPREVIOOUSSONNG , REWWIND,REWINND_OP,KEY_RREWINDD , FASST FORRWARD,FAST_FORWAARD_OPP,KEY_FFASTFOORWARDD , NULLL ;(2) 按鍵處處理static void handlle_pannel_paassthrrough(strucct conntrol *conttrol, for (ii = 0; key_mapii.namme != NULL; i+) uint88_t k
4、eey_quiirks;if (operaands00 & 00 x7F) != key_mapii.avrrcp)conttinue;DBG(AVRCPP: %s %s, key_e, staatus);key_qquirkss = coontroll-keyy_quirrkskeey_mappi.aavrcp;if (kkey_quuirks & QUIIRK_NOO_RELEEASE) if (!presssed) DBGG(AVRRCP: IIgnoriing reeleasee);breeak;DBG(AVRCCP: trreatinng keyy presss
5、as presss + reeleasee);sendd_key(contrrol-uuinputt, keyy_mapi.uiinput, 1);sendd_key(contrrol-uuinputt, keyy_mapi.uiinput, 0);breaak;send_key(ccontrool-uiinput, key_mapii.uinnput, presssed);breakk;HCIDUMPP數(shù)據(jù)分析以Sony耳機(jī)機(jī)DRC-BBT15為例例#adb shhell#hcidummp X左鍵: ACL ddata: handlle 12 flagss 0 x022 dlenn 12 L
6、2CCAP(d): cidd 0 x00042 leen 8 psm 00 00000: 30 111 0e 000 48 7c 4c 00 0.H|L. HCI CCommannd: Exxit Snniff MMode (0 x02|0 x00004) pllen 2 0000: 0c 00 . HCI EEvent: Max Slotss Channge (00 x1b) plen 3 0000: 0c 00 05 . HCI EEvent: Modee Channge (00 x14) plen 6 0000: 00 00c 00 00 000 00 . HCI EEvent: Com
7、mmand SStatuss (0 x00f) pllen 4 0000: 0c 01 04 088 . ACL ddata: handlle 12 flagss 0 x022 dlenn 12 L2CCAP(d): cidd 0 x00042 leen 8 psm 00 00000: 40 111 0e 000 48 7c cc 00 .H|? HCI EEvent: Numbber off Comppletedd Packkets (0 x13) plenn 5 0000: 01 00c 00 02 000 .播放/暫停: ACL ddata: handlle 12 flagss 0 x0
8、22 dlenn 12 L2CCAP(d): cidd 0 x00042 leen 8 psm 00 00000: 50 111 0e 000 48 7c 4b 00 PP.H|K. ACL ddata: handlle 12 flagss 0 x022 dlenn 12 L2CCAP(d): cidd 0 x00042 leen 8 psm 00 00000: 60 111 0e 000 48 7c cb 00 .H|? HCI EEvent: Numbber off Comppletedd Packkets (0 x13) plenn 5 0000: 01 00c 00 02 000 .右
9、鍵: ACL ddata: handlle 12 flagss 0 x022 dlenn 12 L2CCAP(d): cidd 0 x00042 leen 8 psm 00 00000: 70 111 0e 000 48 7c 46 00 pp.H|F. ACL ddata: handlle 12 flagss 0 x022 dlenn 12 L2CCAP(d): cidd 0 x00042 leen 8 psm 00 00000: 80 111 0e 000 48 7c c6 00 .H|? HCI EEvent: Numbber off Comppletedd Packkets (0 x1
10、3) plenn 5 0000: 01 00c 00 02 000 . HCI EEvent: Max Slotss Channge (00 x1b) plen 3 0000: 0c 00 01 . HCI EEvent: Modee Channge (00 x14) plen 6 0000: 00 00c 00 02 c8 00 .?然后將conttrol.cc的日志打印出來(lái)來(lái):按一次”“播放放/暫停鍵”:D/ACRVPP ( 237): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = 46 對(duì)應(yīng)PAAUSE_O
11、OPD/ACRVPP ( 237): keyy_quirrks = 0, prressedd = 1按按鍵按下D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,ssend_kkey = 201對(duì)應(yīng)應(yīng)MEDIAA_PLAYY_PAUSSED/ACRVPP ( 237): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = c6 (= 0 xx46 0 x80 表示按鍵釋釋放了)D/ACRVPP ( 237): keyy_quirrks = 0, prressedd = 0按按鍵釋
12、放D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,ssend_kkey = 201 對(duì)對(duì)應(yīng)MEDIIA_PLAAY_PAUUSE再按一次”“播播放/暫停鍵鍵”:D/ACRVPP ( 237): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = 44 對(duì)應(yīng)PLLAY_OPPD/ACRVPP ( 237): keyy_quirrks = 0, prressedd = 1 按鍵按按下D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,sse
13、nd_kkey = 200 對(duì)應(yīng)MEDDIA_PLLAY_PAAUSED/ACRVPP ( 237): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = c4D/ACRVPP ( 237): keyy_quirrks = 0, prressedd = 0 按鍵釋放放D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,ssend_kkey = 200 對(duì)對(duì)應(yīng)MEDIIA_PLAAY_PAUUSEnext keey:D/ACRVPP ( 237): - handdle_paanel
14、_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = 4b對(duì)應(yīng)應(yīng)FORWAARD_OPPD/ACRVPP ( 237): keyy_quirrks = 0, prressedd = 1D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,ssend_kkey = 163 對(duì)對(duì)應(yīng)MEDIIA_NEXXTD/ACRVPP ( 237): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = cbD/ACRVPP ( 237): keyy_quir
15、rks = 0, prressedd = 0D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,ssend_kkey = 163prev keey:D/ACRVPP ( 237): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = 4c 對(duì)應(yīng)BACCKWARDD_OPD/ACRVPP ( 237): keyy_quirrks = 0, prressedd = 1D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,ssend_kkey =
16、165 對(duì)對(duì)應(yīng)D/ACRVPP ( 237): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 237): opeerandss0 = ccD/ACRVPP ( 237): keyy_quirrks = 0, prressedd = 0D/ACRVPP ( 237): conntrol-uinpput = ffffffffe,ssend_kkey = 165 MEDIAA_PREVVIOUS從上面可以看到到bluettooth的的協(xié)議棧bllueZ是沒(méi)沒(méi)有問(wèn)題的將 frameeworkssbaseelibssuiEEventHHub.cppp的LOGG打
17、開(kāi),只能能看到了coontroll.c的日志志,EvenntHub的getEvvent完全全不響應(yīng)觀察所有l(wèi)ogg日志發(fā)現(xiàn),openDevice里也沒(méi)有裝載AVRCP.kl初步判斷eveent有問(wèn)題題event分析析:$ adb sshell# cd /pproc/bbus/innput# cat ddeviceescat devvices# cat ddeviceescat devvicesI: Bus=0019 Vendoor=00001 Prooduct=0001 Versiion=00001 參考s3c-keyypad.ccN: Namee=s3cc-keyppad inputt_de
18、v-namee = DEEVICE_NAME;P: Physs=s3c-keyypad/iinput00 inpput_deev-phhys = s3c-keyypad/iinput00;S: Sysffs=/deevicess/virttual/iinput/inputt0 virrtual的的?U: Uniqq=H: Handdlers=eventt0B: EV=33B: KEY=40004400 0I: Bus=0019 Vendoor=00001 Prooduct=0001 Versiion=01100參考vpadd_butttons.ccN: Namee=s3cc-einttkey
19、iinput-namee = pddev-nname, gpioo_keyss_deviice_= s3cc-einttkey,P: Physs=gpioo-keyss/inpuut0 inputt-phyys = gpio-keys/inputt0S: Sysffs=/deevicess/plattform/s3c-einntkey/inputt/inpuut1 為什么這里里是plattform目目錄?U: Uniqq=H: Handdlers=eventt1B: EV=33B: KEY=1000000 0 00 0I: Bus=0018 Vendoor=00000
20、Prooduct=0000 Versiion=00000 參考amrii_ts.ccN: Namee=amrri_ts ammri_tss_drivver.naame = amrii_tsP: Physs= 沒(méi)有有定義S: Sysffs=/deevicess/plattform/s3c24400-i2c.0/ii2c-0/00-00333/inpuut/inpput2 為什么這這里是plaatformm目錄?U: Uniqq=H: Handdlers=eventt2B: EV=bbB: KEY=400 00 0 0 0 0 4400008800 400 0 0 100000B: ABS=265
21、00000 0I: Bus=0000 Vendoor=00000 Prooduct=0000 Versiion=00000N: Namee=ecoompasss_dataaP: Physs=S: Sysffs=/deevicess/virttual/iinput/inputt3U: Uniqq=H: Handdlers=eventt3B: EV=99B: ABS=307bff從上面可以看到到,完全沒(méi)有AVVRCP的eevent。解決辦法:Kernel$ make menucconfiggCONFIG_INPUTT_UINPPUT解決后的狀況:$ adb sshell# cd /pproc/bb
22、us/innput# cat ddevicees顯示增加了一個(gè)個(gè)eventtI: Bus=0005 Vendoor=00000 Prooduct=0000 Versiion=00000N: Namee=AVRRCPP: Physs=S: Sysffs=/deevicess/virttual/iinput/inputt4U: Uniqq=H: Handdlers=eventt4B: EV=11000077B: KEY=103000 168 0 0 00 0 0B: REL=0看openDeevice的的信息:D/EventtHub( 84): EveentHubb:reaadNotiify nf
23、fd: 877D/EventtHub( 84): Opeening devicce: /ddev/innput/eevent44D/EventtHub( 84): Gettting keys.D/EventtHub( 84): Gettting absollute ccontroollerss.D/EventtHub( 84): keyylayouutFileename = /syystem/usr/kkeylayyout/AAVRCP.kl I/EventtHub( 84): Neww keybboard: deviice-iid=0 x110003 devnaame=AAVRCP prop
24、pName=hw.kkeyboaards.665539.devnaame kkeylayyout=/systtem/ussr/keyylayouut/AVRRCP.kllI/EventtHub( 84): Neww deviice: ppath=/dev/iinput/eventt4 namme=AVRRCP idd=0 x100003 (of 0 xx4) inndex=44 fd=1196 cllassess=0 x1D/EventtHub( 84): Addding ddevicee /devv/inpuut/eveent4 00 x3618800 att 4, iid = 33, cl
25、aasses = 0 x11D/EventtHub( 84): Repportinng devvice oopenedd: id=0 x100003, nname=/dev/iinput/eventt4按鍵時(shí)也可以看看到EvenntHub的的信息了:Log如下:D/ACRVPP ( 236): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 236): opeerandss0 = 46D/ACRVPP ( 236): keyy_quirrks = 0, prressedd = 1D/ACRVPP ( 236): conntrol-uinpput = 14
26、,seend_keey = 2201 conntrol.c發(fā)出2001號(hào)鍵,按按鍵按下了D/EventtHub( 84): /deev/inpput/evvent4 got: t0=9337, t11=5829930, ttype=11, codde=2011, v=11 表示從從eventt4得到2001號(hào)鍵 MMEDIA_PLAY_PAUSEED/EventtHub( 84): ievv.codee=201 keyCoode=855 flaggs=0 x0000000001 errr=0D/EventtHub( 84): /deev/inpput/evvent4 got: t0=9337,
27、 t11=6002241, ttype=00, codde=0, v=0D/AudiooHardwware( 61): AuddioStrreamOuutALSAA:settParammeterss() rooutingg=0D/ACRVPP ( 236): - handdle_paanel_ppassthhroughh -D/ACRVPP ( 236): opeerandss0 = c6D/ACRVPP ( 236): keyy_quirrks = 0, prressedd = 0D/ACRVPP ( 236): conntrol-uinpput = 14,seend_keey = cc9D
28、/EventtHub( 84): /deev/inpput/evvent4 got: t0=9337, t11=6643391, ttype=11, codde=2011, v=00 contrrol.c發(fā)發(fā)出201號(hào)號(hào)鍵,按鍵釋釋放了D/EventtHub( 84): ievv.codee=201 keyCoode=855 flaggs=0 x0000000001 errr=0D/EventtHub( 84): /deev/inpput/evvent4 got: t0=9337, t11=6644406, ttype=00, codde=0, v=0D/A2DP ( 61): a2ddp_stoopD/A2DP ( 61): bluuetootth_stoopE/BluettoothEEventLLoop.cc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)產(chǎn)業(yè)園可行性分析報(bào)告
- 建筑給排水設(shè)計(jì)規(guī)范gb50015
- 商業(yè)街區(qū)商業(yè)規(guī)劃手冊(cè)
- 智能生產(chǎn)線(xiàn)設(shè)備維護(hù)指南
- 三農(nóng)文化傳播策略方案
- 重慶高新技術(shù)產(chǎn)業(yè)
- 開(kāi)題可行性分析報(bào)告模板
- 醫(yī)療設(shè)備操作與使用說(shuō)明手冊(cè)
- 農(nóng)業(yè)產(chǎn)業(yè)鏈協(xié)同發(fā)展方案
- 衛(wèi)星導(dǎo)航定位系統(tǒng)技術(shù)應(yīng)用文檔
- 人教版四年級(jí)英語(yǔ)《Weather》說(shuō)課稿(定稿)-PPT
- 365nm下光電管伏安特性曲線(xiàn)
- GB 2758-2012食品安全國(guó)家標(biāo)準(zhǔn)發(fā)酵酒及其配制酒
- 基因工程 (genetic engineering)課件
- 屠宰宰豬場(chǎng)輕工行業(yè)雙控體系建設(shè)文件風(fēng)險(xiǎn)分級(jí)管控體系
- 《色彩基礎(chǔ)知識(shí)》PPT課件(完整版)
- 專(zhuān)利管理制度管理辦法
- 拖拉機(jī)和聯(lián)合收割機(jī)駕駛?cè)松眢w條件證明
- 機(jī)電控制與可編程序控制器課程設(shè)計(jì)
- 基于ADAMS的懸置剛度仿真指南
- 彎矩二次分配法EXCEL計(jì)算
評(píng)論
0/150
提交評(píng)論