协调器建立网络,路由器和终端节点加入网络,然后周期性地采集温度和电压发给协调器,协调器通过串口发送给 PC 机,系统设计原理图如图所示。请根据要求写相应的程序代码。 1 )通信双方采用的数据包格式如下,请写出相应的结构体 RFTX 的定义。 头 设备类型 节点网络地址 父节点网络地址 温度 电压 尾 head type myNWK pNWK temp vdd tail 2 3 4 4 4 4 1 & & END/ROU 0x0001/0x796F 0x0000 W23C V3.3 * typedef union h { ...... }RFTX; 2 )路由器或终端节点通过调用 SendInfo() 函数向协调器发送信息,首先调用 readTemp() 函数读取温度传感器数据转换成字符串后填充到 rftx.BUF.temp 数组中,其次再调用 getVddvalue() 函数读取电压数据转换成字符串后填充到 rftx.BUF.vdd 数组中;然后对网络设备状态进行判断将数据包的设备类型字段 rftx.BUF.type 填充为 “ ROU ” 或 “END” ;再使用 NLME_GetShortAddr() 函数获得本节点网络地址,使用 NLME_GetCoordShortAddr(buf) 函数获得父节点网络地址,并调用 To_String() 函数将网络地址转换为字符串的形式存储在相应的 rftx.BUF.myNWK 和 pNWK 字段中。最后调用 AF_DataRequest() 数据发送函数向协调器发送设备信息。请写出相应的程序段。 void SendInfo(void) { RFTX rftx; // 定义 rftx 变量 uint16 nwk; // 用于存储短地址 uint16 tvalue; // 定义变量用于存储温度值 uint16 vvalue; // 定义变量用于存储温度值 ...... AF_DataRequest(&my_DstAddr, &GenericApp_epDesc, GENERICAPP_CLUSTERID, sizeof(rftx), (uint8 *)&rftx, &GenericApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS); }