文章目录
首先打开Profile下的AF.h文件(Application Framework,应用程序框架),我们可以看到枚举类型afAddrMode_t里面的枚举,分别有几种地址模式选择。我们主要关注afAddr16Bit、afAddrGroup和afAddrBroadcast这三种地址模式。
typedef enum
{
afAddrNotPresent = AddrNotPresent,//不出现
afAddr16Bit = Addr16Bit,//16位地址 点播方式
afAddr64Bit = Addr64Bit,//64位地址 点播方式
afAddrGroup = AddrGroup,//组播方式
afAddrBroadcast = AddrBroadcast//广播方式
} afAddrMode_t;
一、点播
(一)、创建设备地址结构体
首先打开SampleApp项目,打开SampleApp.c文件,模仿示例的初始化过程,创建关于点播的地址结构体变量afAddrType_t SampleAPP_Point_To_Point_DstAddr。
我们查看结构体afAddrType_t的定义处可以发现它的内部结构,除了包含地址类型还包括地址、端点属性和PANID等。
typedef struct
{
union
{
uint16 shortAddr;
ZLongAddr_t extAddr;
} addr;
afAddrMode_t addrMode;//地址类型,这里选择使用哪种方式通信
uint8 endPoint;
uint16 panId; // used for the INTER_PAN feature
} afAddrType_t;
(二)、初始化设备地址结构体
接着就是初始化这个结构体了,顺藤摸瓜我们发现示例是在SampleApp_Init()函数内部进行初始化的,所以我们可以在其后紧跟着点播地址结构体的初始化。
//Point To Point
SampleAPP_Point_To_Point_DstAddr.addrMode = (afAddrMode_t)afAddr16Bit;//点播
SampleAPP_Point_To_Point_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
SampleAPP_Point_To_Point_DstAddr.addr.shortAddr = 0x0000;//发送给协调器
(三)、创建点播处理函数
在上一篇文章说到过SampleApp_ProcessEvent()函数内会有一个间隔一段时间(interval time)执行一次的事件。
// Send a message out - This event is generated by a timer
// (setup in SampleApp_Init()).
if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )//间隔发送信息事件
{
// Send the periodic message
//SampleApp_SendPeriodicMessage();//广播
SampleApp_SendPointToPointMessage();//点播
// Setup to send message again in normal period (+ a little jitter)
osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
(