我是靠谱客的博主 丰富御姐,最近开发中收集的这篇文章主要介绍Zigbee有线网络转zigbee网关API1.几个重要的宏2、如何使用工程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.几个重要的宏

1.1编译选项对话框的位置

1.在项目名称是右击选择options


2.找到C/C++ Complier选项卡,通过单击右侧红方框的右箭头找到Preprocessor,在Definedsymbols中就是需要增加的宏,每个宏一行以回车代表当前宏结束,有关ZStack的宏的说明请参考

ZStack-CC2530-2.4.0-1.4.0DocumentsZ-Stack CompileOptions.pdf



1.2几个重要的宏

APP_UIP:用来指示是否增加UIP功能,就是网络功能,协调器端需要添加,终端侧不用添加。

NV_INIT

NV_RESTORE:断电重新上电保持原来的状态,保护现场,通过这个宏,终端每次启动就不需要重新搜索网络加入固定的网络

POWER_SAVING:省电模式,电池模式,能减小电流,TI曾经举过一个例子,3000MAH的电池能用3年以上,参见Measuring Power Consumption of CC2530 With Z-Stack.pdf,当然想要达到这个效果仅仅配置这个是不够的,还有很多。当前程序的配置默认空闲电流关闭所有LED拆掉usb转串口芯片的时候小于1ma


2、如何使用工程

Zstack采用了类似操作系统的概念,有时间片轮训,任务优先级,任务建立等等,对于使用者来讲,不必关心内部怎么运转的,只需要理解几个重要函数即可。注意所有的函数都在App/ZigbeeGateWay.c里面,一般不需要更改其它的文件,用户要更改的所有文件几乎都在App文件夹下面。



2.1初始化任务函数ZigbeeGateWay_Init( uint8 task_id )

您可以把你自己的初始化代码放到这里面即可,为了不影响其他的运行,建议把用户初始化代码放到该函数的后面




2.2消息处理函数 uint16ZigbeeGateWay_ProcessEvent(uint8 task_id, uint16 events )

消息处理函数:收到系统消息并拆包调用相应的函数处理消息

注意Switch里面的case语句是查看的是系统消息类型,ZStack认为按键消息,空中传来的RF消息等是系统消息,Switch外面的if语句是非系统消息。得到消息后拆包消息并交给相应的函数处理。



对于使用者来讲,如何发出一个消息呢?

系统消息,先定义一个消息结构体,结构体类似

typedef struct
{
 osal_event_hdr_t  hdr;   //事件头指针
 uint8             length;  //标志位
 uint8*            msg;
} uIP_Msg_t;

其中结构体uIP_Msg->hdr.event 的值对应的就是case里面的条件语句判断值

执行

osal_msg_send(ZigbeeGateWay_TaskID, (uint8 *)uIP_Msg);



就可以发出一个消息,当然这个消息不是马上执行的,而是时间片轮询到这个消息是时候才执行。

 

非系统的消息可以用类似这种

osal_start_reload_timer(ZigbeeGateWay_TaskID, UIP_PROCESS_EVT, 10);

发出一个消息,这个消息被if判断语句执行,其中UIP_PROCESS_EVT对应的值就是if语句的条件判断值。这句话的意思是每隔10ms发出UIP_PROCESS_EVT消息。如果用户想添加自定义的消息,可以先定义一个唯一的event。



2.3收到RF数据void ZigbeeGateWay_MessageMSGCB( afIncomingMSGPacket_t *pkt )

空中传来了一个RF消息收到后就会执行这个函数,传过来的结构体指针里面有很多内容:



typedef struct
{
 osal_event_hdr_t hdr;     /* OSALMessage header */
 uint16 groupId;           /*Message's group ID - 0 if not set */
 uint16 clusterId;         /*Message's cluster ID */
 afAddrType_t srcAddr;     /*Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
                               it's an InterPANmessage */
 uint16 macDestAddr;       /* MACheader destination short address */
 uint8 endPoint;           /*destination endpoint */
 uint8 wasBroadcast;       /* TRUEif network destination was a broadcast address */
 uint8 LinkQuality;        /* Thelink quality of the received data frame */
 uint8 correlation;        /* Theraw correlation value of the received data frame */
 int8  rssi;               /* The received RF power inunits dBm */
 uint8 SecurityUse;        /*deprecated */
 uint32 timestamp;         /*receipt timestamp from MAC */
 afMSGCommandFormat_t cmd; /* Application Data */
} afIncomingMSGPacket_t;

2.4发送一个RF数据AF_DataRequest(……)



AF_DataRequest(&ZigbeeGateWay_Periodic_DstAddr, &ZigbeeGateWay_epDesc,
                      ZIGBEEGATEWAY_PERIODIC_CLUSTERID,
                       22,
                       ledstate,         
                      &ZigbeeGateWay_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS )

其中CLUSTERID代表簇,简单点就是一个ID号收发都使用的。

在收到的函数里面,有rssi代表了信号强度

LinkQuality代表链接质量

 


2.5网络收到数据void APP_uIP_Message_Process(u8_t* msg,u8_t length)

收到一个以太网包



2.6向网络发送数据uip_tcp_send(pkt->cmd.Data,pkt->cmd.DataLength);

向以太网发送一个包



2.7按键处理程序voidZigbeeGateWay_HandleKeys( uint8 shift, uint8 keys )

按键按下后将会执行这个函数,KEY1对应的按键是

HAL_KEY_SW_6



2.8打开关闭LED指示灯HalLedSet(HAL_LED_2,HAL_LED_MODE_TOGGLE);

关闭/打开LED

1.        HalUARTWrite(HAL_UART_PORT,"RFreceive:",11);

向串口发送数据

2.        void HalLedBlink (uint8 leds,uint8 numBlinks, uint8 percent, uint16 period)

LED闪烁

numBlinks  - number of blinks

percent    - the percentage in each period where theled

            will be on

    period    - length of each cycle in milliseconds


更多API 参见 http://web.nenewind.com

最后

以上就是丰富御姐为你收集整理的Zigbee有线网络转zigbee网关API1.几个重要的宏2、如何使用工程的全部内容,希望文章能够帮你解决Zigbee有线网络转zigbee网关API1.几个重要的宏2、如何使用工程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部