在ZigBee中,协调器和终端节点进行无线数据收发,对于刚初学的人来说可能不知道怎么下手。分不清哪个是Coordinator哪个EndDevice的内容。
那就先从GenericApp的例程开始,将Coordinator和EndDevice的内容拆分学习。
这里先讲个Coordinator只发不收,EndDevice只收不发的简单例子。
实验内容:
协调器只发不收, 终端节点只收不发的一个简单例子。
程序流程:
①定义事件(shijian)
②协调器建立网络
③读取系统事件, 若无, 则执行 default 内容; 若发生 shijian 事件则执行信息发送函数并清
除 shijian 事件标志
④终端节点加入网络后, 执行 LED2 闪烁
⑤终端节点收到协调器发来的数据, 执行被调用的信息处理函数使 LED1 闪烁
话不多说,直接上代码,注释也在代码里。
代码如下:
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
#define shijian 0x0001 //自定义事件
/*
* 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 //簇ID
};
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