/* ** 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 #include #include #include #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