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