SimpleApp程序中的部分代码说明.doc_第1页
SimpleApp程序中的部分代码说明.doc_第2页
SimpleApp程序中的部分代码说明.doc_第3页
SimpleApp程序中的部分代码说明.doc_第4页
SimpleApp程序中的部分代码说明.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SimpleApp程序中的部分代码说明 在TI给的例子中,有两个大部分是用户必须编写,一个就是初始化函数,一个就是不同事件的处理函数,下面是SampleApp程序中的远程开头控制的初始化函数。void SAPI_Init( byte task_id )uint8 startOptions;/ 初始化任务ID,其中task_id由操作系统任务函数osalInitTasks( void ) 中的SAPI_Init( taskID );初始化 sapi_TaskID = task_id;/初始化绑定标志位,默认不允许绑定 sapi_bindInProgress = 0xffff;/ 初始化端点描述符,分别是:端点任务ID号,端点号,简单描述符和延时请求,其中简单描述符有用户自己定义。 sapi_epDesc.endPoint = zb_SimpleDesc.EndPoint; sapi_epDesc.task_id = &sapi_TaskID; sapi_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&zb_SimpleDesc; sapi_epDesc.latencyReq = noLatencyReqs; /向应用AF层注册端点描述符 / Register the endpoint/interface description with the AFafRegister( &sapi_epDesc ); /关闭描述符匹配响应请求 默认是关闭的 在zb_AllowBind()函数中打开 / 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_5) / 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 / Set an event to start the application 设置进入事件 ,启动应用 osal_set_event(task_id, ZB_ENTRY_EVENT);下面是事件处理函数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 ) /消息注册并被接收后(OTA),将作为ZDO_CB_MSG (OSAL Msg)发送到应用/任务 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 /数据包发送确认信息,这些状态值定义在ZcomDef.h文件中,该信息定义在AF.h中 pDataConfirm = (afDataConfirm_t *) pMsg;/发送消息确认 SAPI_SendDataConfirm( pDataConfirm-transID, pDataConfirm-hdr.status ); break; case AF_INCOMING_MSG_CMD: /AF数据输入 pMSGpkt = (afIncomingMSGPacket_t *) pMsg; /接收数据指示 SAPI_ReceiveDataIndication( pMSGpkt-srcAddr.addr.shortAddr,pMSGpkt-clusterId, pMSGpkt-cmd.DataLength, pMSGpkt-cmd.Data); break; case ZDO_STATE_CHANGE: /ZDO状态改变 / 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: /ZDO发送一个匹配描述符响应 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); /从ZigBee设备的非易失性存储器中读取配置信息 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); 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;2. App任务事件处理函数 在SAPI_Init()函数最后设置了进入事件(ZB-ENTRY_EVENT)用户自己定义的,这将触发任务的事件 处理函数SAPI_ProcessEvent(),该函数处理任务所有的事件,包含时间,消息和其他用户定义的事件。 事件 处理函数系统消息事件SYS_ENTRY_MSGZDO反馈ZDO_CB_MSGSAPI_ProcessZDOMsgs()AF 数据确认 AF_DATA_CONFIRM_CMDSAPI_SendDataConfirm()AF 信息输入 AF_INCOMING_MSG_CMDSAPI_ReceiveDataIndication()ZDO 状态改变 ZDO_STATE_CHANGESAPI_StartConfirm()ZDO 匹配描述符响应 ZDO_MATCH_DESC_RSP_SENTSAPI_AllowBindConfirm()按键 KEY_CHANGEzb_HandleKeys()发送数据确认 SAPICB_DATA_CNFSAPI_SendDataConfirm()绑定确认 SAPICB_BIND_CNFSAPI_BindConfirm()设备启动确认 SAPICB_START_CNFSAPI_StartConfirm()允许绑定时间事件 ZB_ALLOW_BIND_TIMERafSetMatch()绑定时间事件 ZB_BIND_TIMERSAPI_BindConfirm()进入事件 ZB_ENTRY_EVENTzb_StartRequest()3. ZDO 初始化 void ZDApp_Init( byte task_id ) uint8 capabilities; / Save the task ID 初始化任务ID,其中task_id由操作系统初始化任务函数osalInitTasks()决定 ZDAppTaskID = task_id; / 初始化网络地址,地址模式为16位,网络地址为无效 ZDAppNwkAddr.addrMode = Addr16Bit; ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR; (void)NLME_GetExtAddr(); / 保存64位IEEE地址。 / Check for manual Hold Auto Start 检测是否阻止自动启动 ZDAppCheckForHoldKey(); / Initialize ZDO items and setup the device - type of device to create./根据设备类型初始化网络服务 ZDO_Init(); / Register the endpoint description with the AF / This task doesnt have a Simple description, but we still need / to register the endpoint. 注册端点0 afRegister( (endPointDesc_t *)&ZDApp_epDesc );#if defined( ZDO_USERDESC_RESPONSE ) ZDApp_InitUserDesc();#endif / ZDO_USERDESC_RESPONSE / set broadcast address mask to support broadcast filtering NLME_GetRequest(nwkCapabilityInfo, 0, &capabilities); NLME_SetBroadcastFilter( capabilities ); / Start the device? 启动设备 if ( devState != DEV_HOLD ) ZDOInitDevice( 0 ); else / Blink LED to indicate HOLD_START HalLedBlink ( HAL_LED_4, 0, 50, 500 ); ZDApp_RegisterCBs(); /注册响应事件 /* ZDO_Init() */ 任务事件处理函数ZDApp_event_loop()包含消息、网络初始化、网络启动、路由启动等事件。 事件 处理函数系统消息事件SYS_ENTRY_MSGAF 信息输入 AF_INCOMING_MSG_CMDZDP_IncomingData()ZDO 反馈 AF_DATA_CONFIRM_CMDZDApp_ProcessMsgCBs()AF 数据确认 AF_DATA_CONFIRM_CMD无网络发现确认 ZDO_NWK_DISC_CNFNLME_JoinRequest()或 NLME_ReJoinRequest()网络加入指示 ZDO_NWK_JOIN_INDZDApp_ProcessNetworkJoin()网络加入请求 ZDO_NWK_JOIN_REQZDApp_NetworkInit( )网络初始化 ZDO_NETWORK_INITZDO_StartDevice()网络启动 ZDO_NETWORK_STARTZDApp_NetworkStartEvt()路由启动 ZDO_ROUTER_STARTosal_pwrmgr_device()状态改变 ZDO_STATE_CHANGE_EVTZDO_UpdateNwkStatus()网络NV 更新 ZDO_NWK_UPDATE_NVZDApp_SaveNetworkStateEvt()设备重新启动 ZDO_DEVICE_RESETSystemResetSoft() 在f8wCoord.cfg文件中,我们可以看到,有下面的编译选项,协调器的设置,应该是表示#define ZDO_COORDINATOR/* Coordinator Settings */-DZDO_COORDINATOR / Coordinator Functions那么在ZGlobals.h 文件中可以看到下面的定义/ Values for ZCD_NV_LOGICAL_TYPE (zgDeviceLogicalType)#define ZG_DEVICETYPE_COORDINATOR 0x00#define ZG_DEVICETYPE_R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论