1*10465441SEvalZero<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2*10465441SEvalZero<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> 3*10465441SEvalZero<title>uIP 1.0: uIP device driver functions</title> 4*10465441SEvalZero<link href="doxygen.css" rel="stylesheet" type="text/css"> 5*10465441SEvalZero<link href="tabs.css" rel="stylesheet" type="text/css"> 6*10465441SEvalZero</head><body> 7*10465441SEvalZero<!-- Generated by Doxygen 1.4.6 --> 8*10465441SEvalZero<div class="tabs"> 9*10465441SEvalZero <ul> 10*10465441SEvalZero <li><a href="main.html"><span>Main Page</span></a></li> 11*10465441SEvalZero <li><a href="modules.html"><span>Modules</span></a></li> 12*10465441SEvalZero <li><a href="classes.html"><span>Data Structures</span></a></li> 13*10465441SEvalZero <li><a href="files.html"><span>Files</span></a></li> 14*10465441SEvalZero <li><a href="examples.html"><span>Examples</span></a></li> 15*10465441SEvalZero </ul></div> 16*10465441SEvalZero<h1>uIP device driver functions<br> 17*10465441SEvalZero<small> 18*10465441SEvalZero[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small> 19*10465441SEvalZero</h1><hr><a name="_details"></a><h2>Detailed Description</h2> 20*10465441SEvalZeroThese functions are used by a network device driver for interacting with uIP. 21*10465441SEvalZero<p> 22*10465441SEvalZero 23*10465441SEvalZero<p> 24*10465441SEvalZero<table border="0" cellpadding="0" cellspacing="0"> 25*10465441SEvalZero<tr><td></td></tr> 26*10465441SEvalZero<tr><td colspan="2"><br><h2>Defines</h2></td></tr> 27*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>()</td></tr> 28*10465441SEvalZero 29*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Process an incoming packet. <a href="#ga4360412ee9350fba725f98a137169fe"></a><br></td></tr> 30*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(conn)</td></tr> 31*10465441SEvalZero 32*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a connection identified by its number. <a href="#g1024f8a5fa65e82bf848b2e6590d9628"></a><br></td></tr> 33*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfd5ebb56a1bd1da9878aa886a2075e80"></a><!-- doxytag: member="uipdevfunc::uip_conn_active" ref="gfd5ebb56a1bd1da9878aa886a2075e80" args="(conn)" --> 34*10465441SEvalZero#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gfd5ebb56a1bd1da9878aa886a2075e80">uip_conn_active</a>(conn) (<a class="el" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[conn].tcpstateflags != UIP_CLOSED)</td></tr> 35*10465441SEvalZero 36*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">uip_periodic_conn</a>(conn)</td></tr> 37*10465441SEvalZero 38*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Perform periodic processing for a connection identified by a pointer to its structure. <a href="#gbaf0bb2b6a4424b4eb69e45e457c2583"></a><br></td></tr> 39*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gf20aaf4292cb0d2a1b10bc0a568b51fa">uip_poll_conn</a>(conn)</td></tr> 40*10465441SEvalZero 41*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Reuqest that a particular connection should be polled. <a href="#gf20aaf4292cb0d2a1b10bc0a568b51fa"></a><br></td></tr> 42*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(conn)</td></tr> 43*10465441SEvalZero 44*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a UDP connection identified by its number. <a href="#g2c64c8c36bc84f9336f6a2184ea51883"></a><br></td></tr> 45*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gf5c2ad5acf3cc23b8262e9ba6a15136b">uip_udp_periodic_conn</a>(conn)</td></tr> 46*10465441SEvalZero 47*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Periodic processing for a UDP connection identified by a pointer to its structure. <a href="#gf5c2ad5acf3cc23b8262e9ba6a15136b"></a><br></td></tr> 48*10465441SEvalZero<tr><td colspan="2"><br><h2>Variables</h2></td></tr> 49*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a> [UIP_BUFSIZE+2]</td></tr> 50*10465441SEvalZero 51*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">The uIP packet buffer. <a href="#gb81e78f890dbbee50c533a9734b74fd9"></a><br></td></tr> 52*10465441SEvalZero</table> 53*10465441SEvalZero<hr><h2>Define Documentation</h2> 54*10465441SEvalZero<a class="anchor" name="ga4360412ee9350fba725f98a137169fe"></a><!-- doxytag: member="uip.h::uip_input" ref="ga4360412ee9350fba725f98a137169fe" args="()" --><p> 55*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 56*10465441SEvalZero <tr> 57*10465441SEvalZero <td class="mdRow"> 58*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 59*10465441SEvalZero <tr> 60*10465441SEvalZero <td class="md" nowrap valign="top">#define uip_input </td> 61*10465441SEvalZero <td class="md" valign="top">( </td> 62*10465441SEvalZero </td> 63*10465441SEvalZero <td class="mdname1" valign="top" nowrap> </td> 64*10465441SEvalZero <td class="md" valign="top"> ) </td> 65*10465441SEvalZero <td class="md" nowrap></td> 66*10465441SEvalZero </tr> 67*10465441SEvalZero </table> 68*10465441SEvalZero </td> 69*10465441SEvalZero </tr> 70*10465441SEvalZero</table> 71*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 72*10465441SEvalZero <tr> 73*10465441SEvalZero <td> 74*10465441SEvalZero 75*10465441SEvalZero </td> 76*10465441SEvalZero <td> 77*10465441SEvalZero 78*10465441SEvalZero<p> 79*10465441SEvalZeroProcess an incoming packet. 80*10465441SEvalZero<p> 81*10465441SEvalZeroThis function should be called when the device driver has received a packet from the network. The packet from the device driver must be present in the uip_buf buffer, and the length of the packet should be placed in the uip_len variable.<p> 82*10465441SEvalZeroWhen the function returns, there may be an outbound packet placed in the uip_buf packet buffer. If so, the uip_len variable is set to the length of the packet. If no packet is to be sent out, the uip_len variable is set to 0.<p> 83*10465441SEvalZeroThe usual way of calling the function is presented by the source code below. <div class="fragment"><pre class="fragment"> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = devicedriver_poll(); 84*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 85*10465441SEvalZero <a class="code" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>(); 86*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 87*10465441SEvalZero devicedriver_send(); 88*10465441SEvalZero } 89*10465441SEvalZero } 90*10465441SEvalZero</pre></div><p> 91*10465441SEvalZero<dl compact><dt><b>Note:</b></dt><dd>If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the uIP ARP code before calling this function: <div class="fragment"><pre class="fragment"><span class="preprocessor"> #define BUF ((struct uip_eth_hdr *)&uip_buf[0])</span> 92*10465441SEvalZero<span class="preprocessor"></span> <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> = ethernet_devicedrver_poll(); 93*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 94*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->type == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">UIP_ETHTYPE_IP</a>)) { 95*10465441SEvalZero <a class="code" href="a00152.html#g737337d6a51e31b236c8233d024138a8">uip_arp_ipin</a>(); 96*10465441SEvalZero <a class="code" href="a00146.html#ga4360412ee9350fba725f98a137169fe">uip_input</a>(); 97*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 98*10465441SEvalZero <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>(); 99*10465441SEvalZero ethernet_devicedriver_send(); 100*10465441SEvalZero } 101*10465441SEvalZero } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>->type == <a class="code" href="a00148.html#g69a7a4951ff21b302267532c21ee78fc">HTONS</a>(<a class="code" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">UIP_ETHTYPE_ARP</a>)) { 102*10465441SEvalZero <a class="code" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a>(); 103*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 104*10465441SEvalZero ethernet_devicedriver_send(); 105*10465441SEvalZero } 106*10465441SEvalZero } 107*10465441SEvalZero</pre></div> </dd></dl> 108*10465441SEvalZero<dl compact><dt><b>Examples: </b></dt><dd> 109*10465441SEvalZero<a class="el" href="a00042.html#a73">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a93">example-mainloop-without-arp.c</a>.</dl> 110*10465441SEvalZero<p> 111*10465441SEvalZeroDefinition at line <a class="el" href="a00202.html#l00257">257</a> of file <a class="el" href="a00202.html">uip.h</a>. </td> 112*10465441SEvalZero </tr> 113*10465441SEvalZero</table> 114*10465441SEvalZero<a class="anchor" name="g1024f8a5fa65e82bf848b2e6590d9628"></a><!-- doxytag: member="uip.h::uip_periodic" ref="g1024f8a5fa65e82bf848b2e6590d9628" args="(conn)" --><p> 115*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 116*10465441SEvalZero <tr> 117*10465441SEvalZero <td class="mdRow"> 118*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 119*10465441SEvalZero <tr> 120*10465441SEvalZero <td class="md" nowrap valign="top">#define uip_periodic </td> 121*10465441SEvalZero <td class="md" valign="top">( </td> 122*10465441SEvalZero <td class="md" nowrap valign="top">conn </td> 123*10465441SEvalZero <td class="mdname1" valign="top" nowrap> </td> 124*10465441SEvalZero <td class="md" valign="top"> ) </td> 125*10465441SEvalZero <td class="md" nowrap></td> 126*10465441SEvalZero </tr> 127*10465441SEvalZero </table> 128*10465441SEvalZero </td> 129*10465441SEvalZero </tr> 130*10465441SEvalZero</table> 131*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 132*10465441SEvalZero <tr> 133*10465441SEvalZero <td> 134*10465441SEvalZero 135*10465441SEvalZero </td> 136*10465441SEvalZero <td> 137*10465441SEvalZero 138*10465441SEvalZero<p> 139*10465441SEvalZeroPeriodic processing for a connection identified by its number. 140*10465441SEvalZero<p> 141*10465441SEvalZeroThis function does the necessary periodic processing (timers, polling) for a uIP TCP conneciton, and should be called when the periodic uIP timer goes off. It should be called for every connection, regardless of whether they are open of closed.<p> 142*10465441SEvalZeroWhen the function returns, it may have an outbound packet waiting for service in the uIP packet buffer, and if so the uip_len variable is set to a value larger than zero. The device driver should be called to send out the packet.<p> 143*10465441SEvalZeroThe ususal way of calling the function is through a for() loop like this: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++i) { 144*10465441SEvalZero <a class="code" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(i); 145*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 146*10465441SEvalZero devicedriver_send(); 147*10465441SEvalZero } 148*10465441SEvalZero } 149*10465441SEvalZero</pre></div><p> 150*10465441SEvalZero<dl compact><dt><b>Note:</b></dt><dd>If you are writing a uIP device driver that needs ARP (Address Resolution Protocol), e.g., when running uIP over Ethernet, you will need to call the <a class="el" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out()</a> function before calling the device driver: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < UIP_CONNS; ++i) { 151*10465441SEvalZero <a class="code" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic</a>(i); 152*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 153*10465441SEvalZero <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>(); 154*10465441SEvalZero ethernet_devicedriver_send(); 155*10465441SEvalZero } 156*10465441SEvalZero } 157*10465441SEvalZero</pre></div></dd></dl> 158*10465441SEvalZero<dl compact><dt><b>Parameters:</b></dt><dd> 159*10465441SEvalZero <table border="0" cellspacing="2" cellpadding="0"> 160*10465441SEvalZero <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>The number of the connection which is to be periodically polled. </td></tr> 161*10465441SEvalZero </table> 162*10465441SEvalZero</dl> 163*10465441SEvalZero<dl compact><dt><b>Examples: </b></dt><dd> 164*10465441SEvalZero<a class="el" href="a00042.html#a80">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a97">example-mainloop-without-arp.c</a>.</dl> 165*10465441SEvalZero<p> 166*10465441SEvalZeroDefinition at line <a class="el" href="a00202.html#l00301">301</a> of file <a class="el" href="a00202.html">uip.h</a>. </td> 167*10465441SEvalZero </tr> 168*10465441SEvalZero</table> 169*10465441SEvalZero<a class="anchor" name="gbaf0bb2b6a4424b4eb69e45e457c2583"></a><!-- doxytag: member="uip.h::uip_periodic_conn" ref="gbaf0bb2b6a4424b4eb69e45e457c2583" args="(conn)" --><p> 170*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 171*10465441SEvalZero <tr> 172*10465441SEvalZero <td class="mdRow"> 173*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 174*10465441SEvalZero <tr> 175*10465441SEvalZero <td class="md" nowrap valign="top">#define uip_periodic_conn </td> 176*10465441SEvalZero <td class="md" valign="top">( </td> 177*10465441SEvalZero <td class="md" nowrap valign="top">conn </td> 178*10465441SEvalZero <td class="mdname1" valign="top" nowrap> </td> 179*10465441SEvalZero <td class="md" valign="top"> ) </td> 180*10465441SEvalZero <td class="md" nowrap></td> 181*10465441SEvalZero </tr> 182*10465441SEvalZero </table> 183*10465441SEvalZero </td> 184*10465441SEvalZero </tr> 185*10465441SEvalZero</table> 186*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 187*10465441SEvalZero <tr> 188*10465441SEvalZero <td> 189*10465441SEvalZero 190*10465441SEvalZero </td> 191*10465441SEvalZero <td> 192*10465441SEvalZero 193*10465441SEvalZero<p> 194*10465441SEvalZeroPerform periodic processing for a connection identified by a pointer to its structure. 195*10465441SEvalZero<p> 196*10465441SEvalZeroSame as <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a> but takes a pointer to the actual <a class="el" href="a00088.html">uip_conn</a> struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.<p> 197*10465441SEvalZero<dl compact><dt><b>Parameters:</b></dt><dd> 198*10465441SEvalZero <table border="0" cellspacing="2" cellpadding="0"> 199*10465441SEvalZero <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00088.html">uip_conn</a> struct for the connection to be processed. </td></tr> 200*10465441SEvalZero </table> 201*10465441SEvalZero</dl> 202*10465441SEvalZero 203*10465441SEvalZero<p> 204*10465441SEvalZeroDefinition at line <a class="el" href="a00202.html#l00323">323</a> of file <a class="el" href="a00202.html">uip.h</a>. </td> 205*10465441SEvalZero </tr> 206*10465441SEvalZero</table> 207*10465441SEvalZero<a class="anchor" name="gf20aaf4292cb0d2a1b10bc0a568b51fa"></a><!-- doxytag: member="uip.h::uip_poll_conn" ref="gf20aaf4292cb0d2a1b10bc0a568b51fa" args="(conn)" --><p> 208*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 209*10465441SEvalZero <tr> 210*10465441SEvalZero <td class="mdRow"> 211*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 212*10465441SEvalZero <tr> 213*10465441SEvalZero <td class="md" nowrap valign="top">#define uip_poll_conn </td> 214*10465441SEvalZero <td class="md" valign="top">( </td> 215*10465441SEvalZero <td class="md" nowrap valign="top">conn </td> 216*10465441SEvalZero <td class="mdname1" valign="top" nowrap> </td> 217*10465441SEvalZero <td class="md" valign="top"> ) </td> 218*10465441SEvalZero <td class="md" nowrap></td> 219*10465441SEvalZero </tr> 220*10465441SEvalZero </table> 221*10465441SEvalZero </td> 222*10465441SEvalZero </tr> 223*10465441SEvalZero</table> 224*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 225*10465441SEvalZero <tr> 226*10465441SEvalZero <td> 227*10465441SEvalZero 228*10465441SEvalZero </td> 229*10465441SEvalZero <td> 230*10465441SEvalZero 231*10465441SEvalZero<p> 232*10465441SEvalZeroReuqest that a particular connection should be polled. 233*10465441SEvalZero<p> 234*10465441SEvalZeroSimilar to <a class="el" href="a00146.html#gbaf0bb2b6a4424b4eb69e45e457c2583">uip_periodic_conn()</a> but does not perform any timer processing. The application is polled for new data.<p> 235*10465441SEvalZero<dl compact><dt><b>Parameters:</b></dt><dd> 236*10465441SEvalZero <table border="0" cellspacing="2" cellpadding="0"> 237*10465441SEvalZero <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00088.html">uip_conn</a> struct for the connection to be processed. </td></tr> 238*10465441SEvalZero </table> 239*10465441SEvalZero</dl> 240*10465441SEvalZero 241*10465441SEvalZero<p> 242*10465441SEvalZeroDefinition at line <a class="el" href="a00202.html#l00337">337</a> of file <a class="el" href="a00202.html">uip.h</a>. </td> 243*10465441SEvalZero </tr> 244*10465441SEvalZero</table> 245*10465441SEvalZero<a class="anchor" name="g2c64c8c36bc84f9336f6a2184ea51883"></a><!-- doxytag: member="uip.h::uip_udp_periodic" ref="g2c64c8c36bc84f9336f6a2184ea51883" args="(conn)" --><p> 246*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 247*10465441SEvalZero <tr> 248*10465441SEvalZero <td class="mdRow"> 249*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 250*10465441SEvalZero <tr> 251*10465441SEvalZero <td class="md" nowrap valign="top">#define uip_udp_periodic </td> 252*10465441SEvalZero <td class="md" valign="top">( </td> 253*10465441SEvalZero <td class="md" nowrap valign="top">conn </td> 254*10465441SEvalZero <td class="mdname1" valign="top" nowrap> </td> 255*10465441SEvalZero <td class="md" valign="top"> ) </td> 256*10465441SEvalZero <td class="md" nowrap></td> 257*10465441SEvalZero </tr> 258*10465441SEvalZero </table> 259*10465441SEvalZero </td> 260*10465441SEvalZero </tr> 261*10465441SEvalZero</table> 262*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 263*10465441SEvalZero <tr> 264*10465441SEvalZero <td> 265*10465441SEvalZero 266*10465441SEvalZero </td> 267*10465441SEvalZero <td> 268*10465441SEvalZero 269*10465441SEvalZero<p> 270*10465441SEvalZeroPeriodic processing for a UDP connection identified by its number. 271*10465441SEvalZero<p> 272*10465441SEvalZeroThis function is essentially the same as <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a>, but for UDP connections. It is called in a similar fashion as the <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a> function: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < <a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; i++) { 273*10465441SEvalZero <a class="code" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(i); 274*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 275*10465441SEvalZero devicedriver_send(); 276*10465441SEvalZero } 277*10465441SEvalZero } 278*10465441SEvalZero</pre></div><p> 279*10465441SEvalZero<dl compact><dt><b>Note:</b></dt><dd>As for the <a class="el" href="a00146.html#g1024f8a5fa65e82bf848b2e6590d9628">uip_periodic()</a> function, special care has to be taken when using uIP together with ARP and Ethernet: <div class="fragment"><pre class="fragment"> <span class="keywordflow">for</span>(i = 0; i < UIP_UDP_CONNS; i++) { 280*10465441SEvalZero <a class="code" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic</a>(i); 281*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> > 0) { 282*10465441SEvalZero <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>(); 283*10465441SEvalZero ethernet_devicedriver_send(); 284*10465441SEvalZero } 285*10465441SEvalZero } 286*10465441SEvalZero</pre></div></dd></dl> 287*10465441SEvalZero<dl compact><dt><b>Parameters:</b></dt><dd> 288*10465441SEvalZero <table border="0" cellspacing="2" cellpadding="0"> 289*10465441SEvalZero <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>The number of the UDP connection to be processed. </td></tr> 290*10465441SEvalZero </table> 291*10465441SEvalZero</dl> 292*10465441SEvalZero<dl compact><dt><b>Examples: </b></dt><dd> 293*10465441SEvalZero<a class="el" href="a00042.html#a82">example-mainloop-with-arp.c</a>, and <a class="el" href="a00043.html#a99">example-mainloop-without-arp.c</a>.</dl> 294*10465441SEvalZero<p> 295*10465441SEvalZeroDefinition at line <a class="el" href="a00202.html#l00373">373</a> of file <a class="el" href="a00202.html">uip.h</a>. </td> 296*10465441SEvalZero </tr> 297*10465441SEvalZero</table> 298*10465441SEvalZero<a class="anchor" name="gf5c2ad5acf3cc23b8262e9ba6a15136b"></a><!-- doxytag: member="uip.h::uip_udp_periodic_conn" ref="gf5c2ad5acf3cc23b8262e9ba6a15136b" args="(conn)" --><p> 299*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 300*10465441SEvalZero <tr> 301*10465441SEvalZero <td class="mdRow"> 302*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 303*10465441SEvalZero <tr> 304*10465441SEvalZero <td class="md" nowrap valign="top">#define uip_udp_periodic_conn </td> 305*10465441SEvalZero <td class="md" valign="top">( </td> 306*10465441SEvalZero <td class="md" nowrap valign="top">conn </td> 307*10465441SEvalZero <td class="mdname1" valign="top" nowrap> </td> 308*10465441SEvalZero <td class="md" valign="top"> ) </td> 309*10465441SEvalZero <td class="md" nowrap></td> 310*10465441SEvalZero </tr> 311*10465441SEvalZero </table> 312*10465441SEvalZero </td> 313*10465441SEvalZero </tr> 314*10465441SEvalZero</table> 315*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 316*10465441SEvalZero <tr> 317*10465441SEvalZero <td> 318*10465441SEvalZero 319*10465441SEvalZero </td> 320*10465441SEvalZero <td> 321*10465441SEvalZero 322*10465441SEvalZero<p> 323*10465441SEvalZeroPeriodic processing for a UDP connection identified by a pointer to its structure. 324*10465441SEvalZero<p> 325*10465441SEvalZeroSame as <a class="el" href="a00146.html#g2c64c8c36bc84f9336f6a2184ea51883">uip_udp_periodic()</a> but takes a pointer to the actual <a class="el" href="a00088.html">uip_conn</a> struct instead of an integer as its argument. This function can be used to force periodic processing of a specific connection.<p> 326*10465441SEvalZero<dl compact><dt><b>Parameters:</b></dt><dd> 327*10465441SEvalZero <table border="0" cellspacing="2" cellpadding="0"> 328*10465441SEvalZero <tr><td valign="top"></td><td valign="top"><em>conn</em> </td><td>A pointer to the <a class="el" href="a00095.html">uip_udp_conn</a> struct for the connection to be processed. </td></tr> 329*10465441SEvalZero </table> 330*10465441SEvalZero</dl> 331*10465441SEvalZero 332*10465441SEvalZero<p> 333*10465441SEvalZeroDefinition at line <a class="el" href="a00202.html#l00390">390</a> of file <a class="el" href="a00202.html">uip.h</a>. </td> 334*10465441SEvalZero </tr> 335*10465441SEvalZero</table> 336*10465441SEvalZero<hr><h2>Variable Documentation</h2> 337*10465441SEvalZero<a class="anchor" name="gb81e78f890dbbee50c533a9734b74fd9"></a><!-- doxytag: member="uip.h::uip_buf" ref="gb81e78f890dbbee50c533a9734b74fd9" args="[UIP_BUFSIZE+2]" --><p> 338*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 339*10465441SEvalZero <tr> 340*10465441SEvalZero <td class="mdRow"> 341*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 342*10465441SEvalZero <tr> 343*10465441SEvalZero <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> <a class="el" href="a00150.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[UIP_BUFSIZE+2] </td> 344*10465441SEvalZero </tr> 345*10465441SEvalZero </table> 346*10465441SEvalZero </td> 347*10465441SEvalZero </tr> 348*10465441SEvalZero</table> 349*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 350*10465441SEvalZero <tr> 351*10465441SEvalZero <td> 352*10465441SEvalZero 353*10465441SEvalZero </td> 354*10465441SEvalZero <td> 355*10465441SEvalZero 356*10465441SEvalZero<p> 357*10465441SEvalZeroThe uIP packet buffer. 358*10465441SEvalZero<p> 359*10465441SEvalZeroThe uip_buf array is used to hold incoming and outgoing packets. The device driver should place incoming data into this buffer. When sending data, the device driver should read the link level headers and the TCP/IP headers from this buffer. The size of the link level headers is configured by the UIP_LLH_LEN define.<p> 360*10465441SEvalZero<dl compact><dt><b>Note:</b></dt><dd>The application data need not be placed in this buffer, so the device driver must read it from the place pointed to by the uip_appdata pointer as illustrated by the following example: <div class="fragment"><pre class="fragment"> <span class="keywordtype">void</span> 361*10465441SEvalZero devicedriver_send(<span class="keywordtype">void</span>) 362*10465441SEvalZero { 363*10465441SEvalZero hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[0], <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>); 364*10465441SEvalZero <span class="keywordflow">if</span>(<a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> <= <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a> + <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>) { 365*10465441SEvalZero hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>], <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - UIP_LLH_LEN); 366*10465441SEvalZero } <span class="keywordflow">else</span> { 367*10465441SEvalZero hwsend(&<a class="code" href="a00146.html#gb81e78f890dbbee50c533a9734b74fd9">uip_buf</a>[<a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>], <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a>); 368*10465441SEvalZero hwsend(<a class="code" href="a00150.html#g561b8eda32e059d4e7397f776268cc63">uip_appdata</a>, <a class="code" href="a00149.html#g12a33f0c09711167bdf3dd7d7cf8c5a1">uip_len</a> - <a class="code" href="a00150.html#gee37386b2ab828787c05227eb109def7">UIP_TCPIP_HLEN</a> - <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>); 369*10465441SEvalZero } 370*10465441SEvalZero } 371*10465441SEvalZero</pre></div> </dd></dl> 372*10465441SEvalZero 373*10465441SEvalZero<p> 374*10465441SEvalZeroDefinition at line <a class="el" href="a00201.html#l00139">139</a> of file <a class="el" href="a00201.html">uip.c</a>. 375*10465441SEvalZero<p> 376*10465441SEvalZeroReferenced by <a class="el" href="a00201.html#l00682">uip_process()</a>. </td> 377*10465441SEvalZero </tr> 378*10465441SEvalZero</table> 379*10465441SEvalZero<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by 380*10465441SEvalZero<a href="http://www.doxygen.org/index.html"> 381*10465441SEvalZero<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address> 382*10465441SEvalZero</body> 383*10465441SEvalZero</html> 384