tinySA/os/common/abstractions/nasa_osal/include/osapi-os-filesys.h

420 lines
13 KiB
C

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