INVALID_NEIGHBOR_ADDR = 0xff,
// if we don't know the link quality, we need to return a value so
// large that it will not be used to form paths
- VERY_LARGE_ETX_VALUE = 0xff,
+ VERY_LARGE_ETX_VALUE = 0xffff,
// decay the link estimate using this alpha
// we use a denominator of 10, so this corresponds to 0.2
ALPHA = 9,
// called when new beacon estimate is done
// also called when new DEETX estimate is done
void updateETX(neighbor_table_entry_t *ne, uint16_t newEst) {
- ne->etx = (ALPHA * ne->etx + (10 - ALPHA) * newEst + 5)/10;
+ ne->etx = (ALPHA * ne->etx + (10 - ALPHA) * newEst)/10;
}
// transmissions
estETX = ne->data_total * 10;
} else {
- estETX = (10 * ne->data_total + 5) / ne->data_success;
+ estETX = (10 * ne->data_total) / ne->data_success;
ne->data_success = 0;
ne->data_total = 0;
}
}
- // ETX (Extra Expected number of Transmission)
+ // ETX (Expected number of Transmission)
// computeETX returns ETX*10
- uint8_t computeETX(uint8_t q1) {
+ uint16_t computeETX(uint8_t q1) {
uint16_t q;
if (q1 > 0) {
q = 2500 / q1;
totalPkt = minPkt;
}
if (totalPkt == 0) {
- ne->inquality = (ALPHA * ne->inquality + 5) / 10;
+ ne->inquality = (ALPHA * ne->inquality) / 10;
} else {
- newEst = (250UL * ne->rcvcnt + 5) / totalPkt;
- dbg("LI,LITest", " %hu: %hhu -> %hhu", ne->ll_addr, ne->inquality, (ALPHA * ne->inquality + (10-ALPHA) * newEst + 5)/10);
- ne->inquality = (ALPHA * ne->inquality + (10-ALPHA) * newEst + 5)/10;
+ newEst = (250UL * ne->rcvcnt) / totalPkt;
+ dbg("LI,LITest", " %hu: %hhu -> %hhu", ne->ll_addr, ne->inquality, (ALPHA * ne->inquality + (10-ALPHA) * newEst)/10);
+ ne->inquality = (ALPHA * ne->inquality + (10-ALPHA) * newEst)/10;
}
ne->rcvcnt = 0;
ne->failcnt = 0;
command bool isNeighborCongested(am_addr_t n);
command uint8_t numNeighbors();
- command uint16_t getNeighborLinkQuality(uint8_t neighbor);
- command uint16_t getNeighborRouteQuality(uint8_t neighbor);
- command am_addr_t getNeighborAddr(uint8_t neighbor);
+ command uint16_t getNeighborLinkQuality(uint8_t n);
+ command uint16_t getNeighborRouteQuality(uint8_t n);
+ command am_addr_t getNeighborAddr(uint8_t n);
}