Repaired missing includes in Bcp.h, Stack module and interface was also missing.
[tinyos:tinyos-2_x-contrib.git] / usc / bcp / src / Bcp.h
1 #ifndef BCP_H
2 #define BCP_H
3
4 #include "AM.h"
5 #include <message.h>
6
7 /**
8  * PKT_NORMAL: Indicates that a BCP packet contains source-originated data.
9  * PKT_NULL: Indicates that a BCP packet was dropped, and a subsequent virtual
10  *           packet was eventually forwarded.
11  */
12 enum{
13   PKT_NORMAL = 1,
14   PKT_NULL   = 2
15 };
16
17 /*
18  * The number of times the ForwardingEngine will try to
19  * transmit a packet before giving up if the link layer
20  * supports acknowledgments. If the link layer does
21  * not support acknowledgments it sends the packet once.
22  */
23 enum {
24   BEACON_TIME        = 5000,  // Milliseconds
25   FAST_BEACON_TIME   = 35,    // Milliseconds
26   LOG_UPDATE_TIME    = 1000,  // Milliseconds
27   REROUTE_TIME       = 50,   // Milliseconds
28   MAX_RETX_ATTEMPTS  = 5,    // Maximum retransmit count per link
29   ROUTING_TABLE_SIZE = 0x30,  // Max Neighbor Count
30   FORWARDING_QUEUE_SIZE = 12, // Maximum forwarding queue size
31   SNOOP_QUEUE_SIZE   = 0x5,   // Maximum snoop queue size
32   MAX_FWD_DLY        = 40,    // Milliseconds of delay to forward per delay packet
33   FWD_DLY_PKT_COUNT  = 20,    // Number of estimated packet xmission times to wait between delayPackets
34   LINK_EST_ALPHA     = 9,     // Decay parameter. 9 = 90% weight of previous rate Estimation
35   LINK_LOSS_ALPHA    = 90,    // Decay parameter. 90 = 90% weight of previous link loss Estimate
36   LINK_LOSS_V        = 2,    // V Value used to weight link losses in Lyapunov Calculation
37   PER_HOP_MAC_DLY    = 10     // Typical per-hop MAC delay of successful transmission on Tmote Sky 
38 };
39
40 enum {
41     // AM types:
42     AM_BCP_BEACON  = 0x90,
43     AM_BCP_DATA    = 0x91,
44     AM_BCP_DELAY   = 0x92
45 };
46
47 /*
48  * The network header that the ForwardingEngine introduces.
49  */
50 typedef nx_struct {
51   nx_uint32_t         bcpDelay;          // Delay experienced by this packet
52   nx_uint16_t         bcpBackpressure;   // Node backpressure measurement for neighbors
53   nx_uint16_t         nhBackpressure;    // Next hop Backpressure, used by STLE, overheard by neighbors
54   nx_uint16_t         txCount;           // Total transmission count experienced by the packet
55   nx_uint16_t         hdrChecksum;       // Checksum over origin, hopCount, and originSeqNo
56   nx_am_addr_t        origin;
57   nx_uint8_t          hopCount;          // End-to-end hop count experienced by the packet
58   nx_uint8_t          originSeqNo;
59   nx_uint8_t          pktType;           // PKT_NORMAL | PKT_NULL
60   nx_uint8_t          nodeTxCount;       // Incremented every tx by this node, to determine bursts for STLE
61   nx_am_addr_t        burstNotifyAddr;   // In the event of a burst link available detect, set neighbor addr, else set self addr
62 } bcp_data_header_t;
63
64 /*
65  * The network header that the Beacons use.
66  */
67 typedef nx_struct {
68   nx_uint16_t         bcpBackpressure;
69 } bcp_beacon_header_t;
70
71 /*
72  * The network header that delay packets use.
73  */
74 typedef nx_struct {
75   nx_uint32_t bcpTransferDelay;
76   nx_uint32_t bcpBackpressure; 
77   nx_uint8_t  delaySeqNo;
78   nx_uint8_t  avgHopCount;      // Exponental moving average of hop count seen by this node
79 } bcp_delay_header_t;
80
81 /*
82  * Defines used to determine the source of packets within
83  *  the forwarding queue.  
84  */
85 enum {
86     LOCAL_SEND = 0x1,
87     FORWARD    = 0x2,
88 };
89
90 /*
91  * An element in the ForwardingEngine send queue.
92  * The client field keeps track of which send client 
93  * submitted the packet or if the packet is being forwarded
94  * from another node (client == 255). Retries keeps track
95  * of how many times the packet has been transmitted.
96  */
97 typedef struct {
98   uint32_t bcpArrivalDelay;
99   uint32_t arrivalTime;
100   uint32_t firstTxTime;
101   uint32_t lastTxTime;
102   uint8_t  source;
103   message_t * ONE_NOK msg;
104   uint8_t  txCount;
105 } fe_queue_entry_t;
106
107 /**
108  * This structure is used by the routing engine to store
109  *  the routing table.
110  */
111 typedef struct {
112   uint16_t  backpressure;
113   uint16_t  linkPacketTxTime; // Exponential moving average in 100US units
114   uint16_t  linkETX;          // Exponential moving average of ETX (in 100ths of expected transmissions)
115   uint8_t   lastTxNoStreakID;  // Used to detect bursts of 3 successful receptions from a neighbor
116   uint8_t   txNoStreakCount;  // Used to detect bursts of 3 successful receptions from a neighbor
117   am_addr_t neighbor;
118   bool      isBurstyNow;      // Indicates whether the neighbor has notified of current "goodness" of link
119 } routing_table_entry;
120
121 /**
122  * This structure is used to track the last
123  *  <source, packetID, hopCount> triplet received
124  *  from a given neighbor.
125  */
126 typedef struct{
127   am_addr_t neighbor;
128   am_addr_t origin;
129   uint8_t   originSeqNo;
130   uint8_t   hopCount;
131 } latestForwarded_table_entry;
132
133 #endif /* BCP_H */