📄 sim_gain.c
字号:
#include <sim_gain.h>typedef struct sim_gain_noise { double mean; double range;} sim_gain_noise_t;gain_entry_t* connectivity[TOSSIM_MAX_NODES + 1];sim_gain_noise_t localNoise[TOSSIM_MAX_NODES + 1];double sensitivity = 4.0;gain_entry_t* sim_gain_allocate_link(int mote);void sim_gain_deallocate_link(gain_entry_t* linkToDelete);gain_entry_t* sim_gain_first(int src) __attribute__ ((C, spontaneous)) { if (src > TOSSIM_MAX_NODES) { return connectivity[TOSSIM_MAX_NODES]; } return connectivity[src];}gain_entry_t* sim_gain_next(gain_entry_t* currentLink) __attribute__ ((C, spontaneous)) { return currentLink->next;}void sim_gain_add(int src, int dest, double gain) __attribute__ ((C, spontaneous)) { gain_entry_t* current; int temp = sim_node(); if (src > TOSSIM_MAX_NODES) { src = TOSSIM_MAX_NODES; } sim_set_node(src); current = sim_gain_first(src); while (current != NULL) { if (current->mote == dest) { sim_set_node(temp); break; } current = current->next; } if (current == NULL) { current = sim_gain_allocate_link(dest); current->next = connectivity[src]; connectivity[src] = current; } current->mote = dest; current->gain = gain; dbg("Gain", "Adding link from %i to %i with gain %f\n", src, dest, gain); sim_set_node(temp);}double sim_gain_value(int src, int dest) __attribute__ ((C, spontaneous)) { gain_entry_t* current; int temp = sim_node(); sim_set_node(src); current = sim_gain_first(src); while (current != NULL) { if (current->mote == dest) { sim_set_node(temp); dbg("Gain", "Getting link from %i to %i with gain %f\n", src, dest, current->gain); return current->gain; } current = current->next; } sim_set_node(temp); dbg("Gain", "Getting default link from %i to %i with gain %f\n", src, dest, 1.0); return 1.0;}bool sim_gain_connected(int src, int dest) __attribute__ ((C, spontaneous)) { gain_entry_t* current; int temp = sim_node(); sim_set_node(src); current = sim_gain_first(src); while (current != NULL) { if (current->mote == dest) { sim_set_node(temp); return TRUE; } current = current->next; } sim_set_node(temp); return FALSE;} void sim_gain_remove(int src, int dest) __attribute__ ((C, spontaneous)) { gain_entry_t* current; gain_entry_t* prevLink; int temp = sim_node(); if (src > TOSSIM_MAX_NODES) { src = TOSSIM_MAX_NODES; } sim_set_node(src); current = sim_gain_first(src); prevLink = NULL; while (current != NULL) { gain_entry_t* tmp; if (current->mote == dest) { if (prevLink == NULL) { connectivity[src] = current->next; } else { prevLink->next = current->next; } tmp = current->next; sim_gain_deallocate_link(current); current = tmp; } else { prevLink = current; current = current->next; } } sim_set_node(temp);}void sim_gain_set_noise_floor(int node, double mean, double range) __attribute__ ((C, spontaneous)) { if (node > TOSSIM_MAX_NODES) { node = TOSSIM_MAX_NODES; } localNoise[node].mean = mean; localNoise[node].range = range;}double sim_gain_noise_mean(int node) { if (node > TOSSIM_MAX_NODES) { node = TOSSIM_MAX_NODES; } return localNoise[node].mean;}double sim_gain_noise_range(int node) { if (node > TOSSIM_MAX_NODES) { node = TOSSIM_MAX_NODES; } return localNoise[node].range;}// Pick a number a number from the uniform distribution of// [mean-range, mean+range].double sim_gain_sample_noise(int node) __attribute__ ((C, spontaneous)) { double val, adjust; if (node > TOSSIM_MAX_NODES) { node = TOSSIM_MAX_NODES; } val = localNoise[node].mean; adjust = (sim_random() % 2000000); adjust /= 1000000.0; adjust -= 1.0; adjust *= localNoise[node].range; return val + adjust;}gain_entry_t* sim_gain_allocate_link(int mote) { gain_entry_t* newLink = (gain_entry_t*)malloc(sizeof(gain_entry_t)); newLink->next = NULL; newLink->mote = mote; newLink->gain = -10000000.0; return newLink;}void sim_gain_deallocate_link(gain_entry_t* linkToDelete) __attribute__ ((C, spontaneous)) { free(linkToDelete);}void sim_gain_set_sensitivity(double s) __attribute__ ((C, spontaneous)) { sensitivity = s;}double sim_gain_sensitivity() __attribute__ ((C, spontaneous)) { return sensitivity;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -