aboutsummaryrefslogtreecommitdiffstats
path: root/os/common/abstractions/nasa_cfe/osal/include/osapi-os-filesys.h
blob: c46800341eb8e218c3ddd2303940d661014becd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
/*
** File: osapi-os-filesys.h
**
**      Copyright (c) 2004-2006, United States government as represented by the 
**      administrator of the National Aeronautics Space Administration.  
**      All rights reserved. This software was created at NASAs Goddard 
**      Space Flight Center pursuant to government contracts.
**
**      This is governed by the NASA Open Source Agreement and may be used, 
**      distributed and modified only pursuant to the terms of that agreement.
**
** Author:  Alan Cudmore Code 582
**
** Purpose: Contains functions prototype definitions and variables declarations
**          for the OS Abstraction Layer, File System module
**
** $Revision: 1.11 $ 
**
** $Date: 2013/12/16 12:57:41GMT-05:00 $
**
** $Log: osapi-os-filesys.h  $
** Revision 1.11 2013/12/16 12:57:41GMT-05:00 acudmore 
** Added macros for Volume name length and physical device name length
** Revision 1.10 2013/07/29 12:05:48GMT-05:00 acudmore 
** Added define for device and volume name length
** Revision 1.9 2013/07/25 14:31:21GMT-05:00 acudmore 
** Added prototype and datatype for OS_GetFsInfo
** Revision 1.8 2011/12/05 12:04:21GMT-05:00 acudmore 
** Added OS_rewinddir API
** Revision 1.7 2011/04/05 16:01:12EDT acudmore 
** Added OS_CloseFileByName and OS_CloseAllFiles
** Revision 1.6 2010/11/15 11:04:38EST acudmore 
** Added OS_FileOpenCheck function.
** Revision 1.5 2010/11/12 12:00:18EST acudmore 
** replaced copyright character with (c) and added open source notice where needed.
** Revision 1.4 2010/02/01 12:28:57EST acudmore 
** Added OS_fsBytesFree API
** Revision 1.3 2010/01/25 14:44:26EST acudmore 
** renamed "new" variable to avoid C++ reserved name conflict.
** Revision 1.2 2009/07/14 15:16:05EDT acudmore 
** Added OS_TranslatePath to the API
** Revision 1.1 2008/04/20 22:36:01EDT ruperera 
** Initial revision
** Member added to project c:/MKSDATA/MKS-REPOSITORY/MKS-OSAL-REPOSITORY/src/os/inc/project.pj
** Revision 1.1 2007/10/16 16:14:52EDT apcudmore 
** Initial revision
** Member added to project d:/mksdata/MKS-OSAL-REPOSITORY/src/os/inc/project.pj
** Revision 1.1 2007/08/24 13:43:24EDT apcudmore 
** Initial revision
** Member added to project d:/mksdata/MKS-CFE-PROJECT/fsw/cfe-core/os/inc/project.pj
** Revision 1.17 2007/06/07 09:59:14EDT njyanchik 
** I replaced the second OS_cp definition with OS_mv
** Revision 1.16 2007/06/05 16:25:33EDT apcudmore 
** Increased Number of volume table entries from 10 to 14.
** Added 2 extra EEPROM disk mappings to RAD750 Volume table + 2 spares
** Added 4 spares to every other volume table.
** Revision 1.15 2007/05/25 09:17:56EDT njyanchik 
** I added the rmfs call to the OSAL and updated the unit test stubs to match
** Revision 1.14 2007/03/21 10:15:29EST njyanchik 
** I mistakenly put the wrong length in for the path in the OS_FDTableEntry structure, and I added 
** some code that will set and out of range file descriptors .IsValid flag to false in OS_FDGetInfo
** Revision 1.13 2007/03/06 11:52:46EST njyanchik 
** This change goes with the previous CP, I forgot to include it
** Revision 1.12 2007/02/28 14:57:45EST njyanchik 
** The updates for supporting copying and moving files are now supported
** Revision 1.11 2007/02/27 15:22:11EST njyanchik 
** This CP has the initial import of the new file descripor table mechanism
** Revision 1.10 2006/12/20 10:27:09EST njyanchik 
** This change package incorporates all the changes necessary for the addition
** of a new API to get the real physical drive undernieth a mount point
** Revision 1.9 2006/11/14 14:44:28GMT-05:00 njyanchik 
** Checks were added to the OS fs calls that look at the return of a function that
** changes the name of paths from abstracted to local path names.
** Revision 1.8 2006/10/30 16:12:19GMT-05:00 apcudmore 
** Updated Compact flash and RAM device names for vxWorks 6.2 changes. 
** Revision 1.7 2006/10/25 11:31:18EDT njyanchik 
** This CP incorporates changes to every bsp_voltab.c file. I increased the number
** entries in the volume table to 10. I also changed the #define in the os_filesys.h
** file for the number of entries to match.
** 
** This update also includes adding the prototype for OS_initfs in os_filesys.h
** Revision 1.6 2006/09/26 09:03:46GMT-05:00 njyanchik 
** Contains the initial import of the ES Shell commands interface
** Revision 1.5 2006/07/25 15:37:52EDT njyanchik 
** It turns out the both the FS app and the OSAL were incorrect where file descriptors are
** concerned. the file descriptors should be int32 across the board.
** Revision 1.4 2006/01/20 11:56:18EST njyanchik 
** Fixed header file information to match api document
** Revision 1.26  2005/07/12 17:13:56  nyanchik
** Moved the Volume table to a bsp table in the arch directories.
**
** Revision 1.2 2005/07/11 16:26:57EDT apcudmore 
** OSAPI 2.0 integration
** Revision 1.25  2005/07/06 16:11:17  nyanchik
** *** empty log message ***
**
** Revision 1.24  2005/07/05 18:34:55  nyanchik
** fixed issues found in code walkthrogh. Also removed the OS_Info* functions that are going in the BSP
**
** Revision 1.23  2005/06/17 19:46:34  nyanchik
** added new file system style to linux and rtems.
**
** Revision 1.22  2005/06/15 16:43:48  nyanchik
** added extra parenthesis for the .h file # defines
**
** Revision 1.21  2005/06/06 14:17:42  nyanchik
** added headers to osapi-os-core.h and osapi-os-filesys.h
**
** Revision 1.20  2005/06/02 18:04:24  nyanchik
** *** empty log message ***
**
** Revision 1.1  2005/03/15 18:26:32  nyanchik
** *** empty log message ***
**
**
** Date Written:
**
**    
*/

#ifndef _osapi_filesys_
#define _osapi_filesys_
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>

#define OS_READ_ONLY        0
#define OS_WRITE_ONLY       1
#define OS_READ_WRITE       2

#define OS_SEEK_SET         0
#define OS_SEEK_CUR         1
#define OS_SEEK_END         2

#define OS_CHK_ONLY         0
#define OS_REPAIR           1

#define FS_BASED            0
#define RAM_DISK            1
#define EEPROM_DISK         2
#define ATA_DISK            3


/*
** Number of entries in the internal volume table
*/
#define NUM_TABLE_ENTRIES 14

/*
** Length of a Device and Volume name 
*/
#define OS_FS_DEV_NAME_LEN  32
#define OS_FS_PHYS_NAME_LEN 64
#define OS_FS_VOL_NAME_LEN  32


/*
** Defines for File System Calls
*/
#define OS_FS_SUCCESS                    0
#define OS_FS_ERROR                    (-1)
#define OS_FS_ERR_INVALID_POINTER      (-2) 
#define OS_FS_ERR_PATH_TOO_LONG        (-3)
#define OS_FS_ERR_NAME_TOO_LONG        (-4)
#define OS_FS_UNIMPLEMENTED            (-5) 
#define OS_FS_ERR_DRIVE_NOT_CREATED    (-6)
#define OS_FS_ERR_DEVICE_NOT_FREE      (-7)
#define OS_FS_ERR_PATH_INVALID         (-8)
#define OS_FS_ERR_NO_FREE_FDS          (-9)
#define OS_FS_ERR_INVALID_FD           (-10)

/* This typedef is for the OS_FS_GetErrorName function, to ensure
 * everyone is making an array of the same length */

typedef char os_fs_err_name_t[35];


/*
** Internal structure of the OS volume table for 
** mounted file systems and path translation
*/
typedef struct
{
    char   DeviceName [OS_FS_DEV_NAME_LEN];
    char   PhysDevName [OS_FS_PHYS_NAME_LEN];
    uint32 VolumeType;
    uint8  VolatileFlag;
    uint8  FreeFlag;
    uint8  IsMounted;
    char   VolumeName [OS_FS_VOL_NAME_LEN];
    char   MountPoint [OS_MAX_PATH_LEN];
    uint32 BlockSize;

}OS_VolumeInfo_t;

typedef struct
{
    int32   OSfd;                   /* The underlying OS's file descriptor */
    char    Path[OS_MAX_PATH_LEN];  /* The path of the file opened */
    uint32   User;                  /* The task id of the task who opened the file*/
    uint8   IsValid;                /* Whether or not this entry is valid */
}OS_FDTableEntry;

typedef struct
{
   uint32   MaxFds;                /* Total number of file descriptors */
   uint32   FreeFds;               /* Total number that are free */
   uint32   MaxVolumes;            /* Maximum number of volumes */
   uint32   FreeVolumes;           /* Total number of volumes free */
} os_fsinfo_t; 

/* modified to posix calls, since all of the 
 * applicable OSes use the posix calls */

typedef struct stat         os_fstat_t;
typedef DIR*                os_dirp_t;
typedef struct dirent       os_dirent_t;
/* still don't know what this should be*/
typedef unsigned long int   os_fshealth_t; 

/*
 * Exported Functions
*/


/******************************************************************************
** Standard File system API
******************************************************************************/
/*
 * Initializes the File System functions 
*/

int32           OS_FS_Init(void);

/*
 * Creates a file specified by path
*/
int32           OS_creat  (const char *path, int32  access);

/*
 * Opend a file for reading/writing. Returns file descriptor
*/
int32           OS_open   (const char *path,  int32 access,  uint32 mode);

/*
 * Closes an open file.
*/
int32           OS_close  (int32  filedes);

/*
 * Reads nbytes bytes from file into buffer
*/
int32           OS_read   (int32  filedes, void *buffer, uint32 nbytes);

/*
 * Write nybytes bytes of buffer into the file
*/
int32           OS_write  (int32  filedes, void *buffer, uint32 nbytes);

/*
 * Changes the permissions of a file
*/
int32           OS_chmod  (const char *path, uint32 access);

/*
 * Returns file status information in filestats
*/
int32           OS_stat   (const char *path, os_fstat_t  *filestats);

/*
 * Seeks to the specified position of an open file 
*/
int32           OS_lseek  (int32  filedes, int32 offset, uint32 whence);

/*
 * Removes a file from the file system
*/
int32           OS_remove (const char *path);

/*
 * Renames a file in the file system
*/
int32           OS_rename (const char *old_filename, const char *new_filename);

/* 
 * copies a single file from src to dest
*/
int32 OS_cp (const char *src, const char *dest);

/* 
 * moves a single file from src to dest
*/
int32 OS_mv (const char *src, const char *dest);

/*
 * Copies the info of an open file to the structure
*/
int32 OS_FDGetInfo (int32 filedes, OS_FDTableEntry *fd_prop);

/*
** Check to see if a file is open
*/
int32 OS_FileOpenCheck(char *Filename);

/*
** Close all open files
*/
int32 OS_CloseAllFiles(void);

/*
** Close a file by filename
*/
int32 OS_CloseFileByName(char *Filename);


/******************************************************************************
** Directory API 
******************************************************************************/

/*
 * Makes a new directory
*/
int32           OS_mkdir   (const char *path, uint32 access);

/*
 * Opens a directory for searching
*/
os_dirp_t       OS_opendir (const char *path);

/*
 * Closes an open directory
*/
int32           OS_closedir(os_dirp_t directory);

/*
 * Rewinds an open directory
*/
void           OS_rewinddir(os_dirp_t directory);

/*
 * Reads the next object in the directory
*/
os_dirent_t *   OS_readdir (os_dirp_t directory);

/*
 * Removes an empty directory from the file system.
*/
int32           OS_rmdir   (const char *path);

/******************************************************************************
** System Level API 
******************************************************************************/
/*
 * Makes a file system
*/
int32           OS_mkfs        (char *address,char *devname, char *volname,
                                uint32 blocksize, uint32 numblocks);
/*
 * Mounts a file system
*/
int32           OS_mount       (const char *devname, char *mountpoint);

/*
 * Initializes an existing file system
*/
int32           OS_initfs      (char *address,char *devname, char *volname,
                                uint32 blocksize, uint32 numblocks);

/*
 * removes a file system 
*/
int32           OS_rmfs        (char *devname);

/*
 * Unmounts a mounted file system
*/
int32           OS_unmount     (const char *mountpoint);

/*
 * Returns the number of free blocks in a file system
*/
int32           OS_fsBlocksFree (const char *name);

/*
** Returns the number of free bytes in a file system 
** Note the 64 bit data type to support filesystems that
** are greater than 4 Gigabytes
*/
int32 OS_fsBytesFree (const char *name, uint64 *bytes_free);

/*
 * Checks the health of a file system and repairs it if neccesary
*/
os_fshealth_t   OS_chkfs       (const char *name, boolean repair);

/*
 * Returns in the parameter the physical drive underneith the mount point 
*/
int32       OS_FS_GetPhysDriveName  (char * PhysDriveName, char * MountPoint);

/*
** Translates a OSAL Virtual file system path to a host Local path
*/
int32       OS_TranslatePath ( const char *VirtualPath, char *LocalPath);

/*             
**  Returns information about the file system in an os_fsinfo_t
*/
int32       OS_GetFsInfo(os_fsinfo_t  *filesys_info);

/******************************************************************************
** Shell API
******************************************************************************/

/* executes the shell command passed into is and writes the output of that 
 * command to the file specified by the given OSAPI file descriptor */
int32 OS_ShellOutputToFile(char* Cmd, int32 OS_fd);
#endif