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 }

Reply via email to