关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(二)

ZigBee协议栈 -- ZStack协议栈运行流程解析(Zstack2.5.1a) 在 ZStack 协议栈目录下可以看到 TI 官方提供的 3 个基础例程,分别是 GenericApp、SampleApp 和 SimpleApp,下面主要结合[ZigBee协议栈 -- Zstack协议栈(Zstack2.5.1a)]介绍的 ZStack 协议栈内容来解析ZStack 协议栈运行的工作原理以及它的工作流程 阅读详情

当终端节点的ZDO向网络层发送完发现网络请求后,网络层操作完成后会向ZDO层发送发现网络确认,ZDO层利用ZDO_NetworkDiscoveryConfirmCB函数来对确认进行处理。下面看一下该函数的代码:

 

ZStatus_t ZDO_NetworkDiscoveryConfirmCB( uint8ResultCount,
                                        networkDesc_t *NetworkList )
{
  networkDesc_t *pNwkDesc = NetworkList;
  ZDO_NetworkDiscoveryCfm_t msg;
  uint8 i = ResultCount;
  uint8 stackProfile;
  uint8 stackProfilePro;
  uint8 selected;

#if defined ( ZDO_MGMT_NWKDISC_RESPONSE )
  if ( zdappMgmtNwkDiscReqInProgress )
  {
   zdappMgmtNwkDiscReqInProgress = false;
   ZDO_FinishProcessingMgmtNwkDiscReq( ResultCount, NetworkList);
    return (ZSuccess );
  }
#endif

  // 以下为 检查网络描述符中的各项参数

  stackProfilePro = FALSE;
  selected = FALSE;

  for ( stackProfile = 0; stackProfile< STACK_PROFILE_MAX; stackProfile++ )
  {
    pNwkDesc =NetworkList;
    for ( i = 0;i < ResultCount; i++, pNwkDesc =pNwkDesc->nextDesc )
    {
     if ( zgConfigPANID != 0xFFFF )
     {
       // PAN Id is preconfigured. check if it matches
       if ( pNwkDesc->panId != zgConfigPANID )
         continue;
     }
     

     if ( nwk_ExtPANIDValid( ZDO_UseExtendedPANID) == true )
     {
       // If the extended Pan ID is commissioned to a non zero value
       // Only join the Pan that has match EPID
       if ( osal_ExtAddrEqual( ZDO_UseExtendedPANID,pNwkDesc->extendedPANID) == false )
         continue;
       
     }


       // check that network is allowing joining
       if ( ZSTACK_ROUTER_BUILD )
       {
         if ( stackProfilePro == FALSE )
         {
           if ( !pNwkDesc->routerCapacity )
           {
             continue;
           }
         }
         else
         {
           if ( !pNwkDesc->deviceCapacity )
           {
             continue;
           }
         }
       }
       else if ( ZSTACK_END_DEVICE_BUILD )
       {
         if ( !pNwkDesc->deviceCapacity )
         {
           continue;
         }
       }

       // check version of zigbee protocol
       if ( pNwkDesc->version != _NIB.nwkProtocolVersion)
         continue;

       // check version of stack profile
       if ( pNwkDesc->stackProfile !=zgStackProfile  )
       {
         if ( ((zgStackProfile == HOME_CONTROLS)&&(pNwkDesc->stackProfile == ZIGBEEPRO_PROFILE))
             || ((zgStackProfile == ZIGBEEPRO_PROFILE)&&(pNwkDesc->stackProfile ==HOME_CONTROLS))  )
           stackProfilePro = TRUE;
         
         if ( stackProfile == 0 )
         {
           continue;
         }
       }

      break;
    }
    if (i< ResultCount)
    {
    selected = TRUE;
     break;
    }
  
    // break ifselected or stack profile pro wasn't found
    if ((selected == TRUE) || (stackProfilePro == FALSE) )
    {
     break;
    }
  }

  if ( i == ResultCount )
  {
   msg.hdr.status = ZDO_FAIL;   //couldn't find appropriate PAN to join !
  }
  else
  {
   msg.hdr.status = ZDO_SUCCESS;
    msg.panIdLSB= LO_UINT16( pNwkDesc->panId );
    msg.panIdMSB= HI_UINT16( pNwkDesc->panId );
   msg.logicalChannel = pNwkDesc->logicalChannel;
    msg.version= pNwkDesc->version;
   osal_cpyExtAddr( msg.extendedPANID,pNwkDesc->extendedPANID );
  }

  ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_DISC_CNF,sizeof(ZDO_NetworkDiscoveryCfm_t), (uint8 *)&msg);//向ZDO层发送一个ZDO_NWK_DISC_CNF消息

  return (ZSuccess);
}  // ZDO_NetworkDiscoveryConfirmCB

 

那么接下来看看ZDApp是怎么处理ZDO_NWK_DISC_CNF消息的。在ZDO层找到处理消息的函数ZDApp_ProcessOSALMsg

源代码如下:

  case ZDO_NWK_DISC_CNF:
     if (devState != DEV_NWK_DISC)
       break;
     
     if ( ZG_BUILD_JOINING_TYPE &&ZG_DEVICE_JOINING_TYPE)  //条件成立
     {
       if ( (((ZDO_NetworkDiscoveryCfm_t*)msgPtr)->hdr.status == ZDO_SUCCESS)&& (zdoDiscCounter >NUM_DISC_ATTEMPTS) )//条件成立
       {
         if ( devStartMode == MODE_JOIN )//条件成立
         {
           devState =DEV_NWK_JOINING;   //修改设备状态为网络加入状态
  
           ZDApp_NodeProfileSync((ZDO_NetworkDiscoveryCfm_t*)msgPtr);//根据发现的网络信息进行一些节点的配置操作
  
           if ( NLME_JoinRequest( ((ZDO_NetworkDiscoveryCfm_t*)msgPtr)->extendedPANID,
                BUILD_UINT16( ((ZDO_NetworkDiscoveryCfm_t*)msgPtr)->panIdLSB, ((ZDO_NetworkDiscoveryCfm_t*)msgPtr)->panIdMSB ),
                ((ZDO_NetworkDiscoveryCfm_t*)msgPtr)->logicalChannel,
                ZDO_Config_Node_Descriptor.CapabilityFlags ) != ZSuccess)//根据发现的网络信息向网络层发起加入网络请求
           {
             ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
                 + ((uint16)(osal_rand()&EXTENDED_JOINING_RANDOM_MASK))) );
           }
         }

网络层加入完网络后,会发送一个加入确认到ZDO层,利用ZDO_JoinConfirmCB函数,对确认信息进行处理,下面看下源代码:

void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status )
{
  (void)PanId;  // remove if thisparameter is used.
 
  nwkStatus =(byte)Status;   //更新网络状态

  if ( Status == ZSUCCESS )
  {
    // LED onshows device joined
    HalLedSet (HAL_LED_3, HAL_LED_MODE_ON ); //打开LED_3
    // LED offforgets HOLD_AUTO_START
    HalLedSet (HAL_LED_4, HAL_LED_MODE_OFF);//关闭LED_4
    if ((devState == DEV_HOLD) )
    {
     // Began with HOLD_AUTO_START
     devState = DEV_NWK_JOINING;
    }

    if (!ZG_SECURE_ENABLED )
    {
     // Notify to save info into NV
     ZDApp_NVUpdate();
    }
  }
  else
  {
#if defined(BLINK_LEDS)
    HalLedSet (HAL_LED_3, HAL_LED_MODE_FLASH );  // Flash LED toshow failure
#endif
  }

  // Notify ZDApp
  ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_IND,sizeof(osal_event_hdr_t), (byte*)NULL);//向ZDO层发送一个ZDO_NWK_JOIN_IND消息。
}

 

我们看是ZDO如何处理这个消息的,在 ZDApp_ProcessOSALMsg中看下源代码:

case ZDO_NWK_JOIN_IND:
     if ( ZG_BUILD_JOINING_TYPE &&ZG_DEVICE_JOINING_TYPE )
     {
       ZDApp_ProcessNetworkJoin();
     }
     break;
 进入此函数中看下主要进行什么操作:

 

void ZDApp_ProcessNetworkJoin( void )
{
  if ( (devState == DEV_NWK_JOINING) ||
     ((devState == DEV_NWK_ORPHAN) &&
      (ZDO_Config_Node_Descriptor.LogicalType == NODETYPE_ROUTER)))
  {
    // Result ofa Join attempt by this device.
    if (nwkStatus == ZSuccess )
    {
     osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );//设置状态改变事件

#if defined ( POWER_SAVING )
     osal_pwrmgr_device( PWRMGR_BATTERY );
#endif

     if ( ZG_SECURE_ENABLED && (ZDApp_RestoreNwkKey() == false ) )
     {
       // wait for auth from trust center!!
       devState = DEV_END_DEVICE_UNAUTH;

       // Start the reset timer for MAX UNAUTH time
       ZDApp_ResetTimerStart( 10000 );//MAX_DEVICE_UNAUTH_TIMEOUT );
     }
     else
     {
       if ( ZSTACK_ROUTER_BUILD )
       {
         if ( devState == DEV_NWK_ORPHAN
           &&ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
         {
           // Change NIB state to router for restore
           _NIB.nwkState = NWK_ROUTER;
         }
       }
               
       if ( devState == DEV_NWK_JOINING )
       {
         ZDApp_AnnounceNewAddress();
       }
       
       devState = DEV_END_DEVICE;
       if ( ZSTACK_ROUTER_BUILD )
       {
         // NOTE: first two parameters are not used, see NLMEDE.h fordetails
         if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE)
         {
           NLME_StartRouterRequest( 0, 0, false );
         }
       }
     }
    }
  

我们看ZDO层怎么对状态改变事件进行响应,在ZDApp_event_loop中找到:

 

if ( events & ZDO_STATE_CHANGE_EVT )
  {
   ZDO_UpdateNwkStatus( devState ); //调用更新网络状态函数。
    
    if (zgConcentratorEnable == TRUE )
    {
      osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 );
    }
    
    return (events ^ ZDO_STATE_CHANGE_EVT);
  }

 

更新网络状态函数源代码:

 

void ZDO_UpdateNwkStatus(devStates_t state)
{
  epList_t *pItem = epList;

  while (pItem != NULL)
  {
    if(pItem->epDesc->endPoint !=ZDO_EP)
    {
     zdoSendStateChangeMsg(state,*(pItem->epDesc->task_id));//把状态改变的消息通知给在AF层注册过的端口的task
    }

    pItem =pItem->nextDesc;
  }
#if defined MT_ZDO_CB_FUNC
  zdoSendStateChangeMsg(state, MT_TaskID);
#endif

  ZDAppNwkAddr.addr.shortAddr =NLME_GetShortAddr();
  (void)NLME_GetExtAddr();  //Load the saveExtAddr pointer.
}

 

由于我们是在sapi层注册的端口,因此我们可以去SAPI_ProcessEvent函数中找到状态改变消息的响应。源代码如下:

case ZDO_STATE_CHANGE:
         // If the device has started up, notify the application
         if (pMsg->status == DEV_END_DEVICE ||
             pMsg->status == DEV_ROUTER ||
             pMsg->status == DEV_ZB_COORD )
         {
           SAPI_StartConfirm( ZB_SUCCESS );  //开始启动确认
         }
         else  if (pMsg->status == DEV_HOLD||
                 pMsg->status == DEV_INIT)
         {
           SAPI_StartConfirm( ZB_INIT );
         }
         break;

 

查看启动确认源码:

 

void SAPI_StartConfirm( uint8 status )
{
#if defined ( MT_SAPI_CB_FUNC )
 
  if ( SAPICB_CHECK( SPI_CB_SAPI_START_CNF ))
  {
   zb_MTCallbackStartConfirm( status );
  }
  else
#endif  //MT_SAPI_CB_FUNC
  {
#if ( SAPI_CB_FUNC )
   zb_StartConfirm( status );//执行此函数
#endif
  }
}

查看源码:

 

void zb_StartConfirm( uint8 status )
{
  if ( status == ZB_SUCCESS )
  {
    myAppState =APP_START; //将应用状态修改为启动状态

    // Setevent to bind to a collector
   osal_start_timerEx( sapi_TaskID, MY_FIND_COLLECTOR_EVT,myBindRetryDelay);//向sapi层发送MY_FIND_COLLECTOR_EVT事件,来进行绑定一个协调器。
  }
  else
  {
    // Tryjoining again later with a delay
   osal_start_timerEx( sapi_TaskID, MY_START_EVT, myStartRetryDelay);
  }
}


【2023版】基于JT808/JT1078协议的车载视频监控平台开发实战-开源架构解析 本文详细解析了基于JT808/JT1078协议的车载视频监控平台开发实战,涵盖协议核心作用、开源架构设计、开发避坑指南及二次开发建议。重点介绍了JT1078协议在音视频传输中的优化方案,以及海量位置数据存储、高可用架构等关键技术点,为开发者提供全面的实战参考。 阅读详情

相关推荐

从零开始:QNX SDP 8.0开发环境搭建与实战入门

本文详细介绍了如何从零开始搭建QNX SDP 8.0开发环境并进行实战入门。内容涵盖许可证获取、环境安装、命令行与IDE工具使用、BSP构建、系统镜像生成,以及编写、编译和运行第一个QNX程序的全过程。旨在帮助嵌入式开发者,特别是汽车电子和工业控制领域的工程师,快速掌握这一实时操作系统(RTOS)的开发基础。

weixin_29163857的博客 641

cc2530串口(网络)通信流程

//串口发送接收流程 main: //主函数 ->osal_init_system(); //操作系统初始化 ->osalInitTasks(); //任务初始化 -->ZDApp_Init(taskID++); //该函数初始化后,协调器建立网络、终端将加入网络 -->ZDOInitDevice(0);

我的专栏 7177

【EPICS学习记录】根据官方教程创建一个IOC应用

参照官网给出的IOC创建教程逐步操作完成了一个IOC应用的创建,官网教程中有部分过程表述的不清晰,自己摸索之后完成了IOC的创建,并把流程记录下来。其中有一些操作不是很理解,有问题或者建议欢迎指正。

yifeng_H的博客 3661

CC2530入网流程

zigbee协议栈使用的是zstack版本,该协议栈的整体功能有点类似于操作系统。下面以SimpleApp例程为例,对协议栈的组网流程进行描述。 协议栈是用C语言实现的,由于C语言的入口都是main函数,因此需要找到main函数,下图为协议栈各层列表(主要包括应用层、硬件层、MAC层、网络层、安全层、服务层等),TI公司的编程比较规范,文件的命名就意味着相关的功能。 图1 协议栈的整体架构 可以看到,ZMain文件下面有ZMain.c文件,而该文件就是整个协议...

yiye_pianzhou的博客 3362

URScript介绍

优傲机器人(Universal Robots)是丹麦工业协作机器人制造商,2005年成立,2015年被泰瑞达收购。其自研编程语言URScript基于Python语法,专为机器人控制优化,支持运动指令、IO控制等功能,具有类Python的简洁语法和实时性特点。URScript提供丰富的API,支持变量赋值、条件判断、循环及函数定义等编程结构,参数按值传递。用户可通过该语言在Polyscope界面编写程序,实现自动化任务。目前优傲在全球20多个办事处为多国客户提供服务。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 603

Oracle到金仓数据库信创改造迁移实施规划方案

**性能测试和优化**:对金仓数据库的性能进行测试,根据业务负载情况进行必要的调优,确保系统能够稳定高效运行。- **数据兼容性**:评估Oracle数据库中的数据结构和金仓数据库的兼容性,明确需要重构的数据模型。- **性能测试**:通过对金仓数据库的性能测试,预估在实际业务环境下的表现,是否能达到业务需求。- **工具选择**:选择适合的迁移工具,如金仓数据库提供的迁移工具,能够提升迁移效率和准确性。- **全面迁移**:在初步迁移成功后,进行全面数据迁移,确保所有数据完整迁移到金仓数据库上。

hdrhdrjdididrr的博客 480

关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(三)

上一节讲到终端节点向协调器发送一个绑定请求,在此之前呢,我们需要将协调器的绑定允许,这样终端节点才可以绑定成功~。好,我们选择workplace为simpleCollectorEB,然后我们按下s2键。在sapi层找到处理该事件的函数,找到SAPI_ProcessEvent中的如下代码:    case KEY_CHANGE: #if ( SAPI_CB_FUNC )          z

cucmakeit的专栏 2380

Qcom camera hal简介

Qcom camera hal简介

weixin_42136255的博客 7764

关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(一)

今天来看一下终端节点是如何加入网络,以及建立绑定操作并发送数据了。首先我们选择工作空间为SimpleSensorEB,好,我们先按一下S2键,因为在SAPI_Init中,我们利用RegisterForKeys( sapi_TaskID);注册了键盘消息,因此我们看一下在sapi如何对按键消息进行响应的。在UINT16 SAPI_ProcessEvent( bytetask_id, UINT16 e

cucmakeit的专栏 3149

告别信息过载:我是如何用Feedly RSS阅读器打造个人专属信息流的(附Chrome插件使用技巧)

本文分享了如何利用Feedly RSS阅读器有效管理信息过载,打造个人专属信息流的方法。通过科学组织订阅源、智能过滤和跨平台同步技巧,帮助用户从被动接收转为主动筛选,提升信息获取效率。特别推荐使用Feedly的Chrome插件和AI过滤功能,实现高效的信息管理。

weixin_42526015的博客 355

FineBI制作数据可视化大屏-数据连接(1)

快速上手大屏可视化,FineBI数据连接配置。

Pangaoyang_的博客 1912

CC2530自动安全联网

CC2530自动联网的苦恼 不知道博客园里面有没有人研究CC2530,也就是zigbee技术,其实我在做东西的时候很纠结一个问题,那就是我如何将设备连上后,如何通过协调者发送命令给终端呢?有什么方法可以快捷的解决这个事情呢?zigbee确实是让我们能够直接形成一个网络了,但是我们要的是能够在协调者里面直接找到相应的终端,然后直接相连不就行了吗,这样又快又好!但是在这个过程中我们经常碰到是,我们根本...

weixin_30646505的博客 201

下采样优化实战:用ADown显著提升YOLOv11的多尺度特征保持能力

ADown 以“可编程梯度信息+多分支特征融合”打破了传统下采样的性能壁垒,为 YOLOv11 带来了多尺度特征的精准传递能力。从原理到代码集成,本教程已为你铺就了一条“小目标检测精度跃升”的实战路径。现在就动手尝试吧——当你看到模型对极小目标也能精准识别,且特征图细节完整时,你会明白这份技术探索的价值。我很乐意在你实践过程中帮你解决任何问题,让我们一起推动目标检测在下采样领域的边界。

FJN110的博客 421

关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(四)

上一节看到,协调器向终端节点发送匹配描述符响应,由于终端节点在sapi注册了匹配描述符响应事件,因此,我们可以sapi层看到对此事件的处理:在sapi层找到:   UINT16 SAPI_ProcessEvent( byte task_id, UINT16 events ) {   osal_event_hdr_t *pMsg;   afIncomingMSGPacket_t *pMSG

cucmakeit的专栏 1982

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何在协议栈中构建自己的 Zigbee 网络指示灯

这篇文章主要讲解,如何构建自己的网络指示灯,实现设备在网时亮灯,脱网时灭灯这个效果。 解决这个问题主要分两个步骤: 1)建立指示灯的底层驱动代码。 2)替换掉官方的网络指示灯应用代码。 一、建立指示灯底层驱动代码 这个太简单了,不多解释,只贴代码。 LED.c 文件 /****************************************************...

Jesse_嘉伟的专栏 2764

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

zigbee终端无法重连的问题解决

zigbee终端无法重连的问题解决1.zigbee重连的原因(1)zigbee由于各种原因的干扰导致信号太差而掉线。 (2)协调器重启。2.zigbee终端重连的处理(1)zigbee掉线后会进入回调函数:void ZDO_SyncIndicationCB( uint8 type, uint16 shortAddr );产生ZDO_NWK_JOIN_REQ,之后会重新初始化网络:case ZDO_

MENGHUANBEIKE的专栏 7197

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的组网

所有的C语言编写的程序,入口函数一定是main函数,首先看一下ZMain.c函数。 int main( void ) {    osal_int_disable( INTS_ALL);    HAL_BOARD_INIT();    zmain_vdd_check();    InitBoard( OB_COLD );    HalDriverInit();    osal_nv_

cucmakeit的专栏 3344

【转】zigbee终端无法重连的问题解决

zigbee终端无法重连的问题解决 1.zigbee重连的原因 (1)zigbee由于各种原因的干扰导致信号太差而掉线。(2)协调器重启。 2.zigbee终端重连的处理 (1)zigbee掉线后会进入回调函数:void ZDO_SyncIndicationCB( uint8 type, uint16 shortAddr ); 产生ZDO_NWK_JOIN_REQ,之后会重新...

weixin_30522183的博客 912

zstack低功耗的设置

Z-stack提供了两种sleep模式,LITE和DEEP(PM2/PM3)。当系统需 要唤醒去执行一些周期性的事件时,使用LITE sleep;当系统没有被定制周期事件而是通过外部中断(如按键)来唤醒设备,使用DEEP sleep。例如带有传感器的终端设备,它需要周期性的唤醒发送采集的数据,又如远程控制终端设备通过按键唤醒来发送一信息,它们的大部分时间都是处于 sleep,以降低功耗。 第

yeshuming的专栏 2202

zigbee网关 zstack CC2530添加iic温度传感器lm75a

lm75a已经裸机驱动起来,下一步准备添加在zstack中zigbee网关 cc2530裸机驱动温度传感器LM75A 把iic.c, iic.h, lm75a.c, lm75a.h拷贝到zigbeeGateWay工程中的source目录下 右击app选择添加source把iic.c和lm75a.c添加进来 在协调器的workspace中分别选中iic.c和lm75a.c右击选择option把

frt的博客 5090

CC2530移植Z-Stack协议key配置注意事项

项目遇到的问题:调试zigbee通信项目时,之前一直使用开发板卖家提供的ZStack-CC2530-2.5.1a协议栈,调试完成后将程序烧写到自己制作的硬件上也能正常运行,后来使用TI官方的Z-Stack Home 1.2.2a协议栈,将程序烧写到开发板上能正常运行,而将程序烧写到自己做的硬件上终端设备不能加入zigbee网络,LED灯一直闪烁。 原因:通过排查发现,此问题与HAL_KEY_JO

professionalmcu的专栏 1109

CC2530的低功耗工作模式解析

最近在研究CC2530的低功耗模式,从官方的文档Measuring Power Consumption of CC2530 With Z-Stack.PDF文档中大概了解下需要配置的内容,结合自己测试的经验,大概介绍下。使用Zstack的版本如下: ZigBee 2007 Release Version 2.5.1a April 25, 2012 CC530的功耗模式情况如下: (1)L...

qq_14917839的博客 6981

Zigbee网络设备启动流程—终端(自启动模式)

使用的协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.1 Zigbee网络设备启动流程—终端(自启动模式)—以SampleApp的终端为例. 1、终端预编译信息 通过project->options->c/c++compiler->extraOptions可以看到终端所带的配置文件为: -f $PROJ_DIR$\..\..\..\Tools\CC2430DB

xiaoaide01的专栏 2597

MT的使用

<br />Z-STACK问题之串口结构uartCfg_t乱说<br /> <br /><br />typedef struct<br />{<br />uint8 *rxBuf;//接收缓存<br />uint8 rxHead;//头<br />uint8 rxTail;//尾<br />uint8 rxMax;//接收最大长度<br />uint8 rxCnt;//计数<br />uint8 rxTick;//时间<br />uint8 rxHigh;//高位<br />uint8 *txBuf;<br

TT的小窝 1043

计网的小实验(socket通信相关)

import socket import json address = ('192.168.204.1', 1080) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(address) s.listen(5) print("The server has opend.") while True: conn, addr = s.accept() print('[+] Connected with', addr)

静静打代码的博客 284

Zigbee疑难问题定位以及思路方法分享 (二)

接着上回继续分析公司遗留的问题二分析,问题二就是入网速度慢、入网后概率性的掉线。先普及一下我们入网的流程,因为不同的网络有不同的PANID,因此目前入网的方式有三种:1、每个设备出厂时候读取它的MAC地址,生成二维码贴在设备上,入网之前用手机扫描一下,把MAC地址导入到网关端,因此尝试关联的时候网络允许其关联;2、每个设备上做一个NFC标签,设备可以通过I2C等总线读取NFC标签...

moonlinux20704的博客 698
上一篇: 关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(一)
下一篇: 关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(三)
cucmakeit
博客等级 码龄14年 30粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值