Hi, Can anyone explain me that what is happening in the following code piece of wireless-phy.cc. I know it is too long :)) but i just want to know why it doesnt use txtime directly. What does "gap adjust time and actual txtime" mean . It is same in SendUp process too. In that case it computes actual rxtime.
Thanks in advance Bilge WirelessPhy::sendDown<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#b3c104399787b4c6a8feb6988f43d831> (Packet <http://www.auto-nomos.de/ns2doku/class_packet.html> *p) 00201 { 00202 /* 00203 * Sanity Check 00204 */ 00205 assert(initialized<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#64da633aac66edcb7ab4778e0562dfcf> ()); 00206 00207 if (em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308>()) { 00208 //node is off here... 00209 if (Is_node_on<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#6bd3fc55b0611ba38a4db1f3f028e98d>() != true ) { 00210 Packet::free<http://www.auto-nomos.de/ns2doku/class_packet.html#9fe78c9316daec88ed8613bc82bdb817> (p); 00211 return; 00212 } 00213 if(Is_node_on<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#6bd3fc55b0611ba38a4db1f3f028e98d>() == true && Is_sleeping<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#1bde5343080fff2f7a9dcb6ba2720726>() == true){ 00214 em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308>()-> DecrSleepEnergy(NOW<http://www.auto-nomos.de/ns2doku/object_8h.html#cc4a9ad83f9350a588d117e0c8916d45> -update_energy_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#7fde0be4a8fad88fa3af7a95b3389fc7> , 00215 P_sleep_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#9f564b48e2c1cd1033c18bc866d401d9> ); 00216 update_energy_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#7fde0be4a8fad88fa3af7a95b3389fc7>= NOW<http://www.auto-nomos.de/ns2doku/object_8h.html#cc4a9ad83f9350a588d117e0c8916d45> ; 00217 00218 } 00219 00220 } 00221 /* 00222 * Decrease node's energy 00223 */ 00224 if(em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308>()) { 00225 if (em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308>()->energy() > 0) { 00226 00227 double txtime<http://www.auto-nomos.de/ns2doku/class_phy.html#360432328ebf49a111c88900250d6f43>= hdr_cmn::access<http://www.auto-nomos.de/ns2doku/structhdr__cmn.html#f702fbe670e3a5c2fc6b1ca0fc3d915f> (p)->txtime<http://www.auto-nomos.de/ns2doku/structhdr__cmn.html#408d3b7fda2669ce34434c6e7b013153> (); 00228 double start_time = MAX<http://www.auto-nomos.de/ns2doku/fsm_8cc.html#fa99ec4acc4ecb2dc3c2d05da15d0e3f> (channel_idle_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#5869801e88394dc74796cda2d3bae0fb>, NOW<http://www.auto-nomos.de/ns2doku/object_8h.html#cc4a9ad83f9350a588d117e0c8916d45> ); 00229 double end_time = MAX<http://www.auto-nomos.de/ns2doku/fsm_8cc.html#fa99ec4acc4ecb2dc3c2d05da15d0e3f> (channel_idle_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#5869801e88394dc74796cda2d3bae0fb>, NOW<http://www.auto-nomos.de/ns2doku/object_8h.html#cc4a9ad83f9350a588d117e0c8916d45> +txtime); 00230 double actual_txtime = end_time-start_time; 00231 00232 if (start_time > update_energy_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#7fde0be4a8fad88fa3af7a95b3389fc7>) { 00233 em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308> ()->DecrIdleEnergy<http://www.auto-nomos.de/ns2doku/class_energy_model.html#7c9de0819f41400569a19b5e854705ce>(start_time - 00234 update_energy_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#7fde0be4a8fad88fa3af7a95b3389fc7>, P_idle_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#076e5bc9c8ef4f6b580237d4332cb0ce> ); 00235 update_energy_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#7fde0be4a8fad88fa3af7a95b3389fc7>= start_time; 00236 } 00237 00238 /* It turns out that MAC sends packet even though, it's 00239 receiving some packets. 00240 00241 if (txtime-actual_txtime > 0.000001) { 00242 fprintf(stderr,"Something may be wrong at MAC\n"); 00243 fprintf(stderr,"act_tx = %lf, tx = %lf\n", actual_txtime, txtime); 00244 } 00245 */ 00246 00247 // Sanity check 00248 double temp = MAX<http://www.auto-nomos.de/ns2doku/fsm_8cc.html#fa99ec4acc4ecb2dc3c2d05da15d0e3f> (NOW<http://www.auto-nomos.de/ns2doku/object_8h.html#cc4a9ad83f9350a588d117e0c8916d45> ,last_send_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#03cb2c6c5a0ff462f123a35353b07d5f> ); 00249 00250 /* 00251 if (NOW < last_send_time_) { 00252 fprintf(stderr,"Argggg !! Overlapping transmission. NOW %lf last %lf temp %lf\n", NOW, last_send_time_, temp); 00253 } 00254 */ 00255 00256 double begin_adjust_time = MIN<http://www.auto-nomos.de/ns2doku/fsm_8cc.html#3acffbd305ee72dcd4593c0d8af64a4f> (channel_idle_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#5869801e88394dc74796cda2d3bae0fb>, temp); 00257 double finish_adjust_time = MIN<http://www.auto-nomos.de/ns2doku/fsm_8cc.html#3acffbd305ee72dcd4593c0d8af64a4f> (channel_idle_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#5869801e88394dc74796cda2d3bae0fb>, NOW<http://www.auto-nomos.de/ns2doku/object_8h.html#cc4a9ad83f9350a588d117e0c8916d45> +txtime); 00258 double gap_adjust_time = finish_adjust_time - begin_adjust_time; 00259 if (gap_adjust_time < 0.0) { 00260 fprintf(stderr,"What the heck ! negative gap time.\n"); 00261 } 00262 00263 if ((gap_adjust_time > 0.0) && (status_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#6fe013bdc4ab936c54d4924bc227c399>== RECV<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#0ac130ee7e59b3953d26c324a3cf1d109ee0bf767205ffcdc011e82e3ffaae1a>)) { 00264 em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308> ()->DecrTxEnergy<http://www.auto-nomos.de/ns2doku/class_energy_model.html#fe5badfd56a46909c1a9cb35ed29b407> (gap_adjust_time, 00265 Pt_consume_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#47389ccfa482d2c4a9ce61c48cd11d36> -Pr_consume_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#2b6e2e0678ef5fb1da93c0f33239206d> ); 00266 } 00267 00268 em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308> ()->DecrTxEnergy<http://www.auto-nomos.de/ns2doku/class_energy_model.html#fe5badfd56a46909c1a9cb35ed29b407> (actual_txtime,Pt_consume_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#47389ccfa482d2c4a9ce61c48cd11d36> ); 00269 // if (end_time > channel_idle_time_) { 00270 // status_ = SEND; 00271 // } 00272 // 00273 status_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#6fe013bdc4ab936c54d4924bc227c399>= IDLE<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#0ac130ee7e59b3953d26c324a3cf1d10f877f0dd7a3aa19783bc8a3820220616> ; 00274 00275 last_send_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#03cb2c6c5a0ff462f123a35353b07d5f>= NOW<http://www.auto-nomos.de/ns2doku/object_8h.html#cc4a9ad83f9350a588d117e0c8916d45> +txtime; 00276 channel_idle_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#5869801e88394dc74796cda2d3bae0fb>= end_time; 00277 update_energy_time_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#7fde0be4a8fad88fa3af7a95b3389fc7>= end_time; 00278 00279 if (em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308>()->energy() <= 0) { 00280 em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308> ()->setenergy<http://www.auto-nomos.de/ns2doku/class_energy_model.html#cea25a22aad870f88c5e05fee4d3c2e8> (0); 00281 ((MobileNode<http://www.auto-nomos.de/ns2doku/class_mobile_node.html> *)node<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#c3f762086e85d956282aedc29ce120b0> ())->log_energy(0); 00282 } 00283 00284 } else { 00285 00286 // log node energy 00287 if (em<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#fae1f79f5bdb8c1751c2f0897ed9f308>()->energy() > 0) { 00288 ((MobileNode<http://www.auto-nomos.de/ns2doku/class_mobile_node.html>*) node_<http://www.auto-nomos.de/ns2doku/class_phy.html#4ff1d4331906955a9343b274f08af6b7> )->log_energy(1); 00289 } 00290 // 00291 Packet::free<http://www.auto-nomos.de/ns2doku/class_packet.html#9fe78c9316daec88ed8613bc82bdb817> (p); 00292 return; 00293 } 00294 } 00295 00296 /* 00297 * Stamp the packet with the interface arguments 00298 */ 00299 p->txinfo_<http://www.auto-nomos.de/ns2doku/class_packet.html#a570fee632ade0c7a532e2249e305b18> .stamp<http://www.auto-nomos.de/ns2doku/class_packet_stamp.html#e438a83a751e24be80e859593cb4a023> ((MobileNode <http://www.auto-nomos.de/ns2doku/class_mobile_node.html>*)node<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#c3f762086e85d956282aedc29ce120b0>(), ant_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#54cd64e3bc9434d22af4b895e26581ab> ->copy<http://www.auto-nomos.de/ns2doku/class_antenna.html#be570367582e9524526a6f63eeb5d0a8>(), Pt_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#362d3ba9032f3210ec6652e23330ccdc>, lambda_<http://www.auto-nomos.de/ns2doku/class_wireless_phy.html#21814f6fed5ac7df174ee1fc1a8fd217> ); 00300 00301 // Send the packet 00302 channel_<http://www.auto-nomos.de/ns2doku/class_phy.html#0556f1f112f1fb42142a454c3b87b3c3> ->recv<http://www.auto-nomos.de/ns2doku/class_channel.html#1b44f4fb90299b841a1ff50c937701aa>(p, this); 00303 }