/[H8]/trunk/docs/MCHPStack2.20/Source/TFTPc.h
ViewVC logotype

Annotation of /trunk/docs/MCHPStack2.20/Source/TFTPc.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (hide annotations) (download)
Tue May 1 08:17:39 2007 UTC (17 years, 2 months ago) by hedin
File MIME type: text/plain
File size: 16043 byte(s)
Removed tcpip stack 4.02 and added tcpip stack 2.20.
1 hedin 62 /*********************************************************************
2     *
3     * TFTP Client module for Microchip TCP/IP Stack
4     *
5     *********************************************************************
6     * FileName: TFTPc.h
7     * Dependencies: StackTsk.h
8     * Processor: PIC18
9     * Complier: MCC18 v1.00.50 or higher
10     * HITECH PICC-18 V8.10PL1 or higher
11     * Company: Microchip Technology, Inc.
12     *
13     * Software License Agreement
14     *
15     * The software supplied herewith by Microchip Technology Incorporated
16     * (the “Company”) for its PICmicro® Microcontroller is intended and
17     * supplied to you, the Company’s customer, for use solely and
18     * exclusively on Microchip PICmicro Microcontroller products. The
19     * software is owned by the Company and/or its supplier, and is
20     * protected under applicable copyright laws. All rights are reserved.
21     * Any use in violation of the foregoing restrictions may subject the
22     * user to criminal sanctions under applicable laws, as well as to
23     * civil liability for the breach of the terms and conditions of this
24     * license.
25     *
26     * THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
27     * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
28     * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
29     * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
30     * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
31     * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
32     *
33     * Author Date Comment
34     *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35     * Nilesh Rajbharti 8/5/03 Original (Rev 1.0)
36     ********************************************************************/
37     #ifndef TFTPC_H
38     #define TFTPC_H
39    
40     #include "stacktsk.h"
41     #include "udp.h"
42    
43     // Number of seconds to wait before declaring TIMEOUT error on Get.
44     #define TFTP_GET_TIMEOUT_VAL (3 * TICKS_PER_SECOND)
45    
46     // Number of seconds to wait before declaring TIMEOUT error on Put
47     #define TFTP_ARP_TIMEOUT_VAL (3 * TICKS_PER_SECOND)
48    
49     // Number of attempts before declaring TIMEOUT error.
50     #define TFTP_MAX_RETRIES (3)
51    
52     // Retry count must be 1 or more.
53     #if TFTP_MAX_RETRIES <= 0
54     #error Retry count must at least be 1
55     #endif
56    
57     // Enum. of results returned by most of the TFTP functions.
58     typedef enum _TFTP_RESULT
59     {
60     TFTP_OK = 0,
61     TFTP_NOT_READY,
62     TFTP_END_OF_FILE,
63     TFTP_ERROR,
64     TFTP_RETRY,
65     TFTP_TIMEOUT
66     } TFTP_RESULT;
67    
68     // File open mode as used by TFTPFileOpen().
69     typedef enum _TFTP_FILE_MODE
70     {
71     TFTP_FILE_MODE_READ = 1,
72     TFTP_FILE_MODE_WRITE = 2
73     } TFTP_FILE_MODE;
74    
75     // Standard error codes as defined by TFTP spec.
76     // Use to decode value retuned by TFTPGetError().
77     typedef enum _TFTP_ACCESS_ERROR
78     {
79     TFTP_ERROR_NOT_DEFINED = 0,
80     TFTP_ERROR_FILE_NOT_FOUND,
81     TFTP_ERROR_ACCESS_VIOLATION,
82     TFTP_ERROR_DISK_FULL,
83     TFTP_ERROR_INVALID_OPERATION,
84     TFTP_ERROR_UNKNOWN_TID,
85     TFTP_ERROR_FILE_EXISTS,
86     TFTP_ERROR_NO_SUCH_USE
87     } TFTP_ACCESS_ERROR;
88    
89     /*********************************************************************
90     * Function: void TFTPOpen(IP_ADDR *host)
91     *
92     * PreCondition: UDP module is already initialized
93     * and at least one UDP socket is available.
94     *
95     * Input: host - IP address of remote TFTP server
96     *
97     * Output: None
98     *
99     * Side Effects: None
100     *
101     * Overview: Initiates ARP for given host and prepares
102     * TFTP module for next sequence of function calls.
103     *
104     * Note: Use TFTPIsOpened() to check if a connection was
105     * successfully opened or not.
106     *
107     ********************************************************************/
108     void TFTPOpen(IP_ADDR *host);
109    
110    
111     /*********************************************************************
112     * Function: TFTP_RESULT TFTPIsOpened(void)
113     *
114     * PreCondition: TFTPOpen() is already called.
115     *
116     * Input: None
117     *
118     * Output: TFTP_OK if previous call to TFTPOpen is complete
119     *
120     * TFTP_TIMEOUT if remote host did not respond to
121     * previous ARP request.
122     *
123     * TFTP_NOT_READY if remote has still not responded
124     * and timeout has not expired.
125     *
126     * Side Effects: None
127     *
128     * Overview: Waits for ARP reply and opens a UDP socket
129     * to perform further TFTP operations.
130     *
131     * Note: Once opened, application may keep TFTP socket
132     * open and future TFTP operations.
133     * If TFTPClose() is called to close the connection
134     * TFTPOpen() must be called again before performing
135     * any other TFTP operations.
136     ********************************************************************/
137     TFTP_RESULT TFTPIsOpened(void);
138    
139    
140     /*********************************************************************
141     * Macro: void TFTPClose(void)
142     *
143     * PreCondition: TFTPOpen is already called and TFTPIsOpened()
144     * returned TFTP_OK.
145     *
146     * Input: None
147     *
148     * Output: None
149     *
150     * Side Effects: None
151     *
152     * Overview: Closes TFTP client socket.
153     *
154     * Note: Once closed, application must do TFTPOpen to
155     * perform any new TFTP operations.
156     *
157     * If TFTP server does not change during application
158     * life-time, one may not need to call TFTPClose
159     * and keep TFTP socket open.
160     ********************************************************************/
161     #define TFTPClose(void) UDPClose(_tftpSocket)
162     extern UDP_SOCKET _tftpSocket;
163    
164    
165    
166     /*********************************************************************
167     * Macro: BOOL TFTPIsFileOpenReady(void)
168     *
169     * PreCondition: TFTPOpen is already called and TFTPIsOpened()
170     * returned TFTP_OK.
171     *
172     * Input: None
173     *
174     * Output: TRUE, if it is ok to call TFTPOpenFile()
175     * FALSE, if otherwise.
176     *
177     * Side Effects: None
178     *
179     * Overview: Checks to see if it is okay to send TFTP file
180     * open request to remote server.
181     *
182     * Note: None
183     ********************************************************************/
184     #define TFTPIsFileOpenReady() UDPIsPutReady(_tftpSocket)
185    
186    
187    
188     /*********************************************************************
189     * Function: void TFTPOpenFile(char *fileName,
190     * TFTP_FILE_MODE mode)
191     *
192     * PreCondition: TFPTIsFileOpenReady() = TRUE
193     *
194     * Input: fileName - File name that is to be opened.
195     * mode - Mode of file access
196     * Must be
197     * TFTP_FILE_MODE_READ for read
198     * TFTP_FILE_MODE_WRITE for write
199     *
200     * Output: None
201     *
202     * Side Effects: None
203     *
204     * Overview: Prepares and sends TFTP file name and mode packet.
205     *
206     * Note: By default, this funciton uses "octet" or binary
207     * mode of file transfer.
208     * Use TFTPIsFileOpened() to check if file is
209     * ready to be read or written.
210     ********************************************************************/
211     void TFTPOpenFile(char *fileName, TFTP_FILE_MODE mode);
212    
213    
214     /*********************************************************************
215     * Function: TFTP_RESULT TFTPIsFileOpened(void)
216     *
217     * PreCondition: TFTPOpenFile() is called.
218     *
219     * Input: None
220     *
221     * Output: TFTP_OK if file is ready to be read or written
222     *
223     * TFTP_RETRY if previous attempt was timed out
224     * needs to be retried.
225     *
226     * TFTP_TIMEOUT if all attempts were exhausted.
227     *
228     * TFTP_NOT_ERROR if remote server responded with
229     * error
230     *
231     * TFTP_NOT_READY if file is not yet opened.
232     *
233     * Side Effects: None
234     *
235     * Overview: Waits for remote server response regarding
236     * previous attempt to open file.
237     * If no response is received within specified
238     * timeout, fnction returns with TFTP_RETRY
239     * and application logic must issue another
240     * TFTPFileOpen().
241     *
242     * Note: None
243     ********************************************************************/
244     TFTP_RESULT TFTPIsFileOpened(void);
245    
246     /*********************************************************************
247     * Function: void TFTPCloseFile(void)
248     *
249     * PreCondition: TFTPOpenFile() was called and TFTPIsFileOpened()
250     * had returned with TFTP_OK.
251     *
252     * Input: None
253     *
254     * Output: None
255     *
256     * Side Effects: None
257     *
258     * Overview: If file is opened in read mode, it makes sure
259     * that last ACK is sent to server
260     * If file is opened in write mode, it makes sure
261     * that last block is sent out to server and
262     * waits for server to respond with ACK.
263     *
264     * Note: TFTPIsFileClosed() must be called to confirm
265     * if file was really closed.
266     ********************************************************************/
267     void TFTPCloseFile(void);
268    
269    
270     /*********************************************************************
271     * Function: TFTP_RESULT TFPTIsFileClosed(void)
272     *
273     * PreCondition: TFTPCloseFile() is already called.
274     *
275     * Input: None
276     *
277     * Output: TFTP_OK if file was successfully closdd
278     *
279     * TFTP_RETRY if file mode was Write and remote
280     * server did not receive last packet.
281     * Application must retry with last block.
282     *
283     * TFTP_TIMEOUT if all attempts were exhausted
284     * in closing file.
285     *
286     * TFTP_ERROR if remote server sent an error
287     * in response to last block.
288     * Actual error code may be read by calling
289     * TFTPGetError()
290     *
291     * TFTP_NOT_READY if file is not closed yet.
292     *
293     * Side Effects: None
294     *
295     * Overview: If file mode is Read, it simply makes that
296     * last block is acknowledged.
297     * If file mode is Write, it waits for server ack.
298     * If no ack was received within specified timeout
299     * instructs appliaction to resend last block.
300     * It keeps track of retries and declares timeout
301     * all attempts were exhausted.
302     *
303     * Note: None
304     ********************************************************************/
305     TFTP_RESULT TFTPIsFileClosed(void);
306    
307    
308    
309     /*********************************************************************
310     * Function: TFTP_RESULT TFTPIsGetReady(void)
311     *
312     * PreCondition: TFTPOpenFile() is called with TFTP_FILE_MODE_READ
313     * and TFTPIsFileOpened() returned with TRUE.
314     *
315     * Input: None
316     *
317     * Output: TFTP_OK if it there is more data byte available
318     * to read
319     *
320     * TFTP_TIMEOUT if timeout occurred waiting for
321     * new data.
322     *
323     * TFTP_END_OF_FILE if end of file has reached.
324     *
325     * TFTP_ERROR if remote server returned ERROR.
326     * Actual error code may be read by calling
327     * TFTPGetError()
328     *
329     * TFTP_NOT_READY if still waiting for new data.
330     *
331     * Side Effects: None
332     *
333     * Overview: Waits for data block. If data block does not
334     * arrive within specified timeout, it automatically
335     * sends out ack for previous block to remind
336     * server to send next data block.
337     * If all attempts are exhausted, it returns with
338     * TFTP_TIMEOUT.
339     *
340     * Note: By default, this funciton uses "octet" or binary
341     * mode of file transfer.
342     ********************************************************************/
343     TFTP_RESULT TFTPIsGetReady(void);
344    
345    
346     /*********************************************************************
347     * Function: BYTE TFTPGet(void)
348     *
349     * PreCondition: TFTPOpenFile() is called with TFTP_FILE_MODE_READ
350     * and TFTPIsGetReady() = TRUE
351     *
352     * Input: None
353     *
354     * Output: data byte as received from remote server.
355     *
356     * Side Effects: None
357     *
358     * Overview: Fetches next data byte from TFTP socket.
359     * If end of data block is reached, it issues
360     * ack to server so that next data block can be
361     * received.
362     *
363     * Note: Use this function to read file from server.
364     ********************************************************************/
365     BYTE TFTPGet(void);
366    
367    
368     /*********************************************************************
369     * Function: TFTP_RESULT TFTPIsPutReady(void)
370     *
371     * PreCondition: TFTPOpenFile() is called with TFTP_FILE_MODE_WRITE
372     * and TFTPIsFileOpened() returned with TRUE.
373     *
374     * Input: None
375     *
376     * Output: TFTP_OK if it is okay to write more data byte.
377     *
378     * TFTP_TIMEOUT if timeout occurred waiting for
379     * ack from server
380     *
381     * TFTP_RETRY if all server did not send ack
382     * on time and application needs to resend
383     * last block.
384     *
385     * TFTP_ERROR if remote server returned ERROR.
386     * Actual error code may be read by calling
387     * TFTPGetError()
388     *
389     * TFTP_NOT_READY if still waiting...
390     *
391     * Side Effects: None
392     *
393     * Overview: Waits for ack from server. If ack does not
394     * arrive within specified timeout, it it instructs
395     * application to retry last block by returning
396     * TFTP_RETRY.
397     *
398     * If all attempts are exhausted, it returns with
399     * TFTP_TIMEOUT.
400     *
401     * Note: None
402     ********************************************************************/
403     TFTP_RESULT TFTPIsPutReady(void);
404    
405    
406     /*********************************************************************
407     * Function: void TFTPPut(BYTE c)
408     *
409     * PreCondition: TFTPOpenFile() is called with TFTP_FILE_MODE_WRITE
410     * and TFTPIsPutReady() = TRUE
411     *
412     * Input: c - Data byte that is to be written
413     *
414     * Output: None
415     *
416     * Side Effects: None
417     *
418     * Overview: Puts given data byte into TFTP socket.
419     * If end of data block is reached, it
420     * transmits entire block.
421     *
422     * Note: Use this function to write file to server.
423     ********************************************************************/
424     void TFTPPut(BYTE c);
425    
426    
427     /*********************************************************************
428     * Macro: WORD TFTPGetError(void)
429     *
430     * PreCondition: One of the TFTP function returned with
431     * TFTP_ERROR result.
432     *
433     * Input: None
434     *
435     * Output: Error code as returned by remote server.
436     * Application may use TFTP_ACCESS_ERROR enum. to
437     * decode standard error code.
438     *
439     * Side Effects: None
440     *
441     * Overview: Returns previously saved error code.
442     *
443     * Note: None
444     ********************************************************************/
445     #define TFTPGetError() (_tftpError)
446     extern WORD _tftpError;
447    
448    
449     #endif

  ViewVC Help
Powered by ViewVC 1.1.20