update

Committer:
kwengryn3
Date:
Thu Apr 08 16:43:07 2021 +0000
Revision:
0:bfff72fb3650
update;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kwengryn3 0:bfff72fb3650 1 /* mbed Microcontroller Library
kwengryn3 0:bfff72fb3650 2 * Copyright (c) 2006-2013 ARM Limited
kwengryn3 0:bfff72fb3650 3 * SPDX-License-Identifier: Apache-2.0
kwengryn3 0:bfff72fb3650 4 *
kwengryn3 0:bfff72fb3650 5 * Licensed under the Apache License, Version 2.0 (the "License");
kwengryn3 0:bfff72fb3650 6 * you may not use this file except in compliance with the License.
kwengryn3 0:bfff72fb3650 7 * You may obtain a copy of the License at
kwengryn3 0:bfff72fb3650 8 *
kwengryn3 0:bfff72fb3650 9 * http://www.apache.org/licenses/LICENSE-2.0
kwengryn3 0:bfff72fb3650 10 *
kwengryn3 0:bfff72fb3650 11 * Unless required by applicable law or agreed to in writing, software
kwengryn3 0:bfff72fb3650 12 * distributed under the License is distributed on an "AS IS" BASIS,
kwengryn3 0:bfff72fb3650 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kwengryn3 0:bfff72fb3650 14 * See the License for the specific language governing permissions and
kwengryn3 0:bfff72fb3650 15 * limitations under the License.
kwengryn3 0:bfff72fb3650 16 */
kwengryn3 0:bfff72fb3650 17 #ifndef MBED_LOCALFILESYSTEM_H
kwengryn3 0:bfff72fb3650 18 #define MBED_LOCALFILESYSTEM_H
kwengryn3 0:bfff72fb3650 19
kwengryn3 0:bfff72fb3650 20 #include "platform/platform.h"
kwengryn3 0:bfff72fb3650 21
kwengryn3 0:bfff72fb3650 22 #if DEVICE_LOCALFILESYSTEM
kwengryn3 0:bfff72fb3650 23
kwengryn3 0:bfff72fb3650 24 #include "platform/FileSystemLike.h"
kwengryn3 0:bfff72fb3650 25 #include "platform/PlatformMutex.h"
kwengryn3 0:bfff72fb3650 26 #include "platform/NonCopyable.h"
kwengryn3 0:bfff72fb3650 27
kwengryn3 0:bfff72fb3650 28 namespace mbed {
kwengryn3 0:bfff72fb3650 29 /** \addtogroup platform */
kwengryn3 0:bfff72fb3650 30 /** @{*/
kwengryn3 0:bfff72fb3650 31 /**
kwengryn3 0:bfff72fb3650 32 * \defgroup platform_LocalFileSystem LocalFileSystem functions
kwengryn3 0:bfff72fb3650 33 * @{
kwengryn3 0:bfff72fb3650 34 */
kwengryn3 0:bfff72fb3650 35
kwengryn3 0:bfff72fb3650 36 FILEHANDLE local_file_open(const char *name, int flags);
kwengryn3 0:bfff72fb3650 37
kwengryn3 0:bfff72fb3650 38 /**
kwengryn3 0:bfff72fb3650 39 * @class LocalFileHandle
kwengryn3 0:bfff72fb3650 40 * @ingroup platform
kwengryn3 0:bfff72fb3650 41 */
kwengryn3 0:bfff72fb3650 42 class LocalFileHandle : public FileHandle, private NonCopyable<LocalFileHandle> {
kwengryn3 0:bfff72fb3650 43
kwengryn3 0:bfff72fb3650 44 public:
kwengryn3 0:bfff72fb3650 45 LocalFileHandle(FILEHANDLE fh);
kwengryn3 0:bfff72fb3650 46
kwengryn3 0:bfff72fb3650 47 virtual int close();
kwengryn3 0:bfff72fb3650 48
kwengryn3 0:bfff72fb3650 49 virtual ssize_t write(const void *buffer, size_t length);
kwengryn3 0:bfff72fb3650 50
kwengryn3 0:bfff72fb3650 51 virtual ssize_t read(void *buffer, size_t length);
kwengryn3 0:bfff72fb3650 52
kwengryn3 0:bfff72fb3650 53 virtual int isatty();
kwengryn3 0:bfff72fb3650 54
kwengryn3 0:bfff72fb3650 55 virtual off_t seek(off_t position, int whence);
kwengryn3 0:bfff72fb3650 56
kwengryn3 0:bfff72fb3650 57 virtual int sync();
kwengryn3 0:bfff72fb3650 58
kwengryn3 0:bfff72fb3650 59 virtual off_t size();
kwengryn3 0:bfff72fb3650 60
kwengryn3 0:bfff72fb3650 61 protected:
kwengryn3 0:bfff72fb3650 62 virtual void lock();
kwengryn3 0:bfff72fb3650 63 virtual void unlock();
kwengryn3 0:bfff72fb3650 64 FILEHANDLE _fh;
kwengryn3 0:bfff72fb3650 65 int pos;
kwengryn3 0:bfff72fb3650 66 PlatformMutex _mutex;
kwengryn3 0:bfff72fb3650 67 };
kwengryn3 0:bfff72fb3650 68
kwengryn3 0:bfff72fb3650 69 /** A filesystem for accessing the local mbed Microcontroller USB disk drive
kwengryn3 0:bfff72fb3650 70 *
kwengryn3 0:bfff72fb3650 71 * This allows programs to read and write files on the same disk drive that is used to program the
kwengryn3 0:bfff72fb3650 72 * mbed Microcontroller. Once created, the standard C file access functions are used to open,
kwengryn3 0:bfff72fb3650 73 * read and write files.
kwengryn3 0:bfff72fb3650 74 *
kwengryn3 0:bfff72fb3650 75 * @note Synchronization level: Thread safe
kwengryn3 0:bfff72fb3650 76 *
kwengryn3 0:bfff72fb3650 77 * Example:
kwengryn3 0:bfff72fb3650 78 * @code
kwengryn3 0:bfff72fb3650 79 * #include "mbed.h"
kwengryn3 0:bfff72fb3650 80 *
kwengryn3 0:bfff72fb3650 81 * LocalFileSystem local("local"); // Create the local filesystem under the name "local"
kwengryn3 0:bfff72fb3650 82 *
kwengryn3 0:bfff72fb3650 83 * int main() {
kwengryn3 0:bfff72fb3650 84 * FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing
kwengryn3 0:bfff72fb3650 85 * fprintf(fp, "Hello World!");
kwengryn3 0:bfff72fb3650 86 * fclose(fp);
kwengryn3 0:bfff72fb3650 87 * remove("/local/out.txt"); // Removes the file "out.txt" from the local file system
kwengryn3 0:bfff72fb3650 88 *
kwengryn3 0:bfff72fb3650 89 * DIR *d = opendir("/local"); // Opens the root directory of the local file system
kwengryn3 0:bfff72fb3650 90 * struct dirent *p;
kwengryn3 0:bfff72fb3650 91 * while((p = readdir(d)) != NULL) { // Print the names of the files in the local file system
kwengryn3 0:bfff72fb3650 92 * printf("%s\n", p->d_name); // to stdout.
kwengryn3 0:bfff72fb3650 93 * }
kwengryn3 0:bfff72fb3650 94 * closedir(d);
kwengryn3 0:bfff72fb3650 95 * }
kwengryn3 0:bfff72fb3650 96 * @endcode
kwengryn3 0:bfff72fb3650 97 *
kwengryn3 0:bfff72fb3650 98 * @note
kwengryn3 0:bfff72fb3650 99 * If the microcontroller program makes an access to the local drive, it will be marked as "removed"
kwengryn3 0:bfff72fb3650 100 * on the Host computer. This means it is no longer accessible from the Host Computer.
kwengryn3 0:bfff72fb3650 101 *
kwengryn3 0:bfff72fb3650 102 * The drive will only re-appear when the microcontroller program exists. Note that if the program does
kwengryn3 0:bfff72fb3650 103 * not exit, you will need to hold down reset on the mbed Microcontroller to be able to see the drive again!
kwengryn3 0:bfff72fb3650 104 * @ingroup platform
kwengryn3 0:bfff72fb3650 105 */
kwengryn3 0:bfff72fb3650 106 class LocalFileSystem : public FileSystemLike, private NonCopyable<LocalFileSystem> {
kwengryn3 0:bfff72fb3650 107 // No modifiable state
kwengryn3 0:bfff72fb3650 108
kwengryn3 0:bfff72fb3650 109 public:
kwengryn3 0:bfff72fb3650 110 LocalFileSystem(const char *n) : FileSystemLike(n)
kwengryn3 0:bfff72fb3650 111 {
kwengryn3 0:bfff72fb3650 112
kwengryn3 0:bfff72fb3650 113 }
kwengryn3 0:bfff72fb3650 114
kwengryn3 0:bfff72fb3650 115 virtual int open(FileHandle **file, const char *path, int flags);
kwengryn3 0:bfff72fb3650 116 virtual int open(DirHandle **dir, const char *name);
kwengryn3 0:bfff72fb3650 117 virtual int remove(const char *filename);
kwengryn3 0:bfff72fb3650 118 };
kwengryn3 0:bfff72fb3650 119
kwengryn3 0:bfff72fb3650 120 /**@}*/
kwengryn3 0:bfff72fb3650 121
kwengryn3 0:bfff72fb3650 122 /**@}*/
kwengryn3 0:bfff72fb3650 123
kwengryn3 0:bfff72fb3650 124 } // namespace mbed
kwengryn3 0:bfff72fb3650 125
kwengryn3 0:bfff72fb3650 126 #endif
kwengryn3 0:bfff72fb3650 127
kwengryn3 0:bfff72fb3650 128 #endif
kwengryn3 0:bfff72fb3650 129