微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)

由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)

时间:07-22 来源:本站整理 点击:

,这里有一点非常重要,初始化的顺序和任务数组的定义顺序是一样的,这就保证了我们给任务发生消息或事件时能够准确的传递到相应的任务处理函数。

  void osalInitTasks( void )

  {

  uint8 taskID = 0;

  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 */

  SimpleBLEPeripheral_Init( taskID );

  }

  应用层的初始化SimpleBLEPeripheral_Init,SimpleBLEPeripheral_Init( uint8task_id )主要对 GAP 和 GATT 进行配置,最后调用osal_set_event(simpleBLEPeripheral_TaskID, SBP_START_DEVICE_EVT )启动设备。

  设备启动后应用层就能接收到这个设置的事件并进行处理,可以看到设备启动中主要是启动设备,注册绑定管理,并且启动了一个定时器,这个定时器是一个周期事件的第一次启动。

  

  周期事件中每次都会重启这个定时器,并且处理周期事件。

  

  在初始化的时候我们注册了一个很重要的函数,设备状态改变时的回调函数,这个函数在设备的状态改变时会被底层的协议栈回调,我们可以从这个回调函数中看的设备的状态的改变。

  static void peripheralStateNotificationCB( gaprole_States_t newState);

  从函数的定义可以看出,设备的状态类型都在数据类型gaprole_States_t中定义了,我们看一下这个数据类型的定义:

  typedef enum

  {

  GAPROLE_INIT = 0, //!< Waiting to be started

  GAPROLE_STARTED, //!< Started but not advertising

  GAPROLE_ADVERTISING, //!< Currently Advertising

  GAPROLE_WAITING, //!< Device is started but not advertising, is in waiting period before advertising again

  GAPROLE_WAITING_AFTER_TIMEOUT, //!< Device just timed out from a connection but is not yet advertising, is in waiting period before advertising again

  GAPROLE_CONNECTED, //!< In a connection

  GAPROLE_CONNECTED_ADV, //!< In a connection + advertising

  GAPROLE_ERROR //!< Error occurred - invalid state

  } gaprole_States_t;

  看到这个定义就很明确了,设备的状态就在这几种状态间切换。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top