bool requestAck;
bool receiving = 0; // Whether or not I think I'm receiving a packet
bool transmitting = 0; // Whether or not I think I'm tranmitting a packet
- sim_time_t TransmissionEndTime; // to check pending transmission
+ sim_time_t transmissionEndTime; // to check pending transmission
struct receive_message;
typedef struct receive_message receive_message_t;
}
double arr_estimate_from_snr(double SNR) {
- double beta1 = 1.3687;
- double beta2 = 0.9187;
- double SNR_lin = pow(10.0, SNR/10.0);
- double X = fabs(SNR_lin-beta2);
- double PSE = 0.5*erfc(beta1*sqrt(X/2));
+ double beta1 = 0.9794;
+ double beta2 = 2.3851;
+ double X = SNR-beta2;
+ double PSE = 0.5*erfc(beta1*X/sqrt(2));
double prr_hat = pow(1-PSE, 23*2);
dbg("CpmModelC,SNRLoss", "SNR is %lf, ARR is %lf\n", SNR, prr_hat);
if (prr_hat > 1)
- prr_hat = 1;
+ prr_hat = 1.1;
else if (prr_hat < 0)
- prr_hat = 0;
+ prr_hat = -0.1;
return prr_hat;
}
int shouldAckReceive(double snr) {
double prr = arr_estimate_from_snr(snr);
double coin = RandomUniform();
- if ( (prr != 0) && (prr != 1) ) {
+ if ( (prr >= 0) && (prr <= 1) ) {
if (coin < prr)
prr = 1.0;
else
dbg("CpmModelC,SNRLoss", "Lost packet from %i due to %i being mid-reception\n", source, sim_node());
rcv->lost = 1;
}
- else if (transmitting && (rcv->start < TransmissionEndTime) && (TransmissionEndTime <= rcv->end)) {
- dbg("CpmModelC,SNRLoss", "Lost packet from %i due to %i being mid-transmission, TransmissionEndTime %llu\n", source, sim_node(), TransmissionEndTime);
+ else if (transmitting && (rcv->start < transmissionEndTime) && (transmissionEndTime <= rcv->end)) {
+ dbg("CpmModelC,SNRLoss", "Lost packet from %i due to %i being mid-transmission, transmissionEndTime %llu\n", source, sim_node(), transmissionEndTime);
rcv->lost = 1;
}
else {
gain_entry_t* neighborEntry = sim_gain_first(sim_node());
requestAck = ack;
outgoing = msg;
- TransmissionEndTime = endTime;
+ transmissionEndTime = endTime;
dbg("CpmModelC", "Node %i transmitting to %i, finishes at %llu.\n", sim_node(), dest, endTime);
while (neighborEntry != NULL) {
}
- command void Model.checkPendingTransmission(bool isTransmitting) {
- transmitting = isTransmitting;
- dbg("CpmModelC", "checkPendingTransmission: transmitting %i @ %s\n", transmitting, sim_time_string());
+ command void Model.setPendingTransmission() {
+ transmitting = TRUE;
+ dbg("CpmModelC", "setPendingTransmission: transmitting %i @ %s\n", transmitting, sim_time_string());
}