CSR8670项目实战:BluePager蓝牙寻呼机
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。
技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–
1. 引言
BluePager蓝牙寻呼机是一款功能强大的蓝牙source设备,可以作为无线对讲机的蓝牙功能扩充模块,将无线对讲机与蓝牙耳机无缝对接。
2. 主要功能
系统框图如下:
主要功能有:
序号 | 功能项 | 功能描述 | 性能指标 |
---|---|---|---|
1 | A2DP播放音乐 | 支持source->sink音乐通过I2S输入,支持SBC, APTX, APTX-LL | 48K,立体声,16bit,8670做I2S slave |
2 | AVRCP控制 | 支持sink端的播放、暂停、音量、上下曲、快进快退等按键动作 | – |
3 | HFP语音通话 | 支持source->sink语音通过模拟输入,sink->source语音通过模拟输出 | 8K,单声道,16bit |
4 | 支持末码重播 | sink设备按下末码重播键,source进入HFP语音通话状态 | – |
5 | 支持拨号语音提示 | source设备发送拨号->sink设备,sink设备播放拨号提示音 | – |
6 | 支持RSSI配对 | source设备只会同RSSI值大于门限值的sink设备配对 | – |
7 | 串口通信 | 支持MCU通过串口控制 | 38400bps,8bit,1停止位,0校验位,无流控 |
串口命令交互表
序号 | 名称 | 传输方向 | 格式 | 应答 |
---|---|---|---|---|
1 | 读取sink设备信息 | MCU->CSR8670 | AT#state | 名称、地址、信号强度、协议、电量、当前解码格式 |
2 | sink设备末码重播通知 | CSR8670->MCU | NTF#lastnum | sink设备按下末码重播键,进入aghfp通话模式 |
3 | sink设备avrcp操作通知 | CSR8670->MCU | NTF#avrcp | sink设备avrcp命令(透传avrcp键值,参考avc_operation_id定义) |
4 | sink设备连接完成通知 | CSR8670->MCU | NTF#connected | sink设备连接完成 |
5 | source设备发起免提通话 | MCU->CSR8670 | AT#callsco | source设备已启动免提通话,无需sink按下接听键 |
6 | source设备拨号呼叫sink设备 | MCU->CSR8670 | AT#outcall | source设备进入拨号状态,sink设备可听到0-1-2-3-4-5-6-7-8-9数字 |
7 | source设备拨号呼叫本地接听 | MCU->CSR8670 | AT#OUTCALL | source设备本地接听拨号呼叫,进入免提通话,无需sink按下接听键 |
8 | source设备RSSI连接A2DP | MCU->CSR8670 | AT#A2DP RSSI50 | source设备开始搜索RSSI为-50dBm以下的信号最强的设备,连接A2DP source设备已搜索到目标设备,开始配对 |
9 | source设备RSSI连接A2DP+HFP | MCU->CSR8670 | AT#A2DP+HFP RSSI90 | source设备开始搜索RSSI为-90dBm以下的信号最强的设备,连接A2DP+HFP source设备已搜索到目标设备,开始配对 |
10 | source主动断开连接 | MCU->CSR8670 | AT#disconnect | source设备主动断开连接,进入idle状态 |
11 | sink断开连接 | CSR8670->MCU | NTF#disconnect | sink设备主动断开连接,source进入idle状态 |
12 | source设备paging连接A2DP | MCU->CSR8670 | AT#A2DP PAGE1c521600045ac7 | source设备直接page目标蓝牙地址的设备,连接A2DP |
13 | source设备paging连接A2DP+HFP | MCU->CSR8670 | AT#A2DP+HFP PAGE1c521600045ac7 | source设备直接page目标蓝牙地址的设备,连接A2DP+HFP |
3. 项目难点
此项目的需求的定制化程度很高,在ADK4.1的基础上做了很多修改。
3.1. 获取sink电池电量
ADK4.1默认是不能解析电池电量的HFP AT command消息的,需修改source_aghfp_msg_handler.c的代码,方法如下:
/* indication of unrecognised AT command */
case AGHFP_UNRECOGNISED_AT_CMD_IND:
{AGHFP_MSG_DEBUG(("AGHFP_UNRECOGNISED_AT_CMD_IND:\n")); len = ((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->size_data;c = ((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->data;
#if 0 AGHFP_MSG_DEBUG(("unrecognised at cmd size %d:\n", len)); for (i = 0; i < len; i++){putchar(*(c+i)); }printf("\n");
#endif/* AT+IPHONEACCEV=2,1,8,2,0\r */if (len == 25){if ((c[0] == 'A') && (c[1] == 'T') && (c[2] == '+') && (c[3] == 'I')&& (c[4] == 'P') && (c[5] == 'H') && (c[6] == 'O') && (c[7] == 'N')&& (c[8] == 'E') && (c[9] == 'A') && (c[10] == 'C') && (c[11] == 'C')&& (c[12] == 'E') && (c[13] == 'V') && (c[14] == '=')){bluetest_update_device_bat((c[19]-'0'));AghfpSendOk(((AGHFP_RESPONSE_HOLD_STATUS_REQUEST_IND_T *)message)->aghfp);}else{AghfpSendError(((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->aghfp); }}else{AghfpSendError(((AGHFP_UNRECOGNISED_AT_CMD_IND_T *)message)->aghfp); }
}
return;
3.2. AGHFP模式使能AUX in/out
参考CSR8670项目实战:BlueCar蓝牙音频网关。
3.3. 获取sink设备的RSSI值和名称
ADK4.1的source工程在默认状态下没有使能inquiry_eir_mode,不能在搜索状态下获取sink设备的RSSI值和名称。
获取RSSI值的代码修改方式如下:
/* connection_msg_handler in source_connection_msg_handler.c */if (((CL_INIT_CFM_T *)message)->version == bluetooth2_1)
{/* EIR inquiry mode */ConnectionWriteInquiryMode(&theSource->connectionTask, inquiry_mode_eir);
}
else
{/* EIR inquiry mode */ConnectionWriteInquiryMode(&theSource->connectionTask, inquiry_mode_eir);
}
获取设备名称的代码修改方式:
/* inquiry_parse_eir_data in source_inquiry.c */else if ((*(p+1) == EIR_TYPE_REMOTE_NAME_SHORTENED) || (*(p+1) == EIR_TYPE_REMOTE_NAME_COMPLETE))
{result.device_name_size = *p;INQUIRY_DEBUG(("device_name_size: %d\n", result.device_name_size));if (result.device_name_size > (REMOTE_DEVICE_NAME_MAX_SIZE-1)){result.device_name_size = REMOTE_DEVICE_NAME_MAX_SIZE-1;}memcpy(result.device_name_buf, (const uint8 *)(p+2), result.device_name_size);result.device_name_buf[result.device_name_size] = '\0';bluetest_update_device_name(result.device_name_buf, (result.device_name_size+1));INQUIRY_DEBUG(("device_name: %s\n", result.device_name_buf));
}
4. 总结
通过此项目对source模式的深度定制开发,发现CSR的ADK有很强的可塑性和灵活性,并且隐藏着惊人的潜能。
在BluePager的基础上,可以进一步拓展功能。如支持更多输入源(USB, SPDIF等)、一拖二寻呼等。
CSR8670项目实战:BluePager蓝牙寻呼机相关推荐
- CSR8670项目实战:4人组网蓝牙对讲耳机
为了方便大家学习,现与我爱蓝牙网联合推出[QCC300x/CSR867x/QCC30xx/QCC51xx开发板]. 博主联系方式:Call-15715161220,QQ-705829339 技术交流Q ...
- CSR8670项目实战:BlueCar蓝牙音频网关
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- CSR8670项目实战:BlueDongle 蓝牙音频测试dongle
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PP ...
- CSR8670项目实战:BlueHeart心率监测耳机
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- CSR8670项目实战:BlueHeartSound电子心音计
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- CSR8670项目实战:BlueHeartSound2电子心音计
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PP ...
- CSR8670项目实战:BlueAgBatC蓝牙发射器BLE遥控器
为了方便大家学习,现与我爱蓝牙网联合推出[QCC300x/CSR867x/QCC30xx/QCC51xx开发板]. ⭐⭐⭐⭐⭐[本项目为客户项目,欢迎商务合作]⭐⭐⭐⭐⭐ 技术交流QQ群号:10330 ...
- android简单app实例_Android安卓小项目实战视频教程集锦
Android安卓小项目实战视频教程,点击进入视频教程: 一.安卓项目视频教程: 1蓝牙聊天APP介绍-分步骤介绍一个简单安卓蓝牙APP的开发过程 - 西瓜视频 2蓝牙聊天开发流程-分步骤介绍一个简单 ...
- 【万众期待】左盟主688页QT教程震撼发布!88个例程,一大波酷炫UI+项目实战案例来袭,让您久等了!!!...
上周发布Linux C应用教程之后,一大波粉丝在公众号留言咨询什么时候能推出QT教程.左盟主团队历时大半年的编写,万众期待的嵌入式QT教程<[正点原子]I.MX6U嵌入式Qt开发指南V1.0&g ...
最新文章
- 协议模型的最底层是_CAN通信协议栈(二) 之对ISO11898-1的理解
- JAVA[Algorithm]--戴克斯特拉
- 函数声明(函数原型)的一些关键技巧
- Ardino基础教程 23_步进电机
- volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用...
- 通过传址交换两个字符
- 语法分析:自下而上分析
- Android 自定义字体(otf,ttf等等)
- 搜集百度关键词的相关网站、生成词云
- matlab求hurst,请问如何用MATLAB计算大盘的HURST
- React新手入门学习
- Spring Data Jpa 复合主键
- 输入scor为80结果实验
- (附源码)springboot基于微信小程序的校园外卖系统 毕业设计091024
- TensorFlow 手写实现卷积神经网络CNN
- linux定时运行命令
- Ubuntu自动更换壁纸
- 资讯_Windows7旗舰版官方原装镜像iso文件下载;
- PyMol安装教程(Windows10+Python2.7)
- 全景网图片html,360度全景图片展示JavaScript实现
热门文章
- 用实例说明在cocos2d-x 3.x中使用SQLite
- Java中大括号的作用
- 使用python将歌词文件(.lrc文件)转换成字典及遍历获取文件夹内所有lrc文件并以lrc格式显示出来
- piechart 文档 android,(Android 应用之路) MPAndroidChart~PieChart
- 关于提单,你不知道的事!
- 软件工程——个人总结
- B2B2C多用户商城系统是怎么报价的?
- 学习linux驱动经典书籍
- HDU - 2018杭电ACM集训队单人排位赛 - 1 - Problem C. 狙击敌人
- 7-42 愿天下有情人都是失散多年的兄妹