BC05端:
编译环境是CSR的ADK1.1, 里面有例程, 有关模拟串口的有RFCOMM和SPP, 还不太清楚二者的区别例程SPP有点问题, 编译可以通过, 但在链接时会找不到变量:
ld: Undefined symbols:
$_sppGetServiceHandle
$_sppStoreServiceHandle
需要在ADK1.1下加入SPP的fix文件, 并重新编译库.spp_server作用是把RF收到的数据转到实际的UART, 并把UART中收到的数据连接到RF.
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