蓝牙按照协议可以分为经典蓝牙和低功耗蓝牙,蓝牙数据传输过程一般是从广播到扫描,再到连接,最后进行数据传输的。具体有GATT和ATTT两种控制配置。本文中利用BLE进行数据传输。主要是程序代码结构分析和试验探究。
# 一.BLE Throughput demo代码分析
源代码包含此应用的三种功能,可以分为APP_MSG_PROTOCOL_RSP、APP_MSG_FETCH_TRP_RX_DATA以及APP_MSG_LED_TIMEOUT,分别代表命令功能,数据传输功能以及LED灯显示机器状态等。
具体代如下:
首先初始化基本定义,以及状态初始化。
```cpp
uint8_t instance;
APP_TRP_ConnList_T *p_connList;
APP_Msg_T appMsg[1];
APP_Msg_T *p_appMsg;
p_appMsg = appMsg;
```
```cpp
switch (appData.state) {
/* Application's initial state. */
case APP_STATE_INIT:
{
bool appInitialized = true;
//appData.appQueue = xQueueCreate( 10, sizeof(APP_Msg_T) );
APP_BleStackInit();
RTC_Timer32Start();
/* Configure build-in GATT Services*/
APP_ConfigBleBuiltInSrv();
APP_LED_Init();
APP_UpdateLocalName(0, NULL);
APP_InitConnList();
APP_ADV_Init();
APP_TRP_COMMON_Init();
APP_TRPS_Init();
if (appInitialized) {
appData.state = APP_STATE_SERVICE_TASKS;
SYS_CONSOLE_MESSAGE("BLE_Throughput APP Initialized.\r\n");
}
break;
}
break;
```
然后是三种函数分别作用的功能。如下:
```cpp
case APP_STATE_SERVICE_TASKS:
{
if (OSAL_QUEUE_Receive(&appData.appQueue, &appMsg, OSAL_WAIT_FOREVER)) {
switch (p_appMsg->msgId) {
case APP_MSG_BLE_STACK_EVT:
// Pass BLE Stack Event Message to User Application for handling
APP_BleStackEvtHandler((STACK_Event_T *) p_appMsg->msgData);
break;
case APP_MSG_PROTOCOL_RSP:
{
p_connList = ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->p_tmrParam;
if ((p_connList != NULL) && (p_connList->trpRole == APP_TRP_SERVER_ROLE))
APP_TRP_COMMON_SendCheckSumCommand(p_connList);
}
break;
case APP_MSG_FETCH_TRP_RX_DATA:
{
p_connList = ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->p_tmrParam;
if ((p_connList != NULL) && (p_connList->trpRole == APP_TRP_SERVER_ROLE))
APP_TRPS_LeRxProc(p_connList);
}
break;
case APP_MSG_LED_TIMEOUT:
{
APP_LED_Elem_T *p_ledElem;
instance = ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->instance;
p_ledElem = (APP_LED_Elem_T *) ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->p_tmrParam;
APP_LED_StateMachine(instance, p_ledElem);
}
break;
}
}
break;
```
其中readme.md文件给出了具体的功能实现,这个包括数据双向传输,从 PIC32CXBZ2到mobile phone,或者是1双向传输。
广播描述:
LED灯状态:LED有两种状态,分别代表广播状态和连接状态
# 二.数据传输测试
## 1app连接
打开MBD app, 找到BLE_UART。未连接时,开发板灯是闪烁的;连接后,开发板灯不闪。
连接,手机app的出现uart程序,如图:
开发板灯不闪:
分别测试两种状态:
burst mode,此时用程序的文本进行传输。
text mode,模拟输入,在板子和app双向传输。
非常有趣,期待能用uart传输,后续再研究下程序。