概述
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
最后
以上就是丰富御姐为你收集整理的Zigbee有线网络转zigbee网关API1.几个重要的宏2、如何使用工程的全部内容,希望文章能够帮你解决Zigbee有线网络转zigbee网关API1.几个重要的宏2、如何使用工程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复