Hi!
On Fri, 17 Aug 2007, Gerrit Niezen wrote:
Hi,
From previous posts to the mailing list I've noticed that retrieving
RSSI values was never implemented in TOSSIM for TinyOS 1.x, but that
(from Phil Levis's post):
TOSSIM in 1.x doesn't model RF signal strength. (2.x does, but
it does not yet make it accessible to applications)
Is it possible to access RSSI values in TinyOS 2.0.1 or 2.0.2 with
TOSSIM? If not, how can I make it accessible to my
application/simulation, if the simulator already does model RF signal
strength?
Here is a patch that corrects this. I sent it to Phil Levis for review
some time ago but he didn't "bless it" so it might not be correct. :P
Have a nice day!
Razvan ME
diff --git a/tos/lib/tossim/CpmModelC.nc b/tos/lib/tossim/CpmModelC.nc
index 9707632..56e114c 100644
--- a/tos/lib/tossim/CpmModelC.nc
+++ b/tos/lib/tossim/CpmModelC.nc
@@ -132,12 +132,6 @@ implementation {
return noise_val;
}
- double packetSnr(receive_message_t* msg) {
- double signalStr = msg->power;
- double noise = noise_hash_generation();
- return (signalStr - noise);
- }
-
double arr_estimate_from_snr(double SNR) {
double beta1 = 1.3687;
double beta2 = 0.9187;
@@ -346,10 +340,21 @@ implementation {
dbg_clear("CpmModelC,SNRLoss", " -packet was lost.\n");
}
}
+
+ message_t *create_destroyable_message(message_t *msg)
+ {
+ message_t *new_msg = malloc(sizeof(message_t));
+ tossim_metadata_t* meta = (tossim_metadata_t*)(&new_msg->metadata);
+ memcpy(new_msg, msg, sizeof(message_t));
+ meta->destroyable = 1;
+ dbg("CpmModelC", "create_destroyable_message.\n");
+ return new_msg;
+ }
// Create a record that a node is receiving a packet,
// enqueue a receive event to figure out what happens.
void enqueue_receive_event(int source, sim_time_t endTime, message_t* msg,
bool receive, double power, double reversePower) {
+ tossim_metadata_t* meta;
sim_event_t* evt;
receive_message_t* list;
receive_message_t* rcv = allocate_receive_message();
@@ -359,9 +364,11 @@ implementation {
rcv->end = endTime;
rcv->power = power;
rcv->reversePower = reversePower;
- rcv->msg = msg;
+ rcv->msg = create_destroyable_message(msg);
rcv->lost = 0;
rcv->ack = receive;
+ meta = (tossim_metadata_t*)(&rcv->msg->metadata);
+ meta->strength = floor(10.0 * log(pow(10.0, power/10.0) + pow(10.0,
noiseStr/10.0)) / log(10.0)); // RAZVANME: Update the strength
// 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
@@ -443,6 +450,10 @@ implementation {
}
void free_receive_message(receive_message_t* msg) {
+ tossim_metadata_t* meta = (tossim_metadata_t*)(&msg->msg->metadata);
+ if (meta->destroyable) {
+ free(msg->msg);
+ }
free(msg);
}
}
diff --git a/tos/lib/tossim/TossimRadioMsg.h b/tos/lib/tossim/TossimRadioMsg.h
index 27355e8..49a72fd 100644
--- a/tos/lib/tossim/TossimRadioMsg.h
+++ b/tos/lib/tossim/TossimRadioMsg.h
@@ -19,6 +19,7 @@ typedef nx_struct tossim_metadata {
nx_uint16_t strength;
nx_uint8_t ack;
nx_uint16_t time;
+ nx_uint8_t destroyable;
} tossim_metadata_t;
#endif
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help