欢迎来到天天文库
浏览记录
ID:46613085
大小:80.00 KB
页数:4页
时间:2019-11-26
《TI的Zstack协议栈SensorDemo例程温度收发说明》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、T[的Zstack协议栈SensorDemo例程温度收发学习Zigbee也有快TI的SensorDemo例程中,打开workspace卜有四种选择,CollectorEB,SensorEBCollectorEB-PRO,SensorEB-PRO,其中PRO代表专业版。在这里我们主要写一下TI提供的这个例程关于温度数据传送与接收的问题。首先在workspace卜选择SensorEB(其实这里CollectorEB与SensorEB是—•样的打开目录APP就会发现)打开APP后有两个重要的.C文件DemoCo
2、llector.c和DemoSensor.c,我们发现DemoCollector.c是白色的表明该文件在SensorEB模式下不会被编译。点开DemoSensor.c找到staticvoidsendReport(void)函数T1定义的温度数据通过无线传输给每个设备的数据格式是这样的1byte1Byte2BytesTemperatureVoltageParentshortaddress温度值和电流值各占一个字节,设备段地址占两个字节,接下来看函数是不是很容易理解了,呵呵。staticvoidsendRep
3、ort(void){uint8pData[SENSOR_REPORT_LENGTH];//存放数据的数组staticuintSreportNr=0;uint8txOptions;//读温度值pData[SENSOR_TEMP_OFFSET]=readTempO;//读电压值pData[SENSOR_VOLTAGE_OFFSET]=readVoltage();〃写入设备段地址pData[SENSOR_PARENT_OFFSET]=HI_UINT16(parentShortAddr);pData[SENSOR
4、_PARENT_OFFSET+1]=LO_UINT16(parentShortAddr);//SetACKrequestoneachACK_INTERVALreport//Ifareportfailed,setACKrequestonnextreportif(++reportNr5、//DestinationaddressOxFFFE:Destinationaddressissenttopreviously//establishedbindingforthecommandld.〃发送数据请求,把温度信息发送给地址为0XFFFE的设备zb_SendDataRequest(OxFFFE,SENSOR_REPORT_CMD_ID,SENSOR_REPORT_LENGTH,pData,0,txOptions,0);}这样节点测得的温度信息就可以通过这种方式发送给I•办调器了。那么协调器是怎么6、接收这些数据的呢?选中CollectorEB,打开APP目录下的sapi.c文件找到UINT16SAPI_ProcessEvent(bytetask_id,UINT16events)函数,这个函数厉害了,它是來处理后务的所有事件,这些事件包括定时器,消息以及其他的一些用户定义的事件,在这个函数里我们看到caseAF_INCOMING_MSG_CMD:pMSGpkt=(afIncomingMSGPacket_t*)pMsg;SAPI_ReceiveDataIndication(pMSGpkt->srcAdd7、r.addr.shortAddr,pMSGpkt->clusterId,pMSGpkt->cmd.DataLength,pMSGpkt->cmd.Data);break;也就是当消息到來时,会调用SAPI_ReceiveDataIndication()函数进一步追踪该函数voidSAPI_ReceiveDataIndication(uintl6source,uintl6command,uintl6len,uint8*pData){#ifdefined(MT_SAPI_CB_FUNC)/*Firstchec8、kifMThassubscribedforthiscallback.Ifso,passitasaeventtoMonitorTestandreturncontroltocallingfunctionafterthat*/if(SAPICB_CHECK(SPI_CB_SAPI_RCV_DATA_IND)){zb_MTCallbackReceiveDataIndication(source,command,len,pData);}
5、//DestinationaddressOxFFFE:Destinationaddressissenttopreviously//establishedbindingforthecommandld.〃发送数据请求,把温度信息发送给地址为0XFFFE的设备zb_SendDataRequest(OxFFFE,SENSOR_REPORT_CMD_ID,SENSOR_REPORT_LENGTH,pData,0,txOptions,0);}这样节点测得的温度信息就可以通过这种方式发送给I•办调器了。那么协调器是怎么
6、接收这些数据的呢?选中CollectorEB,打开APP目录下的sapi.c文件找到UINT16SAPI_ProcessEvent(bytetask_id,UINT16events)函数,这个函数厉害了,它是來处理后务的所有事件,这些事件包括定时器,消息以及其他的一些用户定义的事件,在这个函数里我们看到caseAF_INCOMING_MSG_CMD:pMSGpkt=(afIncomingMSGPacket_t*)pMsg;SAPI_ReceiveDataIndication(pMSGpkt->srcAdd
7、r.addr.shortAddr,pMSGpkt->clusterId,pMSGpkt->cmd.DataLength,pMSGpkt->cmd.Data);break;也就是当消息到來时,会调用SAPI_ReceiveDataIndication()函数进一步追踪该函数voidSAPI_ReceiveDataIndication(uintl6source,uintl6command,uintl6len,uint8*pData){#ifdefined(MT_SAPI_CB_FUNC)/*Firstchec
8、kifMThassubscribedforthiscallback.Ifso,passitasaeventtoMonitorTestandreturncontroltocallingfunctionafterthat*/if(SAPICB_CHECK(SPI_CB_SAPI_RCV_DATA_IND)){zb_MTCallbackReceiveDataIndication(source,command,len,pData);}
此文档下载收益归作者所有