Android通过蓝牙模拟串口与BC05通信

BC05端:编译环境是CSR的ADK1.1, 里面有例程, 有关模拟串口的有RFCOMM和SPP, 还不太清楚二者的区别例程SPP有点问题, 编译可以通过, 但在链接时会找不到变量: ld: Undefined symbols:$_sppGetServiceHandle$_sppStoreServiceHandle需要在ADK1.1下加入SPP的fix文件, 并重新
摘要由CSDN通过智能技术生成

BC05端:

编译环境是CSR的ADK1.1, 里面有例程, 有关模拟串口的有RFCOMM和SPP, 还不太清楚二者的区别

例程SPP有点问题, 编译可以通过, 但在链接时会找不到变量: 

ld: Undefined symbols:

$_sppGetServiceHandle

$_sppStoreServiceHandle

需要在ADK1.1下加入SPP的fix文件, 并重新编译库.

spp_server作用是把RF收到的数据转到实际的UART, 并把UART中收到的数据连接到RF.
TODO: 如何在程序中直接处理收到的RF数据, 而不是把数据转到UART交给其他MCU处理?
PS: 处理 UART sink 可以利用MessageSinkTask()将UART中断交给自己的handler处理, MessageSend()id值是MESSAGE_MORE_DATA(0x8000+33), 用同样的方法可以成功将RF sink 与handler绑定, 但把data强制转换成(MessageMoreData*)后, SourceMap()会失败, 因此需要搞清楚CSR底层有没有对这种情况提供可行的方案.

使用MessageSinkTak()可以实现

使用rfcomm_echo_server/rfcomm_echo_client这两个例程烧录到开发板上, 可以实现两个BC05的模拟串口通信: client端将数据发送给server, server收到后再原封不动发还给client, client需要通过上位机软件来实现发送和接收.
server一直在运行等待连接, client搜索不到一分钟后超时.

工程中的.led文件, 可以在编译时自动生成.c.h文件(如果编译选项改变了的话), 用来配置灯的状态.
工程中的.button文件, 可以在编译时自动生成.c.h文件(如果编译选项改变了的话), 用来配置按键.

主要用到的API: 
MessagePioTask()
PioDebounce32()
StreamConnect()
MessageSinkTask()


SPP_SERVER中 ConnectionInit()即把task和connection事件连接在一起, 这样在调用loop()以后, 底层会马上抛出CL_INIT_CFM和SPP_START_SERVICE_CFM这两个case, 可以在task中作相应处理或者忽略. 
真正开始spp server功能的其实是ConnectionWriteScanEnable()和SppStartService()这两个函数, 可以根据自己实际情况调用, 不一定非在CL_INIT_CFM case中, 调用后底层会抛出一系列连接请求case, 所以task中一定要有SPP_STOP_SERVICE_CFM, SPP_CONNECT_IND, SPP

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值