RTC auf true

Committer:
kevman
Date:
Wed Nov 28 15:10:15 2018 +0000
Revision:
0:38ceb79fef03
RTC modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1 /* mbed Microcontroller Library
kevman 0:38ceb79fef03 2 * Copyright (c) 2006-2013 ARM Limited
kevman 0:38ceb79fef03 3 *
kevman 0:38ceb79fef03 4 * Licensed under the Apache License, Version 2.0 (the "License");
kevman 0:38ceb79fef03 5 * you may not use this file except in compliance with the License.
kevman 0:38ceb79fef03 6 * You may obtain a copy of the License at
kevman 0:38ceb79fef03 7 *
kevman 0:38ceb79fef03 8 * http://www.apache.org/licenses/LICENSE-2.0
kevman 0:38ceb79fef03 9 *
kevman 0:38ceb79fef03 10 * Unless required by applicable law or agreed to in writing, software
kevman 0:38ceb79fef03 11 * distributed under the License is distributed on an "AS IS" BASIS,
kevman 0:38ceb79fef03 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 0:38ceb79fef03 13 * See the License for the specific language governing permissions and
kevman 0:38ceb79fef03 14 * limitations under the License.
kevman 0:38ceb79fef03 15 */
kevman 0:38ceb79fef03 16 #ifndef MBED_DIRHANDLE_H
kevman 0:38ceb79fef03 17 #define MBED_DIRHANDLE_H
kevman 0:38ceb79fef03 18
kevman 0:38ceb79fef03 19 #include <stdint.h>
kevman 0:38ceb79fef03 20 #include "platform/platform.h"
kevman 0:38ceb79fef03 21 #include "platform/FileHandle.h"
kevman 0:38ceb79fef03 22 #include "platform/NonCopyable.h"
kevman 0:38ceb79fef03 23
kevman 0:38ceb79fef03 24 namespace mbed {
kevman 0:38ceb79fef03 25 /** \addtogroup platform */
kevman 0:38ceb79fef03 26 /** @{*/
kevman 0:38ceb79fef03 27 /**
kevman 0:38ceb79fef03 28 * \defgroup platform_DirHandle DirHandle functions
kevman 0:38ceb79fef03 29 * @{
kevman 0:38ceb79fef03 30 */
kevman 0:38ceb79fef03 31
kevman 0:38ceb79fef03 32
kevman 0:38ceb79fef03 33 /** Represents a directory stream. An opendir function returns
kevman 0:38ceb79fef03 34 * objects of this type. The core functions are read and seek,
kevman 0:38ceb79fef03 35 * but only a subset needs to be provided.
kevman 0:38ceb79fef03 36 *
kevman 0:38ceb79fef03 37 * If a FileSystemLike class defines the opendir method, then you
kevman 0:38ceb79fef03 38 * can access the directories of an object of that type by either:
kevman 0:38ceb79fef03 39 * @code
kevman 0:38ceb79fef03 40 * DIR *d = opendir("/example/directory");
kevman 0:38ceb79fef03 41 * @endcode
kevman 0:38ceb79fef03 42 * or
kevman 0:38ceb79fef03 43 * @code
kevman 0:38ceb79fef03 44 * DIR *d = opendir("/example");
kevman 0:38ceb79fef03 45 * @endcode
kevman 0:38ceb79fef03 46 * to open the root of the file system.
kevman 0:38ceb79fef03 47 *
kevman 0:38ceb79fef03 48 * The root directory is considered to contain all FileHandle and
kevman 0:38ceb79fef03 49 * FileSystem objects, so the DIR pointer returned by opendir("/")
kevman 0:38ceb79fef03 50 * reflects this.
kevman 0:38ceb79fef03 51 *
kevman 0:38ceb79fef03 52 * @note to create a directory, @see Dir
kevman 0:38ceb79fef03 53 * @note Synchronization level: Set by subclass
kevman 0:38ceb79fef03 54 */
kevman 0:38ceb79fef03 55 class DirHandle : private NonCopyable<DirHandle> {
kevman 0:38ceb79fef03 56 public:
kevman 0:38ceb79fef03 57 virtual ~DirHandle() {}
kevman 0:38ceb79fef03 58
kevman 0:38ceb79fef03 59 /** Read the next directory entry
kevman 0:38ceb79fef03 60 *
kevman 0:38ceb79fef03 61 * @param ent The directory entry to fill out
kevman 0:38ceb79fef03 62 * @return 1 on reading a filename, 0 at end of directory, negative error on failure
kevman 0:38ceb79fef03 63 */
kevman 0:38ceb79fef03 64 virtual ssize_t read(struct dirent *ent) = 0;
kevman 0:38ceb79fef03 65
kevman 0:38ceb79fef03 66 /** Close a directory
kevman 0:38ceb79fef03 67 *
kevman 0:38ceb79fef03 68 * @return 0 on success, negative error code on failure
kevman 0:38ceb79fef03 69 */
kevman 0:38ceb79fef03 70 virtual int close() = 0;
kevman 0:38ceb79fef03 71
kevman 0:38ceb79fef03 72 /** Set the current position of the directory
kevman 0:38ceb79fef03 73 *
kevman 0:38ceb79fef03 74 * @param offset Offset of the location to seek to,
kevman 0:38ceb79fef03 75 * must be a value returned from tell
kevman 0:38ceb79fef03 76 */
kevman 0:38ceb79fef03 77 virtual void seek(off_t offset) = 0;
kevman 0:38ceb79fef03 78
kevman 0:38ceb79fef03 79 /** Get the current position of the directory
kevman 0:38ceb79fef03 80 *
kevman 0:38ceb79fef03 81 * @return Position of the directory that can be passed to rewind
kevman 0:38ceb79fef03 82 */
kevman 0:38ceb79fef03 83 virtual off_t tell() = 0;
kevman 0:38ceb79fef03 84
kevman 0:38ceb79fef03 85 /** Rewind the current position to the beginning of the directory
kevman 0:38ceb79fef03 86 */
kevman 0:38ceb79fef03 87 virtual void rewind() = 0;
kevman 0:38ceb79fef03 88
kevman 0:38ceb79fef03 89 /** Get the sizeof the directory
kevman 0:38ceb79fef03 90 *
kevman 0:38ceb79fef03 91 * @return Number of files in the directory
kevman 0:38ceb79fef03 92 */
kevman 0:38ceb79fef03 93 virtual size_t size()
kevman 0:38ceb79fef03 94 {
kevman 0:38ceb79fef03 95 off_t off = tell();
kevman 0:38ceb79fef03 96 size_t size = 0;
kevman 0:38ceb79fef03 97 struct dirent *ent = new struct dirent;
kevman 0:38ceb79fef03 98
kevman 0:38ceb79fef03 99 rewind();
kevman 0:38ceb79fef03 100 while (read(ent) > 0) {
kevman 0:38ceb79fef03 101 size += 1;
kevman 0:38ceb79fef03 102 }
kevman 0:38ceb79fef03 103 seek(off);
kevman 0:38ceb79fef03 104
kevman 0:38ceb79fef03 105 delete ent;
kevman 0:38ceb79fef03 106 return size;
kevman 0:38ceb79fef03 107 }
kevman 0:38ceb79fef03 108
kevman 0:38ceb79fef03 109 /** Closes the directory.
kevman 0:38ceb79fef03 110 *
kevman 0:38ceb79fef03 111 * @returns
kevman 0:38ceb79fef03 112 * 0 on success,
kevman 0:38ceb79fef03 113 * -1 on error.
kevman 0:38ceb79fef03 114 * @deprecated Replaced by `int DirHandle::close()'
kevman 0:38ceb79fef03 115 */
kevman 0:38ceb79fef03 116 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::close")
kevman 0:38ceb79fef03 117 virtual int closedir()
kevman 0:38ceb79fef03 118 {
kevman 0:38ceb79fef03 119 return close();
kevman 0:38ceb79fef03 120 };
kevman 0:38ceb79fef03 121
kevman 0:38ceb79fef03 122 /** Returns the directory entry at the current position, and
kevman 0:38ceb79fef03 123 * advances the position to the next entry.
kevman 0:38ceb79fef03 124 *
kevman 0:38ceb79fef03 125 * @returns
kevman 0:38ceb79fef03 126 * A pointer to a dirent structure representing the
kevman 0:38ceb79fef03 127 * directory entry at the current position, or NULL on reaching
kevman 0:38ceb79fef03 128 * end of directory or error.
kevman 0:38ceb79fef03 129 * @deprecated Replaced by `ssize_t DirHandle::read(struct dirent *ent)
kevman 0:38ceb79fef03 130 */
kevman 0:38ceb79fef03 131 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::read")
kevman 0:38ceb79fef03 132 virtual struct dirent *readdir()
kevman 0:38ceb79fef03 133 {
kevman 0:38ceb79fef03 134 static struct dirent ent;
kevman 0:38ceb79fef03 135 return (read(&ent) > 0) ? &ent : NULL;
kevman 0:38ceb79fef03 136 }
kevman 0:38ceb79fef03 137
kevman 0:38ceb79fef03 138 /** Resets the position to the beginning of the directory.
kevman 0:38ceb79fef03 139 * @deprecated Replaced by `void DirHandle::rewind()'
kevman 0:38ceb79fef03 140 */
kevman 0:38ceb79fef03 141 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::rewind")
kevman 0:38ceb79fef03 142 virtual void rewinddir()
kevman 0:38ceb79fef03 143 {
kevman 0:38ceb79fef03 144 rewind();
kevman 0:38ceb79fef03 145 }
kevman 0:38ceb79fef03 146
kevman 0:38ceb79fef03 147 /** Returns the current position of the DirHandle.
kevman 0:38ceb79fef03 148 *
kevman 0:38ceb79fef03 149 * @returns
kevman 0:38ceb79fef03 150 * the current position,
kevman 0:38ceb79fef03 151 * -1 on error.
kevman 0:38ceb79fef03 152 * @deprecated Replaced by `off_t DirHandle::tell()'
kevman 0:38ceb79fef03 153 */
kevman 0:38ceb79fef03 154 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::tell")
kevman 0:38ceb79fef03 155 virtual off_t telldir()
kevman 0:38ceb79fef03 156 {
kevman 0:38ceb79fef03 157 return tell();
kevman 0:38ceb79fef03 158 }
kevman 0:38ceb79fef03 159
kevman 0:38ceb79fef03 160 /** Sets the position of the DirHandle.
kevman 0:38ceb79fef03 161 *
kevman 0:38ceb79fef03 162 * @param location The location to seek to. Must be a value returned by telldir.
kevman 0:38ceb79fef03 163 * @deprecated Replaced by `void DirHandle::seek(off_t offset)'
kevman 0:38ceb79fef03 164 */
kevman 0:38ceb79fef03 165 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by DirHandle::seek")
kevman 0:38ceb79fef03 166 virtual void seekdir(off_t location)
kevman 0:38ceb79fef03 167 {
kevman 0:38ceb79fef03 168 seek(location);
kevman 0:38ceb79fef03 169 }
kevman 0:38ceb79fef03 170 };
kevman 0:38ceb79fef03 171
kevman 0:38ceb79fef03 172 /**@}*/
kevman 0:38ceb79fef03 173
kevman 0:38ceb79fef03 174 /**@}*/
kevman 0:38ceb79fef03 175 } // namespace mbed
kevman 0:38ceb79fef03 176
kevman 0:38ceb79fef03 177 #endif /* MBED_DIRHANDLE_H */