从零开始学习Zstack之8

从零开始学习ZStack之8

近段时间比较忙,几乎都快荒废了Z-Stack的学习了,把以前学的都快忘记了,这就是非专业技术的痛苦啊!!学习刚好有点眉目,突然意外中断停下,当再一次学习的时候突然发现:以前学的都忘了8成了!郁闷啊!今天真不知道从什么地方下手学习了,所以就针对最近客户比较关心的问题做点介绍,这样有针对性、有目的性的学习可能最适合现在的我了,不然从头把以前那些所谓的笔记看一遍,可能今天晚上又没了,指不定明晚以及后晚以及后后晚„都没时间,不然老是看以前的笔记没有进展就麻烦了!呵呵!

今天只解决1个问题:TI提供的例子程序的表演及功能介绍。

因为最近问这些的客户比较多,特别又是刚入手的朋友,对Z-Stack非常迷糊的时期,如果能够跑通几个例子、看几个演示,那么可以大大提高学习兴趣;另外如果知道某个例子的大致功能及实现,那么在去看具体实现过程目的性就非常明确。

首先来看看TI究竟有哪些例子:

可以看出其例子是非常丰富的。

GenericApp,Location,SampleApp,SimpleApp,HomeAutomation,SerialApp,Transmit, ZLOAD。这样看来还是不少的。其中SampleApp例子已经在前面的学习中有所涉及,可以说前面的所有学习都是基于这个例子的,所以这里就不测试它了。Location是定位的测试例子,这里我的硬件是不够的,所以也不做测试。其他我都做点测试,能成功的就成功,不能成功的就失败,这个我也没办法,呵呵!!!!!!!!

1、GenericApp

工程打开等我就不多说了,自己去找,如果连这些我都还说,那么我以前的东西是白学了。硬件连接中„„„„„„„„„„„„„„„„„..

当我用两个节点分别烧写入DB的协调器和路由器,从我的经验看来,他们分别能建立网络和加入网络,但是 从表象上几乎看不见数传现象,尽管我按了每个节点的按键,也仅仅是本节点的LED在改变。唯独有点数传感觉的是:按键右键对方有反应就是了,至于具体什么反映我觉得没必要说明白,大家试试就知道了。

所以还决定看看程序来判断这个例子的功能。

大约浏览了下,这个例子似乎还与设备的绑定有关系,因为在按建处理程序中发现: if ( keys & HAL_KEY_SW_2 )

{

HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );

// Initiate an End Device Bind Request for the mandatory endpoint

dstAddr.addrMode = Addr16Bit;

dstAddr.addr.shortAddr = 0x0000; // Coordinator

ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),

GenericApp_epDesc.endPoint,

GENERICAPP_PROFID,

GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, FALSE );

}

很明显这里按键2(右键)是发送绑定请求的命令。

if ( keys & HAL_KEY_SW_4 )

{

HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );

// Initiate a Match Description Request (Service Discovery)

dstAddr.addrMode = AddrBroadcast;

dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;

ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,

GENERICAPP_PROFID,

GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, FALSE );

}

显然按键4(左)是初始化一个匹配描述符请求,也就是发现服务,或者叫自动寻求匹配设备。 这就不怪我按键有反映了!

而且在发送数据和接收数据处理函数发现:

void GenericApp_SendTheMessage( void )

{

char theMessageData[] = "Hello World";

if ( AF_DataRequest( &GenericApp_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.

}

else

{

// Error occurred in request to send.

}

}

居然发送的是一个字符串“Hello World”。

void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

{

switch ( pkt->clusterId )

{

case GENERICAPP_CLUSTERID:

// "the" message

#if defined( LCD_SUPPORTED )

HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );

#elif defined( WIN32 )

WPRINTSTR( pkt->cmd.Data );

#endif

break;

}

}

接收数据处理函数里居然要通过液晶显示,本人这里的液晶暂时没有移植过来,因为暂时还不具备那个实力,怪不得看不到发送数据的状况!

这里本人就自作聪明的把以前SampleApp例子里面的一句话加过来了:

void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

{

switch ( pkt->clusterId )

{

case GENERICAPP_CLUSTERID:

// "the" message

HalLedBlink( HAL_LED_4, 4, 50, (500) );

#if defined( LCD_SUPPORTED )

HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );

#elif defined( WIN32 )

WPRINTSTR( pkt->cmd.Data );

#endif

break;

}

}

麽想到啊,这么一加居然就有反应了,o(∩_∩)o„!我不愧是天才的接班人啊!

其实这里很简单的了,就是接收到数据后闪烁4下灯,间隔0.5S。因为从:

if ( events & GENERICAPP_SEND_MSG_EVT )

{

// Send "the" message

GenericApp_SendTheMessage();

// Setup to send message again

osal_start_timerEx( GenericApp_TaskID,

GENERICAPP_SEND_MSG_EVT,

GENERICAPP_SEND_MSG_TIMEOUT );

// return unprocessed events

return (events ^ GENERICAPP_SEND_MSG_EVT);

}

这里可以看出,这个例子很明显仅仅是个发送周期信息的例子。所以LED4就周期性的闪烁4下,当然是协调器发送,路由器闪烁,路由器发送,协调器闪烁。

但是这例子里体现了绑定的概念,应该说是从基本功能上很齐全的一个例子,而且在ZSTACK上实现无线网络数传,没有任何多余的功能。所以该例子是一个典型的ZSTACK模板,也就是为用户提供了一个通用模板可以通过这个建立自己的应用。关于如何在这个例子上建立、修改成自己的工程和应用项目详细见文档:

Create New Application For The CC2430DB_F8W-2005-0033_.pdf

这个例子就到此结束了,否则不然就很难把下面的弄玩了!

2、SimpleApp

这个例子我基本跑通了,可是鉴于时间的关系,没有来得及打字了,所以就留到下一次了,时间真是如流水啊-------------------快!

YYYtech于成都

2008年8月5日23:42

从零开始学习ZStack之8

近段时间比较忙,几乎都快荒废了Z-Stack的学习了,把以前学的都快忘记了,这就是非专业技术的痛苦啊!!学习刚好有点眉目,突然意外中断停下,当再一次学习的时候突然发现:以前学的都忘了8成了!郁闷啊!今天真不知道从什么地方下手学习了,所以就针对最近客户比较关心的问题做点介绍,这样有针对性、有目的性的学习可能最适合现在的我了,不然从头把以前那些所谓的笔记看一遍,可能今天晚上又没了,指不定明晚以及后晚以及后后晚„都没时间,不然老是看以前的笔记没有进展就麻烦了!呵呵!

今天只解决1个问题:TI提供的例子程序的表演及功能介绍。

因为最近问这些的客户比较多,特别又是刚入手的朋友,对Z-Stack非常迷糊的时期,如果能够跑通几个例子、看几个演示,那么可以大大提高学习兴趣;另外如果知道某个例子的大致功能及实现,那么在去看具体实现过程目的性就非常明确。

首先来看看TI究竟有哪些例子:

可以看出其例子是非常丰富的。

GenericApp,Location,SampleApp,SimpleApp,HomeAutomation,SerialApp,Transmit, ZLOAD。这样看来还是不少的。其中SampleApp例子已经在前面的学习中有所涉及,可以说前面的所有学习都是基于这个例子的,所以这里就不测试它了。Location是定位的测试例子,这里我的硬件是不够的,所以也不做测试。其他我都做点测试,能成功的就成功,不能成功的就失败,这个我也没办法,呵呵!!!!!!!!

1、GenericApp

工程打开等我就不多说了,自己去找,如果连这些我都还说,那么我以前的东西是白学了。硬件连接中„„„„„„„„„„„„„„„„„..

当我用两个节点分别烧写入DB的协调器和路由器,从我的经验看来,他们分别能建立网络和加入网络,但是 从表象上几乎看不见数传现象,尽管我按了每个节点的按键,也仅仅是本节点的LED在改变。唯独有点数传感觉的是:按键右键对方有反应就是了,至于具体什么反映我觉得没必要说明白,大家试试就知道了。

所以还决定看看程序来判断这个例子的功能。

大约浏览了下,这个例子似乎还与设备的绑定有关系,因为在按建处理程序中发现: if ( keys & HAL_KEY_SW_2 )

{

HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );

// Initiate an End Device Bind Request for the mandatory endpoint

dstAddr.addrMode = Addr16Bit;

dstAddr.addr.shortAddr = 0x0000; // Coordinator

ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),

GenericApp_epDesc.endPoint,

GENERICAPP_PROFID,

GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, FALSE );

}

很明显这里按键2(右键)是发送绑定请求的命令。

if ( keys & HAL_KEY_SW_4 )

{

HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );

// Initiate a Match Description Request (Service Discovery)

dstAddr.addrMode = AddrBroadcast;

dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;

ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,

GENERICAPP_PROFID,

GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, FALSE );

}

显然按键4(左)是初始化一个匹配描述符请求,也就是发现服务,或者叫自动寻求匹配设备。 这就不怪我按键有反映了!

而且在发送数据和接收数据处理函数发现:

void GenericApp_SendTheMessage( void )

{

char theMessageData[] = "Hello World";

if ( AF_DataRequest( &GenericApp_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.

}

else

{

// Error occurred in request to send.

}

}

居然发送的是一个字符串“Hello World”。

void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

{

switch ( pkt->clusterId )

{

case GENERICAPP_CLUSTERID:

// "the" message

#if defined( LCD_SUPPORTED )

HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );

#elif defined( WIN32 )

WPRINTSTR( pkt->cmd.Data );

#endif

break;

}

}

接收数据处理函数里居然要通过液晶显示,本人这里的液晶暂时没有移植过来,因为暂时还不具备那个实力,怪不得看不到发送数据的状况!

这里本人就自作聪明的把以前SampleApp例子里面的一句话加过来了:

void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

{

switch ( pkt->clusterId )

{

case GENERICAPP_CLUSTERID:

// "the" message

HalLedBlink( HAL_LED_4, 4, 50, (500) );

#if defined( LCD_SUPPORTED )

HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );

#elif defined( WIN32 )

WPRINTSTR( pkt->cmd.Data );

#endif

break;

}

}

麽想到啊,这么一加居然就有反应了,o(∩_∩)o„!我不愧是天才的接班人啊!

其实这里很简单的了,就是接收到数据后闪烁4下灯,间隔0.5S。因为从:

if ( events & GENERICAPP_SEND_MSG_EVT )

{

// Send "the" message

GenericApp_SendTheMessage();

// Setup to send message again

osal_start_timerEx( GenericApp_TaskID,

GENERICAPP_SEND_MSG_EVT,

GENERICAPP_SEND_MSG_TIMEOUT );

// return unprocessed events

return (events ^ GENERICAPP_SEND_MSG_EVT);

}

这里可以看出,这个例子很明显仅仅是个发送周期信息的例子。所以LED4就周期性的闪烁4下,当然是协调器发送,路由器闪烁,路由器发送,协调器闪烁。

但是这例子里体现了绑定的概念,应该说是从基本功能上很齐全的一个例子,而且在ZSTACK上实现无线网络数传,没有任何多余的功能。所以该例子是一个典型的ZSTACK模板,也就是为用户提供了一个通用模板可以通过这个建立自己的应用。关于如何在这个例子上建立、修改成自己的工程和应用项目详细见文档:

Create New Application For The CC2430DB_F8W-2005-0033_.pdf

这个例子就到此结束了,否则不然就很难把下面的弄玩了!

2、SimpleApp

这个例子我基本跑通了,可是鉴于时间的关系,没有来得及打字了,所以就留到下一次了,时间真是如流水啊-------------------快!

YYYtech于成都

2008年8月5日23:42


相关文章

  • 物联网课程设计 1
  • 物联网课程设计 指导书 通信教研室 目录 一.物联网在智能家居中的应用设计 .................................................................................. ...查看


  • 四年级的重要性和心理特点
  • 四升五的重要性和心理特点 1.四升五是儿童成长的一个关键期.四年级在小学教育中正好处在从低年级向高年级的过渡期,这时候的四年级开始转变思想方法,从过去笼统的印象转变为具体的分析,偏重对自己喜欢的事物进行分析.四升五的学生非常难引导,身体方面 ...查看


  • 个人中长期发展规划
  • 个人中长期发展规划 进入大学意味着已经迈出了踏入社会的第一步身为即将步入社会的大三学生,我拟定了自己人生的一个中长期发展规划, 以此作为今后努力的方向,便于使个人得到充分发展.首先,我确定了三个人生目标: 一:通过国家公务员考核,成为国家公 ...查看


  • 学生各年级特点
  • 各年级特点 学生时代的三大习惯阶段: 1---3年级 4年级-----初二 初三-----高二 小学1年级特点: 一.心理行为特点 一年级的孩子刚进入小学,既充满了新鲜感,但又不习惯,因而一时难以适应:对学习有好奇感,却很难做到专心听讲,独 ...查看


  • 1-12各年级学生特点
  • [转]小一到高三各年级的培养重点,谁总结的,太全了! 阅读:3602015-12-27 21:39 标签:高三重点培养重点生理特点年级特点教育 小学一年级 生理特点: 对小学生活既新鲜,又习惯,因而一时难以适应,好奇.好动.喜欢模仿,但很难 ...查看


  • 幼儿学英语
  • 谈幼儿学英语与幼儿英语教学 即便那些正在牙牙学语的婴儿,他们的父母也已经开始热衷于灌输英语语言,希望孩子能够比别人多一项本领.那么,什么时候开始接触或进行英语教育才最合适?如何让幼儿进行有效的英语学习?这可能是诸多家长非常关心的问题. 什么 ...查看


  • 我从学习中学习到了什么
  • 你确信自己真的会学习吗?来看看作者带给我们学习感悟和方法吧~ "我们通过寻找问题的答案来学习,却没有发现它比我们从答案本身中学到了更多." --劳埃德·亚历山大 我既是一位教师又是一名贪婪的学习者,并且我对二者皆保持热情 ...查看


  • 奥数课程简介
  • 课程体系:小学奥数十二级课程体系介绍 小学部 2012-10-11 19:42:46 数学--学而思奥数十二级课程体系 经典课程 年级 对应级别 对应课程 解决问题 免费试听 一级(上) 暑期班 一年级暑期班是整个奥数十二级体系的开始.通过 ...查看


  • 二年级上册音乐导学案
  • 二年级上册音乐导学案 单位:观音寺镇沂水小学 姓名:林中歌 课题 学习内容 <问声好> 课型 新授 课时 第一课时 聆听<森林水车>聆听<早上好> 1.通过聆听乐曲,感受关于大自然的音乐,能以歌声表 达生 ...查看


热门内容