+++ /dev/null
-/* $Id$ */
-/*
- * "Copyright (c) 2006 University of Southern California.
- * All rights reserved.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose, without fee, and without written
- * agreement is hereby granted, provided that the above copyright
- * notice, the following two paragraphs and the author appear in all
- * copies of this software.
- *
- * IN NO EVENT SHALL THE UNIVERSITY OF SOUTHERN CALIFORNIA BE LIABLE TO
- * ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
- * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
- * DOCUMENTATION, EVEN IF THE UNIVERSITY OF SOUTHERN CALIFORNIA HAS BEEN
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * THE UNIVERSITY OF SOUTHERN CALIFORNIA SPECIFICALLY DISCLAIMS ANY
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
- * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
- * SOUTHERN CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
- * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
- *
- */
-
-/*
- @ author Omprakash Gnawali
- @ Created: April 24, 2006
- */
-
-
-#include "Timer.h"
-
-module LinkEstimatorDummyP {
- provides {
- interface AMSend as Send;
- interface Receive;
- interface LinkEstimator;
- interface Init;
- interface Packet;
- interface LinkSrcPacket;
- }
-
- uses {
- interface AMSend;
- interface AMPacket as SubAMPacket;
- interface Packet as SubPacket;
- interface Receive as SubReceive;
- interface Timer<TMilli>;
- }
-}
-
-implementation {
-
- // link estimator header added to
- // every message passing thru' the link estimator
- typedef nx_struct linkest_header {
- nx_am_addr_t ll_addr;
- } linkest_header_t;
-
- linkest_header_t* getHeader(message_t* m) {
- return (linkest_header_t*)call SubPacket.getPayload(m, NULL);
- }
-
-
- uint8_t addLinkEstHeaderAndFooter(message_t *msg, uint8_t len) {
- uint8_t newlen;
- linkest_header_t *hdr;
- dbg("LI", "newlen1 = %d\n", len);
- newlen = len + sizeof(linkest_header_t);
- call Packet.setPayloadLength(msg, newlen);
- hdr = getHeader(msg);
-
- hdr->ll_addr = call SubAMPacket.address();
- dbg("LI", "newlen2 = %d\n", newlen);
- return newlen;
- }
-
- command error_t Init.init() {
- return SUCCESS;
- }
-
- event void Timer.fired() { }
-
- // EETX (Extra Expected number of Transmission)
- // EETX = ETX - 1
- // computeEETX returns EETX*10
-
- command uint8_t LinkEstimator.getLinkQuality(uint16_t neighbor) {
- return 2;
- }
-
- command uint8_t LinkEstimator.getReverseQuality(uint16_t neighbor) {
- return 1;
- }
-
- command uint8_t LinkEstimator.getForwardQuality(uint16_t neighbor) {
- return 1;
- }
-
- command am_addr_t LinkSrcPacket.getSrc(message_t* msg) {
- linkest_header_t* hdr = getHeader(msg);
- return hdr->ll_addr;
- }
-
- command error_t Send.send(am_addr_t addr, message_t* msg, uint8_t len) {
- uint8_t newlen;
- newlen = addLinkEstHeaderAndFooter(msg, len);
- return call AMSend.send(addr, msg, newlen);
- }
-
- event void AMSend.sendDone(message_t* msg, error_t error ) {
- return signal Send.sendDone(msg, error);
- }
-
- command uint8_t Send.cancel(message_t* msg) {
- return call AMSend.cancel(msg);
- }
-
- command uint8_t Send.maxPayloadLength() {
- return call Packet.maxPayloadLength();
- }
-
- command void* Send.getPayload(message_t* msg) {
- return call Packet.getPayload(msg, NULL);
- }
-
- event message_t* SubReceive.receive(message_t* msg,
- void* payload,
- uint8_t len) {
- if (call SubAMPacket.destination(msg) == AM_BROADCAST_ADDR) {
- linkest_header_t* hdr = getHeader(msg);
- dbg("LI", "Got pkt from link: %d\n", hdr->ll_addr);
- }
-
- return signal Receive.receive(msg,
- call Packet.getPayload(msg, NULL),
- call Packet.payloadLength(msg));
- }
-
- command void* Receive.getPayload(message_t* msg, uint8_t* len) {
- return call Packet.getPayload(msg, len);
- }
-
- command uint8_t Receive.payloadLength(message_t* msg) {
- return call Packet.payloadLength(msg);
- }
-
- command void Packet.clear(message_t* msg) {
- call SubPacket.clear(msg);
- }
-
- command uint8_t Packet.payloadLength(message_t* msg) {
- return call SubPacket.payloadLength(msg) - sizeof(linkest_header_t);
- }
-
- command void Packet.setPayloadLength(message_t* msg, uint8_t len) {
- call SubPacket.setPayloadLength(msg, len + sizeof(linkest_header_t));
- }
-
- command uint8_t Packet.maxPayloadLength() {
- return call SubPacket.maxPayloadLength() - sizeof(linkest_header_t);
- }
-
- command void* Packet.getPayload(message_t* msg, uint8_t* len) {
- uint8_t* payload = call SubPacket.getPayload(msg, len);
- if (len != NULL) {
- *len -= sizeof(linkest_header_t);
- }
- return payload + sizeof(linkest_header_t);
- }
-
-}
-