[Tinyos-2-commits] CVS: tinyos-2.x/tos/lib/tossim
TossimActiveMessageC.nc, NONE, 1.1 TossimPacket.nc, NONE,
1.1 ActiveMessageC.nc, 1.5, 1.6 CpmModelC.nc, 1.9,
1.10 MainC.nc, 1.4, 1.5 TossimRadioMsg.h, 1.4, 1.5 sim_noise.c,
1.10, 1.11 sim_noise.h, 1.6, 1.7 TossimActiveMessageP.nc, 1.7, NONE
Phil Levis
scipio at users.sourceforge.net
Tue Sep 4 10:19:25 PDT 2007
Update of /cvsroot/tinyos/tinyos-2.x/tos/lib/tossim
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv21249/tos/lib/tossim
Modified Files:
ActiveMessageC.nc CpmModelC.nc MainC.nc TossimRadioMsg.h
sim_noise.c sim_noise.h
Added Files:
TossimActiveMessageC.nc TossimPacket.nc
Removed Files:
TossimActiveMessageP.nc
Log Message:
Incorporated patches and bug fixes from community (tweaked slightly).
- Added support for getting RSSI of packets (Razvan Musaliou-E. from
JHU). Added interface TossimPacket for getting this value without
needing to know metadata layout. This required changing
TossimActiveMessageP to TossimActiveMessageC as applications may need
to wire to it.
- Tweaked noise simulation so output values are not quantized.
Tal Rusak from Cornell observed that quantization made borderline
links behave badly.
- Modified apps/tests/TestSimComm so that it prints out the RSSI
of packets.
--- NEW FILE: TossimActiveMessageC.nc ---
// $Id: TossimActiveMessageC.nc,v 1.1 2007/09/04 17:19:23 scipio Exp $
/*
* "Copyright (c) 2005 Stanford University. 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 STANFORD UNIVERSITY 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 STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* STANFORD UNIVERSITY 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 STANFORD UNIVERSITY
* HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS."
*/
/**
*
* The basic chip-independent TOSSIM Active Message layer for radio chips
* that do not have simulation support.
*
* @author Philip Levis
* @date December 2 2005
*/
#include <AM.h>
module TossimActiveMessageC {
provides {
interface AMSend[am_id_t id];
interface Receive[am_id_t id];
interface Receive as Snoop[am_id_t id];
interface Packet;
interface AMPacket;
interface TossimPacket;
}
uses {
interface TossimPacketModel as Model;
command am_addr_t amAddress();
}
}
implementation {
message_t buffer;
message_t* bufferPointer = &buffer;
tossim_header_t* getHeader(message_t* amsg) {
return (tossim_header_t*)(amsg->data - sizeof(tossim_header_t));
}
tossim_metadata_t* getMetadata(message_t* amsg) {
return (tossim_metadata_t*)(&amsg->metadata);
}
command error_t AMSend.send[am_id_t id](am_addr_t addr,
message_t* amsg,
uint8_t len) {
error_t err;
tossim_header_t* header = getHeader(amsg);
dbg("AM", "AM: Sending packet (id=%hhu, len=%hhu) to %hu\n", id, len, addr);
header->type = id;
header->dest = addr;
header->src = call AMPacket.address();
header->length = len;
err = call Model.send((int)addr, amsg, len + sizeof(tossim_header_t));
return err;
}
command error_t AMSend.cancel[am_id_t id](message_t* msg) {
return call Model.cancel(msg);
}
command uint8_t AMSend.maxPayloadLength[am_id_t id]() {
return call Packet.maxPayloadLength();
}
command void* AMSend.getPayload[am_id_t id](message_t* m) {
return call Packet.getPayload(m, NULL);
}
command void* Receive.getPayload[am_id_t id](message_t* m, uint8_t* len) {
return call Packet.getPayload(m, len);
}
command uint8_t Receive.payloadLength[am_id_t id](message_t* m) {
return call Packet.payloadLength(m);
}
command void* Snoop.getPayload[am_id_t id](message_t* m, uint8_t* len) {
return call Packet.getPayload(m, len);
}
command uint8_t Snoop.payloadLength[am_id_t id](message_t* m) {
return call Packet.payloadLength(m);
}
command int8_t TossimPacket.strength(message_t* msg) {
return getMetadata(msg)->strength;
}
event void Model.sendDone(message_t* msg, error_t result) {
signal AMSend.sendDone[call AMPacket.type(msg)](msg, result);
}
/* Receiving a packet */
event void Model.receive(message_t* msg) {
uint8_t len;
void* payload;
memcpy(bufferPointer, msg, sizeof(message_t));
payload = call Packet.getPayload(bufferPointer, &len);
if (call AMPacket.isForMe(msg)) {
dbg("AM", "Received active message (%p) of type %hhu and length %hhu for me @ %s.\n", bufferPointer, call AMPacket.type(bufferPointer), len, sim_time_string());
bufferPointer = signal Receive.receive[call AMPacket.type(bufferPointer)](bufferPointer, payload, len);
}
else {
dbg("AM", "Snooped on active message of type %hhu and length %hhu for %hu @ %s.\n", call AMPacket.type(bufferPointer), len, call AMPacket.destination(bufferPointer), sim_time_string());
bufferPointer = signal Snoop.receive[call AMPacket.type(bufferPointer)](bufferPointer, payload, len);
}
}
event bool Model.shouldAck(message_t* msg) {
tossim_header_t* header = getHeader(msg);
if (header->dest == call amAddress()) {
dbg("Acks", "Received packet addressed to me so ack it\n");
return TRUE;
}
return FALSE;
}
command am_addr_t AMPacket.address() {
return call amAddress();
}
command am_addr_t AMPacket.destination(message_t* amsg) {
tossim_header_t* header = getHeader(amsg);
return header->dest;
}
command void AMPacket.setDestination(message_t* amsg, am_addr_t addr) {
tossim_header_t* header = getHeader(amsg);
header->dest = addr;
}
command am_addr_t AMPacket.source(message_t* amsg) {
tossim_header_t* header = getHeader(amsg);
return header->src;
}
command void AMPacket.setSource(message_t* amsg, am_addr_t addr) {
tossim_header_t* header = getHeader(amsg);
header->src = addr;
}
command bool AMPacket.isForMe(message_t* amsg) {
return (call AMPacket.destination(amsg) == call AMPacket.address() ||
call AMPacket.destination(amsg) == AM_BROADCAST_ADDR);
}
command am_id_t AMPacket.type(message_t* amsg) {
tossim_header_t* header = getHeader(amsg);
return header->type;
}
command void AMPacket.setType(message_t* amsg, am_id_t t) {
tossim_header_t* header = getHeader(amsg);
header->type = t;
}
command void Packet.clear(message_t* msg) {}
command uint8_t Packet.payloadLength(message_t* msg) {
return getHeader(msg)->length;
}
command void Packet.setPayloadLength(message_t* msg, uint8_t len) {
getHeader(msg)->length = len;
}
command uint8_t Packet.maxPayloadLength() {
return TOSH_DATA_LENGTH;
}
command void* Packet.getPayload(message_t* msg, uint8_t* len) {
if (len != NULL) {
*len = call Packet.payloadLength(msg);
}
return msg->data;
}
command am_group_t AMPacket.group(message_t* amsg) {
tossim_header_t* header = getHeader(amsg);
return header->group;
}
command void AMPacket.setGroup(message_t* msg, am_group_t group) {
tossim_header_t* header = getHeader(msg);
header->group = group;
}
command am_group_t AMPacket.localGroup() {
return TOS_AM_GROUP;
}
default event message_t* Receive.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
return msg;
}
default event message_t* Snoop.receive[am_id_t id](message_t* msg, void* payload, uint8_t len) {
return msg;
}
default event void AMSend.sendDone[uint8_t id](message_t* msg, error_t err) {
return;
}
default command error_t Model.send(int node, message_t* msg, uint8_t len) {
return FAIL;
}
default command error_t Model.cancel(message_t* msg) {
return FAIL;
}
default command am_addr_t amAddress() {
return 0;
}
void active_message_deliver_handle(sim_event_t* evt) {
message_t* m = (message_t*)evt->data;
dbg("Packet", "Delivering packet to %i at %s\n", (int)sim_node(), sim_time_string());
signal Model.receive(m);
}
sim_event_t* allocate_deliver_event(int node, message_t* msg, sim_time_t t) {
sim_event_t* evt = (sim_event_t*)malloc(sizeof(sim_event_t));
evt->mote = node;
evt->time = t;
evt->handle = active_message_deliver_handle;
evt->cleanup = sim_queue_cleanup_event;
evt->cancelled = 0;
evt->force = 0;
evt->data = msg;
return evt;
}
void active_message_deliver(int node, message_t* msg, sim_time_t t) __attribute__ ((C, spontaneous)) {
sim_event_t* evt = allocate_deliver_event(node, msg, t);
sim_queue_insert(evt);
}
}
--- NEW FILE: TossimPacket.nc ---
// $Id: TossimPacket.nc,v 1.1 2007/09/04 17:19:23 scipio Exp $
/*
* Copyright (c) 2007 Stanford University.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
* - Neither the name of the Stanford University nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD
* UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Metadata interface for TOSSIM packets.
*
* @author Philip Levis
* @date September 4 2007
*/
#include <TinyError.h>
#include <message.h>
interface TossimPacket {
command int8_t strength(message_t* msg);
}
Index: ActiveMessageC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tossim/ActiveMessageC.nc,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** ActiveMessageC.nc 1 Apr 2007 00:29:34 -0000 1.5
--- ActiveMessageC.nc 4 Sep 2007 17:19:22 -0000 1.6
***************
*** 46,50 ****
}
implementation {
! components TossimActiveMessageP as AM;
components TossimPacketModelC as Network;
--- 46,50 ----
}
implementation {
! components TossimActiveMessageC as AM;
components TossimPacketModelC as Network;
Index: CpmModelC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tossim/CpmModelC.nc,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** CpmModelC.nc 29 Jul 2007 23:38:25 -0000 1.9
--- CpmModelC.nc 4 Sep 2007 17:19:22 -0000 1.10
***************
*** 25,33 ****
*
* CPM (closest-pattern matching) is a wireless noise simulation model
! * based on statistical extraction from empirical noise data.
! * This model provides far more precise
! * software simulation environment by exploiting time-correlated noise
! * characteristic and shadowing effect as well as path-loss model. For
! * details, please refer to the paper
*
* "Improving Wireless Simulation through Noise Modeling." HyungJune
--- 25,32 ----
*
* CPM (closest-pattern matching) is a wireless noise simulation model
! * based on statistical extraction from empirical noise data. This
! * model provides far more precise software simulation environment by
! * exploiting time-correlated noise characteristics. For details,
! * please refer to the paper
*
* "Improving Wireless Simulation through Noise Modeling." HyungJune
***************
*** 61,64 ****
--- 60,64 ----
double power;
double reversePower;
+ int8_t strength;
bool lost;
bool ack;
***************
*** 310,313 ****
--- 310,319 ----
}
if (!mine->lost) {
+ // Copy this receiver's packet signal strength to the metadata region
+ // of the packet. Note that this packet is actually shared across all
+ // receivers: a higher layer performs the copy.
+ tossim_metadata_t* meta = (tossim_metadata_t*)(&mine->msg->metadata);
+ meta->strength = mine->strength;
+
dbg_clear("CpmModelC,SNRLoss", " -signaling reception\n");
signal Model.receive(mine->msg);
***************
*** 360,367 ****
rcv->power = power;
rcv->reversePower = reversePower;
rcv->msg = msg;
rcv->lost = 0;
rcv->ack = receive;
-
// If I'm off, I never receive the packet, but I need to keep track of
// it in case I turn on and someone else starts sending me a weaker
--- 366,377 ----
rcv->power = power;
rcv->reversePower = reversePower;
+ // The strength of a packet is the sum of the signal and noise. In most cases, this means
+ // the signal. By sampling this here, it assumes that the packet RSSI is sampled at
+ // the beginning of the packet. This is true for the CC2420, but is not true for all
+ // radios. But generalizing seems like complexity for minimal gain at this point.
+ rcv->strength = (int8_t)(floor(10.0 * log(pow(10.0, power/10.0) + pow(10.0, noiseStr/10.0)) / log(10.0)));
rcv->msg = msg;
rcv->lost = 0;
rcv->ack = receive;
// If I'm off, I never receive the packet, but I need to keep track of
// it in case I turn on and someone else starts sending me a weaker
Index: MainC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tossim/MainC.nc,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** MainC.nc 12 Dec 2006 18:23:32 -0000 1.4
--- MainC.nc 4 Sep 2007 17:19:23 -0000 1.5
***************
*** 62,66 ****
// the default handlers make sure nothing happens when a script
// tries to deliver a packet to a node that has no radio stack.
! components TossimActiveMessageP;
}
--- 62,66 ----
// the default handlers make sure nothing happens when a script
// tries to deliver a packet to a node that has no radio stack.
! components TossimActiveMessageC;
}
Index: TossimRadioMsg.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tossim/TossimRadioMsg.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** TossimRadioMsg.h 22 Jun 2007 21:15:01 -0000 1.4
--- TossimRadioMsg.h 4 Sep 2007 17:19:23 -0000 1.5
***************
*** 17,21 ****
typedef nx_struct tossim_metadata {
! nx_uint16_t strength;
nx_uint8_t ack;
nx_uint16_t time;
--- 17,21 ----
typedef nx_struct tossim_metadata {
! nx_int8_t strength;
nx_uint8_t ack;
nx_uint16_t time;
Index: sim_noise.c
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tossim/sim_noise.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** sim_noise.c 30 Jul 2007 01:12:27 -0000 1.10
--- sim_noise.c 4 Sep 2007 17:19:23 -0000 1.11
***************
*** 40,43 ****
--- 40,49 ----
#include "sim_noise.h"
+ //Tal Debug, to count how often simulation hits the one match case
+ int numCase1 = 0;
+ int numCase2 = 0;
+ int numTotal = 0;
+ //End Tal Debug
+
uint32_t FreqKeyNum = 0;
***************
*** 146,150 ****
noise_hash->flag = 0;
! for(i=0; i<NOISE_BIN_SIZE; i++) {
noise_hash->dist[i] = 0;
}
--- 152,156 ----
noise_hash->flag = 0;
! for(i=0; i<NOISE_NUM_VALUES; i++) {
noise_hash->dist[i] = 0;
}
***************
*** 172,175 ****
--- 178,182 ----
noise_hash->elements[noise_hash->numElements] = noise;
+ // printf("I hear noise %i\n", noise);
noise_hash->numElements++;
}
***************
*** 186,193 ****
noise_hash = (sim_noise_hash_t *)hashtable_search(pnoiseTable, key);
if (noise_hash->flag == 1)
return;
! for (i=0; i < NOISE_BIN_SIZE; i++) {
noise_hash->dist[i] = 0.0;
}
--- 193,202 ----
noise_hash = (sim_noise_hash_t *)hashtable_search(pnoiseTable, key);
+ // noise_hash->flag;
+
if (noise_hash->flag == 1)
return;
! for (i=0; i < NOISE_NUM_VALUES; i++) {
noise_hash->dist[i] = 0.0;
}
***************
*** 196,200 ****
{
float val;
! bin = search_bin_num(noise_hash->elements[i]) - 1;
val = noise_hash->dist[bin];
val += (float)1.0;
--- 205,211 ----
{
float val;
! dbg("Noise_output", "Noise is found to be %i\n", noise_hash->elements[i]);
! bin = noise_hash->elements[i] - NOISE_MIN_QUANTIZE; //search_bin_num(noise_hash->elements[i]) - 1;
! // printf("Bin %i, Noise %i\n", bin, (NOISE_MIN_QUANTIZE + bin));
val = noise_hash->dist[bin];
val += (float)1.0;
***************
*** 202,206 ****
}
! for (i=0; i < NOISE_BIN_SIZE ; i++)
{
noise_hash->dist[i] = (noise_hash->dist[i])/(noise_hash->numElements);
--- 213,217 ----
}
! for (i=0; i < NOISE_NUM_VALUES ; i++)
{
noise_hash->dist[i] = (noise_hash->dist[i])/(noise_hash->numElements);
***************
*** 242,246 ****
FreqKeyNum = 0;
for(i=0; i<NOISE_HISTORY; i++) {
! pKey[i] = search_bin_num(noiseData[node_id].noiseTrace[i]);
}
sim_noise_dist(node_id);
--- 253,257 ----
FreqKeyNum = 0;
for(i=0; i<NOISE_HISTORY; i++) {
! pKey[i] = /* noiseData[node_id].noiseTrace[i]; // */ search_bin_num(noiseData[node_id].noiseTrace[i]);
}
sim_noise_dist(node_id);
***************
*** 250,254 ****
//printf("Inserting first element.\n");
}
! pKey[NOISE_HISTORY-1] = search_bin_num(noiseData[node_id].noiseTrace[i]);
sim_noise_dist(node_id);
arrangeKey(node_id);
--- 261,265 ----
//printf("Inserting first element.\n");
}
! pKey[NOISE_HISTORY-1] = /*noiseData[node_id].noiseTrace[i]; //*/ search_bin_num(noiseData[node_id].noiseTrace[i]);
sim_noise_dist(node_id);
arrangeKey(node_id);
***************
*** 281,284 ****
--- 292,298 ----
if (noise_hash == NULL) {
+ //Tal Debug
+ dbg("Noise_c", "Did not pattern match");
+ //End Tal Debug
sim_noise_alarm();
noise = 0;
***************
*** 297,307 ****
dbg("HASH", "Printing Key\n");
dbg("HASH", "noise_hash->numElements=%d\n", noise_hash->numElements);
if (noise_hash->numElements == 1) {
noise = noise_hash->elements[0];
! dbg_clear("HASH", "(E)Noise = %d\n", noise);
return noise;
}
!
! for (i = 0; i < NOISE_BIN_SIZE - 1; i++) {
dbg("HASH", "IN:for i=%d\n", i);
if (i == 0) {
--- 311,336 ----
dbg("HASH", "Printing Key\n");
dbg("HASH", "noise_hash->numElements=%d\n", noise_hash->numElements);
+
+ //Tal Debug
+ numTotal++;
+ //End Tal Debug
+
if (noise_hash->numElements == 1) {
noise = noise_hash->elements[0];
! dbg_clear("HASH", "(E)Noise = %d\n", noise);
! //Tal Debug
! numCase1++;
! dbg("Noise_c", "In case 1: %i of %i\n", numCase1, numTotal);
! //End Tal Debug
! dbg("NoiseAudit", "Noise: %i\n", noise);
return noise;
}
!
! //Tal Debug
! numCase2++;
! dbg("Noise_c", "In case 2: %i of %i\n", numCase2, numTotal);
! //End Tal Debug
!
! for (i = 0; i < NOISE_NUM_VALUES - 1; i++) {
dbg("HASH", "IN:for i=%d\n", i);
if (i == 0) {
***************
*** 321,326 ****
dbg("HASH", "OUT:for i=%d\n", i);
! noise = search_noise_from_bin_num(i+1);
! dbg_clear("HASH", "(B)Noise = %d\n", noise);
return noise;
}
--- 350,355 ----
dbg("HASH", "OUT:for i=%d\n", i);
! noise = NOISE_MIN_QUANTIZE + i; //TODO search_noise_from_bin_num(i+1);
! dbg("NoiseAudit", "Noise: %i\n", noise);
return noise;
}
***************
*** 373,376 ****
--- 402,406 ----
dbg("HashZeroDebug", "Generated noise of zero.\n");
}
+ // printf("%i\n", noise);
return noise;
}
***************
*** 398,400 ****
}
-
--- 428,429 ----
Index: sim_noise.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/tossim/sim_noise.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** sim_noise.h 5 Aug 2007 22:29:46 -0000 1.6
--- sim_noise.h 4 Sep 2007 17:19:23 -0000 1.7
***************
*** 41,46 ****
#endif
- // BIN_SIZE (the number of bins) has a + 1 in case the range is not
- // evenly divisible by INTERVAL -pal 5.aug.07
enum {
NOISE_MIN = -115,
--- 41,44 ----
***************
*** 53,56 ****
--- 51,55 ----
NOISE_HASHTABLE_SIZE = 128,
NOISE_MIN_TRACE = 128,
+ NOISE_NUM_VALUES = NOISE_MAX - NOISE_MIN + 1, //TODO check the + 1, also in NOISE_BIN_SIZE above in the inner parens
};
***************
*** 61,65 ****
char *elements;
char flag;
! float dist[NOISE_BIN_SIZE];
} sim_noise_hash_t;
--- 60,64 ----
char *elements;
char flag;
! float dist[NOISE_NUM_VALUES];
} sim_noise_hash_t;
***************
*** 87,89 ****
#endif // _SIM_NOISE_HASH_H_
-
--- 86,87 ----
--- TossimActiveMessageP.nc DELETED ---
More information about the Tinyos-2-commits
mailing list