ZigBee学习四 无线+UART通信
ZigBee学习四 无线+UART通信
1) 协调器编程
修改coordinator.c文件
byte GenericApp_TransID; // This is the unique message ID (counter)
afAddrType_t GenericApp_DstAddr;
//unsigned char uartbuf[128];
/*********************************************************************
* LOCAL FUNCTIONS
*/
static void GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg );
static void GenericApp_HandleKeys( byte shift, byte keys );
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );
static void GenericApp_SendTheMessage( void );
//static void rxCB(uint8 port,uint8 event);
void GenericApp_Init( uint8 task_id )
{
  halUARTCfg_t uartConfig;
  GenericApp_TaskID = task_id;
  GenericApp_NwkState = DEV_INIT;
  GenericApp_TransID = 0;
... ...
  GenericApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
  GenericApp_epDesc.latencyReq = noLatencyReqs;
afRegister( &GenericApp_epDesc );
  uartConfig.configured   = TRUE;
  uartConfig.baudRate    = HAL_UART_BR_115200;
  uartConfig.flowControl    = FALSE;
  uartConfig.callBackFunc  = NULL;  //配置串口调用函数
  //对串口进行初始化
  HalUARTOpen(0,&uartConfig);  //该函数将halUARTCfg_t类型的结构体变量作为参数,而halUARTCfg_t结构体变量包含了串口初始化相关的参数。
}
//该函数是一个空函数。因为本实验并没有进行事件处理,所有不需要任何代码
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{
... ...
  switch ( MSGpkt->hdr.event )
        {
            case ZDO_CB_MSG:
                break;
    case KEY_CHANGE:
                break;
case AF_DATA_CONFIRM_CMD:
break;
case AF_INCOMING_MSG_CMD:
      GenericApp_MessageMSGCB( MSGpkt );
                break;
    case ZDO_STATE_CHANGE:
                break;
    default:
                break;
        }
... ...
}
/*
static void rxCB(uint8 port,uint8 event)
{
  HalUARTRead(0,uartbuf,16);  //读取数据并存放到uartbuf数组中
  if(osal_memcmp(uartbuf,"www.wlwmaker.com",16)) //使用osal_memcmp()函数判断接收到的数据是否是字符串"www.wlwmaker.com",如果是,执行{}
  {
    HalUARTWrite(0,uartbuf,16); //调用HalUARTWrite()函数将接收到的字符输出到串口
  }
}
*/
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
       unsigned char buffer[10];
      switch ( pkt->clusterId )
      {
          case GENERICAPP_CLUSTERID:
              osal_memcpy(buffer,pkt->cmd.Data,10);
              HalUARTWrite(0,buffer,10);
              break;
      }
}
2)终端节点编程
修改enddevice.c文件
#include "hal_key.h"
#include "hal_uart.h"
#define SEND_DATA_EVENT 0x01
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{
... ...
  if ( events & SYS_EVENT_MSG )
    {
        MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
        while ( MSGpkt )
{
      switch ( MSGpkt->hdr.event )
            {
                case ZDO_CB_MSG:
                    GenericApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
                    break;
        case KEY_CHANGE:
                    GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
                    break;
case AF_DATA_CONFIRM_CMD:
break;
        case AF_INCOMING_MSG_CMD:
                    GenericApp_MessageMSGCB( MSGpkt );
                    break;
        case ZDO_STATE_CHANGE:
                    GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
                    if ( (GenericApp_NwkState == DEV_ZB_COORD)
                        || (GenericApp_NwkState == DEV_ROUTER)
                        || (GenericApp_NwkState == DEV_END_DEVICE) )
                    {
                        osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);
                    }
                    break;
        default:
                    break;
            }
osal_msg_deallocate( (uint8 *)MSGpkt );
      MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
    }
    return (events ^ SYS_EVENT_MSG);
  }
  if(events & SEND_DATA_EVENT)
  {
    GenericApp_SendTheMessage();
    osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,1000);
    return (events ^ SEND_DATA_EVENT);
  }
return 0;
}
static void GenericApp_SendTheMessage( void )
{
    char theMessageData[] = "EndDevice";
    afAddrType_t my_DstAddr;
    my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;//单播发送
    my_DstAddr.endPoint = GENERICAPP_ENDPOINT; //目的端口号
    my_DstAddr.addr.shortAddr = 0x0000;       //协调器网络地址
  if ( AF_DataRequest( &my_DstAddr, &GenericApp_epDesc,
                           GENERICAPP_CLUSTERID,
                           (byte)osal_strlen( theMessageData ) + 1,
                           (byte *)&theMessageData,
                           &GenericApp_TransID,
                           AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
    {
        // Successfully requested to be sent.
        HalLedBlink(HAL_LED_1,0,50,500);
    }else
    {
        // Error occurred in request to send.
    }
}
ZigBee学习四 无线+UART通信的更多相关文章
- ZigBee学习五 无线温度检测
		ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ... 
- ZigBee学习三 UART通信
		ZigBee学习三 UART通信 在使用串口时,只需掌握ZigBee协议栈提供的串口操作相关的三个函数即可. uint8 HalUARTOpen(uint8 port,halUARTCfg_t *co ... 
- [老老实实学WCF] 第四篇 初探通信--ChannelFactory
		老老实实学WCF 第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了. ... 
- (转)[老老实实学WCF] 第四篇 初探通信--ChannelFactory
		第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了.我们不禁感叹WCF ... 
- WCF入门四[WCF的通信模式]
		一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ... 
- ZigBee学习一 任务处理函数_ProcessEvent
		ZigBee学习一 任务处理函数_ProcessEvent //任务处理函数UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ){ ... 
- 2017年8月9日学习内容存放  #socket通信介绍
		2017年8月9日学习内容存放 #socket通信介绍 ''' OSI七层 应用 表示 会话 传输 网络 ip 数据链路 mac 物理层 网线 http smtp dns ftp ssh snmp i ... 
- TweenMax动画库学习(四)
		目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ... 
- zigbee学习:示例程序SampleApp中按键工作流程
		zigbee学习:示例程序SampleApp中按键工作流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:IAR8. ... 
随机推荐
- tensorflow构建CNN模型时的常用接口函数
			(1)tf.nn.max_pool()函数 解释: tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=No ... 
- 解决ssh登录慢,等待时间长的问题
			有时候在ssh远程登录到其他主机上时发现登录时间太长,经过亲自测试,发现主要有两个问题会导致ssh登录慢: 1.使用了dns反查,这样的话当ssh某个IP时,系统会试图通过DNS反查相对应的域名,如果 ... 
- 【luogu P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀布】 题解
			题目链接:https://www.luogu.org/problemnew/show/P3609 ### 看着标签什么记搜什么暴力点进来,读完题第一直觉DP? 还真是个\(DP\). 题目所描述的状态 ... 
- 函数定义和调用  -------JavaScript
			本文摘要:http://www.liaoxuefeng.com/ 定义函数 在JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { ret ... 
- Java基础面试题:String 和StringBuffer的区别
			package com.swift; import java.util.Date; public class Getclass_Test extends Date { public static vo ... 
- MySQL DBA从小白到大神实战
			MySQL5.6 For CentOS 6.6 源码编译安装 o1.关闭防火墙o2.配置sysctl.confo3.检查操作系统上是否安装了MySQLo4.下载mysql源码包o5.添加用户和组o6. ... 
- 20180909 解析JS Cookie的设置,获取和检索
			引用: JavaScript Cookie - by runoob.com Cookie是储存在电脑文本文件中的数据,用于保存访问者的信息,并可以在下次打开页面时引用. 页面在设置/引用访问者信息时, ... 
- C++ 容器与继承
			如果容器类型定义为基类类型,那么虽然可以把派生类装进容器中,但是不能通过容器访问派生类自己的public成员,派生类将会倍切掉,只保留派生类的基类部分: 如果把容器定义为派生类类型,那么不能把基类类型 ... 
- LAMP 一键部署
			LAMP 一键部署 部署http #!/bin/bash ### global variables export lamp_repo=http://192.168.1.5/lamp/ export l ... 
- tcl之string操作-match/map/大小写转换
