From b24866225a6301d3a663f874725e83c012dc25d3 Mon Sep 17 00:00:00 2001 From: Florent Duchon Date: Wed, 26 Dec 2012 17:36:00 +0100 Subject: digital/beacon: add bitcloud stack into common directory digital/zigbit --- .../stack/Components/NWK/include/private/nwkTx.h | 209 +++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 digital/zigbit/bitcloud/stack/Components/NWK/include/private/nwkTx.h (limited to 'digital/zigbit/bitcloud/stack/Components/NWK/include/private/nwkTx.h') diff --git a/digital/zigbit/bitcloud/stack/Components/NWK/include/private/nwkTx.h b/digital/zigbit/bitcloud/stack/Components/NWK/include/private/nwkTx.h new file mode 100644 index 00000000..d2e35d4e --- /dev/null +++ b/digital/zigbit/bitcloud/stack/Components/NWK/include/private/nwkTx.h @@ -0,0 +1,209 @@ +/**************************************************************************//** + \file nwkTx.h + + \brief Interface of NWK transmission. + + \author + Atmel Corporation: http://www.atmel.com \n + Support email: avr@atmel.com + + Copyright (c) 2008-2011, Atmel Corporation. All rights reserved. + Licensed under Atmel's Limited License Agreement (BitCloudTM). + + \internal + History: + 2007-06-14 V. Panov - Created. + 2008-12-10 Max Gekk - Reduction of the used RAM. + 2009-10-16 Max Gekk - Redesign. + Last change: + $Id: nwkTx.h 17448 2011-06-09 13:53:59Z ataradov $ + ******************************************************************************/ +#if !defined _NWK_TX_H +#define _NWK_TX_H + +/****************************************************************************** + Includes section + ******************************************************************************/ +#include +#include +#include + +/****************************************************************************** + Definition section + ******************************************************************************/ +/** List of transmission parameters: delay type, prepare and confirm functions. + * NOTE: Offset of tx parameters in this list must be equal tx id. */ +#define NWK_TX_PARAMETERS \ +{ \ + NWK_LINK_STATUS_TX_PARAMETERS, /* NWK_LINK_STATUS_TX_ID */ \ + NWK_BROADCAST_STATUS_TX_PARAMETERS, /* NWK_BROADCAST_STATUS_TX_ID */ \ + NWK_UNICAST_STATUS_TX_PARAMETERS, /* NWK_UNICAST_STATUS_TX_ID */ \ + NWK_JOIN_REQ_TX_PARAMETERS, /* NWK_JOIN_REQ_TX_ID */ \ + NWK_ADDR_CONFLICT_JOIN_RESP_TX_PARAMETERS, /* NWK_ADDR_CONFLICT_JOIN_RESP_TX_ID */ \ + NWK_JOIN_RESP_TX_PARAMETERS, /* NWK_JOIN_RESP_TX_ID */ \ + NWK_LEAVE_ITSELF_TX_PARAMETERS, /* NWK_LEAVE_ITSELF_TX_ID */ \ + NWK_LEAVE_CHILD_TX_PARAMETERS, /* NWK_LEAVE_CHILD_TX_ID */ \ + NWK_REPORT_TX_PARAMETERS, /* NWK_REPORT_TX_ID */ \ + NWK_UPDATE_TX_PARAMETERS, /* NWK_UPDATE_TX_ID */ \ + NWK_ROUTE_REPLY_TX_PARAMETERS, /* NWK_ROUTE_REPLY_TX_ID */ \ + NWK_INITIAL_ROUTE_REQ_TX_PARAMETERS, /* NWK_INITIAL_ROUTE_REQ_TX_ID */\ + NWK_INITIAL_MANYTOONE_ROUTE_REQ_TX_PARAMETERS, /* NWK_INITIAL_MANYTOONE_ROUTE_REQ_TX_ID */\ + NWK_ROUTE_REQ_TX_PARAMETERS, /* NWK_ROUTE_REQ_TX_ID */ \ + NWK_MANYTOONE_ROUTE_REQ_TX_PARAMETERS, /* NWK_MANYTOONE_ROUTE_REQ_TX_ID */\ + NWK_ROUTE_RECORD_TX_PARAMETERS, /* NWK_ROUTE_RECORD_TX_ID */ \ + NWK_MANY_TO_ONE_STATUS_TX_PARAMETERS, /* NWK_MANY_TO_ONE_STATUS_TX_ID */\ + \ + NWK_UNICAST_COMMAND_TRANSIT_TX_PARAMETERS, /* NWK_UNICAST_COMMAND_TRANSIT_TX_ID */ \ + NWK_UNICAST_DATA_TRANSIT_TX_PARAMETERS, /* NWK_UNICAST_DATA_TRANSIT_TX_ID */ \ + NWK_BROADCAST_TRANSIT_TX_PARAMETERS, /* NWK_BROADCAST_TRANSIT_TX_ID */ \ + NWK_MULTICAST_MEMBER_TRANSIT_TX_PARAMETERS, /* NWK_MULTICAST_MEMBER_TRANSIT_TX_ID */\ + NWK_SOURCE_ROUTE_TRANSIT_TX_PARAMETERS, /* NWK_SOURCE_ROUTE_TRANSIT_TX_ID */ \ + NWK_ROUTE_RECORD_TRANSIT_TX_PARAMETERS, /* NWK_ROUTE_RECORD_TRANSIT_TX_ID */ \ + NWK_MANY_TO_ONE_TRANSIT_STATUS_TX_PARAMETERS, /* NWK_MANY_TO_ONE_TRANSIT_STATUS_TX_ID */\ + \ + NWK_UNICAST_DATA_TX_PARAMETERS, /* NWK_UNICAST_DATA_TX_ID */ \ + NWK_BROADCAST_DATA_TX_PARAMETERS, /* NWK_BROADCAST_DATA_TX_ID */ \ + NWK_MULTICAST_MEMBER_TX_PARAMETERS, /* NWK_MULTICAST_MEMBER_TX_ID */ \ + NWK_SOURCE_ROUTE_TX_PARAMETERS /* NWK_SOURCE_ROUTE_TX_ID */ \ +} + +/****************************************************************************** + Types section + ******************************************************************************/ +/** Identifiers of transmission requests. */ +typedef enum _NwkTxId_t +{ + NWK_LINK_STATUS_TX_ID = 0x00, + NWK_BROADCAST_STATUS_TX_ID = 0x01, + NWK_UNICAST_STATUS_TX_ID = 0x02, + NWK_JOIN_REQ_TX_ID = 0x03, + NWK_ADDR_CONFLICT_JOIN_RESP_TX_ID = 0x04, + NWK_JOIN_RESP_TX_ID = 0x05, + NWK_LEAVE_ITSELF_TX_ID = 0x06, + NWK_LEAVE_CHILD_TX_ID = 0x07, + NWK_REPORT_TX_ID = 0x08, + NWK_UPDATE_TX_ID = 0x09, + NWK_ROUTE_REPLY_TX_ID = 0x0A, + NWK_INITIAL_ROUTE_REQ_TX_ID = 0x0B, + NWK_INITIAL_MANYTOONE_ROUTE_REQ_TX_ID = 0x0C, + NWK_ROUTE_REQ_TX_ID = 0x0D, + NWK_MANYTOONE_ROUTE_REQ_TX_ID = 0x0E, + NWK_ROUTE_RECORD_TX_ID = 0x0F, + NWK_MANY_TO_ONE_STATUS_TX_ID = 0x10, + NWK_MAX_COMMAND_TX_ID = NWK_MANY_TO_ONE_STATUS_TX_ID, + + NWK_UNICAST_COMMAND_TRANSIT_TX_ID = 0x11, + NWK_UNICAST_DATA_TRANSIT_TX_ID = 0x12, + NWK_MULTICAST_NON_MEMBER_TRANSIT_TX_ID = NWK_UNICAST_DATA_TRANSIT_TX_ID, + NWK_BROADCAST_TRANSIT_TX_ID = 0x13, + NWK_MULTICAST_MEMBER_TRANSIT_TX_ID = 0x14, + NWK_SOURCE_ROUTE_TRANSIT_TX_ID = 0x15, + NWK_ROUTE_RECORD_TRANSIT_TX_ID = 0x16, + NWK_MANY_TO_ONE_TRANSIT_STATUS_TX_ID = 0x17, + + NWK_MIN_DATA_TX_ID = 0x18, + NWK_UNICAST_DATA_TX_ID = NWK_MIN_DATA_TX_ID, + NWK_MULTICAST_NON_MEMBER_TX_ID = NWK_UNICAST_DATA_TX_ID, + NWK_BROADCAST_DATA_TX_ID = 0x19, + NWK_MULTICAST_MEMBER_TX_ID = 0x1A, + NWK_SOURCE_ROUTE_TX_ID = 0x1B, + + NWK_MAX_TX_ID +} NwkTxId_t; + +/** Type of iterator for transmission identifiers. */ +typedef uint8_t NwkTxIdIter_t; + +/** Type of callback function for preparing an output packet. */ +typedef void (* NwkPrepareTxFunc_t)(NwkOutputPacket_t *const); +/** Type of callback function for confirmation of packet transmission. */ +typedef void (* NwkConfirmTxFunc_t)(NwkOutputPacket_t *const, + const NWK_Status_t); + +/** Internal variables of transmission component. */ +typedef struct _NwkTx_t +{ + /** Queue of output packets */ + QueueDescriptor_t queue; +} NwkTx_t; + +/** Internal states of output packet for debug. */ +typedef enum _NwkOutPktState_t +{ + NWK_OUTPKT_IN_QUEUE_STATE = 0x00, + NWK_OUTPKT_RDISCOVERY_STATE = 0x01, + NWK_OUTPKT_MAC_STATE = 0x02, + NWK_OUTPKT_DELAY_STATE = 0x03, + NWK_OUTPKT_ENCRYPT_STATE = 0x04, + NWK_OUTPKT_DECRYPT_STATE = 0x05, + NWK_OUTPKT_ROUTE_RECORD_STATE = 0x06 +} NwkOutPktState_t; + +/****************************************************************************** + Inline static functions prototypes section + ******************************************************************************/ +/**************************************************************************//** + \brief Is this packet a network data? + + \param[in] outPkt - pointer to the output network packet. + \return 'true' if this output packet is data packet otherwise return 'false'. + ******************************************************************************/ +INLINE bool nwkIsDataPacket(const NwkOutputPacket_t *const outPkt) +{ + assert(outPkt->txId < NWK_MAX_TX_ID, NWKTX_NWKISDATAPACKET0); + return NWK_MIN_DATA_TX_ID <= outPkt->txId; +} + +/****************************************************************************** + Prototypes section + ******************************************************************************/ +/**************************************************************************//** + \brief Request to transmit the output packet. + + \param[in] outPkt - pointer to the output network packet. + \return None. + ******************************************************************************/ +NWK_PRIVATE void nwkTxReq(NwkOutputPacket_t *const outPkt); + +/**************************************************************************//** + \brief Main task handler of the packet transmission component + ******************************************************************************/ +NWK_PRIVATE void nwkTxTaskHandler(void); + +/**************************************************************************//** + \brief Reset the packet transmission component. + ******************************************************************************/ +NWK_PRIVATE void nwkResetTx(void); + +/**************************************************************************//** + \brief Confirmation of packet transmission. + + \param[in] outPkt - pointer to output packet. + \param[in] status - network status of packet transmission. + + \return None. + ******************************************************************************/ +NWK_PRIVATE void nwkTxConf(NwkOutputPacket_t *const outPkt, + const NWK_Status_t status); + +/**************************************************************************//** + \brief Write default values to parameters of MAC_DataReq request. + + \param[in] outPkt - pointer to an output packet. + \return None. + ******************************************************************************/ +NWK_PRIVATE void nwkInitMacDataReq(NwkOutputPacket_t *const outPkt); + +/**************************************************************************//** + \brief Start packet transmission. + + \param[in] outPkt - pointer to output packet. + \param[in] encrypt - if 'true' then packet encrypting is required. + \return None. + ******************************************************************************/ +NWK_PRIVATE void nwkTransmitOutputPacket(NwkOutputPacket_t *const outPkt, + const bool encrypt); + +#endif /* _NWK_TX_H */ +/** eof nwkTx.h */ + -- cgit v1.2.3