📄 bootp_8c-source.html
字号:
00204 localmachine.defgw = 0;00205 localmachine.netmask = 0;00206 00207 <a class="code" href="timers_8c.html#a6">init_timer</a>(<a class="code" href="bootp_8c.html#a6">bootp</a>.tmrhandle, ((UINT32)(localmachine.localHW[0]) << 2) + localmachine.localHW[1]);00208 <a class="code" href="bootp_8c.html#a6">bootp</a>.state = <a class="code" href="bootp_8h.html#a5">BOOTPC_STATE_REQUEST_NEEDED</a>;00209 }00210 00211 <span class="keywordflow">return</span>;00212 00213 <span class="keywordflow">case</span> <a class="code" href="bootp_8h.html#a5">BOOTPC_STATE_REQUEST_NEEDED</a>:00214 00215 <span class="keywordflow">if</span>( <a class="code" href="timers_8c.html#a7">check_timer</a>(<a class="code" href="bootp_8c.html#a6">bootp</a>.tmrhandle) != 0 )00216 <span class="keywordflow">return</span>;00217 00218 <span class="comment">/* Send request */</span>00219 00220 <span class="keywordflow">if</span>(localmachine.localip != 0){00221 <a class="code" href="bootp_8c.html#a6">bootp</a>.state = <a class="code" href="bootp_8h.html#a4">BOOTPC_STATE_ENABLED</a>;00222 <span class="keywordflow">return</span>;00223 00224 }00225 00226 i = 0;00227 00228 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x01;00229 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x01;00230 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x06;00231 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00232 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0xCA;00233 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x03;00234 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x32;00235 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0xF1;00236 00237 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = (UINT8)(<a class="code" href="bootp_8c.html#a6">bootp</a>.bootsecs >> 8);00238 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = (UINT8)<a class="code" href="bootp_8c.html#a6">bootp</a>.bootsecs;00239 00240 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x80;00241 00242 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00243 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00244 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00245 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00246 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00247 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00248 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00249 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00250 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00251 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00252 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00253 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00254 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00255 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00256 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00257 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00258 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 0x00;00259 00260 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = localmachine.localHW[5];00261 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = localmachine.localHW[4];00262 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = localmachine.localHW[3];00263 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = localmachine.localHW[2];00264 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = localmachine.localHW[1];00265 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = localmachine.localHW[0];00266 00267 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 99;00268 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 130;00269 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 83;00270 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 99;00271 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i++] = 255;00272 00273 <span class="keywordflow">for</span>( ;i<300;i++)00274 net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a> + i] = 0;00275 00276 <span class="comment">/* Send it */</span>00277 00278 <a class="code" href="udp_8c.html#a7">udp_send</a>(<a class="code" href="bootp_8c.html#a6">bootp</a>.sochandle, IP_BROADCAST_ADDRESS, <a class="code" href="bootp_8h.html#a2">BOOTP_SERVERPORT</a>, &net_buf[<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a>], <a class="code" href="group__opentcp__config.html#a4">NETWORK_TX_BUFFER_SIZE</a> - <a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a>, 300);00279 00280 <a class="code" href="timers_8c.html#a6">init_timer</a>(<a class="code" href="bootp_8c.html#a6">bootp</a>.tmrhandle, <a class="code" href="bootp_8h.html#a0">BOOTP_RETRY_TOUT</a>*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);00281 00282 <a class="code" href="bootp_8c.html#a6">bootp</a>.bootsecs += <a class="code" href="bootp_8h.html#a0">BOOTP_RETRY_TOUT</a>*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>;00283 00284 <a class="code" href="bootp_8c.html#a6">bootp</a>.state = <a class="code" href="bootp_8h.html#a6">BOOTPC_STATE_WAITING_REPLY</a>;00285 00286 <span class="keywordflow">return</span>;00287 00288 <span class="keywordflow">case</span> <a class="code" href="bootp_8h.html#a6">BOOTPC_STATE_WAITING_REPLY</a>:00289 00290 <span class="comment">/* Wait untill timeout elapsed and try again */</span>00291 00292 <span class="keywordflow">if</span>( <a class="code" href="timers_8c.html#a7">check_timer</a>(<a class="code" href="bootp_8c.html#a6">bootp</a>.tmrhandle) != 0 )00293 <span class="keywordflow">return</span>;00294 00295 <a class="code" href="bootp_8c.html#a6">bootp</a>.state = <a class="code" href="bootp_8h.html#a5">BOOTPC_STATE_REQUEST_NEEDED</a>;00296 00297 <span class="keywordflow">return</span>;00298 00299 <span class="keywordflow">case</span> <a class="code" href="bootp_8h.html#a7">BOOTPC_STATE_REPLY_GET</a>:00300 <span class="comment">/* parameters configured. Inspect state of bootp.mode</span>00301 <span class="comment"> * and do something (if needed). Also turn BOOTP client</span>00302 <span class="comment"> * on/off.</span>00303 <span class="comment"> */</span>00304 00305 <span class="keywordflow">return</span>;00306 00307 00308 <span class="keywordflow">default</span>:00309 00310 <span class="keywordflow">return</span>;00311 }00312 00313 }00314 <a name="l00335"></a><a class="code" href="bootp_8c.html#a11">00335</a> INT32 <a class="code" href="bootp_8c.html#a11">bootpc_eventlistener</a> (INT8 cbhandle, UINT8 event, UINT32 remip, UINT16 remport, UINT16 bufindex, UINT16 dlen) {00336 INT16 i,j,k;00337 UINT32 ip = 0;00338 UINT32 nm = 0;00339 UINT32 dgw = 0;00340 UINT8 ch;00341 00342 00343 <span class="comment">/* This function is called by UDP stack to inform about events */</span>00344 00345 <span class="keywordflow">if</span>(<a class="code" href="bootp_8c.html#a0">bootp_app_init</a> == 0)00346 <span class="keywordflow">return</span>(-1);00347 00348 <span class="keywordflow">if</span>( cbhandle != <a class="code" href="bootp_8c.html#a6">bootp</a>.sochandle) <span class="comment">/* Not our handle */</span>00349 <span class="keywordflow">return</span>(-1);00350 00351 <span class="comment">/* The only event is data */</span>00352 00353 <span class="keywordflow">if</span>(<a class="code" href="bootp_8c.html#a6">bootp</a>.state != <a class="code" href="bootp_8h.html#a6">BOOTPC_STATE_WAITING_REPLY</a>)00354 <span class="keywordflow">return</span>(-1);00355 00356 <span class="comment">/* Process reply */</span>00357 00358 <a class="code" href="system_8h.html#a14">NETWORK_RECEIVE_INITIALIZE</a>(bufindex);00359 00360 <span class="keywordflow">if</span>(dlen < 300)00361 <span class="keywordflow">return</span>(-1);00362 00363 <span class="keywordflow">if</span>( <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>() != BOOTP_REPLY)00364 <span class="keywordflow">return</span>(-1);00365 00366 <span class="keywordflow">if</span>( <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>() != BOOTP_HTYPE_ETHERNET)00367 <span class="keywordflow">return</span>(-1);00368 00369 <span class="keywordflow">if</span>( <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>() != BOOTP_HWLEN_ETHERNET)00370 <span class="keywordflow">return</span>(-1);00371 00372 <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>(); <span class="comment">/* Skip hops */</span>00373 00374 <span class="comment">/* Check transaction ID */</span>00375 00376 <span class="keywordflow">if</span>( <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>() != 0xCA)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -