/[H8]/trunk/docs/Microchip TCP_IP stack/TCPIP Stack/StackTsk.c
ViewVC logotype

Annotation of /trunk/docs/Microchip TCP_IP stack/TCPIP Stack/StackTsk.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15 - (hide annotations) (download)
Thu Apr 19 09:01:15 2007 UTC (17 years, 2 months ago) by hedin
File MIME type: text/plain
File size: 7850 byte(s)
added the TCP/IP stack, source code.
1 hedin 15 /*********************************************************************
2     *
3     * TCP/IP Stack Manager
4     * Module for Microchip TCP/IP Stack
5     * -Handles internal RX packet pre-processing prior to dispatching
6     * to upper application layers.
7     * -Reference: AN833
8     *
9     *********************************************************************
10     * FileName: StackTsk.c
11     * Dependencies: StackTsk.H
12     * ARP.h
13     * MAC.h
14     * IP.h
15     * ICMP.h
16     * Tcp.h
17     * http.h
18     * Processor: PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F
19     * Complier: Microchip C18 v3.02 or higher
20     * Microchip C30 v2.01 or higher
21     * Company: Microchip Technology, Inc.
22     *
23     * Software License Agreement
24     *
25     * Copyright © 2002-2007 Microchip Technology Inc. All rights
26     * reserved.
27     *
28     * Microchip licenses to you the right to use, modify, copy, and
29     * distribute:
30     * (i) the Software when embedded on a Microchip microcontroller or
31     * digital signal controller product (“Device”) which is
32     * integrated into Licensee’s product; or
33     * (ii) ONLY the Software driver source files ENC28J60.c and
34     * ENC28J60.h ported to a non-Microchip device used in
35     * conjunction with a Microchip ethernet controller for the
36     * sole purpose of interfacing with the ethernet controller.
37     *
38     * You should refer to the license agreement accompanying this
39     * Software for additional information regarding your rights and
40     * obligations.
41     *
42     * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED “AS IS” WITHOUT
43     * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
44     * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A
45     * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL
46     * MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR
47     * CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF
48     * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
49     * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE
50     * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER
51     * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT
52     * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE.
53     *
54     *
55     * Author Date Comment
56     *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57     * Nilesh Rajbharti 8/14/01 Original (Rev. 1.0)
58     * Nilesh Rajbharti 2/9/02 Cleanup
59     * Nilesh Rajbharti 5/22/02 Rev 2.0 (See version.log for detail)
60     * Nilesh Rajbharti 12/5/02 Modified UDPProcess() and TCPProcess()
61     * to include localIP as third param.
62     * This was done to allow these functions
63     * to calculate checksum correctly.
64     * Nilesh Rajbharti 7/26/04 Added code in StackTask() to not
65     * clear statically IP address if link is
66     * removed and DHCP module is disabled
67     * at runtime.
68     * Howard Schlunder 03/16/07 Rewrote stack manager to be linear
69     ********************************************************************/
70     #define __STACKTSK_C
71    
72     #include "TCPIP Stack/TCPIP.h"
73    
74     // myDHCPBindCount defined in MainDemo.c; Used to force an IP
75     // address display update for IP Gleaning
76     extern BYTE myDHCPBindCount;
77    
78    
79     // Stack FSM states.
80     typedef enum _SM_STACK
81     {
82     SM_STACK_IDLE,
83     SM_STACK_MAC,
84     SM_STACK_IP,
85     SM_STACK_ARP,
86     SM_STACK_TCP,
87     SM_STACK_UDP
88     } SM_STACK;
89     static SM_STACK smStack;
90    
91     NODE_INFO remoteNode;
92    
93    
94    
95     /*********************************************************************
96     * Function: void StackInit(void)
97     *
98     * PreCondition: None
99     *
100     * Input: None
101     *
102     * Output: Stack and its componets are initialized
103     *
104     * Side Effects: None
105     *
106     * Note: This function must be called before any of the
107     * stack or its component routines are used.
108     *
109     ********************************************************************/
110     void StackInit(void)
111     {
112     smStack = SM_STACK_IDLE;
113    
114     #if defined(STACK_USE_IP_GLEANING) || defined(STACK_USE_DHCP_CLIENT)
115     /*
116     * If DHCP or IP Gleaning is enabled,
117     * startup in Config Mode.
118     */
119     AppConfig.Flags.bInConfigMode = TRUE;
120    
121     #endif
122    
123     MACInit();
124    
125     ARPInit();
126    
127     #if defined(STACK_USE_UDP)
128     UDPInit();
129     #endif
130    
131     #if defined(STACK_USE_TCP)
132     TCPInit();
133     #endif
134    
135     }
136    
137    
138     /*********************************************************************
139     * Function: void StackTask(void)
140     *
141     * PreCondition: StackInit() is already called.
142     *
143     * Input: None
144     *
145     * Output: Stack FSM is executed.
146     *
147     * Side Effects: None
148     *
149     * Note: This FSM checks for new incoming packets,
150     * and routes it to appropriate stack components.
151     * It also performs timed operations.
152     *
153     * This function must be called periodically to
154     * ensure timely responses.
155     *
156     ********************************************************************/
157     void StackTask(void)
158     {
159     WORD dataCount;
160     IP_ADDR tempLocalIP;
161     BYTE cFrameType;
162     BYTE cIPFrameType;
163    
164    
165     #if defined(STACK_USE_DHCP_CLIENT)
166     // Normally, an application would not include DHCP module
167     // if it is not enabled. But in case some one wants to disable
168     // DHCP module at run-time, remember to not clear our IP
169     // address if link is removed.
170     if(AppConfig.Flags.bIsDHCPEnabled)
171     {
172     if(!MACIsLinked())
173     {
174     AppConfig.MyIPAddr.Val = AppConfig.DefaultIPAddr.Val;
175     AppConfig.MyMask.Val = AppConfig.DefaultMask.Val;
176     DHCPFlags.bits.bDHCPServerDetected = FALSE;
177     AppConfig.Flags.bInConfigMode = TRUE;
178     DHCPReset();
179     }
180    
181     // DHCP must be called all the time even after IP configuration is
182     // discovered.
183     // DHCP has to account lease expiration time and renew the configuration
184     // time.
185     DHCPTask();
186    
187     if(DHCPIsBound())
188     AppConfig.Flags.bInConfigMode = FALSE;
189     }
190     #endif
191    
192     #if defined(STACK_USE_TCP)
193     // Perform all TCP time related tasks (retransmit, send acknowledge, close connection, etc)
194     TCPTick();
195     #endif
196    
197    
198     // Process as many incomming packets as we can
199     while(MACGetHeader(&remoteNode.MACAddr, &cFrameType))
200     {
201     switch(cFrameType)
202     {
203     case MAC_ARP:
204     ARPProcess();
205     break;
206    
207     case MAC_IP:
208     if(!IPGetHeader(&tempLocalIP, &remoteNode, &cIPFrameType, &dataCount))
209     break;
210    
211     #if defined(STACK_USE_ICMP_SERVER) || defined(STACK_USE_ICMP_CLIENT)
212     if(cIPFrameType == IP_PROT_ICMP)
213     {
214     ICMPProcess(&remoteNode, dataCount);
215    
216     #if defined(STACK_USE_IP_GLEANING)
217     if(AppConfig.Flags.bInConfigMode && AppConfig.Flags.bIsDHCPEnabled)
218     {
219     // Accoriding to "IP Gleaning" procedure,
220     // when we receive an ICMP packet with a valid
221     // IP address while we are still in configuration
222     // mode, accept that address as ours and conclude
223     // configuration mode.
224     if(tempLocalIP.Val != 0xffffffff)
225     {
226     AppConfig.Flags.bInConfigMode = FALSE;
227     AppConfig.MyIPAddr = tempLocalIP;
228     myDHCPBindCount--;
229     }
230     }
231     #endif
232     break;
233     }
234     #endif
235    
236     #if defined(STACK_USE_TCP)
237     if(cIPFrameType == IP_PROT_TCP)
238     {
239     TCPProcess(&remoteNode, &tempLocalIP, dataCount);
240     break;
241     }
242     #endif
243    
244     #if defined(STACK_USE_UDP)
245     if(cIPFrameType == IP_PROT_UDP)
246     {
247     UDPProcess(&remoteNode, &tempLocalIP, dataCount);
248     break;
249     }
250     #endif
251    
252     break;
253     }
254     }
255     }
256    

  ViewVC Help
Powered by ViewVC 1.1.20