OSAL处理来自AF的数据包.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OSAL处理来自AF的数据包

以下为系统处理来自AF层数据包的大致流程, afIncomingData() ——afBuildMSGIncoming() ——osal_msg_send() —— osal_set_event()—— 根据task_id调用事件处理函数(如SampleApp_ProcessEvent()) ——判断具体事件类型调用相应回调函数(如SampleApp_MessageMSGCB()) ——实现具体现象 ? ??? afIncomingData()函数用来从APS层传递一个ASDU到AF层;中间调用了afBuildMSGIncoming()函数,这个函数是用来为APS层建立一个特定格式的消息包,然后再调用osal_msg_send()把消息(包含了ASDU)传往AF层. AF层规定接收的数据包的类型如下: typedef struct { osal_event_hdr_t hdr; uint16 groupId; uint16 clusterId; afAddrType_t srcAddr; byte endPoint; byte wasBroadcast; byte LinkQuality; byte SecurityUse; uint32 timestamp; afMSGCommandFormat_t cmd; } afIncomingMSGPacket_t; ? 首先看一下afIncomingData()函数 /********************************************************************* * @fn afIncomingData * * @brief Transfer a data PDU (ASDU) from the APS sub-layer to the AF. * * @param aff - pointer to APS frame format * @param SrcAddress - Source address * @param LinkQuality - incoming messages link quality * @param SecurityUse - Security enable/disable * * @return none */ //传输数据:APS----AF void afIncomingData( aps_FrameFormat_t *aff, zAddrType_t *SrcAddress, uint8 LinkQuality, byte SecurityUse, uint32 timestamp ) { endPointDesc_t *epDesc = NULL; uint16 epProfileID = 0xFFFF; // Invalid Profile ID epList_t *pList; uint8 grpEp; //----------- /*如果这个帧传递模式是组传递*/ if ( ((aff-FrmCtrl APS_DELIVERYMODE_MASK) == APS_FC_DM_GROUP) ) { // Find the first endpoint for this group grpEp = aps_FindGroupForEndpoint( aff-GroupID, APS_GROUPS_FIND_FIRST ); if ( grpEp == APS_GROUPS_EP_NOT_FOUND ) return; // No endpoint found,没找到终端 ? epDesc = afFindEndPointDesc( grpEp );?? //找到终端,接着找终端描述符 if ( epDesc == NULL ) return; // Endpoint descriptor not found,没找到终端描述符 ? pList = afFindEndPointDescList( epDesc-endPoint );? //找到终端描述符 } //pList指向终端列表中的元素 //----------- /*广播到各端点*/ else if ( aff-DstEndPoint == AF_BROADCAST_ENDPOINT ) { // Set the

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档