亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sapi.c

?? 一些基于IRA環境開發的zigbee實例程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
 */
void SAPI_ReceiveDataIndication( uint16 source, uint16 command, uint16 len, uint8 *pData  )
{
#if defined ( MT_SAPI_CB_FUNC )
  /* First check if MT has subscribed for this callback. If so , pass it as
  a event to MonitorTest and return control to calling function after that */
  if ( SAPICB_CHECK( SPI_CB_SAPI_RCV_DATA_IND ) )
  {
    zb_MTCallbackReceiveDataIndication( source, command, len, pData  );
  }
  else
#endif  //MT_SAPI_CB_FUNC
  {
    zb_ReceiveDataIndication( source, command, len, pData  );
  }
}
/*********************************************************************
 * @fn      SAPI_ProcessEvent
 *
 * @brief   Simple API Task event processor.  This function
 *          is called to process all events for the task.  Events
 *          include timers, messages and any other user defined events.
 *
 * @param   task_id  - The OSAL assigned task ID.
 * @param   events - events to process.  This is a bit map and can
 *                   contain more than one event.
 *
 * @return  none
 */
UINT16 SAPI_ProcessEvent( byte task_id, UINT16 events )
{
  osal_event_hdr_t *pMsg;
  afIncomingMSGPacket_t *pMSGpkt;
  afDataConfirm_t *pDataConfirm;


  if ( events & SYS_EVENT_MSG )
  {
    pMsg = (osal_event_hdr_t *) osal_msg_receive( task_id );
    while ( pMsg )
    {
      switch ( pMsg->event )
      {
        case ZDO_CB_MSG:
          SAPI_ProcessZDOMsgs( (zdoIncomingMsg_t *)pMsg );
          break;

        case AF_DATA_CONFIRM_CMD:
          // This message is received as a confirmation of a data packet sent.
          // The status is of ZStatus_t type [defined in ZComDef.h]
          // The message fields are defined in AF.h
          pDataConfirm = (afDataConfirm_t *) pMsg;
          SAPI_SendDataConfirm( pDataConfirm->transID, pDataConfirm->hdr.status );
          break;

        case AF_INCOMING_MSG_CMD:
          pMSGpkt = (afIncomingMSGPacket_t *) pMsg;
          SAPI_ReceiveDataIndication( pMSGpkt->srcAddr.addr.shortAddr, pMSGpkt->clusterId,
                                    pMSGpkt->cmd.DataLength, pMSGpkt->cmd.Data);
          break;

        case ZDO_STATE_CHANGE:
          // If the device has started up, notify the application
          if (pMsg->status == DEV_END_DEVICE ||
              pMsg->status == DEV_ROUTER ||
              pMsg->status == DEV_ZB_COORD )
          {
            SAPI_StartConfirm( ZB_SUCCESS );
          }
          else  if (pMsg->status == DEV_HOLD ||
                  pMsg->status == DEV_INIT)
          {
            SAPI_StartConfirm( ZB_INIT );
          }
          break;

        case ZDO_MATCH_DESC_RSP_SENT:
          SAPI_AllowBindConfirm( ((ZDO_MatchDescRspSent_t *)pMsg)->nwkAddr );
          break;

        case KEY_CHANGE:
          zb_HandleKeys( ((keyChange_t *)pMsg)->state, ((keyChange_t *)pMsg)->keys );
          break;

        case SAPICB_DATA_CNF:
          SAPI_SendDataConfirm( (uint8)((sapi_CbackEvent_t *)pMsg)->data,
                                    ((sapi_CbackEvent_t *)pMsg)->hdr.status );
          break;

        case SAPICB_BIND_CNF:
          SAPI_BindConfirm( ((sapi_CbackEvent_t *)pMsg)->data,
                              ((sapi_CbackEvent_t *)pMsg)->hdr.status );
          break;

        case SAPICB_START_CNF:
          SAPI_StartConfirm( ((sapi_CbackEvent_t *)pMsg)->hdr.status );
          break;

        default:
          // User messages should be handled by user or passed to the application
          if ( pMsg->event >= ZB_USER_MSG )
          {

          }
          break;
      }

      // Release the memory
      osal_msg_deallocate( (uint8 *) pMsg );

      // Next
      pMsg = (osal_event_hdr_t *) osal_msg_receive( task_id );
    }

    // Return unprocessed events
    return (events ^ SYS_EVENT_MSG);
  }

  if ( events & ZB_ALLOW_BIND_TIMER )
  {
    afSetMatch(sapi_epDesc.simpleDesc->EndPoint, FALSE);
    return (events ^ ZB_ALLOW_BIND_TIMER);
  }

  if ( events & ZB_BIND_TIMER )
  {
    // Send bind confirm callback to application
    SAPI_BindConfirm( sapi_bindInProgress, ZB_TIMEOUT );
    sapi_bindInProgress = 0xffff;

    return (events ^ ZB_BIND_TIMER);
  }

  if ( events & ZB_ENTRY_EVENT )
  {
    uint8 startOptions;
    // Give indication to application of device startup
    zb_HandleOsalEvent( ZB_ENTRY_EVENT );

    // LED off cancels HOLD_AUTO_START blink set in the stack
    HalLedSet (HAL_LED_4, HAL_LED_MODE_OFF);

    zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
    if ( startOptions & ZCD_STARTOPT_AUTO_START )
    {
      zb_StartRequest();
    }
    else
    {
      // blink leds and wait for external input to config and restart
      HalLedBlink(HAL_LED_2, 0, 50, 500);
#if defined SENSOR
      logicalType = ZG_DEVICETYPE_ENDDEVICE;
      zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);

        // Do more configuration if necessary and then restart device with auto-start bit set

      zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
      startOptions = ZCD_STARTOPT_AUTO_START;
      zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
      zb_SystemReset();
#endif
    }

    return (events ^ ZB_ENTRY_EVENT );
  }

  // This must be the last event to be processed
  if ( events & ( ZB_USER_EVENTS ) )
  {
    // User events are passed to the application
    zb_HandleOsalEvent( events );

    // Do not return here, return 0 later
  }

  // Discard unknown events
  return 0;
}

/*********************************************************************
 * @fn      SAPI_ProcessZDOMsgs()
 *
 * @brief   Process response messages
 *
 * @param   none
 *
 * @return  none
 */
void SAPI_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg )
{
  switch ( inMsg->clusterID )
  {
    case NWK_addr_rsp:
      {
        // Send find device callback to application
        ZDO_NwkIEEEAddrResp_t *pNwkAddrRsp = ZDO_ParseAddrRsp( inMsg );
        SAPI_FindDeviceConfirm( ZB_IEEE_SEARCH, (uint8*)&pNwkAddrRsp->nwkAddr, pNwkAddrRsp->extAddr );
      }
      break;

    case Match_Desc_rsp:
      {
        zAddrType_t dstAddr;
        ZDO_ActiveEndpointRsp_t *pRsp = ZDO_ParseEPListRsp( inMsg );

        if ( sapi_bindInProgress != 0xffff )
        {
          // Create a binding table entry
          dstAddr.addrMode = Addr16Bit;
          dstAddr.addr.shortAddr = pRsp->nwkAddr;

          if ( APSME_BindRequest( sapi_epDesc.simpleDesc->EndPoint,
                     sapi_bindInProgress, &dstAddr, pRsp->epList[0] ) == ZSuccess )
          {
            osal_stop_timerEx(sapi_TaskID,  ZB_BIND_TIMER);
            osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 250 );
            sapi_bindInProgress = 0xffff;

            // Find IEEE addr
            ZDP_IEEEAddrReq( pRsp->nwkAddr, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );

            // Send bind confirm callback to application
            zb_BindConfirm( sapi_bindInProgress, ZB_SUCCESS );
          }
        }
      }
      break;
  }
}

/*********************************************************************
 * @fn      SAPI_Init
 *
 * @brief   Initialization function for the Simple API Task.
 *          This is called during initialization and should contain
 *          any application specific initialization (ie. hardware
 *          initialization/setup, table initialization, power up
 *          notification ... ).
 *
 * @param   task_id - the ID assigned by OSAL.  This ID should be
 *                    used to send messages and set timers.
 *
 * @return  none
 */
void SAPI_Init( byte task_id )
{
  uint8 startOptions;

  sapi_TaskID = task_id;

  sapi_bindInProgress = 0xffff;

  sapi_epDesc.endPoint = zb_SimpleDesc.EndPoint;
  sapi_epDesc.task_id = &sapi_TaskID;
  sapi_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&zb_SimpleDesc;
  sapi_epDesc.latencyReq = noLatencyReqs;

  // Register the endpoint/interface description with the AF
  afRegister( &sapi_epDesc );

  // Turn off match descriptor response by default
  afSetMatch(sapi_epDesc.simpleDesc->EndPoint, FALSE);

  // Register callback evetns from the ZDApp
  ZDO_RegisterForZDOMsg( sapi_TaskID, NWK_addr_rsp );
  ZDO_RegisterForZDOMsg( sapi_TaskID, Match_Desc_rsp );

#if (defined HAL_KEY) && (HAL_KEY == TRUE)
  // Register for HAL events
  RegisterForKeys( sapi_TaskID );

  if ( HalKeyRead () == HAL_KEY_SW_1)
  {
    // If SW5 is pressed and held while powerup, force auto-start and nv-restore off and reset
    startOptions = ZCD_STARTOPT_CLEAR_STATE | ZCD_STARTOPT_CLEAR_CONFIG;
    zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );
    zb_SystemReset();
  }
#endif // HAL_KEY
#ifdef LCD_SUPPORTED
   Print8(HAL_LCD_LINE_2 ,20,"Simple",1);
#endif
  // Set an event to start the application
  osal_set_event(task_id, ZB_ENTRY_EVENT);
}
/*********************************************************************
 * @fn      SAPI_SendCback
 *
 * @brief   Sends a message to the sapi task ( itself ) so that a
 *           callback can be generated later.
 *
 * @return  none
 */
void SAPI_SendCback( uint8 event, uint8 status, uint16 data )
{
  sapi_CbackEvent_t *pMsg;

  pMsg = (sapi_CbackEvent_t *)osal_msg_allocate( sizeof(sapi_CbackEvent_t) );
  if( pMsg )
  {
    pMsg->hdr.event = event;
    pMsg->hdr.status = status;
    pMsg->data = data;

    osal_msg_send( sapi_TaskID, (uint8 *)pMsg );
  }

}

/*********************************************************************
 * @fn      osalInitTasks
 *
 * @brief   This function invokes the initialization function for each task.
 *
 * @param   void
 *
 * @return  none
 */
void osalInitTasks( void )
{
  uint8 taskID = 0;

  tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
  osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

  macTaskInit( taskID++ );
  nwk_init( taskID++ );
  Hal_Init( taskID++ );
#if defined( MT_TASK )
  MT_TaskInit( taskID++ );
#endif
  APS_Init( taskID++ );
  ZDApp_Init( taskID++ );
  SAPI_Init( taskID );
}

/*********************************************************************
*********************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美女啊v在线免费观看| 狠狠色狠狠色综合系列| 日本特黄久久久高潮| 处破女av一区二区| 欧美一区二区观看视频| 国产精品久久久久影院| 日本不卡免费在线视频| 91高清视频免费看| 国产婷婷色一区二区三区在线| 一区二区三区四区精品在线视频| 国产一二精品视频| 欧美精品自拍偷拍| 一区二区三区精密机械公司| 国产精品一二二区| 精品久久国产97色综合| 亚洲一区在线播放| 色婷婷激情一区二区三区| 国产精品免费免费| 丁香六月综合激情| 久久亚洲精精品中文字幕早川悠里| 午夜精品免费在线| 在线视频亚洲一区| 亚洲精品国产精品乱码不99| 成人性生交大片免费看中文网站| 日韩精品一区二区在线观看| 午夜精品一区二区三区免费视频 | 国产调教视频一区| 日韩成人免费在线| 在线播放亚洲一区| 亚洲电影一级黄| 欧美色图激情小说| 亚洲黄色免费网站| 色婷婷久久久综合中文字幕 | 成人av在线播放网站| 久久这里只有精品6| 理论片日本一区| 日韩精品一区二区三区蜜臀 | 亚洲伊人伊色伊影伊综合网 | 成人午夜在线免费| 国产精品日韩成人| 成年人国产精品| 亚洲少妇屁股交4| 在线观看不卡一区| 午夜精品在线看| 欧美一区永久视频免费观看| 蜜桃传媒麻豆第一区在线观看| 欧美一区二区人人喊爽| 激情深爱一区二区| 国产精品色在线| 在线欧美日韩国产| 丝袜美腿亚洲一区二区图片| 日韩欧美在线123| 国产不卡视频在线播放| 国产精品久久久久毛片软件| 91电影在线观看| 日本三级韩国三级欧美三级| 精品1区2区在线观看| bt7086福利一区国产| 亚洲午夜免费福利视频| 欧美大片在线观看一区二区| 国产精品夜夜爽| 亚洲午夜一区二区三区| 精品入口麻豆88视频| 成人18视频在线播放| 日韩有码一区二区三区| 国产日韩欧美亚洲| 91精彩视频在线| 激情文学综合插| 一区二区三区中文字幕| 精品国产99国产精品| 一本大道久久精品懂色aⅴ| 日韩综合在线视频| 国产精品久久午夜| 日韩一区二区三区三四区视频在线观看| 国产乱子伦一区二区三区国色天香| ●精品国产综合乱码久久久久| 欧美理论电影在线| 成人午夜激情影院| 免费成人av在线播放| 亚洲同性同志一二三专区| 日韩一区二区三区观看| 99re热视频这里只精品| 国产一区视频在线看| 香蕉久久一区二区不卡无毒影院 | 欧美日韩久久久| 国产1区2区3区精品美女| 偷拍亚洲欧洲综合| 伊人婷婷欧美激情| 日本一区二区久久| 精品日韩99亚洲| 337p亚洲精品色噜噜| 91论坛在线播放| 懂色av中文一区二区三区 | 不卡的av网站| 精品一二三四在线| 午夜精品久久久久久| 亚洲激情图片一区| 中文字幕中文字幕中文字幕亚洲无线| 精品久久人人做人人爱| 91精品国产入口在线| 在线精品视频一区二区| 99久久99久久综合| 国产99久久精品| 国产伦精一区二区三区| 狠狠色综合播放一区二区| 免费黄网站欧美| 日本成人在线网站| 免费在线看一区| 全国精品久久少妇| 奇米色一区二区三区四区| 视频在线观看国产精品| 亚洲成人第一页| 亚洲电影欧美电影有声小说| 亚洲成人久久影院| 日韩二区在线观看| 免费看日韩a级影片| 蜜桃精品在线观看| 国内精品国产成人国产三级粉色| 极品销魂美女一区二区三区| 韩国成人在线视频| 国产成人精品免费看| 成人性色生活片免费看爆迷你毛片| 粉嫩欧美一区二区三区高清影视| 成人性视频免费网站| 91网上在线视频| 欧美日韩一区二区三区在线| 欧美日本在线观看| 日韩美女一区二区三区四区| 亚洲精品在线免费播放| 国产午夜精品久久久久久免费视| 国产精品污www在线观看| 综合av第一页| 日韩制服丝袜先锋影音| 国产一区美女在线| 99国内精品久久| 欧美日韩美女一区二区| 日韩精品一区二区三区视频| 中文字幕乱码久久午夜不卡| 亚洲美女免费在线| 日韩国产一二三区| 国产成人在线视频网址| 91在线porny国产在线看| 在线电影欧美成精品| 亚洲精品在线观| 亚洲男人都懂的| 亚洲 欧美综合在线网络| 国产一区二区在线看| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产在线精品国自产拍免费| 成人免费毛片a| 666欧美在线视频| 国产欧美一区二区精品婷婷 | 免费xxxx性欧美18vr| 春色校园综合激情亚洲| 欧美片在线播放| 国产精品久久久久久福利一牛影视| 亚洲一卡二卡三卡四卡无卡久久 | 日韩中文字幕av电影| 丁香啪啪综合成人亚洲小说 | 91影院在线观看| 日韩视频一区二区在线观看| 国产精品国产三级国产aⅴ入口| 午夜视频一区在线观看| 福利一区二区在线| 91精品国产综合久久福利软件| 国产精品久久久久久久久久久免费看| 亚洲一区二区三区四区不卡| 岛国精品一区二区| 欧美电影免费观看高清完整版在线 | 精品剧情v国产在线观看在线| 亚洲欧美另类小说| 国产91精品入口| 5月丁香婷婷综合| 亚洲美女屁股眼交| 成人涩涩免费视频| 精品国产一区二区三区久久影院| 亚洲综合视频网| 99re66热这里只有精品3直播 | 国内久久精品视频| 欧美群妇大交群中文字幕| 自拍偷拍国产亚洲| 岛国一区二区在线观看| 久久综合九色综合97婷婷| 午夜精彩视频在线观看不卡| 99久久精品国产一区| 国产欧美久久久精品影院| 精品一区二区三区免费毛片爱| 欧美日韩精品系列| 亚洲国产日韩在线一区模特| 94-欧美-setu| 国产精品福利一区| 高清不卡在线观看| 国产区在线观看成人精品| 国产一区二区剧情av在线| 欧美电影免费观看高清完整版| 青娱乐精品在线视频| 欧美一级xxx| 精品中文字幕一区二区| 欧美www视频| 国产一区二区三区不卡在线观看|