📄 bootp_8c-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>/opentcp/bootp/bootp.c Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="main.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> <a class="qindex" href="pages.html">Related Pages</a> <a class="qindex" href="examples.html">Examples</a> </center><hr><h1>/opentcp/bootp/bootp.c</h1><a href="bootp_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span>00002 <span class="comment"> *Copyright (c) 2000-2002 Viola Systems Ltd.</span>00003 <span class="comment"> *All rights reserved.</span>00004 <span class="comment"> *</span>00005 <span class="comment"> *Redistribution and use in source and binary forms, with or without</span>00006 <span class="comment"> *modification, are permitted provided that the following conditions</span>00007 <span class="comment"> *are met:</span>00008 <span class="comment"> *</span>00009 <span class="comment"> *1. Redistributions of source code must retain the above copyright</span>00010 <span class="comment"> *notice, this list of conditions and the following disclaimer.</span>00011 <span class="comment"> *</span>00012 <span class="comment"> *2. Redistributions in binary form must reproduce the above copyright</span>00013 <span class="comment"> *notice, this list of conditions and the following disclaimer in the</span>00014 <span class="comment"> *documentation and/or other materials provided with the distribution.</span>00015 <span class="comment"> *</span>00016 <span class="comment"> *3. The end-user documentation included with the redistribution, if</span>00017 <span class="comment"> *any, must include the following acknowledgment:</span>00018 <span class="comment"> * "This product includes software developed by Viola</span>00019 <span class="comment"> * Systems (http://www.violasystems.com/)."</span>00020 <span class="comment"> *</span>00021 <span class="comment"> *Alternately, this acknowledgment may appear in the software itself,</span>00022 <span class="comment"> *if and wherever such third-party acknowledgments normally appear.</span>00023 <span class="comment"> *</span>00024 <span class="comment"> *4. The names "OpenTCP" and "Viola Systems" must not be used to</span>00025 <span class="comment"> *endorse or promote products derived from this software without prior</span>00026 <span class="comment"> *written permission. For written permission, please contact</span>00027 <span class="comment"> *opentcp@opentcp.org.</span>00028 <span class="comment"> *</span>00029 <span class="comment"> *5. Products derived from this software may not be called "OpenTCP",</span>00030 <span class="comment"> *nor may "OpenTCP" appear in their name, without prior written</span>00031 <span class="comment"> *permission of the Viola Systems Ltd.</span>00032 <span class="comment"> *</span>00033 <span class="comment"> *THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED</span>00034 <span class="comment"> *WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span>00035 <span class="comment"> *MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.</span>00036 <span class="comment"> *IN NO EVENT SHALL VIOLA SYSTEMS LTD. OR ITS CONTRIBUTORS BE LIABLE</span>00037 <span class="comment"> *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span>00038 <span class="comment"> *CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span>00039 <span class="comment"> *SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR</span>00040 <span class="comment"> *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>00041 <span class="comment"> *WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE</span>00042 <span class="comment"> *OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</span>00043 <span class="comment"> *EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>00044 <span class="comment"> *====================================================================</span>00045 <span class="comment"> *</span>00046 <span class="comment"> *OpenTCP is the unified open source TCP/IP stack available on a series</span>00047 <span class="comment"> *of 8/16-bit microcontrollers, please see <http://www.opentcp.org>.</span>00048 <span class="comment"> *</span>00049 <span class="comment"> *For more information on how to network-enable your devices, or how to</span>00050 <span class="comment"> *obtain commercial technical support for OpenTCP, please see</span>00051 <span class="comment"> *<http://www.violasystems.com/>.</span>00052 <span class="comment"> */</span>00053 00070 <span class="preprocessor">#include<<a class="code" href="datatypes_8h.html">inet/datatypes.h</a>></span>00071 <span class="preprocessor">#include<<a class="code" href="system_8h.html">inet/system.h</a>></span>00072 <span class="preprocessor">#include<<a class="code" href="timers_8h.html">inet/timers.h</a>></span>00073 <span class="preprocessor">#include<<a class="code" href="tcp__ip_8h.html">inet/tcp_ip.h</a>></span>00074 <span class="preprocessor">#include<<a class="code" href="bootp_8h.html">inet/bootp/bootp.h</a>></span>00075 <span class="preprocessor">#include<<a class="code" href="globalvariables_8h.html">inet/globalvariables.h</a>></span>00076 <a name="l00077"></a><a class="code" href="bootp_8c.html#a0">00077</a> UINT8 <a class="code" href="bootp_8c.html#a0">bootp_app_init</a> = 0; 00085 <span class="keyword">struct</span>00086 <span class="keyword"></span>{00087 UINT8 <a class="code" href="structarp__entry.html#m0">state</a>;00088 UINT8 mode;00089 INT8 sochandle;00090 UINT16 tmrhandle;00091 UINT16 bootsecs;00092 00093 } <a class="code" href="bootp_8c.html#a6">bootp</a>;00094 00095 <a name="l00108"></a><a class="code" href="bootp_8c.html#a7">00108</a> INT8 <a class="code" href="bootp_8c.html#a7">bootpc_init</a> (UINT8 mode)00109 {00110 <span class="comment">/* Already initialized? */</span>00111 00112 <span class="keywordflow">if</span>(bootp_app_init)00113 <span class="keywordflow">return</span>(1);00114 00115 <span class="comment">/* Get socket handle */</span>00116 00117 <a class="code" href="bootp_8c.html#a6">bootp</a>.sochandle = <a class="code" href="udp_8c.html#a3">udp_getsocket</a>(0, <a class="code" href="bootp_8c.html#a11">bootpc_eventlistener</a>, <a class="code" href="tcp__ip_8h.html#a5">UDP_OPT_SEND_CS</a> | <a class="code" href="tcp__ip_8h.html#a6">UDP_OPT_CHECK_CS</a>);00118 00119 <span class="keywordflow">if</span>(<a class="code" href="bootp_8c.html#a6">bootp</a>.sochandle < 0)00120 <span class="keywordflow">return</span>(-1);00121 00122 <span class="comment">/* Put it to listening mode */</span>00123 00124 <span class="keywordflow">if</span>( <a class="code" href="udp_8c.html#a5">udp_open</a>(<a class="code" href="bootp_8c.html#a6">bootp</a>.sochandle, <a class="code" href="bootp_8h.html#a1">BOOTP_CLIENTPORT</a>) < 0 )00125 <span class="keywordflow">return</span>(-1);00126 00127 <span class="comment">/* Get timer handle */</span>00128 00129 <a class="code" href="bootp_8c.html#a6">bootp</a>.tmrhandle = <a class="code" href="timers_8c.html#a2">get_timer</a>();00130 <a class="code" href="bootp_8c.html#a6">bootp</a>.bootsecs = 0;00131 <a class="code" href="bootp_8c.html#a6">bootp</a>.mode = mode;00132 00133 <a class="code" href="bootp_8c.html#a6">bootp</a>.state = <a class="code" href="bootp_8h.html#a3">BOOTPC_STATE_DISABLED</a>;00134 00135 00136 <a class="code" href="bootp_8c.html#a0">bootp_app_init</a> = 1;00137 00138 <span class="keywordflow">return</span>(1);00139 00140 }00141 <a name="l00150"></a><a class="code" href="bootp_8c.html#a8">00150</a> <span class="keywordtype">void</span> <a class="code" href="bootp_8c.html#a8">bootpc_stop</a> (<span class="keywordtype">void</span>){00151 <span class="keywordflow">if</span>(<a class="code" href="bootp_8c.html#a0">bootp_app_init</a> == 0)00152 <span class="keywordflow">return</span>;00153 00154 <a class="code" href="bootp_8c.html#a6">bootp</a>.state = <a class="code" href="bootp_8h.html#a3">BOOTPC_STATE_DISABLED</a>;00155 }00156 <a name="l00165"></a><a class="code" href="bootp_8c.html#a9">00165</a> INT8 <a class="code" href="bootp_8c.html#a9">bootpc_enable</a> (<span class="keywordtype">void</span>){00166 <span class="keywordflow">if</span>(<a class="code" href="bootp_8c.html#a0">bootp_app_init</a> == 0)00167 <span class="keywordflow">return</span>(-1);00168 00169 <a class="code" href="bootp_8c.html#a6">bootp</a>.state = <a class="code" href="bootp_8h.html#a4">BOOTPC_STATE_ENABLED</a>;00170 00171 <span class="keywordflow">return</span>(1);00172 00173 }00174 00175 <a name="l00183"></a><a class="code" href="bootp_8c.html#a10">00183</a> <span class="keywordtype">void</span> <a class="code" href="bootp_8c.html#a10">bootpc_run</a> (<span class="keywordtype">void</span>)00184 {00185 INT16 i;00186 UINT8 buf[4];00187 00188 <span class="comment">/* State machine */</span>00189 00190 <span class="keywordflow">if</span>(<a class="code" href="bootp_8c.html#a0">bootp_app_init</a> == 0)00191 <span class="keywordflow">return</span>;00192 00193 <span class="keywordflow">switch</span>(<a class="code" href="bootp_8c.html#a6">bootp</a>.state) {00194 <span class="keywordflow">case</span> <a class="code" href="bootp_8h.html#a4">BOOTPC_STATE_ENABLED</a>:00195 00196 <span class="comment">/* Check the IP address of the device and start BOOTP procedure for getting */</span>00197 <span class="comment">/* one if zero or 255.255.255.255 */</span>00198 00199 <span class="keywordflow">if</span>( (localmachine.localip == 0) || (localmachine.localip == 0xFFFFFFFF) ) {00200 <span class="comment">/* We need to start BOOTP request procedure */</span>00201 <span class="comment">/* Firstly wait random time */</span>00202 00203 localmachine.localip = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -