读了N多文档,其中推荐的有:
Webee的《蓝牙4.0是战演练》
Ghostyu的 《BLE权威教程》
1:透穿实现:
利用TI的BLE包里的工程直接烧
上位设备用 central,下位设备用peripheral工程
做以下处理:
central 的NPI初始化时添加uart CB,并在串口回调函数中 直接添加write char函数写进特征值(实现上位从串口接收并通过蓝牙发送), 使能特征值通知,并在通知处理事件中将数据从串口发送(实现上位的从蓝牙接受并从串口发送)
peripheral在charchangeCB中添加串口发送(实现从蓝牙接受,从串口发送),在注册profile时注意注册成可通知类型,并在串口回调函数中setchar来设定特征值(实现从串口接受从蓝牙发送)
以上两个特征值可以自己注册。
2:利用cenral或者peripheral等协议栈模板工程定制自己的工程
(1)定义自己的函数(init 及 process)定义函数对应的事件 16位最多16种事件(事件定义位置及形式 参考peripheral.c中 Simple BLE peripheral Task Events部分)
定义好之后 在协议栈init task部分添加自己函数的init,然后把process函数放在taskarr[]函数数组最后(参见SimpleBLEeventProcss位置)。
(2)定义好的task events应该与process中的switch选项对应
(3)启动事件,可以同样在SimpleTLEperipheral_init()函数的最后用osal_set_events(函数ID,事件)启动事件。
(要实现周期运行,可在events_process中调用延时osal_set_events());
最后最重要的一点是:根据自己工程需求,配置连接方式,上电advertising比较方便。
PS: 如果有新的硬件初始化需求,可以在HL层的common文件中 halDriveInit()函数中添加,该函数会被main()调用。
GAP及GATT提供的API简介 见 BLE协议栈中Document中的HTML格式文档。
PSS:event用于同一任务传递命令,而message用于不同任务之间命令传递。
event见上2,message自定义方法如下:
Comdef.h中给出了用户自定义message的宏范围,根据其范围可以在app中自定义message
定义message后,在需要用的地方创建消息结构体:msgpkt = (keyChange_t *)osal_msg_allocate(sizeof(keyChang_t));
msgkpt->hdr.event = KEY_CHANG;
msgpkt->state = state;
msgpkt->keys = keys;
然后发送即可:osal_msg_send(registeredKeystaskid,uint8 * msgkpt);
最后在接受消息的函数
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(SampleApp);
while( MSGpkt
{
switch( MSGpkt->har.evet )
case: KEY_CHANG; ````````break;
case:USER_MSG;```````````break;
})
通用工程模板及通用OSAL模板后续补充。