OSAL处理来自AF的数据包流程.docx

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

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档