android 蓝牙avrcp功能的实现

Android 蓝牙AVRCP功能的实现

作者:Macro Liu

AVRCP的按键定义:

\sdk\emulator\keymaps\AVRCP.kl

key 200 MEDIA_PLAY_PAUSE WAKE

key 201 MEDIA_PLAY_PAUSE WAKE

key 166 MEDIA_STOP WAKE

key 163 MEDIA_NEXT WAKE

key 165 MEDIA_PREVIOUS WAKE

key 168 MEDIA_REWIND WAKE

key 208 MEDIA_FAST_FORWARD WAKE

BCM(broadcom)宏定义需要打开:

BOARD_HAVE_BLUETOOTH_BCM := true

BT音频控制的代码

external\bluetooth\bluez\audio\control.c

(1) 按键的MAP

static struct {

const char *name;

uint8_t avrcp;

uint16_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",BACKWARD_OP,KEY_PREVIOUSSONG },

{ "REWIND",REWIND_OP,KEY_REWIND },

{ "FAST FORWARD",FAST_FORWARD_OP,KEY_FASTFORWARD },

{ NULL }

};

(2) 按键处理

static void handle_panel_passthrough(struct control *control,

{

for (i = 0; key_map[i].name != NULL; i++) {

uint8_t key_quirks;

if ((operands[0] & 0x7F) != key_map[i].avrcp)

continue;

DBG("AVRCP: %s %s", key_map[i].name, status);

key_quirks = control->key_quirks[key_map[i].avrcp];

if (key_quirks & QUIRK_NO_RELEASE) {

if (!pressed) {

DBG("AVRCP: Ignoring release");

break;

}

DBG("AVRCP: treating key press as press + release");

send_key(control->uinput, key_map[i].uinput, 1);

send_key(control->uinput, key_map[i].uinput, 0);

break;

}

send_key(control->uinput, key_map[i].uinput, pressed);

break;

}

}

HCIDUMP数据分析

以Sony耳机DRC-BT15为例

#adb shell

#hcidump –X

左键:

> ACL data: handle 12 flags 0x02 dlen 12

??? L2CAP(d): cid 0x0042 len 8 [psm 0]

????? 0000: 30 11 0e 00 48 7c 4c 00?????????????????????????? 0...H|L.

< HCI Command: Exit Sniff Mode (0x02|0x0004) plen 2

? 0000: 0c 00???????????????????????????????????????????? ..

< ACL data: handle 12 flags 0x00 dlen 12

??? 0000: 08 00 4b 00 32 11 0e 09? 48 7c 4c 00????????????? ..K.2...H|L.

> HCI Event: Max Slots Change (0x1b) plen 3

? 0000: 0c 00 05??

android avrcp处理流程,android 蓝牙avrcp功能的实现.doc相关推荐

  1. android otg 挂载流程,android USB OTG功能如何打开及实现

    1.检查HW原理图,确认是否支持OTG功能(vbus是否供上电,IDDIG pin链接是否正确) 2.若HW确认支持OTG功能,则按照如下方法分别打开USB OTG功能及实现挂载: 如何打开USB O ...

  2. android p 权限流程,Android native 权限控制流程

    关联文章: 前言: 在 Android Runtime Permission 详解 中详细的说明了permission 在Android 6.0 前后的区别,对于M 以后应用可以通过checkPerm ...

  3. android屏幕适配流程,Android屏幕适配姿势

    GitHub地址 为什么要屏幕适配? device_framentation.png 统计 碎片化 品牌机型碎片化 屏幕尺寸碎片化 操作系统碎片化 为了保证用户获得一致的用户体验效果,使得某一元素在A ...

  4. android wifi wps 流程,android中WiFi wps连接方式

    Android 个人热点 wps方式连接流程 android手机开启个人热点时,可以选择WPS连接方式 个人热点端 连接端 当个人热点端选择按钮时,连接端只需要点击WPS按钮即可连接:当个人热点端选择 ...

  5. android zygote启动流程,Android zygote启动流程详解

    对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...

  6. android serviceconnection unbind流程,Android - Service Bind/Unbind 使用

    Service Bind/Unbind 使用方式 本文介绍了本地服务,也就是同一个进程内的服务,如何使用 Bind/Unbind 方式被 Activity 使用. 本文不涉及 AIDL 使用 Serv ...

  7. android avrcp处理流程,Android Bluetooth AVRCP

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? AVRCP(Audio/Video Remote Control Profile),即音频/视频远程控制规范. AVRC ...

  8. Android 安装apk流程,Android PMS(二)-Apk安装流程

    原创内容,转载请注明出处,多谢配合. 一.APK组成 在APK的安装流程,在此之前先简单了解下APK组成: 目录/文件 描述 assert 存放的原生资源文件,通过AssetManager类访问. l ...

  9. android生成apk流程,Android Studio生成APK的基本流程

    Android Studio生成APK的基本流程 2020年08月14日 | 萬仟网移动技术 | 我要评论 Android Studio生成APK流程修改版本号和文件名安全加固(可选)生成签名apk修 ...

  10. android耳机上报流程,Android系统中耳机按键键值上报不正确 解决过程

    [问题现象] 根据测试组同事反馈:在我们的设备上使用 JBL 品牌某款带有 3 个按键的有线耳机时,按下"音量+"键时设备会减小音量而不是增加音量,按下"音量-" ...

最新文章

  1. 转 关于 D3D的 SetRenderState 以及AlphaBlend 和AlphaTest
  2. Ffmpeg 定位文件(seek file)
  3. [译] Web 爬虫下的 Python 数据分析:中情局全球概况图解
  4. android异步线程利用Handler将消息发送至UI线程
  5. 检索数据_11_限制返回的行数
  6. Linux 安装Redis全过程日志
  7. 双向控制引脚的控制代码
  8. C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥
  9. java.util.UnknownFormatConversionException: Conversion = ‘j‘ || Conversion = ‘D‘ || Conversion = ‘Y‘
  10. 部署Smokeping
  11. 利用WebBrowser获得页面部分数据
  12. item2vec详解
  13. mysql where 中能否使用update_mysql – 可以在WHERE中执行UPDATE子句吗?
  14. 群晖修改ipv6dns服务器,hiboy大佬的padavan开启IPv6,并使用IPv6登录黑群晖的方法
  15. 7种常用数据分析方法 (下)
  16. 使用防火墙禁止软件联网
  17. KafkaStream之时间窗口WindowBy
  18. 计算机网络安全讲座心得,学习信息安全心得体会
  19. performance API 中什么指标可以衡量首屏时间
  20. 搭建自己的简易服务器(公网)

热门文章

  1. 计算机基础知识整理 世上最全,IT小白必看:计算机基础知识整理大全
  2. 软件体系结构 复习题
  3. account.php,account.php
  4. 概率论与数理统计——随机变量及其分布
  5. 30套精选程序员个人简历模板.zip
  6. java坦克代码_Java坦克大战源代码
  7. SWAT模型高阶应用暨无资料地区建模、不确定分析与气候变化、土地利用对面源污染影响模型改进案例分析
  8. Web Server 配置及上传文件
  9. Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you‘re try
  10. 天翼网关-无线光纤猫的设置和有WIFI信号无网络问题排查与解决