实验内容:
Coordinator 建立网络, 接收数据并闪烁 LED2 和发送数据
EndDevice 加入网络, 发送数据和接收数据并闪烁 LED1
程序流程:
①协调器建立网络(Z-Stack 协议栈帮助建立起网络)
②终端节点加入网络后触发 ZDO_STATE_CHANGE 事件, 判断加入的设备若是终端节点
DEV_END_DEVICE 则调用数据发送函数 GenericApp_SendTheMessage() 发送数据”D2”给协调
器
③协调器接收来自终端节点的数据”D2”并触发 AF_INCOMING_MSG_CMD 事件, 调用消
息处理函数 GenericApp_MessageMSGCB( MSGpkt )
④在协调器 GenericApp_MessageMSGCB( MSGpkt ) 函数中判断接收到的数据是否为”D2”,
是则调用 HalLedBlink(HAL_LED_2,0,50,500) 函 数 执 行 LED2 闪 烁 并 调 用 数 据 发 送 函 数
GenericApp_SendTheMessage() 用 AF_DataRequest() 函数发送数据给终端节点
⑤终端节点接收来自协调器的数据”LED”并触发 AF_INCOMING_MSG_CMD 事件, 调用消
息处理函数 GenericApp_MessageMSGCB( MSGpkt )
⑥在终端节点 GenericApp_MessageMSGCB( MSGpkt ) 函数中判断接收到的数据是否
为”LED”,是则调用 HalLedBlink(HAL_LED_1,0,50,500) 函数执行 LED1 闪烁并调用数据发送函数
GenericApp_SendTheMessage() 用 AF_DataRequest() 函数发送数据”D2”给协调器。
如此往复,Coordinator和EndDevice互发互收数据并执行LED闪烁。
代码如下:
Coordinator.h
#ifndef GENERICAPP_H
#define GENERICAPP_H
#include "ZComDef.h"
//这些常量仅为示例,应根据设备的需要进行更改。
#define GENERICAPP_ENDPOINT 10
#define GENERICAPP_PROFID 0x0F04
#define GENERICAPP_DEVICEID 0x0001
#define GENERICAPP_DEVICE_VERSION 0
#define GENERICAPP_FLAGS 0
#define GENERICAPP_MAX_CLUSTERS 1
#define GENERICAPP_CLUSTERID 1
/*
* Task Initialization for the Generic Application
通用应用程序的任务初始化
*/
extern void GenericApp_Init( byte task_id );
/*
* Task Event Processor for the Generic Application
通用应用程序的任务事件处理器
*/
extern UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events );
#endif /* GENERICAPP_H */
Coordinator.c
#include "OSAL.h"
#include "AF.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "ZDProfile.h"
#include<string.h>
#include "Coordinator.h"
#include "DebugTrace.h"
#if !defined( WIN32 )
#include "OnBoard.h"
#endif
#include "hal_lcd.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_uart.h"
const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] =
{
GENERICAPP_CLUSTERID
};
const SimpleDescriptionFormat_t GenericApp_SimpleDesc =
{
GENERICAPP_ENDPOINT,
GENERICAPP_PROFID,
GENERICAPP_DEVICEID,
GENERICAPP_DEVICE_VERSION,
GENERICAPP_FLAGS,
GENERICAPP_MAX_CLUSTERS,
(cId_t *)GenericApp_ClusterList,
0,
(cId_t *)NULL,
}