zstack定位程序的学习(1)



今天正式开始接触zstack定位程序,看程序是一件很累但很有乐趣的事情,这个定位程序也有点庞大,主要涉及到四个大部分:

(支持原创,如需转载,请注明地址:http://blog.sina.com.cn/litianping0709 作者:叶雨荫城(阿雨))

(1)监控配置节点程序

(2)参考节点程序

(3)盲节点程序

(4)监控节点与上位机交互的程序即MT层的解读(这个得把相关命令格式搞清楚,不然上位机的开发会遇到一些麻烦。)

之前把关于定位的一些基础文档看了一下,知道了定位的一些基本概念和基本流程,但对于程序的具体细节毫无概念,接下来的几天我将针对上面四个部分的程序分别进行解读,但是先看哪个部分呢?当然从最简单的开始,先来看看程序的基本框架:

~0$OG6C1IR%PX`{3BWY~U29

 

在App中主要加了两个定位规范文件,定位程序的其他部分通过预编译实现。

首先先看看locationprofile.h和locationprofile.c文件中到底是什么内容。

locationprofile.c程序很简单:


#include "LocationProfile.h"

#if defined ( LOCATION_REFNODE )
  #include "RefNode.c"
#endif

#if defined ( LOCATION_BLINDNODE )
  #include "BlindNode.c"
  #include "LocationEngine.c"
#endif

#if defined ( LOCATION_DONGLE )
  #include "LocDongle.c"
#endif


文件很简单,但不知道干啥用的。

 

看看头文件。

**************************************************************************************************
    文件名:LocationProfile.h
    修改日期:2007-05-29
    描    述:Z-Stack定位规范应用头文件。
**************************************************************************************************/
#ifndef LOCATIONPROFILE_H
#define LOCATIONPROFILE_H

// 指定Location Dongle、参考节点或盲节点
//#define LOCATION_DONGLE
//#define LOCATION_REFNODE
#define LOCATION_BLINDNODE  //指定不同的节点类型,配置节点(一般为协调器),参考节点,盲节点

#if defined ( LOCATION_REFNODE )
  #include "RefNode.h"
#endif

#if defined ( LOCATION_BLINDNODE )
  #define   CC2431
  #include "BlindNode.h"
#endif

#if defined ( LOCATION_DONGLE )
  #include "LocDongle.h"
  #include "LocationEngine.h"
#endif

// These endpoints are only for example and can be changed as desired.

设备端点号
#define LOCATION_REFNODE_ENDPOINT                 210 参考节点端点
#define LOCATION_BLINDNODE_ENDPOINT               211 盲节点端点
#define LOCATION_DONGLE_ENDPOINT                  203 配置节点端点号

#define LOCATION_PROFID                           0xC003 定位规范号

#define LOCATION_REFNODE_DEVICEID                 0x0010 参考节点设备ID
#define LOCATION_BLINDNODE_DEVICEID               0x0011 盲节点设备ID

#define LOCATION_DONGLE_DEVICEID                  0x0012 配置节点设备ID
define LOCATION_DEVICE_VERSION                       定位设备版本号
#define LOCATION_FLAGS                               定位标志

// Cluster IDs  簇ID
#define LOCATION_XY_RSSI_REQUEST                  0x0011 XY-RSSI请求
#define LOCATION_XY_RSSI_RESPONSE                 0x0012 XY-RSSI响应
#define LOCATION_BLINDNODE_FIND_REQUEST           0x0013 盲节点查找请求
#define LOCATION_BLINDNODE_FIND_RESPONSE          0x0014 盲节点查找响应

#define LOCATION_REFNODE_CONFIG                   0x0015 参考节点配置

#define LOCATION_BLINDNODE_CONFIG                 0x0016 盲节点配置

#define LOCATION_REFNODE_REQUEST_CONFIG           0x0017 参考节点配置请求

#define LOCATION_BLINDNODE_REQUEST_CONFIG         0x0018 盲节点配置请求

#define LOCATION_RSSI_BLAST                       0x0019 定位广播RSSI

#define LOC_DEFAULT_X_Y                           0xFFFF (这个有待考证)

#define LOC_DEFAULT_MODE                          NODE_MODE_AUTO  定位模式为自动模式

#define LOC_DEFAULT_A                             (39 << 1) A的默认值
#define LOC_DEFAULT_N                             16 N的默认值为16

// This profile uses the MSG AF service.

// LOCATION_XY_RSSI_REQUEST - message format   XY-RSSI信息格式
#define REFNODE_REQ_MSGS_IDX                      0

// LOCATION_REFNODE_CONFIG - message format    参考节点配置信息格式
#define REFNODE_CONFIG_X_LO_IDX                   0
#define REFNODE_CONFIG_X_HI_IDX                   1
#define REFNODE_CONFIG_Y_LO_IDX                   2
#define REFNODE_CONFIG_Y_HI_IDX                   3

#define REFNODE_CONFIG_LEN                        4

image

// LOCATION_BLINDNODE_CONFIG - message format    盲节点配置信息格式
#define BLINDNODE_CONFIG_A_IDX                    0
#define BLINDNODE_CONFIG_N_IDX                    1
#define BLINDNODE_CONFIG_MODE_IDX                 2
#define BLINDNODE_CONFIG_COLLECT_TIME_LO_IDX       // in 100 millisecond increments
#define BLINDNODE_CONFIG_COLLECT_TIME_HI_IDX      4
#define BLINDNODE_CONFIG_CYCLE_LO_IDX              // in 100 millisecond increments
#define BLINDNODE_CONFIG_CYCLE_HI_IDX             6
#define BLINDNODE_CONFIG_REPORT_SADDR_LO_IDX       // if auto mode
#define BLINDNODE_CONFIG_REPORT_SADDR_HI_IDX      8
#define BLINDNODE_CONFIG_REPORT_EP_IDX            9
#define BLINDNODE_CONFIG_MIN_REFNODES_IDX         10

#define BLINDNODE_CONFIG_LEN                      11

image

// Values for REFNODE_CONFIG_MODE_IDX and BLINDNODE_CONFIG_MODE_IDX
#define NODE_MODE_POLLED      // Only send responses to requests
#define NODE_MODE_AUTO        // Automatically send REFNODE response
                                 //   Depends on the cycle time (in seconds)

// LOCATION_XY_RSSI_RESPONSE - message format    XY-RSSI响应信息格式
#define LOCATION_XY_RSSI_X_LO_IDX                   0
#define LOCATION_XY_RSSI_X_HI_IDX                   1
#define LOCATION_XY_RSSI_Y_LO_IDX                   2
#define LOCATION_XY_RSSI_Y_HI_IDX                   3
#define LOCATION_XY_RSSI_RSSI_IDX                   4

#define LOCATION_XY_RSSI_LEN                        5

image

// LOCATION_BLINDNODE_RESPONSE - message format    盲节点响应信息格式 (和图有点不同)
#define BLINDNODE_RESPONSE_STATUS_IDX               0
#define BLINDNODE_RESPONSE_X_LO_IDX                 1
#define BLINDNODE_RESPONSE_X_HI_IDX                 2
#define BLINDNODE_RESPONSE_Y_LO_IDX                 3
#define BLINDNODE_RESPONSE_Y_HI_IDX                 4
#define BLINDNODE_RESPONSE_NUMREFNODES_IDX          5
#define BLINDNODE_RESPONSE_REF_SHORTADDR_LO_IDX     6
#define BLINDNODE_RESPONSE_REF_SHORTADDR_HI_IDX     7
#define BLINDNODE_RESPONSE_REF_X_LO_IDX             8
#define BLINDNODE_RESPONSE_REF_X_HI_IDX             9
#define BLINDNODE_RESPONSE_REF_Y_LO_IDX             10
#define BLINDNODE_RESPONSE_REF_Y_HI_IDX             11
#define BLINDNODE_RESPONSE_REF_RSSI                 12

#define BLINDNODE_RESPONSE_LEN                      13

image

// Values for Blind Node Response Status field  盲节点响应状态标志位
#define BLINDNODE_RSP_STATUS_SUCCESS                0
#define BLINDNODE_RSP_STATUS_NOT_ENOUGH_REFNODES    1

// LOCATION_BLINDNODE_BLAST

// NV Items    NV条目
#define LOC_NV_REFNODE_CONFIG       0x1001
#define LOC_NV_BLINDNODE_CONFIG     0x1002


void LocationHandleKeys( unsigned char keys );

#endif  // #ifndef LOCATIONPROFILE_H

/*********************************************************************
*********************************************************************

 

这一部分只是看了一下定位规范以及相应的簇ID,有什么错误希望大家指正,下一个学习笔记将具体定位的程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值