今天正式开始接触zstack定位程序,看程序是一件很累但很有乐趣的事情,这个定位程序也有点庞大,主要涉及到四个大部分:
(支持原创,如需转载,请注明地址:http://blog.sina.com.cn/litianping0709 作者:叶雨荫城(阿雨))
(1)监控配置节点程序
(2)参考节点程序
(3)盲节点程序
(4)监控节点与上位机交互的程序即MT层的解读(这个得把相关命令格式搞清楚,不然上位机的开发会遇到一些麻烦。)
之前把关于定位的一些基础文档看了一下,知道了定位的一些基本概念和基本流程,但对于程序的具体细节毫无概念,接下来的几天我将针对上面四个部分的程序分别进行解读,但是先看哪个部分呢?当然从最简单的开始,先来看看程序的基本框架:
在App中主要加了两个定位规范文件,定位程序的其他部分通过预编译实现。
首先先看看locationprofile.h和locationprofile.c文件中到底是什么内容。
locationprofile.c程序很简单:
#include "LocationProfile.h"
#if defined ( LOCATION_REFNODE )
#endif
#if defined ( LOCATION_BLINDNODE )
#endif
#if defined ( LOCATION_DONGLE )
#endif
文件很简单,但不知道干啥用的。
看看头文件。
**************************************************************************************************
**************************************************************************************************/
#ifndef LOCATIONPROFILE_H
#define LOCATIONPROFILE_H
// 指定Location Dongle、参考节点或盲节点
//#define LOCATION_DONGLE
//#define LOCATION_REFNODE
#define LOCATION_BLINDNODE
#if defined ( LOCATION_REFNODE )
#endif
#if defined ( LOCATION_BLINDNODE )
#endif
#if defined ( LOCATION_DONGLE )
#endif
// These endpoints are only for example and can be changed as desired.
设备端点号
#define LOCATION_REFNODE_ENDPOINT
#define LOCATION_BLINDNODE_ENDPOINT
#define LOCATION_DONGLE_ENDPOINT
#define LOCATION_PROFID
#define LOCATION_REFNODE_DEVICEID
#define LOCATION_BLINDNODE_DEVICEID
#define LOCATION_DONGLE_DEVICEID
define LOCATION_DEVICE_VERSION
#define LOCATION_FLAGS
// Cluster IDs
#define LOCATION_XY_RSSI_REQUEST
#define LOCATION_XY_RSSI_RESPONSE
#define LOCATION_BLINDNODE_FIND_REQUEST
#define LOCATION_BLINDNODE_FIND_RESPONSE
#define LOCATION_REFNODE_CONFIG
#define LOCATION_BLINDNODE_CONFIG
#define LOCATION_REFNODE_REQUEST_CONFIG
#define LOCATION_BLINDNODE_REQUEST_CONFIG
#define LOCATION_RSSI_BLAST
#define LOC_DEFAULT_X_Y
#define LOC_DEFAULT_MODE
#define LOC_DEFAULT_A
#define LOC_DEFAULT_N
// This profile uses the MSG AF service.
// LOCATION_XY_RSSI_REQUEST - message format
#define REFNODE_REQ_MSGS_IDX
// LOCATION_REFNODE_CONFIG - message format
#define REFNODE_CONFIG_X_LO_IDX
#define REFNODE_CONFIG_X_HI_IDX
#define REFNODE_CONFIG_Y_LO_IDX
#define REFNODE_CONFIG_Y_HI_IDX
#define REFNODE_CONFIG_LEN
// LOCATION_BLINDNODE_CONFIG - message format
#define BLINDNODE_CONFIG_A_IDX
#define BLINDNODE_CONFIG_N_IDX
#define BLINDNODE_CONFIG_MODE_IDX
#define BLINDNODE_CONFIG_COLLECT_TIME_LO_IDX
#define BLINDNODE_CONFIG_COLLECT_TIME_HI_IDX
#define BLINDNODE_CONFIG_CYCLE_LO_IDX
#define BLINDNODE_CONFIG_CYCLE_HI_IDX
#define BLINDNODE_CONFIG_REPORT_SADDR_LO_IDX
#define BLINDNODE_CONFIG_REPORT_SADDR_HI_IDX
#define BLINDNODE_CONFIG_REPORT_EP_IDX
#define BLINDNODE_CONFIG_MIN_REFNODES_IDX
#define BLINDNODE_CONFIG_LEN
// Values for REFNODE_CONFIG_MODE_IDX and BLINDNODE_CONFIG_MODE_IDX
#define NODE_MODE_POLLED
#define NODE_MODE_AUTO
// LOCATION_XY_RSSI_RESPONSE - message format
#define LOCATION_XY_RSSI_X_LO_IDX
#define LOCATION_XY_RSSI_X_HI_IDX
#define LOCATION_XY_RSSI_Y_LO_IDX
#define LOCATION_XY_RSSI_Y_HI_IDX
#define LOCATION_XY_RSSI_RSSI_IDX
#define LOCATION_XY_RSSI_LEN
// LOCATION_BLINDNODE_RESPONSE - message format
#define BLINDNODE_RESPONSE_STATUS_IDX
#define BLINDNODE_RESPONSE_X_LO_IDX
#define BLINDNODE_RESPONSE_X_HI_IDX
#define BLINDNODE_RESPONSE_Y_LO_IDX
#define BLINDNODE_RESPONSE_Y_HI_IDX
#define BLINDNODE_RESPONSE_NUMREFNODES_IDX
#define BLINDNODE_RESPONSE_REF_SHORTADDR_LO_IDX
#define BLINDNODE_RESPONSE_REF_SHORTADDR_HI_IDX
#define BLINDNODE_RESPONSE_REF_X_LO_IDX
#define BLINDNODE_RESPONSE_REF_X_HI_IDX
#define BLINDNODE_RESPONSE_REF_Y_LO_IDX
#define BLINDNODE_RESPONSE_REF_Y_HI_IDX
#define BLINDNODE_RESPONSE_REF_RSSI
#define BLINDNODE_RESPONSE_LEN
// Values for Blind Node Response Status field
#define BLINDNODE_RSP_STATUS_SUCCESS
#define BLINDNODE_RSP_STATUS_NOT_ENOUGH_REFNODES
// LOCATION_BLINDNODE_BLAST
// NV Items
#define LOC_NV_REFNODE_CONFIG
#define LOC_NV_BLINDNODE_CONFIG
void LocationHandleKeys( unsigned char keys );
#endif
/*********************************************************************
*********************************************************************
这一部分只是看了一下定位规范以及相应的簇ID,有什么错误希望大家指正,下一个学习笔记将具体定位的程序。