版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Android藍牙AVRCP功能的實現(xiàn)作者:Macro LiuAVRCP的按鍵定義:sdkemu 1 at or keymapsAVRCP klkey 200MEDIA_PLAY_PAUSEWAKEkey 201MEDIA_PLAY_PAUSEWAKEkey 166MEDIA_STOPWAKEkey 163MEDIA_NEXTWAKEkey 165MEDIA_PREVIOUSWAKEkey 168MEDIA.REWINDWAKEkey 208MEDIA_FAST_FORWARDWAKEBCM(broadcom)宏定義需要打開:BOARD_HAVE_BLUETOOTH_BCM :二 trueBT
2、音頻操縱的代碼externalbluetoothbluezaudiocontro1 c(1)按鍵的MAPstatic struct const char *name;uint8_t avrcp; uintl6_t uinput; key_map = "PLAY:PLAY_OP,KEY_PLAYCD , "STOP",STOP_OP,KEY.STOPCD , "PAUSE",PAUSE_OP,KEY.PAUSECD , "FORWARD",FORWARD.OP,KEY.NEXTSONG , "BACKWARD&quo
3、t;, BACKWARD.OP, KEY_PREVIOUSSOG , "REWIND",REWIND_0P, KEY_REWIND , ”FAST FORWARD", FAST_F0RWARD_0P, KEY.FASTFORWARD , NULL ;(2)按鍵處理static void handle_panel_passthrough(struct control *control,for (i = 0; key_ != NULL; i+) uint8_t key_quirks;if (operands0_ & 0x7F) != key_
4、mapi. avrcp)continue;DBG(,ZAVRCP: %s %sz/, key_mapi. name, status);key_quirks = control->key_quirks key_map Zi avrcp.;辻(key_quirks & QUIRK_NO_RELEASE) if (!pressed) DBG("AVRCP: Ignoring release"); break;DBG(ZZAVRCP: treating key press as press + release"); send_key(control-uinp
5、ut, key_mapi uinput, 1); send_key(control->uinput, key_mapi uinput, 0); break; send_key(control->uinput, keymapi uinput, pressed); break; HCIDUMP數(shù)據(jù)分析以Sony耳機DRC-BT15為例#adb shell#he i dump - X左鍵:> ACL data: handle 12 flags 0x02 dlen 12L2CAP(d): cid 0x0042 len 8 psm 04c0c0000:3011Oe0048 7c00O.
6、H|L.< HCI Command: Exit Sniff Mode (0x02 0x0004) plen 20000:00< ACL data: handle 12 flags 0x00 dlen 120000:0800 4b003211Oe 0948 7c 4c00.K. 2. H|L.> HCIEvent: MaxSlots Change(Oxlb)plen 30000:0c00> HCI Event: Mode Change (0x14) plen 6000000:000c000000 > HCIEvent: CommandStatus(OxOf) ple
7、n 40000:0c010408> ACL data: handle 12 flags0x02 dlen 12L2CAP(d) : cid0x0042len 8 psm 00000:4011Oe00487ccc00< ACLdata: handle 12:flags0x00 dlen 120000: 0800 4b 004211Oe0948 7ccc00K B.H|?> HCI Event: Number of Completed Packets (0x13) plen 5000000:010c0002播放/暫停:> ACLdata: handle 12 flags0x
8、02 dlen 12L2CAP(d): cid0x0042len 8 psm 010000:5011Oe00487c4b00P.H|K.< ACLdata: handle 12flags0x00 dlen 120000: 0800 4b 005211Oe0948 7c4b00KRH|K> ACLdata: handle 12flags0x02 dlen 12L2CAP(d): cid0x0042len 8 Lpsm 010000:6011Oe00487ccb00.H|?< ACLdata: handle 12flags0x00 dlen 120000: 0800 4b 006
9、211Oe0948 7ccb00K b.H|?> HCIEvent: Number of Completed Packets(0x13) plen 50000:010c0002右鍵:> ACL data: handle 12 flags 0x02 dlen 12L2CAP(d): cid 0x0042 len 8 psm 00000:7011Oe0000< ACL48 7cp. H F.00> ACLdata: handle 12 flags 0x00 dlen 120000:0800 4b 007211.K. r. H F0x02 dlen 12 len 8 psm
10、0111 Oedata: handle 12 flagsL2CAP(d): cid 0x00420000: 80Oe0048 7c48 7c00< ACL00> HCI46c6c6020x00 dlen 12 00 82 KH|?Number of Completed Packets 0000: 01data: handle 12 flags0000:0800 4bEvent:11Oe09487c(0x13) plenOc50000> HCI Event: Max Slots Change (Oxlb) plen 30000:0c0001 > HCI Event: Mo
11、de Change (0x14) plen 60000:000c0002c800 .然后將control, c的日志打印出來:按一次” “播放/暫停鍵”:D/ACRVP ( 237): handle_panel_passthrough D/ACRVP( 237) : operands 0 = 46 對應(yīng) PAUSE_OPD/ACRVP( 237) : key_quirks = 0, pressed = 1 按鍵按下D/ACRVP (237) : control->uinput = fffffffe, send_key = 201 對應(yīng)MEDIA_PLAY_PAUSED/ACRVP( 23
12、7)D/ACRVP( 237) handle_panel_passthrough operands 0 = c6 (= 0x46 I 0x80 表示按鍵開釋了)D/ACRVP237) : key_quirks = 0, pressed = 0 按鍵開釋D/ACRVP (237): control->uinput = fffffffe, send_key = 201 對 應(yīng)MEDIA_PLAY_PAUSE再按一次” “播放/暫停鍵”:D/ACRVP ( 237): handle_panel_passthrough D/ACRVP( 237) : operands 0 = 44 對應(yīng) PLA
13、Y_OPD/ACRVP( 237) : key_quirks = 0, pressed = 1 按鍵按下D/ACRVPMEDIA_NEXTD/ACRVT (D/ACRVT (D/ACRVP (D/ACRVP (prev key:D/ACRVP (D/ACRVT (D/ACRVP (D/ACRVP (D/ACRVP (D/ACRVP (D/ACRVP (D/ACRVPD/ACRVP (237): control->uinput 二 fffffffe, send.key 二 200 對應(yīng)MEDIA PLAY PAUSED/ACRVP D/ACRVP D/ACRVPD/ACRVP( 237):
14、 handle_panel_passthrough (237): operands0 = c4(237) : key_quirks = 0, pressed = 0 按鍵開釋(237): control->uinput = fffffffe, send_key = 200 對 應(yīng)MEDIA_PLAY_PAUSEnext key:D/ACRVP ( 237): handle_panel_passthrough D/ACRVP (237) : operands 0二 4b 對應(yīng) F0RWARD_0PD/ACRVP ( 237): key_quirks = 0, pressed = 1237)
15、 : control->uinput = fffffffe, send_key = 163 對應(yīng)237): handle_panel_passthrough 237): operands0 = cb237): key_quirks = 0, pressed = 0237): control-uinput = fffffffe, send_key = 163237): handle_panel_passthrough 237) : operands 0 = 4c 對應(yīng) BACKWARD_OP237): key_quirks = 0, pressed = 1237) : contro 1 -
16、>uinput = fffffffe, send_key = 165 對應(yīng)237): handle_panel_passthrough 237): operands0 = cc237): key_quirks = 0, pressed = 0237): control->uinput = fffffffe, send_key 二 165MEDIA_PREVIOUS從上面能夠看到bluetooth的協(xié)議棧blueZ是沒有問題的 將 frameworksbaselibsuiEventHub< cpp 的 LOG 打開,只能看到了 control, c的日志,EventHub的ge
17、tEvent完全不響應(yīng)觀看所有l(wèi)og日志發(fā)覺,openDevice里也沒有裝載AVRCP. kl初步判定event有問題event分析:$ adb shell# cd /proc/bus/input# cat devicescat devices# cat devicescat devicesI: Bus=0019 Vendor=0001 Product=0001 Version=0001 參考 s3c-keypad. cN: Name=,/s3c-keypadz/input_.dev->name = DEVICE_NAME;P: Phys=s3c-keypad/inputOinput_
18、dev-phys 二"s3c-keypad/input0"S: Sysfs=/devices/virtual/input/inputOvirtual 的?U: Uniq二H: Handlers=eventOB: EV=3B: KEYM000400 0I: Bus=0019 Vendor=0001 Product=0001 Version=0100 參考 vpad_buttons. cN: Name二"s3c-eintkey"input->name 二 pdev->name,gpio_keys_device_driver name二"
19、s3c-eintkey",P: Phys二gpio-keys/inputOinput->phys = "gpio-keys/inputO"S: Sysfs=/devices/platform/s3c-eintkey/input/input 1什么緣故那個地點是 platform 名 H?U: Uniq=H: Handlers=event1B: EV=3B: KEY=100000 000I: Bus=0018 Vendor=0000 Product=0000 VersionOOOO 參考 amri_ts. cN: Name二"amri_ts"
20、;amri_ts_driver. name = "amrits"P: Phys=沒有定義S:Sysfs=/devices/platform/s3c2440-i2c. 0/i2c-0/0-0033/input/input2什么緣故那個地點是platform名目?U: Uniq二H: Handlers=event2B: EV二bB: KEY=400 00000 40000800 40 0 0 10000B: ABS二2630000 0I:Bus二0000 Vendor=0000 Product=0000 Version=0000N:Name=z/ecompass_data,zP
21、:S:Phys=Sysfs=/devices/virtual/input/input3U:Uniq=H:B:Handlers=event3EV=9B: ABS二307bf從上面能夠看到,完全沒有AVRCP的event o解決方法:Kernel$ make menuconfigInput devi ce support >Miscellaneous devices > |<*>User 1 ev-el dri ver supportCONFIG_INPUT_UINPUT解決后的狀況:$ adb shell# cd /proc/bus/input# cat devices顯
22、示增加了一個eventI: Bus=0005 Vendor=0000 Product=0000 Version=0000N: Name二AVRCP"P: s:Phys=Sysfs=/devices/virtual/input/input4u:Uniq=H:Handlers=event4B:EV二100007B:KEY二10300 168 0 0 0 0 0B:REL=0看openDevice的信息:D/EventHub ( D/EventHub( D/EventHub ( D/EventHub ( D/EventHub( I/EventHub (84): EventHub:readN
23、otify nfd: 8784): Opening device: /dev/input/event484): Getting keys84): Getting absolute controllers84) : keylayoutFi 1 ename = /system/usr/keylayout/AVRCP kl84) : New keyboard: device-id=0xl0003 devname=,AVRCP'propName=, hw. keyboards 65539 devname, keylayout二'/system/zusr/keylayout/AVRCP
24、kl' I/EventHub(84) : New device: path=/dev/input/event4 name=AVRCPid=0xl0003 (of 0x4) index=4 fd=196 classes二0x1D/EventHub (84): Adding device /dev/input/event4 0x361800 at 4, id = 3, classes = 0x1D/EventHub(84): Reporting device opened:id二0x10003,name=/dev/input/event4按鍵時也能夠看到EventHub的信息了 : Log
25、如下:D/ACRVP ( 236) :handle_panel_passthroughD/ACRVP ( 236) : operands0二 46D/ACRVP ( 236): key_quirks = 0, pressed = 1D/ACRVP (236): control->uinput 二 14, send_key = 201發(fā)出201號鍵,按鍵按下了contro 1. cD/EventHub(84) : /dev/input/event4 got: 10=937, 11=582930, type二1,code二201, v=l 表示從 event4 得到 201 號鍵 MEDIA
26、_PLAY_PAUSED/EventHub (D/EventHub (84): iev. code=201 keyCode=85 flags=0x00000001 err=084): /dev/input/event4 got: t0=937, tl=600241, type=0,code二0, v=0D/Aud i oHar dwar e (D/ACRVP ( 236):61): AudioStreamOutALSA:setParameters() routing=0 handle_panel_passthrough D/ACRVP ( 236): operands0二 c6D/ACRVP(
27、 236) : key_quirks = 0, pressed = 0D/ACRVP( 236) : control->uinput = 14, send_key = c9D/EventHub(84) : /dev/input/event4 got: t0=937, tl=664391, type二1,code=201, v=0 control, c 發(fā)出 201 號鍵,按鍵開釋了84): iev. code=201 keyCode=85 flags=0x00000001 err=084): /dev/input/event4 got: t0=937, t1=664406, type二0,E/Blueto
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024離婚財產(chǎn)評估及分配程序合同
- 2025年度消防水源與供水設(shè)施建設(shè)施工協(xié)議4篇
- 2025年度智慧交通設(shè)施安裝與維護服務(wù)合同3篇
- 2024版正規(guī)的居間服務(wù)合同范本
- 2024跨區(qū)域教育資源共享與合作合同
- 2024年裝修工程專項分包協(xié)議3篇
- 2025年度特色餐飲品牌店面租賃合同3篇
- 2025年度甘肅桉樹種植與干旱地區(qū)林業(yè)發(fā)展合同3篇
- 2025年度生態(tài)環(huán)保工程承包人工合同模板4篇
- 2025年度倉儲物流場地租賃合同12篇
- 髖關(guān)節(jié)脫位-骨傷科
- 鐵路征地拆遷總結(jié)匯報
- 手術(shù)室護士的職業(yè)暴露及防護措施護理課件
- 水果店選址分析報告
- 人員測評與選拔的主要方法課件
- 智慧審計方案
- 企業(yè)信息化建設(shè)現(xiàn)狀與未來規(guī)劃匯報
- 工程開工報審表及工程開工報審表、開工報告
- 音樂協(xié)會管理制度
- 2024年水發(fā)集團有限公司招聘筆試參考題庫含答案解析
- 阿米巴落地實操方案
評論
0/150
提交評論