AM_TEST = 5
};
- components MainC, TestCommC as App, RandomC, ActiveMessageC;
+ components MainC, TestCommC as App, RandomC, ActiveMessageC, TossimActiveMessageC;
components new TimerMilliC(), new AMSenderC(AM_TEST), new AMReceiverC(AM_TEST);
App.Boot -> MainC.Boot;
App.Random -> RandomC;
App.AMPacket -> AMSenderC;
App.PacketAcknowledgements -> AMSenderC;
+ App.TossimPacket -> TossimActiveMessageC;
}
interface SplitControl;
interface AMPacket;
interface PacketAcknowledgements;
+ interface TossimPacket;
}
}
implementation {
event message_t* Receive.receive(message_t* msg, void* p, uint8_t l) {
- dbg("TestComm", "Received message from %hu @ %s\n", call AMPacket.source(msg), sim_time_string());
+ dbg("TestComm", "Received message from %hu @ %s with strength %hhi\n", call AMPacket.source(msg), sim_time_string(), call TossimPacket.strength(msg));
return msg;
}
}
}
}
implementation {
- components TossimActiveMessageP as AM;
+ components TossimActiveMessageC as AM;
components TossimPacketModelC as Network;
components CpmModelC as Model;
/**
*
* 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
+ * 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
* Lee and Philip Levis, IPSN 2007. You can find a copy at
sim_time_t end;
double power;
double reversePower;
+ int8_t strength;
bool lost;
bool ack;
message_t* msg;
mine->lost = 1;
}
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);
if (mine->ack) {
rcv->end = endTime;
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
// packet. So I don't set receiving to 1, but I keep track of
// the application does not wire this up to, e.g., ActiveMessageC,
// 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;
+ components TossimActiveMessageC;
}
--- /dev/null
+// $Id$
+/*
+ * "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);
+ }
+
+}
+++ /dev/null
-// $Id$
-/*
- * "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 TossimActiveMessageP {
- 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;
- }
- 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));
- }
-
- 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);
- }
-
- 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);
- }
-
-}
--- /dev/null
+// $Id$
+/*
+ * 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);
+}
} tossim_footer_t;
typedef nx_struct tossim_metadata {
- nx_uint16_t strength;
+ nx_int8_t strength;
nx_uint8_t ack;
nx_uint16_t time;
} tossim_metadata_t;
#include "hashtable.h"
#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;
sim_noise_node_t noiseData[TOSSIM_MAX_NODES];
memset((void *)noise_hash->elements, 0, sizeof(char)*noise_hash->size);
noise_hash->flag = 0;
- for(i=0; i<NOISE_BIN_SIZE; i++) {
+ for(i=0; i<NOISE_NUM_VALUES; i++) {
noise_hash->dist[i] = 0;
}
hashtable_insert(pnoiseTable, key, noise_hash);
}
noise_hash->elements[noise_hash->numElements] = noise;
+// printf("I hear noise %i\n", noise);
noise_hash->numElements++;
}
sim_noise_hash_t *noise_hash;
noise_hash = (sim_noise_hash_t *)hashtable_search(pnoiseTable, key);
+// noise_hash->flag;
+
if (noise_hash->flag == 1)
return;
- for (i=0; i < NOISE_BIN_SIZE; i++) {
+ for (i=0; i < NOISE_NUM_VALUES; i++) {
noise_hash->dist[i] = 0.0;
}
for (i=0; i< noise_hash->numElements; i++)
{
float val;
- bin = search_bin_num(noise_hash->elements[i]) - 1;
+ 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;
noise_hash->dist[bin] = val;
}
- for (i=0; i < NOISE_BIN_SIZE ; i++)
+ for (i=0; i < NOISE_NUM_VALUES ; i++)
{
noise_hash->dist[i] = (noise_hash->dist[i])/(noise_hash->numElements);
cmf += noise_hash->dist[i];
FreqKeyNum = 0;
for(i=0; i<NOISE_HISTORY; i++) {
- pKey[i] = search_bin_num(noiseData[node_id].noiseTrace[i]);
+ pKey[i] = /* noiseData[node_id].noiseTrace[i]; // */ search_bin_num(noiseData[node_id].noiseTrace[i]);
}
sim_noise_dist(node_id);
arrangeKey(node_id);
if (i == NOISE_HISTORY) {
//printf("Inserting first element.\n");
}
- pKey[NOISE_HISTORY-1] = search_bin_num(noiseData[node_id].noiseTrace[i]);
+ 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);
}
noise_hash = (sim_noise_hash_t *)hashtable_search(pnoiseTable, pKey);
if (noise_hash == NULL) {
+ //Tal Debug
+ dbg("Noise_c", "Did not pattern match");
+ //End Tal Debug
sim_noise_alarm();
noise = 0;
dbg_clear("HASH", "(N)Noise\n");
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);
+ 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;
}
-
- for (i = 0; i < NOISE_BIN_SIZE - 1; i++) {
+
+ //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) {
if (ranNum <= noise_hash->dist[i]) {
}
dbg("HASH", "OUT:for i=%d\n", i);
- noise = search_noise_from_bin_num(i+1);
- dbg_clear("HASH", "(B)Noise = %d\n", noise);
+ noise = NOISE_MIN_QUANTIZE + i; //TODO search_noise_from_bin_num(i+1);
+ dbg("NoiseAudit", "Noise: %i\n", noise);
return noise;
}
if (noise == 0) {
dbg("HashZeroDebug", "Generated noise of zero.\n");
}
+// printf("%i\n", noise);
return noise;
}
noiseData[node_id].generated = 1;
}
-
extern "C" {
#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,
NOISE_MAX = -5,
NOISE_DEFAULT_ELEMENT_SIZE = 8,
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
};
typedef struct sim_noise_hash_t {
int size;
char *elements;
char flag;
- float dist[NOISE_BIN_SIZE];
+ float dist[NOISE_NUM_VALUES];
} sim_noise_hash_t;
typedef struct sim_noise_node_t {
#endif
#endif // _SIM_NOISE_HASH_H_
-