123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- /**************************************************************************************************
- Filename: nwk_bufs.h
- Revised: $Date: 2010-10-19 12:38:16 -0700 (Tue, 19 Oct 2010) $
- Revision: $Revision: 24150 $
- Description: Network buffer utility functions.
- 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_BUFS_H
- #define NWK_BUFS_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*********************************************************************
- * INCLUDES
- */
- #include "ZComDef.h"
- #include "ZMAC.h"
- /*********************************************************************
- * MACROS
- */
- /*********************************************************************
- * CONSTANTS
- */
- // Data buffer queue states
- #define NWK_DATABUF_INIT 0 // Initialized but not queued.
- #define NWK_DATABUF_WAITING 1 // Waiting to be sent out.
- #define NWK_DATABUF_SENT 2 // Sent to the MAC - waiting for confirm.
- #define NWK_DATABUF_CONFIRMED 3 // Waiting to be resent or deleted.
- #define NWK_DATABUF_SCHEDULED 4 // Queued and waiting N msecs til send.
- #define NWK_DATABUF_HOLD 5 // Hold msg for sleeping end device.
- #define NWK_DATABUF_DONE 6 // Waiting to be deleted.
- // Handle options
- #define HANDLE_NONE 0x0000u
- #define HANDLE_CNF 0x0001u
- #define HANDLE_WAIT_FOR_ACK 0x0002u
- #define HANDLE_BROADCAST 0x0004u
- #define HANDLE_REFLECT 0x0008u
- #define HANDLE_DELAY 0x0010u
- #define HANDLE_HI_DELAY 0x0020u
- //#define HANDLE_DIRECT 0x0040
- #define HANDLE_SKIP_ROUTING 0x0040u
- #define HANDLE_RTRY_MASK 0x0380u
- #define HANDLE_RTRY_SHIFT 7
- #define HANDLE_FORCE_INDIRECT 0x0400u
- #define HANDLE_INDIRECT_HOLD 0x0800u // A bit indicating the indirect msg has been in HOLD state
- #define HANDLE_MCAST 0x1000u
- #define HANDLE_MASK \
- ~( HANDLE_CNF | HANDLE_WAIT_FOR_ACK | HANDLE_BROADCAST | HANDLE_DELAY | \
- HANDLE_HI_DELAY | HANDLE_FORCE_INDIRECT | HANDLE_MCAST)
- /*********************************************************************
- * TYPEDEFS
- */
- typedef struct
- {
- uint8 type;
- void* load;
- } nwkDB_UserData_t;
- typedef struct
- {
- ZMacDataReq_t *pDataReq;
- void *next;
- uint16 dataX;
- uint16 handleOptions; // Packet type options
- byte nsduHandle; // unique ID
- byte state; // state of buffer
- byte retries; // number of retries
- nwkDB_UserData_t ud; // user data
- uint16 macSrcAddr; // original MAC src address
- } nwkDB_t;
- typedef uint8 (*nwkDB_FindMatchCB_t)( nwkDB_t* db, void* mf );
- /*********************************************************************
- * GLOBAL VARIABLES
- */
- /*********************************************************************
- * FUNCTIONS
- */
- /*
- * Variable initialization
- */
- extern void nwkbufs_init( void );
- /*
- * Send the next buffer
- */
- extern void nwk_SendNextDataBuf( void );
- /*
- * Determines whether or not the data buffers are full.
- */
- extern byte nwk_MacDataBuffersFull( void );
- /*
- * Add buffer to the send queue, if already in queue - set
- */
- extern uint8 nwk_MacDataBuffersAdd( nwkDB_t* db, uint8 sent );
- /*
- * Deallocate the sent MAC Data Buffer
- *
- */
- extern uint8 nwk_MacDataBuffersDealloc( byte handle );
- /*********************************************************************
- * Queued Allocated functions
- */
- /*
- * Create the header
- */
- extern nwkDB_t *nwkDB_CreateHdr( ZMacDataReq_t *pkt, byte handle, uint16 handleOptions );
- /*
- * Add a buffer to the queue.
- */
- extern ZStatus_t nwkDB_Add( nwkDB_t *pkt, byte type, uint16 dataX );
- /*
- * Find the number of buffers with type.
- */
- extern byte nwkDB_CountTypes( byte type );
- /*
- * Find the next type in list.
- */
- extern nwkDB_t *nwkDB_FindNextType( nwkDB_t *pkt, byte type, byte direct );
- /*
- * Find the rec with handle.
- */
- extern nwkDB_t *nwkDB_FindHandle( byte handle );
- /*
- * Find the rec with destination address.
- */
- extern nwkDB_t *nwkDB_FindDstAddr( uint16 addr );
- /*
- * Find the rec with MAC data packet.
- */
- extern nwkDB_t *nwkDB_FindDataPkt( ZMacDataReq_t *pkt );
- /*
- * Find a buffer match.
- */
- extern nwkDB_t* nwkDB_FindMatch( nwkDB_FindMatchCB_t cb, void* mf );
- /*
- * Find and remove from the list. This function doesn't
- * free the memory used by the record.
- */
- extern void nwkDB_RemoveFromList( nwkDB_t *pkt );
- /*
- * Frees the data, mac packet and hdr
- */
- extern void nwkDB_DeleteRecAll( nwkDB_t *rec );
- /*
- * Setup hold state and timer tick.
- */
- extern void nwkbufs_hold( nwkDB_t *rec );
- /*
- * Return cntIndirectHolding
- */
- extern uint8 nwkDB_ReturnIndirectHoldingCnt( void );
- /*
- * Count Indirect held message
- */
- extern uint8 nwkDB_CountIndirectHold( void );
- /*
- * Delete all records and reset queue
- */
- extern void nwkbufs_reset( void );
- /*
- * Stub to load the user frame data
- */
- extern void* nwkDB_UserDataLoad( nwkDB_UserData_t* ud );
- /*********************************************************************
- * Broadcast Message Queue functions
- */
- /*
- * Add a broadcast data indication to the network broadcast queue
- */
- extern uint8 nwk_broadcastSend( uint8 *msg_ptr );
- /*
- * Remove a broadcast data indication to the network broadcast queue
- */
- extern uint8 *nwk_broadcastReceive( void );
- /*********************************************************************
- *********************************************************************/
- #ifdef __cplusplus
- }
- #endif
- #endif /* NWK_BUFS_H */
|