📄 zdcache.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 18/Sep/2008 17:36:44 #
# Copyright 2004-2006 IAR Systems. All rights reserved. #
# #
# Core = plain #
# Code model = banked #
# Data model = large #
# Calling convention = xdata reentrant #
# Constant location = data #
# Dptr setup = 1,16 #
# Source file = C:\Texas Instruments\ZStack-1.4.2\Components\stac #
# k\zdo\ZDCache.c #
# Command line = -f "C:\Texas Instruments\ZStack-1.4.2\Projects\zs #
# tack\Samples\SampleApp\CC2430DB\..\..\..\Tools\CC #
# 2430DB\f8wRouter.cfg" (-DCPU32MHZ #
# -DFORCE_MAC_NEAR -DROOT=__near_func #
# -DMAC_CFG_APP_PENDING_QUEUE=TRUE -DRTR_NWK #
# -DBLINK_LEDS "-DCONST=const __code" #
# -DGENERIC=__generic) -f "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\Tools\CC2430DB\f8wCon #
# fig.cfg" (-DSECURE=0 -DDEFAULT_CHANLIST=0x0000080 #
# 0 -DZDAPP_CONFIG_PAN_ID=0xFFFF #
# -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_M #
# ASK=0x007F -DBEACON_REQUEST_DELAY=100 #
# -DBEACON_REQ_DELAY_MASK=0x00FF #
# -DROUTE_EXPIRY_TIME=30 -DAPSC_ACK_WAIT_DURATION_P #
# OLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7 #
# -DMAX_RREQ_ENTRIES=10 -DAPSC_MAX_FRAME_RETRIES=3 #
# -DNWK_MAX_DATA_RETRIES=2 #
# -DMAX_POLL_FAILURE_RETRIES=2 -DMAX_BCAST=9 #
# -DAPS_MAX_GROUPS=16 -DMAX_RTG_ENTRIES=20 #
# -DNWK_MAX_BINDING_ENTRIES=10 #
# -DMAX_BINDING_CLUSTER_IDS=5 #
# "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07, 0x09, #
# 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, #
# 0x0A, 0x0C, 0x0D}" -DRFD_RCVC_ALWAYS_ON=FALSE #
# -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 #
# -DRESPONSE_POLL_RATE=100 -DREJOIN_POLL_RATE=440 #
# -DTOP_BOOT_PAGES=0) -I "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.05 Evaluation #
# version\8051\inc\" -I "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.05 Evaluation #
# version\8051\inc\clib\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\Source\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\ZMain\TI2430DB\" -I #
# "C:\Texas Instruments\ZStack-1.4.2\Projects\zstac #
# k\Samples\SampleApp\CC2430DB\..\..\..\..\..\Compo #
# nents\mt\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\hal\ #
# include\" -I "C:\Texas Instruments\ZStack-1.4.2\P #
# rojects\zstack\Samples\SampleApp\CC2430DB\..\..\. #
# .\..\..\Components\hal\target\CC2430DB\" -I #
# "C:\Texas Instruments\ZStack-1.4.2\Projects\zstac #
# k\Samples\SampleApp\CC2430DB\..\..\..\..\..\Compo #
# nents\osal\mcu\ccsoc\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\osal #
# \include\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\stac #
# k\af\" -I "C:\Texas Instruments\ZStack-1.4.2\Proj #
# ects\zstack\Samples\SampleApp\CC2430DB\..\..\..\. #
# .\..\Components\stack\nwk\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\stac #
# k\sec\" -I "C:\Texas Instruments\ZStack-1.4.2\Pro #
# jects\zstack\Samples\SampleApp\CC2430DB\..\..\..\ #
# ..\..\Components\stack\sys\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\stac #
# k\zdo\" -I "C:\Texas Instruments\ZStack-1.4.2\Pro #
# jects\zstack\Samples\SampleApp\CC2430DB\..\..\..\ #
# ..\..\Components\zmac\f8w\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\zmac #
# \" -I "C:\Texas Instruments\ZStack-1.4.2\Projects #
# \zstack\Samples\SampleApp\CC2430DB\..\..\..\..\.. #
# \Components\services\saddr\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\serv #
# ices\sdata\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\mac\ #
# include\" -I "C:\Texas Instruments\ZStack-1.4.2\P #
# rojects\zstack\Samples\SampleApp\CC2430DB\..\..\. #
# .\..\..\Components\mac\high_level\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\mac\ #
# low_level\srf03\" -I "C:\Texas #
# Instruments\ZStack-1.4.2\Projects\zstack\Samples\ #
# SampleApp\CC2430DB\..\..\..\..\..\Components\mac\ #
# low_level\srf03\single_chip\" -D CC2430DB -D #
# SOFT_START -D ZAPP_P1 -D HOLD_AUTO_START -lC #
# "C:\Texas Instruments\ZStack-1.4.2\Projects\zstac #
# k\Samples\SampleApp\CC2430DB\RouterDB\List\" -lA #
# "C:\Texas Instruments\ZStack-1.4.2\Projects\zstac #
# k\Samples\SampleApp\CC2430DB\RouterDB\List\" #
# --diag_suppress Pe001,Pa010 --diag_remark pe550 #
# -o "C:\Texas Instruments\ZStack-1.4.2\Projects\zs #
# tack\Samples\SampleApp\CC2430DB\RouterDB\Obj\" #
# -e --require_prototypes -z9 --no_code_motion #
# --debug --core=plain --dptr=16,1 #
# --data_model=large --code_model=banked #
# --calling_convention=xdata_reentrant #
# --place_constants=data --nr_virtual_regs 8 #
# "C:\Texas Instruments\ZStack-1.4.2\Components\sta #
# ck\zdo\ZDCache.c" #
# List file = C:\Texas Instruments\ZStack-1.4.2\Projects\zstack #
# \Samples\SampleApp\CC2430DB\RouterDB\List\ZDCache #
# .lst #
# Object file = C:\Texas Instruments\ZStack-1.4.2\Projects\zstack #
# \Samples\SampleApp\CC2430DB\RouterDB\Obj\ZDCache. #
# r51 #
# #
# #
##############################################################################
C:\Texas Instruments\ZStack-1.4.2\Components\stack\zdo\ZDCache.c
1 /*********************************************************************
2 Filename: ZDCache.c
3 Revised: $Date: 2007-02-15 15:11:28 -0800 (Thu, 15 Feb 2007) $
4 Revision: $Revision: 13481 $
5
6 Description: Implementation of the ZDO Discovery Cache functionality.
7
8 Notes:
9
10 Copyright (c) 2006 by Texas Instruments, Inc.
11 All Rights Reserved. Permission to use, reproduce, copy, prepare
12 derivative works, modify, distribute, perform, display or sell this
13 software and/or its documentation for any purpose is prohibited
14 without the express written consent of Texas Instruments, Inc.
15 *********************************************************************/
16 #if defined( ZDO_CACHE )
17
18 /*********************************************************************
19 * INCLUDES
20 */
21 #include "AF.h"
22 #include "nwk_globals.h"
23 #include "nwk_util.h"
24 #include "OSAL.h"
25 #include "ZDCache.h"
26 #include "ZDConfig.h"
27 #include "ZDObject.h"
28
29
30 /*********************************************************************
31 * MACROS
32 */
33
34 /*********************************************************************
35 * CONSTANTS
36 */
37
38 #define MAX_PKT_LEN (MAX_DATA_PACKET_LEN - NWK_HDR_LEN)
39
40 #if ( CACHE_DEV_MAX == 0 )
41 #define WAIT_ON_RESP_CACHE 5
42
43 #define FIND_RSP_MAX 16
44 #endif
45
46 #define SendMsg( CMD, LEN, DATA ) \
47 afAddOrSendMessage( &msgAddr, /* *DestAddr */\
48 ZDO_EP, /* Endpoint */\
49 (CMD), /* ClusterId */\
50 SEND_MESSAGE, /* TransCount */\
51 FRAMETYPE_MSG, /* FrameType */\
52 &tranSeq, /* *TransSeqNumber */\
53 NULL, /* CommandType */\
54 NULL, /* AttribDataType */\
55 NULL, /* AttribId */\
56 NULL, /* ErrorCode */\
57 (LEN), /* DataLength */\
58 (DATA), /* *Data */\
59 AF_TX_OPTIONS_NONE, \
60 FALSE, /* Discover route */\
61 radius )
62
63 /*********************************************************************
64 * TYPEDEFS
65 */
66
67 #if ( CACHE_DEV_MAX == 0 )
68 typedef enum {
69 eCacheWait,
70 eCacheClean,
71 eCacheFind,
72 eCacheRequest,
73 eNodeDescStore,
74 ePwrDescStore,
75 eActiveEPStore,
76 eSimpDescStore,
77 eCacheDone
78 } eCacheState;
79 #endif
80
81 /*********************************************************************
82 * GLOBAL VARIABLES
83 */
84
85 /*********************************************************************
86 * EXTERNAL VARIABLES
87 */
88
89 /*********************************************************************
90 * EXTERNAL FUNCTIONS
91 */
92
93 /*********************************************************************
94 * LOCAL FUNCTIONS
95 */
96
97 #if ( CACHE_DEV_MAX > 0 )
98 static byte processDiscoveryStoreReq ( byte *data );
99 static byte processSimpleDescStoreReq ( byte *data, byte idx );
100 static void processFindNodeCacheReq ( byte *data );
101
102 static byte getCnt ( void );
103 static byte getIdx ( uint16 addr );
104 static byte getNth ( byte Nth );
105 static byte getIdxExt ( byte *ieee );
106 static byte getIdxEP ( byte idx, byte ep );
107 static byte purgeAddr ( uint16 addr );
108 static byte purgeIEEE ( byte *ieee );
109 #endif
110
111 /*********************************************************************
112 * LOCAL VARIABLES
113 */
114
115 static afAddrType_t msgAddr;
116 static byte radius;
117 static byte tranSeq;
118 static byte secUse;
119
120 #if ( CACHE_DEV_MAX > 0 )
121 static uint16 NwkAddr[CACHE_DEV_MAX];
122 static byte ExtAddr[CACHE_DEV_MAX][Z_EXTADDR_LEN];
123 static uint32 Expiry[CACHE_DEV_MAX];
124 static NodeDescriptorFormat_t NodeDesc[CACHE_DEV_MAX];
125 static NodePowerDescriptorFormat_t NodePwr[CACHE_DEV_MAX];
126 static byte EPCnt[CACHE_DEV_MAX];
127 static byte EPArr[CACHE_DEV_MAX][CACHE_EP_MAX];
128 static SimpleDescriptionFormat_t SimpDesc[CACHE_DEV_MAX][CACHE_EP_MAX];
129 static uint16 InClusters[CACHE_DEV_MAX][CACHE_EP_MAX][CACHE_CR_MAX];
130 static uint16 OutClusters[CACHE_DEV_MAX][CACHE_EP_MAX][CACHE_CR_MAX];
131 #elif ( CACHE_DEV_MAX == 0 )
132 static uint16 cacheFindAddr[FIND_RSP_MAX];
133 static byte EPArr[CACHE_EP_MAX];
134 static byte EPCnt;
135 static byte cacheCnt; // Count of responding cache devices.
136 static byte cacheRsp; // Results of last discovery cache request.
137 #endif
138
139
140
141 #if ( CACHE_DEV_MAX > 0 )
142 /*********************************************************************
143 * @fn processDiscoveryStoreReq
144 *
145 * @brief Process a Discovery_store_req
146 *
147 * @return none
148 */
149 static byte processDiscoveryStoreReq( byte *data )
150 {
151 uint16 aoi = BUILD_UINT16( data[0], data[1] );
152 byte rtrn = ZDP_INSUFFICIENT_SPACE;
153 byte idx;
154
155 data += 2;
156 // First purge any outdated cache with this network address or IEEE.
157 purgeAddr( aoi );
158 purgeIEEE( data );
159
160 // If an invalid addr cannot be found, the cache arrays are full.
161 if ( (idx = getIdx( INVALID_NODE_ADDR )) != CACHE_DEV_MAX )
162 {
163 osal_cpyExtAddr( ExtAddr[idx], data );
164 data += Z_EXTADDR_LEN;
165
166 if ( (*data++ == sizeof( NodeDescriptorFormat_t )) &&
167 (*data++ == sizeof( NodePowerDescriptorFormat_t )) &&
168 (*data++ <= CACHE_EP_MAX) &&
169 (*data < CACHE_EP_MAX) )
170 {
171 rtrn = ZDP_SUCCESS;
172 NwkAddr[idx] = aoi;
173 Expiry[idx] = 0; //TBD - what value & how to keep alive?
174 EPCnt[idx] = 0;
175 }
176 }
177
178 return rtrn;
179 }
180
181 /*********************************************************************
182 * @fn processSimpleDescStoreReq
183 *
184 * @brief Process a Simple_Desc_store_req
185 *
186 * @return none
187 */
188 static byte processSimpleDescStoreReq( byte *data, byte idx )
189 {
190 byte rtrn = ZDP_INSUFFICIENT_SPACE;
191 SimpleDescriptionFormat_t desc;
192
193 // Skip first byte == total length of descriptor.
194 if (ZDO_ParseSimpleDescBuf( data+1, &desc )) {
195 // malloc failed -- we can't do this...
196 return ZDP_NOT_PERMITTED;
197 }
198
199 if ( (desc.AppNumInClusters <= CACHE_CR_MAX) &&
200 (desc.AppNumOutClusters <= CACHE_CR_MAX) )
201 {
202 byte epIdx = getIdxEP( idx, desc.EndPoint );
203
204 if ( epIdx == CACHE_EP_MAX )
205 {
206 rtrn = ZDP_NOT_PERMITTED;
207 }
208 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -