smart-green-house/project_ZigBee/Components/stack/nwk/nwk.h

381 lines
12 KiB
C

/**************************************************************************************************
Filename: nwk.h
Revised: $Date: 2010-05-11 18:37:17 -0700 (Tue, 11 May 2010) $
Revision: $Revision: 22455 $
Description: Network layer logic component interface.
Copyright 2004-2010 Texas Instruments Incorporated. All rights reserved.
IMPORTANT: Your use of this Software is limited to those specific rights
granted under the terms of a software license agreement between the user
who downloaded the software, his/her employer (which must be your employer)
and Texas Instruments Incorporated (the "License"). You may not use this
Software unless you agree to abide by the terms of the License. The License
limits your use, and you acknowledge, that the Software may not be modified,
copied or distributed unless embedded on a Texas Instruments microcontroller
or used solely and exclusively in conjunction with a Texas Instruments radio
frequency transceiver, which is integrated into your product. Other than for
the foregoing purpose, you may not use, reproduce, copy, prepare derivative
works of, modify, distribute, perform, display or sell this Software and/or
its documentation for any purpose.
YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
Should you have any questions regarding your right to use this Software,
contact Texas Instruments Incorporated at www.TI.com.
**************************************************************************************************/
#ifndef NWK_H
#define NWK_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************************************************************
* INCLUDES
*/
#include "ZComDef.h"
#include "ZMAC.h"
#include "nwk_bufs.h"
#include "NLMEDE.h"
#include "ssp.h"
/*********************************************************************
* MACROS
*/
/*********************************************************************
* CONSTANTS
*/
//NWK event identifiers
#define MAC_SCAN_REQ 0x01
#define NWK_NETWORKSTART_REQ 0x02
#define MAC_ASSOCIATE_REQ 0x03
#define NWK_REMOTE_GET_REQ 0x04
#define NWK_REMOTE_SET_REQ 0x05
#define NWK_ASSOCIATE_RESP 0x06
#define NWK_DISASSOCIATE_REQ 0x07
#define NWK_AUTO_POLL_EVT 0x0001
#define NWK_NOT_EXPECTING_EVT 0x0004
#define RTG_TIMER_EVENT 0x0010
#define NWK_DATABUF_SEND 0x0020
#define NWK_BCAST_TIMER_EVT 0x0040
#define NWK_PERMITJOIN_EVT 0x0080
#define NWK_LINK_STATUS_EVT 0x0100
#define NWK_PID_UPDATE_EVT 0x0200
#define NWK_REJOIN_TIMEOUT_EVT 0x0400
#define NWK_MTO_RTG_REQ_EVT 0x0800
#define NWK_MTO_RTG_REQ_DELAY_EVT 0x1000
#define NWK_BROADCAST_MSG_EVT 0x2000
//NWK PACKET: FIELD IDENTIFIERS
#define NWK_CMD_ID 0
#define NWK_PARAMS_ID 1
#define NWK_REQ_ATTR_ID 1
#define NWK_REQ_ATTR 2
#define NWK_CMD_PYLD_BEGIN NWK_HEADER_LEN
#define NWK_DEVICE_LIST_LEN_FIELD NWK_HEADER_LEN + 1
// This value needs to be set or read from somewhere
#define ED_SCAN_MAXCHANNELS 27
// Max length of packet that can be sent to the MAC
#define MAX_DATA_PACKET_LEN MAC_MAX_FRAME_SIZE
#define NWK_TASK_ID 0
#define ASSOC_CAPABILITY_INFO 0
#define ASSOC_SECURITY_EN 0
#define DEF_DEST_EP 2
#define DEVICE_APPLICATION 0
#define MAC_ADDR_LEN 8
#define NWK_TXOPTIONS_ACK 0x01
#define NWK_TXOPTIONS_INDIRECT 0x04
// TxOptions for a data request - Indirect data and ACK required
#define NWK_TXOPTIONS_COORD (NWK_TXOPTIONS_ACK | NWK_TXOPTIONS_INDIRECT)
// TxOptions for a data request - Direct data and ACK required
//#define NWK_TXOPTIONS_COORD (NWK_TXOPTIONS_ACK)
//Assume value until defined By SuperApp or design spec
#define DEF_MAX_NUM_COORDINATORS 15 //Default value
#define DEF_CHANNEL_SCAN_BITMAP MAX_CHANNELS_24GHZ
#define SOFT_SCAN_DURATION 1 //in secs
#define DEF_SCAN_DURATION 2
#define NO_BEACONS 15
#define DEF_BEACON_ORDER NO_BEACONS
//#define DEF_BEACON_ORDER 10 // 15 seconds
//#define DEF_BEACON_ORDER 9 // 7.5 seconds
//#define DEF_BEACON_ORDER 8 // 3.75 seconds
//#define DEF_BEACON_ORDER 6 // 1 second
//#define DEF_BEACON_ORDER 1 // 30 millisecond
//#define DEF_SUPERFRAMEORDER 2
#define DEF_SUPERFRAMEORDER DEF_BEACON_ORDER
#define NWK_SECURITY_ENABLE FALSE
#define NWK_MAC_ASSOC_CNF_LEN 4
#define FIXED_SIZ_MAC_DATA_CNF 4 //Length of all fixed params except data
#define FIXED_SIZ_MAC_DATA_IND 26
#define FIXED_SIZ_MAC_SCAN_CNF 7
#define ALL_PAIRING_TABLE_ENTRIES 0
#define SIZE_OF_PAIRING_TABLE_ENTRY 6 //Two short addr and two endpts
#define SIZE_OF_DEVICE_LIST_ENTRY 2 //short addr in dev list is 2 bytes
#define NWK_SEND_TIMER_INTERVAL 2
#define NWK_BCAST_TIMER_INTERVAL 100 // NWK_BCAST_TIMER_EVT duration
#define INVALID_NODE_ADDR 0xFFFE
#define INVALID_PAN_ID 0xFFFE
// Link cost constants
#define DEF_LINK_COST 1 // Default link cost
#define MAX_LINK_COST 7 // max link cost
#define LINK_DOWN_COST 0 // link is down if txCost is equal to LINK_DOWN_COST
#define LINK_AGEOUT_COST 0 // Set link cost to zero if the neighbor age out
// Link counter constants
#define DEF_LINK_COUNTER ((gLINK_DOWN_TRIGGER+1) / 2) // Starting tx counter
#define LINK_ACTIVE_TRIGGER 2 // link is up if txCounter goes below this
//NWK Callback subscription IDs
#define CB_ID_APP_ANNOUNCE_CNF 0x00
#define CB_ID_APP_ASSOCIATE_CNF 0x01
#define CB_ID_APP_ASSOCIATE_IND 0x02
#define CB_ID_APP_DATA_CNF 0x03
#define CB_ID_APP_DATA_IND 0x04
#define CB_ID_APP_DISASSOCIATE_CNF 0x05
#define CB_ID_APP_DISASSOCIATE_IND 0x06
#define CB_ID_APP_NETWORK_DETECT_CNF 0x07
#define CB_ID_APP_REMOTE_GET_CNF 0x08
#define SPI_CB_APP_REMOTE_SET_CNF 0x09
#define CB_ID_APP_SERVICE_CNF 0x0a
#define CB_ID_APP_SERVICE_IND 0x0b
#define CB_ID_APP_START_CNF 0x0c
#define NUM_PING_ROUTE_ADDRS 12
#define PING_ROUTE_ADDRS_INDEX 8
#define NWK_GetNodeDepth() (_NIB.nodeDepth)
#define NWK_GetTreeDepth() (0)
#define BEACON_MAX_DEPTH 0x0F
/*********************************************************************
* TYPEDEFS
*/
typedef enum
{
NWK_INIT,
NWK_JOINING_ORPHAN,
NWK_DISC,
NWK_JOINING,
NWK_ENDDEVICE,
PAN_CHNL_SELECTION,
PAN_CHNL_VERIFY,
PAN_STARTING,
NWK_ROUTER,
NWK_REJOINING
} nwk_states_t;
// MAC Command Buffer types
typedef enum
{
MACCMDBUF_NONE,
MACCMDBUF_ASSOC_REQ,
MACCMDBUF_DISASSOC_REQ
} nwkMacCmds_t;
typedef struct
{
byte SequenceNum;
byte PassiveAckTimeout;
byte MaxBroadcastRetries;
byte MaxChildren;
byte MaxDepth;
byte MaxRouters;
byte dummyNeighborTable; // to make everything a byte!!
byte BroadcastDeliveryTime;
byte ReportConstantCost;
byte RouteDiscRetries;
byte dummyRoutingTable; // to make everything a byte!!
byte SecureAllFrames;
byte SecurityLevel;
#if defined ( COMPATIBILITY_221 ) // Obsolete - do not use
byte nwkAllFresh;
#endif
byte SymLink;
byte CapabilityFlags;
uint16 TransactionPersistenceTime;
byte nwkProtocolVersion;
// non-standard attributes
byte RouteDiscoveryTime;
byte RouteExpiryTime; // set to 0 to turn off expiration of routes
// non-settable
uint16 nwkDevAddress;
byte nwkLogicalChannel;
uint16 nwkCoordAddress;
byte nwkCoordExtAddress[Z_EXTADDR_LEN];
uint16 nwkPanId;
// Other global items - non-settable
nwk_states_t nwkState;
uint32 channelList;
byte beaconOrder;
byte superFrameOrder;
byte scanDuration;
byte battLifeExt;
uint32 allocatedRouterAddresses;
uint32 allocatedEndDeviceAddresses;
byte nodeDepth;
// Version 1.1 - extended PAN ID
uint8 extendedPANID[Z_EXTADDR_LEN];
// Network key flag
uint8 nwkKeyLoaded;
// Key information - Moved to nwkKeyInfo_t after ZStack 2.3.0
// If these elements are going to be reused make sure to consider the size
// of the structures and padding specific to the target where the stack is
// going to be running.
nwkKeyDesc spare1; // Not used
nwkKeyDesc spare2; // Not used
// Zigbee Pro extensions
uint8 nwkAddrAlloc;
uint8 nwkUniqueAddr;
uint8 nwkLinkStatusPeriod; // The time in seconds betwee link status
// command frames
uint8 nwkRouterAgeLimit; // The number of missed link status
// command frames before resetting the
// link cost to zero
uint8 nwkUseMultiCast;
// ZigBee Pro extentions: MTO routing
uint8 nwkIsConcentrator; // If set, then the device is concentrator
uint8 nwkConcentratorDiscoveryTime; // Time period between two consecutive MTO route discovery
uint8 nwkConcentratorRadius; // Broadcast radius of the MTO route discovery
#if defined ( COMPATIBILITY_221 ) // Obsolete - do not use
uint8 nwkMaxSourceRoute;
uint8 nwkSrcRtgExpiryTime;
#else
uint8 nwkAllFresh;
#endif
uint16 nwkManagerAddr; // Network Manager Address
uint16 nwkTotalTransmissions;
uint8 nwkUpdateId;
} nwkIB_t;
// Scanned PAN IDs to be used for Network Report command
typedef struct
{
uint16 panId;
void *next;
} nwkPanId_t;
/*********************************************************************
* GLOBAL VARIABLES
*/
extern nwkIB_t _NIB;
extern byte NWK_TaskID;
extern networkDesc_t *NwkDescList;
extern byte nwkExpectingMsgs;
extern byte nwk_beaconPayload[ZMAC_MAX_BEACON_PAYLOAD_LEN];
extern byte nwk_beaconPayloadSize;
extern uint8 nwkSendMTOReq;
/*********************************************************************
* FUNCTIONS
*/
/*
* NWK Task Initialization
*/
extern void nwk_init( byte task_id );
/*
* Calls mac_data_req then handles the buffering
*/
extern ZStatus_t nwk_data_req_send( nwkDB_t* db );
/*
* NWK Event Loop
*/
extern UINT16 nwk_event_loop( byte task_id, UINT16 events );
/*
* Process incoming command packet
*/
//extern void CommandPktProcessing( NLDE_FrameFormat_t *ff );
/*
* Start a coordinator
*/
extern ZStatus_t nwk_start_coord( void );
/*
* Free any network discovery data
*/
extern void nwk_desc_list_free( void );
extern networkDesc_t *nwk_getNetworkDesc( uint8 *ExtendedPANID, uint16 PanId, byte Channel );
extern networkDesc_t *nwk_getNwkDescList( void );
extern void nwk_BeaconFromNative(byte* buff, byte size, beaconPayload_t* beacon);
extern void nwk_BeaconToNative(beaconPayload_t* beacon, byte* buff, byte size);
/*
* Set NWK task's state
*/
extern void nwk_setStateIdle( uint8 idle );
/*
* Returns TRUE if NWK state is idle, FALSE otherwise.
*/
extern uint8 nwk_stateIdle( void );
/*********************************************************************
* Functionality - not to be called directly.
*/
extern void nwk_ScanJoiningOrphan( ZMacScanCnf_t *param );
extern void nwk_ScanPANChanSelect( ZMacScanCnf_t *param );
extern void nwk_ScanPANChanVerify( ZMacScanCnf_t *param );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* NWK_H */