📄 mt_nwk.lst
字号:
129 uint16 dstAddr;
130 #endif
131 #if defined ( MT_NWK_FUNC ) //NWK commands
132 byte attr;
133 byte index;
134 byte dataLen;
135 byte *dataPtr;
136 uint32 channelList;
137 byte databuf[SPI_RESP_LEN_NWK_DEFAULT + NWK_DEFAULT_GET_RESPONSE_LEN];
138 #if defined( ZDO_COORDINATOR )
139 uint16 panId;
140 #else
141 byte i,j;
142 #endif
143 #endif // MT_NWK_FUNC
144
145 len = SPI_0DATA_MSG_LEN + SPI_RESP_LEN_NWK_DEFAULT;
146 ret = (byte)ZSuccess;
147
148 switch (cmd_id)
149 {
150 #if defined( RTR_NWK )
151 case SPI_CMD_NLME_PERMIT_JOINING_REQ:
152 //The only information is PermitDuration
153 ret = (byte)NLME_PermitJoiningRequest( *pData );
154 break;
155 #endif
156
157 #if defined ( MT_NWK_FUNC ) //NWK commands
158 case SPI_CMD_NWK_INIT:
159 nwk_init( NWK_TaskID );
160 break;
161
162 case SPI_CMD_NLDE_DATA_REQ:
163 //First read the DstAddr
164 dstAddr = BUILD_UINT16( pData[1], pData[0] );
165 pData += sizeof( dstAddr );
166
167 //Get the NSDU details
168 dataLen = *pData++;
169 dataPtr = pData;
170
171 /* For now, skip a length of ZTEST_DEFAULT_DATA_LEN, instead of dataLen.
172 In future ZTOOL releases the data buffer will be only as long as dataLen */
173
174 //pData += dataLen;
175 pData += ZTEST_DEFAULT_DATA_LEN;
176
177 /* pData[0] = NSDUHandlde
178 pData[1] = NSDUHandleOptions
179 pData[3] = SecurityEnable
180 pData[4] = DiscoverRoute
181 pData[5] = RadiusCounter */
182
183 ret = (byte)MT_Nwk_DataRequest( dstAddr, dataLen, dataPtr, pData[0],
184 BUILD_UINT16( pData[2], pData[1] ),
185 pData[3], pData[4], pData[5]);
186 break;
187
188 #if defined( ZDO_COORDINATOR )
189 case SPI_CMD_NLME_INIT_COORD_REQ:
190 panId = BUILD_UINT16( pData[1], pData[0] );
191
192 MT_ReverseBytes( &pData[2], 4 );
193 channelList = osal_build_uint32( &pData[2], 4 );
194
195 ret = (byte)NLME_NetworkFormationRequest( panId, channelList, pData[6], pData[7],
196 pData[8], pData[9] );
197 break;
198 #endif // ZDO
199
200 #if defined( RTR_NWK )
201 case SPI_CMD_NLME_START_ROUTER_REQ:
202 // NOTE: first two parameters are not used, see NLMEDE.h for details
203 ret = (byte)NLME_StartRouterRequest( pData[0], pData[1], pData[2] );
204 break;
205 #endif // RTR
206
207 case SPI_CMD_NLME_JOIN_REQ:
208 ret = (byte)NLME_JoinRequest( dummyExPANID, BUILD_UINT16( pData[1], pData[0] ), pData[2], pData[3] );
209 if ( pData[3] & CAPINFO_RCVR_ON_IDLE )
210 {
211 // The receiver is on, turn network layer polling off.
212 NLME_SetPollRate( 0 );
213 NLME_SetQueuedPollRate( 0 );
214 NLME_SetResponseRate( 0 );
215 }
216 break;
217
218 case SPI_CMD_NLME_LEAVE_REQ:
219 {
220 NLME_LeaveReq_t req;
221 // if extAddr is all zeros, it means null pointer..
222 for( index = 0; ( ( index < Z_EXTADDR_LEN ) &&
223 ( pData[index] == 0 ) ) ; index++ );
224 if ( index == Z_EXTADDR_LEN )
225 {
226 req.extAddr = NULL;
227 }
228 else
229 {
230 MT_ReverseBytes( pData, Z_EXTADDR_LEN );
231 req.extAddr = pData;
232 }
233 pData += Z_EXTADDR_LEN;
234
235 req.removeChildren = FALSE;
236 req.rejoin = FALSE;
237 req.silent = FALSE;
238 ret = (byte)NLME_LeaveReq( &req );
239 }
240 break;
241
242 case SPI_CMD_NLME_RESET_REQ:
243 //Its a direct call to reset NWK
244 ret = (byte)NLME_ResetRequest();
245 break;
246
247 case SPI_CMD_NLME_GET_REQ:
248 attr = *pData++;
249 index = *pData;
250 databuf[0] = (byte)NLME_GetRequest( (ZNwkAttributes_t )attr, index, &databuf[1] );
251 len = SPI_0DATA_MSG_LEN + SPI_RESP_LEN_NWK_DEFAULT + NWK_DEFAULT_GET_RESPONSE_LEN;
252 MT_BuildAndSendZToolResponse( len, (SPI_RESPONSE_BIT | SPI_CMD_NLME_GET_REQ),
253 (SPI_RESP_LEN_NWK_DEFAULT + NWK_DEFAULT_GET_RESPONSE_LEN), databuf );
254 return; // Don't return to this function
255
256 case SPI_CMD_NLME_SET_REQ:
257 ret = (byte)NLME_SetRequest( (ZNwkAttributes_t)pData[0], pData[1], &pData[2] );
258 osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 1000 );
259 break;
260
261 case SPI_CMD_NLME_NWK_DISC_REQ:
262 MT_ReverseBytes( pData, 4 );
263 ret = (byte)NLME_NetworkDiscoveryRequest( osal_build_uint32( pData, 4 ), pData[4] );
264 break;
265
266 #if !defined( ZDO_COORDINATOR )
267 case SPI_CMD_NLME_ORPHAN_JOIN_REQ:
268 // Channel list bit mask
269 MT_ReverseBytes( pData, 4 );
270 channelList = osal_build_uint32( pData, 4 );
271
272 // Count number of channels
273 j = attr = 0;
274 for ( i = 0; i < ED_SCAN_MAXCHANNELS; i++ )
275 {
276 if ( channelList & (1 << i) )
277 {
278 j++;
279 attr = i;
280 }
281 }
282
283 // If only one channel specified...
284 if ( j == 1 )
285 {
286 _NIB.scanDuration = pData[4];
287 _NIB.nwkLogicalChannel = attr;
288 _NIB.channelList = channelList;
289 if ( !_NIB.CapabilityInfo )
290 _NIB.CapabilityInfo = ZDO_Config_Node_Descriptor.CapabilityFlags;
291
292 devState = DEV_NWK_ORPHAN;
293 ret = (byte)NLME_OrphanJoinRequest( channelList, pData[4] );
294 }
295 else
296 ret = ZNwkInvalidParam;
297 break;
298 #endif // !ZDO
299
300 #if defined (RTR_NWK)
301 case SPI_CMD_NLME_ROUTE_DISC_REQ:
302 ret = (byte)NLME_RouteDiscoveryRequest( BUILD_UINT16( pData[1], pData[0] ), pData[2] );
303 break;
304
305 case SPI_CMD_NLME_DIRECT_JOIN_REQ:
306 MT_ReverseBytes( pData, 8 );
307 ret = (byte)NLME_DirectJoinRequest( pData, pData[8] );
308 break;
309 #endif // RTR
310
311 #endif // MT_NWK_FUNC
312
313 default:
314 ret = (byte)ZUnsupportedMode;
315 break;
316 }
317
318 #if defined ( MT_NWK_FUNC )
319 MT_SendSPIRespMsg( ret, cmd_id, len, SPI_RESP_LEN_NWK_DEFAULT );
320 #endif
321 (void)len;
322 (void)ret;
323 }
\ 000000 02.... LJMP ?BRET
324
325 #if defined ( MT_NWK_CB_FUNC ) //NWK callback commands
326 /*********************************************************************
327 * @fn nwk_MTCallbackSubDataConfirm
328 *
329 * @brief Process the callback subscription for NLDE-DATA.confirm
330 *
331 * @param nsduHandle - APS handle
332 * @param Status - result of data request
333 *
334 * @return none
335 */
336 void nwk_MTCallbackSubDataConfirm(byte nsduHandle, ZStatus_t status )
337 {
338 byte buf[2];
339
340 buf[0] = nsduHandle;
341 buf[1] = (byte)status;
342
343 MT_BuildAndSendZToolCB( SPI_CB_NLDE_DATA_CNF, 2, buf );
344 }
345
346 /*********************************************************************
347 * @fn nwk_MTCallbackSubDataIndication
348 *
349 * @brief Process the callback subscription for NLDE-DATA.indication
350 *
351 * @param SrcAddress - 16 bit address
352 * @param nsduLength - Length of incoming data
353 * @param nsdu - Pointer to incoming data
354 * @param LinkQuality - Link quality measured during
355 * reception.
356 * @param SecuritySuite - Security Suite Applied
357 * @param SecurityStatus - MLDE_SUCCESS if security process
358 * successfull, MLDE_FAILURE if not.
359 *
360 * @return none
361 */
362 void nwk_MTCallbackSubDataIndication( uint16 SrcAddress, int16 nsduLength,
363 byte *nsdu, byte LinkQuality )
364 {
365 byte *msgPtr;
366 byte *msg;
367 byte msgLen;
368
369 msgLen = sizeof( uint16 ) + sizeof( uint8 ) + ZTEST_DEFAULT_DATA_LEN
370 + sizeof( byte);
371
372 msgPtr = osal_mem_alloc( msgLen );
373 if ( msgPtr )
374 {
375 //Fill up the data bytes
376 msg = msgPtr;
377
378 //First fill in details
379 *msg++ = HI_UINT16( SrcAddress );
380 *msg++ = LO_UINT16( SrcAddress );
381
382 //Since the max packet size is less than 255 bytes, a byte is enough
383 //to represent nsdu length
384 *msg++ = ( uint8 ) nsduLength;
385
386 osal_memset( msg, NULL, ZTEST_DEFAULT_DATA_LEN ); // Clear the mem
387 osal_memcpy( msg, nsdu, nsduLength );
388 msg += ZTEST_DEFAULT_DATA_LEN;
389
390 *msg++ = LinkQuality;
391
392 MT_BuildAndSendZToolCB( SPI_CB_NLDE_DATA_IND, msgLen, msgPtr );
393
394 osal_mem_free( msgPtr );
395 }
396 }
397
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -