added signal strength and output power (non-core) functions

+ bug fix
This commit is contained in:
fros4943 2006-10-05 14:44:43 +00:00
parent 2892edc2fa
commit f2dd0a96cd
2 changed files with 43 additions and 6 deletions

View file

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $Id: radio-arch.c,v 1.4 2006/10/05 12:09:40 fros4943 Exp $ * $Id: radio-arch.c,v 1.5 2006/10/05 14:44:43 fros4943 Exp $
*/ */
#include "dev/radio-arch.h" #include "dev/radio-arch.h"
@ -56,8 +56,20 @@ char simOutDataBuffer[UIP_BUFSIZE];
int simOutSize; int simOutSize;
char simRadioHWOn = 1; char simRadioHWOn = 1;
int simSignalStrength; int simSignalStrength = 0;
char simPower = 100;
/*-----------------------------------------------------------------------------------*/
int
radio_sstrength(void)
{
return simSignalStrength;
}
/*-----------------------------------------------------------------------------------*/
void radio_set_txpower(unsigned char power) {
// 1 - 100: Number indicating output power
simPower = power;
}
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
static void static void
doInterfaceActionsBeforeTick(void) doInterfaceActionsBeforeTick(void)
@ -85,6 +97,8 @@ doInterfaceActionsBeforeTick(void)
return; return;
} }
// ** Good place to add explicit manchester/gcr-encoding
// Hand over new packet to uIP // Hand over new packet to uIP
uip_len = simInSize; uip_len = simInSize;
memcpy(&uip_buf[UIP_LLH_LEN], &simInDataBuffer[0], simInSize); memcpy(&uip_buf[UIP_LLH_LEN], &simInDataBuffer[0], simInSize);
@ -120,8 +134,7 @@ simDoSend(void)
return UIP_FW_ZEROLEN; return UIP_FW_ZEROLEN;
} }
// - Initiate transmission - // ** Good place to add explicit manchester/gcr-decoding
simTransmitting = 1;
// Copy packet data to temporary storage // Copy packet data to temporary storage
memcpy(&simOutDataBuffer[0], &uip_buf[UIP_LLH_LEN], uip_len); memcpy(&simOutDataBuffer[0], &uip_buf[UIP_LLH_LEN], uip_len);
@ -131,7 +144,7 @@ simDoSend(void)
while (simReceiving) { while (simReceiving) {
cooja_mt_yield(); cooja_mt_yield();
} }
// Busy-wait until ether is ready, or die (MAC imitation) // Busy-wait until ether is ready, or die (MAC imitation)
int retries=0; int retries=0;
/* while (retries < 5 && simSignalStrength > -80) { /* while (retries < 5 && simSignalStrength > -80) {
@ -144,6 +157,10 @@ simDoSend(void)
return UIP_FW_DROPPED; return UIP_FW_DROPPED;
} }
*/ */
// - Initiate transmission -
simTransmitting = 1;
// Busy-wait while transmitting // Busy-wait while transmitting
while (simTransmitting) { while (simTransmitting) {
cooja_mt_yield(); cooja_mt_yield();

View file

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $Id: ContikiRadio.java,v 1.6 2006/10/05 12:27:30 fros4943 Exp $ * $Id: ContikiRadio.java,v 1.7 2006/10/05 14:46:16 fros4943 Exp $
*/ */
package se.sics.cooja.contikimote.interfaces; package se.sics.cooja.contikimote.interfaces;
@ -62,6 +62,7 @@ import se.sics.cooja.interfaces.Radio;
* <p> * <p>
* <li>char simRadioHWOn (radio hardware status (on/off)) * <li>char simRadioHWOn (radio hardware status (on/off))
* <li>int simSignalStrength (heard radio signal strength) * <li>int simSignalStrength (heard radio signal strength)
* <li>char simPower (number indicating power output)
* </ul> * </ul>
* <p> * <p>
* Dependency core interfaces are: * Dependency core interfaces are:
@ -103,6 +104,8 @@ public class ContikiRadio extends Radio implements ContikiMoteInterface {
private RadioEvent lastEvent = RadioEvent.UNKNOWN; private RadioEvent lastEvent = RadioEvent.UNKNOWN;
private int lastEventTime = 0; private int lastEventTime = 0;
private int oldOutputPowerIndicator = -1;
/** /**
* Creates an interface to the radio at mote. * Creates an interface to the radio at mote.
@ -261,6 +264,16 @@ public class ContikiRadio extends Radio implements ContikiMoteInterface {
return interferenceEndTime >= myMote.getSimulation().getSimulationTime(); return interferenceEndTime >= myMote.getSimulation().getSimulationTime();
} }
public double getCurrentOutputPower() {
// TODO Implement method
logger.warn("Not implemeted, always returning 1.5 dBm");
return 1.5;
}
public int getCurrentOutputPowerIndicator() {
return (int) myMoteMemory.getByteValueOf("simPower");
}
public double getCurrentSignalStrength() { public double getCurrentSignalStrength() {
return myMoteMemory.getIntValueOf("simSignalStrength"); return myMoteMemory.getIntValueOf("simSignalStrength");
} }
@ -303,6 +316,13 @@ public class ContikiRadio extends Radio implements ContikiMoteInterface {
} }
myEnergyConsumption = energyListeningRadioPerTick; myEnergyConsumption = energyListeningRadioPerTick;
// Check if radio output power changed
if (myMoteMemory.getByteValueOf("simPower") != oldOutputPowerIndicator) {
oldOutputPowerIndicator = myMoteMemory.getByteValueOf("simPower");
this.setChanged();
this.notifyObservers();
}
// Are we transmitting but should stop? // Are we transmitting but should stop?
if (transmitting && myMote.getSimulation().getSimulationTime() >= transmissionEndTime) { if (transmitting && myMote.getSimulation().getSimulationTime() >= transmissionEndTime) {
myMoteMemory.setByteValueOf("simTransmitting", (byte) 0); myMoteMemory.setByteValueOf("simTransmitting", (byte) 0);