NetBurner 3.5.0
PDF Version
 
api_f.h
Go to the documentation of this file.
1/*NB_REVISION*/
2
22#ifndef _API_F_H_
23#define _API_F_H_
24
25/****************************************************************************
26 *
27 * Copyright (c) 2003-2006 by HCC Embedded
28 *
29 * This software is copyrighted by and is the sole property of
30 * HCC. All rights, title, ownership, or other interests
31 * in the software remain the property of HCC. This
32 * software may only be used in accordance with the corresponding
33 * license agreement. Any unauthorized use, duplication, transmission,
34 * distribution, or disclosure of this software is expressly forbidden.
35 *
36 * This Copyright notice may not be removed or modified without prior
37 * written consent of HCC.
38 *
39 * HCC reserves the right to modify this software without notice.
40 *
41 * HCC Embedded
42 * Budapest 1132
43 * Victor Hugo Utca 11-15
44 * Hungary
45 *
46 * Tel: +36 (1) 450 1302
47 * Fax: +36 (1) 450 1303
48 * http: www.hcc-embedded.com
49 * email: [email protected]
50 *
51 ***************************************************************************/
52
53#include <nbrtos.h>
54
55/****************************************************************************
56 *
57 * open bracket for C++ compatibility
58 *
59 ***************************************************************************/
60
61#ifdef __cplusplus
62extern "C"
63{
64#endif
65
66 /****************************************************************************
67 *
68 * if there is no udefs_f.h is included before
69 * then this followed #define must be revised to be compatible
70 * with UNICODE or LFN or 8+3 system
71 * also FN_MAXPATH and FN_MUTEX_TYPE must be set to original
72 *
73 ***************************************************************************/
74
75#ifndef _UDEFS_F_H_
76
77 /****************************************************************************
78 *
79 * if Unicode is used then comment in HCC_UNICODE define
80 *
81 ***************************************************************************/
82
83 /* #define HCC_UNICODE */
84
85#ifndef HCC_UNICODE
86#define F_LONGFILENAME 1 /* 0 - 8+3 names 1 - long file names */
87#define W_CHAR char
88#else
89#define F_LONGFILENAME 1 /* don't change it, because unicode version alvays uses long file name */
90#define W_CHAR wchar
91#endif
92
93#define FN_MAXPATH 256 /* maximum allowed filename or pathname */
94#define FN_MUTEX_TYPE OS_CRIT
95
96#ifdef HCC_UNICODE
97 typedef unsigned short wchar;
98#endif
99
100 /****************************************************************************
101 *
102 * End of udefs.h definition checking
103 *
104 ***************************************************************************/
105
106#endif /* #ifndef _UDEFS_F_H_ */
107
108/* definition of short filename */
109#define F_MAXNAME 8 /* 8 byte name */
110#define F_MAXEXT 3 /* 3 byte extension */
111
112#ifndef NULL
113#define NULL (void *)0
114#endif
115
116 /* public structure for FN_FILE */
117 typedef struct
118 {
119 void *reference; /* reference which fileint used */
120 } FN_FILE;
121
122/* F_NAME structure definition */
123#if (!F_LONGFILENAME)
124 typedef struct
125 {
126 int drivenum; /* drive number 0-A 1-B 2-C */
127 char path[FN_MAXPATH]; /* pathnam /directory1/dir2/ */
128 char filename[F_MAXNAME]; /* filename */
129 char fileext[F_MAXEXT]; /* extension */
130 } F_NAME;
131#else
132#define F_MAXLNAME 256 /* maximum length of long filename */
133typedef struct
134{
135 int drivenum; /* drive number 0-A 1-B 2-C */
136 W_CHAR path[FN_MAXPATH]; /* pathname /directory1/dir2/ */
137 W_CHAR lname[F_MAXLNAME]; /* long file name */
138} F_NAME;
139#endif /* F_LONGFILENAME */
140
141 typedef struct
142 {
143 unsigned long cluster; /* which cluster is used */
144 unsigned long prevcluster; /* previous cluster for bad block handling */
145 unsigned long sectorbegin; /* calculated sector start */
146 unsigned long sector; /* current sector */
147 unsigned long sectorend; /* last saector position of the cluster */
148 unsigned long pos; /* current position */
149 } F_POS;
150
151 typedef struct
152 {
153 char filename[FN_MAXPATH]; /* file name+ext */
154 char name[F_MAXNAME]; /* file name */
155 char ext[F_MAXEXT]; /* file extension */
156 unsigned char attr; /* attribute of the file */
157
158 unsigned short ctime; /* creation time */
159 unsigned short cdate; /* creation date */
160 unsigned long filesize; /* length of file */
161
162 unsigned long cluster; /* current file starting position */
163 F_NAME findfsname; /* find properties */
164 F_POS pos; /* position of the current list */
165 } FN_FIND;
166
167#ifdef HCC_UNICODE
168 typedef struct
169 {
170 W_CHAR filename[FN_MAXPATH]; /* file name+ext */
171 char name[F_MAXNAME]; /* file name */
172 char ext[F_MAXEXT]; /* file extension */
173 unsigned char attr; /* attribute of the file */
174
175 unsigned short ctime; /* creation time */
176 unsigned short cdate; /* creation date */
177 unsigned long filesize; /* length of file */
178
179 unsigned long cluster; /* current file starting position */
180 F_NAME findfsname; /* find properties */
181 F_POS pos; /* position of the current list */
182 } FN_WFIND;
183#endif
184
185/* attribute file/directory bitpattern definitions */
186#define F_ATTR_ARC 0x20
187#define F_ATTR_DIR 0x10
188#define F_ATTR_VOLUME 0x08
189#define F_ATTR_SYSTEM 0x04
190#define F_ATTR_HIDDEN 0x02
191#define F_ATTR_READONLY 0x01
192
193/* definitions for ctime */
194#define F_CTIME_SEC_SHIFT 0
195#define F_CTIME_SEC_MASK 0x001f /* 0-30 in 2seconds */
196#define F_CTIME_MIN_SHIFT 5
197#define F_CTIME_MIN_MASK 0x07e0 /* 0-59 */
198#define F_CTIME_HOUR_SHIFT 11
199#define F_CTIME_HOUR_MASK 0xf800 /* 0-23 */
200
201/* definitions for cdate */
202#define F_CDATE_DAY_SHIFT 0
203#define F_CDATE_DAY_MASK 0x001f /* 0-31 */
204#define F_CDATE_MONTH_SHIFT 5
205#define F_CDATE_MONTH_MASK 0x01e0 /* 1-12 */
206#define F_CDATE_YEAR_SHIFT 9
207#define F_CDATE_YEAR_MASK 0xfe00 /* 0-119 (1980+value) */
208
209 typedef struct
210 {
211 unsigned short number_of_cylinders;
212 unsigned short sector_per_track;
213 unsigned short number_of_heads;
214 unsigned long number_of_sectors;
215 unsigned char media_descriptor;
216 } F_PHY;
217
218/* media descriptor to be set in getphy function */
219#define F_MEDIADESC_REMOVABLE 0xf0
220#define F_MEDIADESC_FIX 0xf8
221
222/* return bitpattern for driver getphy function */
223#define F_ST_MISSING 0x00000001
224#define F_ST_CHANGED 0x00000002
225#define F_ST_WRPROTECT 0x00000004
226
227 /* Driver definitions */
228 typedef struct F_DRIVER F_DRIVER;
229
230 typedef int (*F_WRITESECTOR)(F_DRIVER *driver, void *data, unsigned long sector);
231 typedef int (*F_WRITEMULTIPLESECTOR)(F_DRIVER *driver, void *data, unsigned long sector, int cnt);
232 typedef int (*F_READSECTOR)(F_DRIVER *driver, void *data, unsigned long sector);
233 typedef int (*F_READMULTIPLESECTOR)(F_DRIVER *driver, void *data, unsigned long sector, int cnt);
234 typedef int (*F_GETPHY)(F_DRIVER *driver, F_PHY *phy);
235 typedef long (*F_GETSTATUS)(F_DRIVER *driver);
236 typedef void (*F_RELEASE)(F_DRIVER *driver);
237
238 typedef struct F_DRIVER
239 {
240 FN_MUTEX_TYPE mutex; /* mutex for the driver */
241 int separated; /* signal if the driver is separated */
242
243 unsigned long user_data; /* user defined data */
244 void *user_ptr; /* user define pointer */
245
246 /* driver functions */
247 F_WRITESECTOR writesector;
248 F_WRITEMULTIPLESECTOR writemultiplesector;
249 F_READSECTOR readsector;
250 F_READMULTIPLESECTOR readmultiplesector;
251 F_GETPHY getphy;
252 F_GETSTATUS getstatus;
253 F_RELEASE release;
254 } _F_DRIVER;
255
256 typedef F_DRIVER *(*F_DRIVERINIT)(unsigned long driver_param);
257
258/* When initvolume the driver will assign automatically a free driver */
259#define F_AUTO_ASSIGN (unsigned long)(-1)
260
261 /* definition for a media and f_format */
262 enum
263 {
264 /* 0 */ F_UNKNOWN_MEDIA,
265 /* 1 */ F_FAT12_MEDIA,
266 /* 2 */ F_FAT16_MEDIA,
267 /* 3 */ F_FAT32_MEDIA
268 };
269
270 /* definition for partitions */
271 typedef struct
272 {
273 unsigned long secnum; /* number of sectors in this partition */
274 unsigned char system_indicator; /* use F_SYSIND_XX values*/
275 } F_PARTITION;
276
277/* select system indication for creating partition */
278#define F_SYSIND_DOSFAT12 0x01
279#define F_SYSIND_DOSFAT16UPTO32MB 0x04
280#define F_SYSIND_DOSFAT16OVER32MB 0x06
281#define F_SYSIND_DOSFAT32 0x0b
282
283/* these values for extended partition */
284#define F_SYSIND_EXTWIN 0x0f
285#define F_SYSIND_EXTDOS 0x05
286
287 /* definition for f_getfreespace */
288 typedef struct
289 {
290 unsigned long total;
291 unsigned long free;
292 unsigned long used;
293 unsigned long bad;
294
295 unsigned long total_high;
296 unsigned long free_high;
297 unsigned long used_high;
298 unsigned long bad_high;
299 } FN_SPACE;
300
301 /* definition for f_stat*/
302 typedef struct
303 {
304 unsigned long filesize;
305 unsigned short createdate;
306 unsigned short createtime;
307 unsigned short modifieddate;
308 unsigned short modifiedtime;
309 unsigned short lastaccessdate;
310 unsigned char attr; /* 00ADVSHR */
311 int drivenum;
312 } F_STAT;
313
314/****************************************************************************
315 *
316 * defines for f_findfirst
317 *
318 ***************************************************************************/
319
320/* Beginning of file */
321#ifdef SEEK_SET
322#define FN_SEEK_SET SEEK_SET
323#else
324#define FN_SEEK_SET 0
325#endif
326
327/* Current position of file pointer */
328#ifdef SEEK_CUR
329#define FN_SEEK_CUR SEEK_CUR
330#else
331#define FN_SEEK_CUR 1
332#endif
333
334/* End of file */
335#ifdef SEEK_END
336#define FN_SEEK_END SEEK_END
337#else
338#define FN_SEEK_END 2
339#endif
340
341 /****************************************************************************
342 *
343 * structure defines
344 *
345 ***************************************************************************/
346
347#if (!FN_CAPI_USED)
348#define F_FILE FN_FILE
349#define F_FIND FN_FIND
350#define F_SPACE FN_SPACE
351#define F_MAXPATH FN_MAXPATH
352
359#define F_SEEK_SET FN_SEEK_SET
360#define F_SEEK_END FN_SEEK_END
361#define F_SEEK_CUR FN_SEEK_CUR
363#endif
364
365 /****************************************************************************
366 *
367 * function defines
368 *
369 ***************************************************************************/
370
371#if (!FN_CAPI_USED)
372#define f_init fn_init
373#define f_getversion fm_getversion
374#define f_createdriver(driver, driver_init, driver_param) fm_createdriver(driver, driver_init, driver_param)
375#define f_releasedriver(driver) fm_releasedriver(driver)
376#define f_createpartition(driver, parnum, par) fm_createpartition(driver, parnum, par)
377#define f_getpartition(driver, parnum, par) fm_getpartition(driver, parnum, par)
378#define f_initvolume(drvnumber, driver_init, driver_param) fm_initvolume(drvnumber, driver_init, driver_param)
379#define f_initvolumepartition(drvnumber, driver, partition) fm_initvolumepartition(drvnumber, driver, partition)
380#define f_getlasterror fm_getlasterror
381
387#define f_delvolume(drvnumber) fm_delvolume(drvnumber)
388#define f_get_volume_count() fm_get_volume_count()
389#define f_get_volume_list(buf) fm_get_volume_list(buf)
390#define f_checkvolume(drvnumber) fm_checkvolume(drvnumber)
391#define f_format(drivenum, fattype) fm_format(drivenum, fattype)
392#define f_getcwd(buffer, maxlen) fm_getcwd(buffer, maxlen)
393#define f_getdcwd(drivenum, buffer, maxlen) fm_getdcwd(drivenum, buffer, maxlen)
394#define f_chdrive(drivenum) fm_chdrive(drivenum)
395#define f_getdrive fm_getdrive
396
406#define f_getfreespace(drivenum, pspace) fm_getfreespace(drivenum, pspace)
407
419#define f_chdir(dirname) fm_chdir(dirname)
420
432#define f_mkdir(dirname) fm_mkdir(dirname)
433
448#define f_rmdir(dirname) fm_rmdir(dirname)
449
464#define f_findfirst(filename, find) fm_findfirst(filename, find)
465
480#define f_findnext(find) fm_findnext(find)
481#define f_rename(filename, newname) fm_rename(filename, newname)
482#define f_move(filename, newname) fm_move(filename, newname)
483#define f_filelength(filename) fm_filelength(filename)
484
493#define f_close(filehandle) fm_close(filehandle)
494#define f_flush(filehandle) fm_flush(filehandle)
495
518#define f_open(filename, mode) fm_open(filename, mode)
519#define f_truncate(filename, length) fm_truncate(filename, length)
520#define f_ftruncate(filehandle, length) fm_ftruncate(filehandle, length)
521
532#define f_read(buf, size, size_st, filehandle) fm_read(buf, size, size_st, filehandle)
533
544#define f_write(buf, size, size_st, filehandle) fm_write(buf, size, size_st, filehandle)
545
556#define f_seek(filehandle, offset, whence) fm_seek(filehandle, offset, whence)
557#define f_seteof(filehandle) fm_seteof(filehandle)
558
559#define f_tell(filehandle) fm_tell(filehandle)
560#define f_getc(filehandle) fm_getc(filehandle)
561#define f_putc(ch, filehandle) fm_putc(ch, filehandle)
562
571#define f_rewind(filehandle) fm_rewind(filehandle)
572
581#define f_eof(filehandle) fm_eof(filehandle)
582
583#define f_stat(filename, stat) fm_stat(filename, stat)
584
595#define f_gettimedate(filename, pctime, pcdate) fm_gettimedate(filename, pctime, pcdate)
596
607#define f_settimedate(filename, ctime, cdate) fm_settimedate(filename, ctime, cdate)
608
619#define f_delete(filename) fm_delete(filename)
620
621#define f_getattr(filename, attr) fm_getattr(filename, attr)
622#define f_setattr(filename, attr) fm_setattr(filename, attr)
623
624#define f_getlabel(drivenum, label, len) fm_getlabel(drivenum, label, len)
625#define f_setlabel(drivenum, label) fm_setlabel(drivenum, label)
626
627#define f_get_oem(drivenum, str, maxlen) fm_get_oem(drivenum, str, maxlen)
628#endif
629
630#ifdef HCC_UNICODE
631#if (!FN_CAPI_USED)
632#define f_wgetcwd(buffer, maxlen) fm_wgetcwd(buffer, maxlen)
633#define f_wgetdcwd(drivenum, buffer, maxlen) fm_wgetdcwd(drivenum, buffer, maxlen)
634#define f_wchdir(dirname) fm_wchdir(dirname)
635#define f_wmkdir(dirname) fm_wmkdir(dirname)
636#define f_wrmdir(dirname) fm_wrmdir(dirname)
637#define f_wfindfirst(filename, find) fm_wfindfirst(filename, find)
638#define f_wfindnext(find) fm_wfindnext(find)
639#define f_wrename(filename, newname) fm_wrename(filename, newname)
640#define f_wmove(filename, newname) fm_wmove(filename, newname)
641#define f_wfilelength(filename) fm_wfilelength(filename)
642#define f_wopen(filename, mode) fm_wopen(filename, mode)
643#define f_wtruncate(filename, length) fm_wtruncate(filename, length)
644#define f_wstat(filename, stat) fm_wstat(filename, stat)
645#define f_wgettimedate(filename, pctime, pcdate) fm_wgettimedate(filename, pctime, pcdate)
646#define f_wsettimedate(filename, ctime, cdate) fm_wsettimedate(filename, ctime, cdate)
647#define f_wdelete(filename) fm_wdelete(filename)
648#define f_wgetattr(filename, attr) fm_wgetattr(filename, attr)
649#define f_wsetattr(filename, attr) fm_wsetattr(filename, attr)
650#endif
651#endif
652
653 /****************************************************************************
654 *
655 * function externs
656 *
657 ***************************************************************************/
658
659 extern int fn_init(void);
660 extern char *fn_getversion(void);
661
662 extern int registerFFILE(F_FILE *file);
663
664 extern char *fm_getversion(void);
665 extern int fm_initvolume(int drvnumber, F_DRIVERINIT driver_init, unsigned long driver_param);
666 extern int fm_initvolumepartition(int drvnumber, F_DRIVER *driver, int partition);
667 extern int fm_createpartition(F_DRIVER *driver, int parnum, F_PARTITION *par);
668 extern int fm_createdriver(F_DRIVER **driver, F_DRIVERINIT driver_init, unsigned long driver_param);
669 extern int fm_releasedriver(F_DRIVER *driver);
670 extern int fm_getpartition(F_DRIVER *driver, int parnum, F_PARTITION *par);
671 extern int fm_delvolume(int drvnumber);
672 extern int fm_checkvolume(int drvnumber);
673 extern int fm_get_volume_count(void);
674 extern int fm_get_volume_list(int *buf);
675 extern int fm_format(int drivenum, long fattype);
676 extern int fm_getcwd(char *buffer, int maxlen);
677 extern int fm_getdcwd(int drivenum, char *buffer, int maxlen);
678 extern int fm_chdrive(int drivenum);
679 extern int fm_getdrive(void);
680 extern int fm_getfreespace(int drivenum, FN_SPACE *pspace);
681 extern int fm_getlasterror(void);
682
683 extern int fm_chdir(const char *dirname);
684 extern int fm_mkdir(const char *dirname);
685 extern int fm_rmdir(const char *dirname);
686
687 extern int fm_findfirst(const char *filename, FN_FIND *find);
688 extern int fm_findnext(FN_FIND *find);
689 extern int fm_rename(const char *filename, const char *newname);
690 extern int fm_move(const char *filename, const char *newname);
691 extern long fm_filelength(const char *filename);
692
693 extern int fm_close(FN_FILE *filehandle);
694 extern int fm_flush(FN_FILE *filehandle);
695 extern FN_FILE *fm_open(const char *filename, const char *mode);
696 extern FN_FILE *fm_truncate(const char *filename, unsigned long length);
697 extern int fm_ftruncate(FN_FILE *filehandle, unsigned long length);
698
699 extern long fm_read(void *buf, long size, long size_st, FN_FILE *filehandle);
700 extern long fm_write(const void *buf, long size, long size_st, FN_FILE *filehandle);
701
702 extern int fm_seek(FN_FILE *filehandle, long offset, long whence);
703
704 extern long fm_tell(FN_FILE *filehandle);
705 extern int fm_getc(FN_FILE *filehandle);
706 extern int fm_putc(int ch, FN_FILE *filehandle);
707 extern int fm_rewind(FN_FILE *filehandle);
708 extern int fm_eof(FN_FILE *filehandle);
709 extern int fm_seteof(FN_FILE *filehandle);
710
711 extern int fm_stat(const char *filename, F_STAT *stat);
712 extern int fm_gettimedate(const char *filename, unsigned short *pctime, unsigned short *pcdate);
713 extern int fm_settimedate(const char *filename, unsigned short ctime, unsigned short cdate);
714 extern int fm_delete(const char *filename);
715
716 extern int fm_getattr(const char *filename, unsigned char *attr);
717 extern int fm_setattr(const char *filename, unsigned char attr);
718
719 extern int fm_getlabel(int drivenum, char *label, long len);
720 extern int fm_setlabel(int drivenum, const char *label);
721
722 extern int fm_get_oem(int drivenum, char *str, long maxlen);
723
724#if (!FN_CAPI_USED)
725
742 extern int f_enterFS(void);
743
754 extern void f_releaseFS(void);
755#endif
756
757#ifdef HCC_UNICODE
758 extern int fm_wgetcwd(wchar *buffer, int maxlen);
759 extern int fm_wgetdcwd(int drivenum, wchar *buffer, int maxlen);
760 extern int fm_wchdir(const wchar *dirname);
761 extern int fm_wmkdir(const wchar *dirname);
762 extern int fm_wrmdir(const wchar *dirname);
763 extern int fm_wfindfirst(const wchar *filename, FN_WFIND *find);
764 extern int fm_wfindnext(FN_WFIND *find);
765 extern int fm_wrename(const wchar *filename, const wchar *newname);
766 extern int fm_wmove(const wchar *filename, const wchar *newname);
767 extern long fm_wfilelength(const wchar *filename);
768 extern FN_FILE *fm_wopen(const wchar *filename, const wchar *mode);
769 extern FN_FILE *fm_wtruncate(const wchar *filename, unsigned long length);
770 extern int fm_wstat(const wchar *filename, F_STAT *stat);
771 extern int fm_wgettimedate(const wchar *filename, unsigned short *pctime, unsigned short *pcdate);
772 extern int fm_wsettimedate(const wchar *filename, unsigned short ctime, unsigned short cdate);
773 extern int fm_wdelete(const wchar *filename);
774 extern int fm_wgetattr(const wchar *filename, unsigned char *attr);
775 extern int fm_wsetattr(const wchar *filename, unsigned char attr);
776#endif
777
778 /****************************************************************************
779 *
780 * errorcodes
781 *
782 ***************************************************************************/
783
784#include "fwerr.h"
785
786 /****************************************************************************
787 *
788 * closing bracket for C++ compatibility
789 *
790 ***************************************************************************/
791
792#ifdef __cplusplus
793}
794#endif
795
796/****************************************************************************
797 *
798 * end of api_f.h
799 *
800 ***************************************************************************/
801
802#endif /* _API_F_H_ */
803
void f_releaseFS(void)
Removes a task priority from the task list used by the file system.
int f_enterFS(void)
Adds a new task priority to the task list used by the file system.
NetBurner Real-Time Operating System (NBRTOS) API.