Zstack杂乱笔记4

来源:互联网 发布:石家庄淘宝运营培训班 编辑:程序博客网 时间:2024/05/16 18:52

在SensorDemo,想知道到底在哪调用了static int8 readTemp(void)来读取CC2530上的温度?

Zigbee网络中的三种设备是怎样组网的?组网概念?

#define SERIALAPP_MSG_RTRY_EVT       0x0001 //重发数据
#define SERIALAPP_RSP_RTRY_EVT       0x0002//重发响应信息
#define SERIALAPP_MSG_SEND_EVT       0x0004 //发送数据

网络设备启动:

这句有重大关系,什么是HOLD_AUTO_START ??


#if defined( HOLD_AUTO_START )
  devStates_t devState = DEV_HOLD;
#else
  devStates_t devState = DEV_INIT;
#endif

HOLD_AUTO_START 的定义将会影响到

HOLD_AUTO_START在IAR ->Project->Option->C/C++ Compile->Preprocess->Defined symbols中定义。

// ZDOInitDevice return values
#define ZDO_INITDEV_RESTORED_NETWORK_STATE      0x00
#define ZDO_INITDEV_NEW_NETWORK_STATE           0x01
#define ZDO_INITDEV_LEAVE_NOT_STARTED           0x02


// Use the following to macros to make device type decisions
#define ZG_BUILD_COORDINATOR_TYPE  (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_COORDINATOR)
#define ZG_BUILD_RTR_TYPE          (ZSTACK_DEVICE_BUILD & (DEVICE_BUILD_COORDINATOR | DEVICE_BUILD_ROUTER))
#define ZG_BUILD_ENDDEVICE_TYPE    (ZSTACK_DEVICE_BUILD & DEVICE_BUILD_ENDDEVICE)
#define ZG_BUILD_RTRONLY_TYPE      (ZSTACK_DEVICE_BUILD == DEVICE_BUILD_ROUTER)
#define ZG_BUILD_JOINING_TYPE      (ZSTACK_DEVICE_BUILD & (DEVICE_BUILD_ROUTER | DEVICE_BUILD_ENDDEVICE))


ZigBee设备的启动,最终是要调用ZDO_StartDevice()函数来实现的。下面看一下是怎么启动这个函数的。在ZDOInitDevice()函数的最后,调用了下面的ZDApp_NetworkInit()函数,在这个函数中,启动了ZDO_NETWORK_INIT事件,这个事件是在ZDApp_event_loop()事件处理函数中进行处理的。在这个事件中调用了启动设备的函数ZDO_StartDevice()。

什么是ZCL?

zigbee cluster library(ZCL) zigbee 簇库
在ZCL规范中详细介绍了每个簇的用法,并列出特定簇能够传送的属性,还提供了传送各种属性值改变的一种机制、配置传送参数的命令。


// Device types definitions ( from ZGlobals.h file )
#define ZG_DEVICETYPE_COORDINATOR      0x00
#define ZG_DEVICETYPE_ROUTER           0x01
#define ZG_DEVICETYPE_ENDDEVICE        0x02

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

http://blog.sina.com.cn/s/blog_933b730f01013o3x.html

Zigbee 的端口0是指的??

sapi_bindInProgress = 0xffff;绑定标志位,默认不允许绑定。

// Initialize leave control logic
  ZDApp_LeaveCtrlInit(); //离开控制初始化

什么叫离开控制初始化??

什么是节点描述符??

// Node Descriptor format structure
typedef struct
{
  uint8 LogicalType:3;
  uint8 ComplexDescAvail:1;  /* AF_V1_SUPPORT - reserved bit. */
  uint8 UserDescAvail:1;     /* AF_V1_SUPPORT - reserved bit. */
  uint8 Reserved:3;
  uint8 APSFlags:3;
  uint8 FrequencyBand:5;
  uint8 CapabilityFlags;
  uint8 ManufacturerCode[2];
  uint8 MaxBufferSize;
  uint8 MaxInTransferSize[2];
  uint16 ServerMask;
  uint8 MaxOutTransferSize[2];
  uint8 DescriptorCapability; 
} NodeDescriptorFormat_t;

现在想知道路由器设备在组网中的作用???

/********************************************************************* * @fn      ZDApp_Init * * @brief   ZDApp Initialization function. * * @param   task_id - ZDApp Task ID * * @return  None */void ZDApp_Init( uint8 task_id ){  // Save the task ID  ZDAppTaskID = task_id;  // Initialize the ZDO global device short address storage  ZDAppNwkAddr.addrMode = Addr16Bit;  ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;  (void)NLME_GetExtAddr();  // Load the saveExtAddr pointer.  // Check for manual "Hold Auto Start" / /打开电源时,检测到有手工设置SW_1则会设置devState = DEV_HOLD  ZDAppCheckForHoldKey();  // Initialize ZDO items and setup the device - type of device to create.  ZDO_Init();  // Register the endpoint description with the AF  // This task doesn't have a Simple description, but we still need  // to register the endpoint.  afRegister( (endPointDesc_t *)&ZDApp_epDesc );#if defined( ZDO_USERDESC_RESPONSE )  ZDApp_InitUserDesc();#endif // ZDO_USERDESC_RESPONSE  // Start the device?能否自启动,无论怎样下面都进行了设备的初始化  if ( devState != DEV_HOLD )  {    ZDOInitDevice( 0 );  }  else  {    ZDOInitDevice( ZDO_INIT_HOLD_NWK_START );    // Blink LED to indicate HOLD_START    HalLedBlink ( HAL_LED_4, 0, 50, 500 );  }    // Initialize the ZDO callback function pointers zdoCBFunc[]  ZDApp_InitZdoCBFunc();    ZDApp_RegisterCBs();} /* ZDApp_Init() */// Init ZDO, but hold and wait for application to start the joining or // forming network#define ZDO_INIT_HOLD_NWK_START       0xFFFF  /********************************************************************* * @fn          ZDO_Init * * @brief       ZDObject and ZDProfile initialization. * * @param       none * * @return      none */void ZDO_Init( void ){  // Initialize ZD items  #if defined ( REFLECTOR )  ZDO_EDBind = NULL;  #endif  // Initialize default ZDO_UseExtendedPANID to the APS one.  osal_cpyExtAddr( ZDO_UseExtendedPANID, AIB_apsUseExtendedPANID );  // Setup the device - type of device to create.  ZDODeviceSetup();}static void ZDODeviceSetup( void ){  if ( ZG_BUILD_COORDINATOR_TYPE )  {    NLME_CoordinatorInit();  }#if defined ( REFLECTOR )  APS_ReflectorInit( (ZG_DEVICE_COORDINATOR_TYPE) ? APS_REFLECTOR_PUBLIC :  APS_REFLECTOR_PRIVATE );#endif  if ( ZG_BUILD_JOINING_TYPE )  {    NLME_DeviceJoiningInit();  }}



协调器、路由器和终端设备到底什么关系?

树群这种网络模式和多跳路由?


 注意:在Z-Stack 1.4.1中一个设备的类型通常在编译的时候通过编译选项(ZDO_COORDINATOR 和RTR_NWK)确定。所有的应用例子都提供独立的项目文件来编译每一种设备类型。