<div dir="auto"><div><br>Hi again Navneet, </div><div dir="auto"><br><div class="gmail_quote" dir="auto"><div dir="ltr">Den fre 9 nov. 2018 12:20 skrev Navneet Pandey <<a href="mailto:navneet.pandey@outlook.in">navneet.pandey@outlook.in</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="m_-2641931476145801417WordSection1">
<p class="MsoNormal">Hello Joakim, thanks for an elaborate explanation, I will check those articles out. Before I do, I have a few more queries.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Could you also point out which module is responsible for radio switch on/off, assuming radio only has a binary mode unlike the CPU.
<u></u><u></u></p>
<p class="MsoNormal">Is it ‘at86rf2xx_netdev’ or something else?</p></div></div></blockquote></div></div><div dir="auto">Yes, look for the NETOPT_STATE handler in that file (_set_state) </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="#0563C1" vlink="#954F72"><div class="m_-2641931476145801417WordSection1"><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Also, is it possible to keep the radio open always for the duration of an experiment? And may be avoid deep sleep mode as well?</p></div></div></blockquote></div></div><div dir="auto">What you describe is the default behavior of the gnrc_networking example, no configuration necessary. The radio will be initialized and set to listen for incoming traffic, and will remain turned on until you type ifconfig x set state sleep in the shell. To disable the CPU power savings, the easiest way is to either disable the pm_layered module using DISABLE_MODULE=pm_layered on the command line with your make command, or change the initial pm_blockers to non-zero. The pm blocker initial value is found in cpu_conf.h, or cpu_conf_common.h</div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="#0563C1" vlink="#954F72"><div class="m_-2641931476145801417WordSection1"><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">And am I correct when I say that ‘cortex_sleep(deep)’ puts CPU to sleep but doesn’t touch the radio (based on what you replied).</p></div></div></blockquote></div></div><div dir="auto">Yes, that is correct. </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="#0563C1" vlink="#954F72"><div class="m_-2641931476145801417WordSection1"><p class="MsoNormal">
<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Based on some of the modules on which I enabled debugging:<u></u><u></u></p>
<p class="MsoNormal">Following was the pattern:  PACKET SENT-> TX_Ends -> pm_set_lowest -> Idle -> pm_set_lowest -> RX_Ends -> PACKET RCVD.<u></u><u></u></p>
<p class="MsoNormal">I did not understand the part where CPU moved to idle state before going to sleep again. Did I miss any state in the process (probably did not enable debugging)?</p></div></div></blockquote></div></div><div dir="auto">Yes, you missed the interrupt sent from the radio to the CPU. </div><div dir="auto">The CPU is awoken by an interrupt from the radio. The radio has a signal named INT or similar that is connected to an input pin on the CPU. When the radio receives an incoming frame from somewhere, the radio will toggle the interrupt pin to signal that it wants to be serviced by the driver. The interrupt on the CPU is configured to wake the CPU from low power modes. Look for _irq_handler in at86rf2xx_netdev.c. </div><div dir="auto">The IRQ handler in that file only posts an event to the gnrc_netif thread telling it that it needs to poll the radio to see what the reason for the interrupt is, this usually means reading some status register in the radio. That last part is performed by the _isr function in at86rf2xx_netdev.c </div><div dir="auto"><br></div><div dir="auto">The first transition from pm set lowest to idle could be a RX Begin event, and the second wake could be the RX End interrupt. The RX Begin interrupt is sent when only the first byte of the frame has been received. The RX End interrupt is sent when the frame has been completely received. Without more info I can only guess. </div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="#0563C1" vlink="#954F72"><div class="m_-2641931476145801417WordSection1"><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I know these are a lot of questions. I really appreciate that you are answering my question in great detail. Thank you.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
<p class="MsoNormal">Navneet Pandey<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> </p></div></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Best regards, Joakim </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="#0563C1" vlink="#954F72"><div class="m_-2641931476145801417WordSection1"><p class="MsoNormal"><u></u></p>
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Navneet Pandey <<a href="mailto:navneet.pandey@outlook.in" target="_blank" rel="noreferrer">navneet.pandey@outlook.in</a>> <br>
<b>Sent:</b> Thursday, November 8, 2018 1:08 PM<br>
<b>To:</b> <a href="mailto:users@riot-os.org" target="_blank" rel="noreferrer">users@riot-os.org</a><br>
<b>Subject:</b> RE: Radio Interrupt Handler<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Hello Joakim,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thank you, the information was really helpful. I was exploring the ‘at86rf2xx_netdev.c’ file. I noticed something weird. When I enabled debugging all I got was<u></u><u></u></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoNormal">To Idle state<u></u><u></u></li><li class="MsoNormal">Evt TX_END<u></u><u></u></li><li class="MsoNormal">Evt RX_END<u></u><u></u></li></ul>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">By enabling debugging in pm_layered.c and pm.c, I noticed cortex_sleep(deep) was being called when radio was not doing anything. So why am I not seeing any of the following debug statements being printed (or in other words none of the following
 cases being invoked).<u></u><u></u></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#c586c0">case</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4"> NETOPT_STATE_STANDBY:<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#dcdcaa">DEBUG</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">(</span><span style="font-size:10.5pt;font-family:Consolas;color:#ce9178">"STANDBY</span><span style="font-size:10.5pt;font-family:Consolas;color:#d7ba7d">\n</span><span style="font-size:10.5pt;font-family:Consolas;color:#ce9178">"</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">);           
<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">            </span><span style="font-size:10.5pt;font-family:Consolas;color:#dcdcaa">at86rf2xx_set_state</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">(dev,
 AT86RF2XX_STATE_TRX_OFF);<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#c586c0">break</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">;<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">       
</span><span style="font-size:10.5pt;font-family:Consolas;color:#c586c0">case</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4"> NETOPT_STATE_SLEEP:<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#dcdcaa">DEBUG</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">(</span><span style="font-size:10.5pt;font-family:Consolas;color:#ce9178">"To SLEEP</span><span style="font-size:10.5pt;font-family:Consolas;color:#d7ba7d">\n</span><span style="font-size:10.5pt;font-family:Consolas;color:#ce9178">"</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">);<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#dcdcaa">at86rf2xx_set_state</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">(dev, AT86RF2XX_STATE_SLEEP);<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#c586c0">break</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">;<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">       
</span><span style="font-size:10.5pt;font-family:Consolas;color:#c586c0">case</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4"> NETOPT_STATE_IDLE:<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#dcdcaa">DEBUG</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">(</span><span style="font-size:10.5pt;font-family:Consolas;color:#ce9178">"To IDLE</span><span style="font-size:10.5pt;font-family:Consolas;color:#d7ba7d">\n</span><span style="font-size:10.5pt;font-family:Consolas;color:#ce9178">"</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">);<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#dcdcaa">at86rf2xx_set_state</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">(dev, AT86RF2XX_STATE_RX_AACK_ON);<u></u><u></u></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#1e1e1e"><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">           
</span><span style="font-size:10.5pt;font-family:Consolas;color:#c586c0">break</span><span style="font-size:10.5pt;font-family:Consolas;color:#d4d4d4">;<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
<p class="MsoNormal">Navneet Pandey<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Navneet Pandey <<a href="mailto:navneet.pandey@outlook.in" target="_blank" rel="noreferrer">navneet.pandey@outlook.in</a>>
<br>
<b>Sent:</b> Monday, November 5, 2018 11:10 AM<br>
<b>To:</b> <a href="mailto:users@riot-os.org" target="_blank" rel="noreferrer">users@riot-os.org</a><br>
<b>Subject:</b> Radio Interrupt Handler<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Hello, <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Could someone please point out the code where radio is switched on/off when sending a MAC/UDP packet.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am expecting something similar to the following code snippet:<u></u><u></u></p>
<p class="MsoNormal">/** Turn the MAC layer on. */<u></u><u></u></p>
<p class="MsoNormal">  int (* on)(void);<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">  /** Turn the MAC layer off. */<u></u><u></u></p>
<p class="MsoNormal">  int (* off)(int keep_radio_on);<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">This code is from Contiki.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am interested in understanding the time it takes for system to wake up from sleep (dormant mode) to receive packets.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thank you.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Regards,<u></u><u></u></p>
<p class="MsoNormal">Navneet Pandey<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

_______________________________________________<br>
users mailing list<br>
<a href="mailto:users@riot-os.org" target="_blank" rel="noreferrer">users@riot-os.org</a><br>
<a href="https://lists.riot-os.org/mailman/listinfo/users" rel="noreferrer noreferrer" target="_blank">https://lists.riot-os.org/mailman/listinfo/users</a><br>
</blockquote></div></div></div>