日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android avrcp处理流程,(VR虚拟现实)Android 蓝牙AVRCP功能的实现.doc

發布時間:2023/12/10 Android 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android avrcp处理流程,(VR虚拟现实)Android 蓝牙AVRCP功能的实现.doc 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(VR虛擬現實)Android 藍牙AVRCP功能的實現.doc

Android 藍牙AVRCP功能的實現作者Macro LiuAVRCP的按鍵定義sdkemulatorkeymapsAVRCP.klkey 200 MEDIA_PLAY_PAUSE WAKEkey 201 MEDIA_PLAY_PAUSE WAKEkey 166 MEDIA_STOP WAKEkey 163 MEDIA_NEXT WAKEkey 165 MEDIA_PREVIOUS WAKEkey 168 MEDIA_REWIND WAKEkey 208 MEDIA_FAST_FORWARD WAKEBCMbroadcom宏定義需要打開BOARD_HAVE_BLUETOOTH_BCM trueBT音頻控制的代碼externalbluetoothbluezaudiocontrol.c1 按鍵的MAPstatic struct const char *name;uint8_t avrcp;uint16_t u; key_map PLAY,PLAY_OP,KEY_PLAYCD , STOP,STOP_OP,KEY_STOPCD , PAUSE,PAUSE_OP,KEY_PAUSECD , FORWARD,FORWARD_OP,KEY_NEXTSONG , BACKWARD,BACKWARD_OP,KEY_PREVIOUSSONG , REWIND,REWIND_OP,KEY_REWIND , FAST FORWARD,FAST_FORWARD_OP,KEY_FASTFORWARD , NULL ;2 按鍵處理static void handle_panel_passthroughstruct control *control, for i 0; key_mapi.name NULL; i uint8_t key_quirks;if operands0 DBGAVRCP s s, key_mapi.name, status;key_quirks control-key_quirkskey_mapi.avrcp;if key_quirks break;DBGAVRCP treating key press as press release;send_keycontrol-u, key_mapi.u, 1;send_keycontrol-u, key_mapi.u, 0;break;send_keycontrol-u, key_mapi.u, pressed;break;HCIDUMP數據分析以Sony耳機DRC-BT15為例adb shellhcidump X左鍵 ACL data handle 12 flags 0 x02 dlen 12 L2CAPd cid 0 x0042 len 8 psm 0 0000 30 11 0e 00 48 7c 4c 00 0.H|L. HCI Command Exit Sniff Mode 0 x02|0 x0004 plen 2 0000 0c 00 ACL data handle 12 flags 0 x00 dlen 12 0000 08 00 4b 00 32 11 0e 09 48 7c 4c 00 K.2.H|L. HCI Event Max Slots Change 0 x1b plen 3 0000 0c 00 05 . HCI Event Mode Change 0 x14 plen 6 0000 00 0c 00 00 00 00 HCI Event Command Status 0 x0f plen 4 0000 0c 01 04 08 ACL data handle 12 flags 0 x02 dlen 12 L2CAPd cid 0 x0042 len 8 psm 0 0000 40 11 0e 00 48 7c cc 00 .H| ACL data handle 12 flags 0 x00 dlen 12 0000 08 00 4b 00 42 11 0e 09 48 7c cc 00 K.B.H| HCI Event Number of Completed Packets 0 x13 plen 5 0000 01 0c 00 02 00 .播放/暫停 ACL data handle 12 flags 0 x02 dlen 12 L2CAPd cid 0 x0042 len 8 psm 0 0000 50 11 0e 00 48 7c 4b 00 P.H|K. ACL data handle 12 flags 0 x00 dlen 12 0000 08 00 4b 00 52 11 0e 09 48 7c 4b 00 K.R.H|K. ACL data handle 12 flags 0 x02 dlen 12 L2CAPd cid 0 x0042 len 8 psm 0 0000 60 11 0e 00 48 7c cb 00 .H| ACL data handle 12 flags 0 x00 dlen 12 0000 08 00 4b 00 62 11 0e 09 48 7c cb 00 K.b.H| HCI Event Number of Completed Packets 0 x13 plen 5 0000 01 0c 00 02 00 .右鍵 ACL data handle 12 flags 0 x02 dlen 12 L2CAPd cid 0 x0042 len 8 psm 0 0000 70 11 0e 00 48 7c 46 00 p.H|F. ACL data handle 12 flags 0 x00 dlen 12 0000 08 00 4b 00 72 11 0e 09 48 7c 46 00 K.r.H|F. ACL data handle 12 flags 0 x02 dlen 12 L2CAPd cid 0 x0042 len 8 psm 0 0000 80 11 0e 00 48 7c c6 00 H| ACL data handle 12 flags 0 x00 dlen 12 0000 08 00 4b 00 82 11 0e 09 48 7c c6 00 K.H| HCI Event Number of Completed Packets 0 x13 plen 5 0000 01 0c 00 02 00 . HCI Event Max Slots Change 0 x1b plen 3 0000 0c 00 01 . HCI Event Mode Change 0 x14 plen 6 0000 00 0c 00 02 c8 00 然后將control.c的日志打印出來按一次”“播放/暫停鍵”D/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 46 對應PAUSE_OPD/ACRVP 237 key_quirks 0, pressed 1按鍵按下D/ACRVP 237 control-u fffffffe,send_key 201對應MEDIA_PLAY_PAUSED/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 c6 0 x46 0 x80 表示按鍵釋放了D/ACRVP 237 key_quirks 0, pressed 0按鍵釋放D/ACRVP 237 control-u fffffffe,send_key 201 對應MEDIA_PLAY_PAUSE再按一次”“播放/暫停鍵”D/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 44 對應PLAY_OPD/ACRVP 237 key_quirks 0, pressed 1 按鍵按下D/ACRVP 237 control-u fffffffe,send_key 200 對應MEDIA_PLAY_PAUSED/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 c4D/ACRVP 237 key_quirks 0, pressed 0 按鍵釋放D/ACRVP 237 control-u fffffffe,send_key 200 對應MEDIA_PLAY_PAUSEnext keyD/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 4b對應FORWARD_OPD/ACRVP 237 key_quirks 0, pressed 1D/ACRVP 237 control-u fffffffe,send_key 163 對應MEDIA_NEXTD/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 cbD/ACRVP 237 key_quirks 0, pressed 0D/ACRVP 237 control-u fffffffe,send_key 163prev keyD/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 4c 對應BACKWARD_OPD/ACRVP 237 key_quirks 0, pressed 1D/ACRVP 237 control-u fffffffe,send_key 165 對應D/ACRVP 237 - handle_panel_passthrough D/ACRVP 237 operands0 ccD/ACRVP 237 key_quirks 0, pressed 0D/ACRVP 237 control-u fffffffe,send_key 165 MEDIA_PREVIOUS從上面可以看到bluetooth的協議棧blueZ是沒有問題的將 frameworksbaselibsuiEventHub.cpp的LOG打開,只能看到了control.c的日志,EventHub的getEvent完全不響應觀察所有log日志發現,openDevice里也沒有裝載AVRCP.kl初步判斷event有問題event分析 adb shell cd /proc/bus/ cat devicescat devices cat devicescat devicesI Bus0019 Vendor0001 Product0001 Version0001 參考s3c-keypad.cN Names3c-keypad _dev-name DEVICE_NAME;P Physs3c-keypad/0 _dev-phys s3c-keypad/0;S Sysfs/devices/virtual//0 virtual的U UniqH Handlersevent0B EV3B KEY4000400 0I Bus0019 Vendor0001 Product0001 Version0100參考vpad_buttons.cN Names3c-eintkey -name pdev-name, gpio_keys_device_driver.name s3c-eintkey,P Physgpio-keys/0 -phys gpio-keys/0S Sysfs/devices/plat/s3c-eintkey//1 為什么這里是plat目錄U UniqH Handlersevent1B EV3B KEY100000 0 0 0I Bus0018 Vendor0000 Product0000 Version0000 參考amri_ts.cN Nameamri_ts amri_ts_driver.name amri_tsP Phys 沒有定義S Sysfs/devices/plat/s3c2440-i2c.0/i2c-0/0-0033//2 為什么這里是plat目錄U UniqH Handlersevent2B EVbB KEY400 0 0 0 0 0 40000800 40 0 0 10000B ABS2650000 0I Bus0000 Vendor0000 Product0000 Version0000N Nameecompass_dataP PhysS Sysfs/devices/virtual//3U UniqH Handlersevent3B EV9B ABS307bf從上面可以看到,完全沒有AVRCP的event。解決辦法Kernel make menuconfigCONFIG__U解決后的狀況 adb shell cd /proc/bus/ cat devices顯示增加了一個eventI Bus0005 Vendor0000 Product0000 Version0000N NameAVRCPP PhysS Sysfs/devices/virtual//4U UniqH Handlersevent4B EV100007B KEY10300 168 0 0 0 0 0B REL0看openDevice的信息D/EventHub 84 EventHubreadNotify nfd 87D/EventHub 84 Opening device /dev//event4D/EventHub 84 Getting keys.D/EventHub 84 Getting absolute controllers.D/EventHub 84 keylayoutFilename /system/usr/keylayout/AVRCP.kl I/EventHub 84 New keyboard device-id0 x10003 devnameAVRCP propNamehw.keyboards.65539.devname keylayout/system/usr/keylayout/AVRCP.klI/EventHub 84 New device path/dev//event4 nameAVRCP id0 x10003 of 0 x4 index4 fd196 classes0 x1D/EventHub 84 Adding device /dev//event4 0 x361800 at 4, id 3, classes 0 x1D/EventHub 84 Reporting device opened id0 x10003, name/dev//event4按鍵時也可以看到EventHub的信息了Log如下D/ACRVP 236 - handle_panel_passthrough D/ACRVP 236 operands0 46D/ACRVP 236 key_quirks 0, pressed 1D/ACRVP 236 control-u 14,send_key 201 control.c發出201號鍵,按鍵按下了D/EventHub 84 /dev//event4 got t0937, t1582930, type1, code201, v1 表示從event4得到201號鍵 MEDIA_PLAY_PAUSED/EventHub 84 iev.code201 keyCode85 flags0 x00000001 err0D/EventHub 84 /dev//event4 got t0937, t1600241, type0, code0, v0D/AudioHardware 61 AudioStreamOutALSAsetParameters routing0D/ACRVP 236 - handle_panel_passthrough D/ACRVP 236 operands0 c6D/ACRVP 236 key_quirks 0, pressed 0D/ACRVP 236 control-u 14,send_key c9D/EventHub 84 /dev//event4 got t0937, t1664391, type1, code201, v0 control.c發出201號鍵,按鍵釋放了D/EventHub 84 iev.code201 keyCode85 flags0 x00000001 err0D/EventHub 84 /dev//event4 got t0937, t1664406, type0, code0, v0D/A2DP 61 a2dp_stopD/A2DP 61 bluetooth_stopE/BluetoothEventLoop.cpp 84 event_filter Received signal org.bluez.AudioSinkStopped from /org/bluez/236/hci0/dev_00_1D_BA_A5_D8_1CE/BluetoothEventLoop.cpp 84 event_filter Received signal org.bluez.AudioSinkPropertyChanged from /org/bluez/236/hci0/dev_00_1D_BA_A5_D8_1CE/BluetoothEventLoop.cpp 84 event_filter Received signal org.bluez.AudioSinkPropertyChanged from /org/bluez/236/hci0/dev_00_1D_BA_A5_D8_1CV/BluetoothEventRedirector 244 Received android.bluetooth.a2dp.action.SINK_STATE_CHANGEDD/CachedBluetoothDevice 244 onProfileStateChanged profile A2DP newProfileState 2D/BluetoothA2dpService 84 A2DP state device 001DBAA5D81C State4-2D/A2DP 61 Received BT_RESPONSE - BT_STOP_STREAMD/dalvikvm 285 GC_EXPLICIT freed 87K, 56 free 2640K/5895K, external 1625K/2137K, paused 75msMacro Liu2011-08-01

總結

以上是生活随笔為你收集整理的android avrcp处理流程,(VR虚拟现实)Android 蓝牙AVRCP功能的实现.doc的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。