|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
#include "hal_types.h"
#include "OSAL.h"
#include "OSAL_Tasks.h"
/* HAL */
#include "hal_drivers.h"
/* LL */
#include "ll.h"
/* HCI */
#include "hci_tl.h"
#if defined ( OSAL_CBTIMER_NUM_TASKS )
#include "osal_cbTimer.h"
#endif
/* L2CAP */
#include "l2cap.h"
/* gap */
#include "gap.h"
#include "gapgattserver.h"
#include "gapbondmgr.h"
/* GATT */
#include "gatt.h"
#include "gattservapp.h"
/* Profiles */
#if defined ( PLUS_BROADCASTER )
#include "peripheralBroadcaster.h"
#else
#include "peripheral.h"
#endif
/* Application */
#include "simpleBLETest.h"
/*********************************************************************
* GLOBAL VARIABLES
*/
// The order in this table must be identical to the task initialization calls below in osalInitTask.
// 这个表相当重要, 都是定义了各个任务的事件执行函数,可以理解成回调函数,或事件执行函数
const pTaskEventHandlerFn tasksArr[] =
{
LL_ProcessEvent, // task 0
Hal_ProcessEvent, // task 1
HCI_ProcessEvent, // task 2
#if defined ( OSAL_CBTIMER_NUM_TASKS )
OSAL_CBTIMER_PROCESS_EVENT( osal_CbTimerProcessEvent ), // task 3
#endif
L2CAP_ProcessEvent, // task 4
GAP_ProcessEvent, // task 5
GATT_ProcessEvent, // task 6
SM_ProcessEvent, // task 7
GAPRole_ProcessEvent, // task 8
GAPBondMgr_ProcessEvent, // task 9
GATTServApp_ProcessEvent, // task 10
SimpleBLETest_ProcessEvent // task 11
// 这个是我们的应用程序的事件处理函数
};
const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );
uint16 *tasksEvents;
/*********************************************************************
* FUNCTIONS
*********************************************************************/
/*********************************************************************
* @fn osalInitTasks
*
* @brief This function invokes the initialization function for each task.
*
* @param void
*
* @return none
*/
/*
可以看到在這個數組的定義中,每個成員都是任務的執行函數,按照任務的優先級排序,
並且在osalInitTasks中初始化的時候,我們可以看到每個任務都有一個對應的初始化函數?瑏K且傳遞了一個taskID,此ID從0開始自增,這裏有一點非常重要,
初始化的順序和任務數組的定義順序是一樣的,
這就保證了我們給任務發生消息或事件時能夠準確的傳遞到相應的任務處理函數。
*/
void osalInitTasks( void )
{
uint8 taskID = 0;
// 分配任务事件空间,这里采用动态的方法来做,比较方便在tasksArr而代码修改少
tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
/* LL Task */
LL_Init( taskID++ );
/* Hal Task */
Hal_Init( taskID++ );
/* HCI Task */
HCI_Init( taskID++ );
#if defined ( OSAL_CBTIMER_NUM_TASKS )
/* Callback Timer Tasks */
osal_CbTimerInit( taskID );
taskID += OSAL_CBTIMER_NUM_TASKS;
#endif
/* L2CAP Task */
L2CAP_Init( taskID++ );
/* GAP Task */
GAP_Init( taskID++ );
/* GATT Task */
GATT_Init( taskID++ );
/* SM Task */
SM_Init( taskID++ );
/* Profiles */
GAPRole_Init( taskID++ ); // 角色初始化
GAPBondMgr_Init( taskID++ );
GATTServApp_Init( taskID++ );
/* Application */
SimpleBLETest_Init( taskID ); //这个就是我们的应用程序初始化
}
/*********************************************************************
*********************************************************************/ |
|