PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Apr 11 08:15:48 2020 +0000
Revision:
1:b36bbc1c6d27
Parent:
0:6bf0743ece18
IMU-library in .h und .cpp file aufgeteilt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demayer 0:6bf0743ece18 1 /* mbed Microcontroller Library
demayer 0:6bf0743ece18 2 * Copyright (c) 2017 ARM Limited
demayer 0:6bf0743ece18 3 *
demayer 0:6bf0743ece18 4 * Licensed under the Apache License, Version 2.0 (the "License");
demayer 0:6bf0743ece18 5 * you may not use this file except in compliance with the License.
demayer 0:6bf0743ece18 6 * You may obtain a copy of the License at
demayer 0:6bf0743ece18 7 *
demayer 0:6bf0743ece18 8 * http://www.apache.org/licenses/LICENSE-2.0
demayer 0:6bf0743ece18 9 *
demayer 0:6bf0743ece18 10 * Unless required by applicable law or agreed to in writing, software
demayer 0:6bf0743ece18 11 * distributed under the License is distributed on an "AS IS" BASIS,
demayer 0:6bf0743ece18 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
demayer 0:6bf0743ece18 13 * See the License for the specific language governing permissions and
demayer 0:6bf0743ece18 14 * limitations under the License.
demayer 0:6bf0743ece18 15 */
demayer 0:6bf0743ece18 16 #ifndef MBED_FILEHANDLE_H
demayer 0:6bf0743ece18 17 #define MBED_FILEHANDLE_H
demayer 0:6bf0743ece18 18
demayer 0:6bf0743ece18 19 typedef int FILEHANDLE;
demayer 0:6bf0743ece18 20
demayer 0:6bf0743ece18 21 #include <cstdio>
demayer 0:6bf0743ece18 22 #include "Callback.h"
demayer 0:6bf0743ece18 23 #include "platform/mbed_poll.h"
demayer 0:6bf0743ece18 24 #include "platform/platform.h"
demayer 0:6bf0743ece18 25 #include "platform/NonCopyable.h"
demayer 0:6bf0743ece18 26
demayer 0:6bf0743ece18 27 namespace mbed {
demayer 0:6bf0743ece18 28 /** \addtogroup platform */
demayer 0:6bf0743ece18 29 /** @{*/
demayer 0:6bf0743ece18 30 /**
demayer 0:6bf0743ece18 31 * \defgroup platform_FileHandle FileHandle functions
demayer 0:6bf0743ece18 32 * @{
demayer 0:6bf0743ece18 33 */
demayer 0:6bf0743ece18 34
demayer 0:6bf0743ece18 35
demayer 0:6bf0743ece18 36 /** Class FileHandle
demayer 0:6bf0743ece18 37 *
demayer 0:6bf0743ece18 38 * An abstract interface that represents operations on a file-like
demayer 0:6bf0743ece18 39 * object. The core functions are read, write, and seek, but only
demayer 0:6bf0743ece18 40 * a subset of these operations can be provided.
demayer 0:6bf0743ece18 41 *
demayer 0:6bf0743ece18 42 * @note to create a file, @see File
demayer 0:6bf0743ece18 43 * @note Synchronization level: Set by subclass
demayer 0:6bf0743ece18 44 */
demayer 0:6bf0743ece18 45 class FileHandle : private NonCopyable<FileHandle> {
demayer 0:6bf0743ece18 46 public:
demayer 0:6bf0743ece18 47 virtual ~FileHandle() {}
demayer 0:6bf0743ece18 48
demayer 0:6bf0743ece18 49 /** Read the contents of a file into a buffer
demayer 0:6bf0743ece18 50 *
demayer 0:6bf0743ece18 51 * Devices acting as FileHandles should follow POSIX semantics:
demayer 0:6bf0743ece18 52 *
demayer 0:6bf0743ece18 53 * * if no data is available, and non-blocking set return -EAGAIN
demayer 0:6bf0743ece18 54 * * if no data is available, and blocking set, wait until data is available
demayer 0:6bf0743ece18 55 * * If any data is available, call returns immediately
demayer 0:6bf0743ece18 56 *
demayer 0:6bf0743ece18 57 * @param buffer The buffer to read in to
demayer 0:6bf0743ece18 58 * @param size The number of bytes to read
demayer 0:6bf0743ece18 59 * @return The number of bytes read, 0 at end of file, negative error on failure
demayer 0:6bf0743ece18 60 */
demayer 0:6bf0743ece18 61 virtual ssize_t read(void *buffer, size_t size) = 0;
demayer 0:6bf0743ece18 62
demayer 0:6bf0743ece18 63 /** Write the contents of a buffer to a file
demayer 0:6bf0743ece18 64 *
demayer 0:6bf0743ece18 65 * @param buffer The buffer to write from
demayer 0:6bf0743ece18 66 * @param size The number of bytes to write
demayer 0:6bf0743ece18 67 * @return The number of bytes written, negative error on failure
demayer 0:6bf0743ece18 68 */
demayer 0:6bf0743ece18 69 virtual ssize_t write(const void *buffer, size_t size) = 0;
demayer 0:6bf0743ece18 70
demayer 0:6bf0743ece18 71 /** Move the file position to a given offset from from a given location
demayer 0:6bf0743ece18 72 *
demayer 0:6bf0743ece18 73 * @param offset The offset from whence to move to
demayer 0:6bf0743ece18 74 * @param whence The start of where to seek
demayer 0:6bf0743ece18 75 * SEEK_SET to start from beginning of file,
demayer 0:6bf0743ece18 76 * SEEK_CUR to start from current position in file,
demayer 0:6bf0743ece18 77 * SEEK_END to start from end of file
demayer 0:6bf0743ece18 78 * @return The new offset of the file, negative error code on failure
demayer 0:6bf0743ece18 79 */
demayer 0:6bf0743ece18 80 virtual off_t seek(off_t offset, int whence = SEEK_SET) = 0;
demayer 0:6bf0743ece18 81
demayer 0:6bf0743ece18 82 /** Close a file
demayer 0:6bf0743ece18 83 *
demayer 0:6bf0743ece18 84 * @return 0 on success, negative error code on failure
demayer 0:6bf0743ece18 85 */
demayer 0:6bf0743ece18 86 virtual int close() = 0;
demayer 0:6bf0743ece18 87
demayer 0:6bf0743ece18 88 /** Flush any buffers associated with the file
demayer 0:6bf0743ece18 89 *
demayer 0:6bf0743ece18 90 * @return 0 on success, negative error code on failure
demayer 0:6bf0743ece18 91 */
demayer 0:6bf0743ece18 92 virtual int sync()
demayer 0:6bf0743ece18 93 {
demayer 0:6bf0743ece18 94 return 0;
demayer 0:6bf0743ece18 95 }
demayer 0:6bf0743ece18 96
demayer 0:6bf0743ece18 97 /** Check if the file in an interactive terminal device
demayer 0:6bf0743ece18 98 *
demayer 0:6bf0743ece18 99 * @return True if the file is a terminal
demayer 0:6bf0743ece18 100 * @return False if the file is not a terminal
demayer 0:6bf0743ece18 101 * @return Negative error code on failure
demayer 0:6bf0743ece18 102 */
demayer 0:6bf0743ece18 103 virtual int isatty()
demayer 0:6bf0743ece18 104 {
demayer 0:6bf0743ece18 105 return false;
demayer 0:6bf0743ece18 106 }
demayer 0:6bf0743ece18 107
demayer 0:6bf0743ece18 108 /** Get the file position of the file
demayer 0:6bf0743ece18 109 *
demayer 0:6bf0743ece18 110 * @note This is equivalent to seek(0, SEEK_CUR)
demayer 0:6bf0743ece18 111 *
demayer 0:6bf0743ece18 112 * @return The current offset in the file, negative error code on failure
demayer 0:6bf0743ece18 113 */
demayer 0:6bf0743ece18 114 virtual off_t tell()
demayer 0:6bf0743ece18 115 {
demayer 0:6bf0743ece18 116 return seek(0, SEEK_CUR);
demayer 0:6bf0743ece18 117 }
demayer 0:6bf0743ece18 118
demayer 0:6bf0743ece18 119 /** Rewind the file position to the beginning of the file
demayer 0:6bf0743ece18 120 *
demayer 0:6bf0743ece18 121 * @note This is equivalent to seek(0, SEEK_SET)
demayer 0:6bf0743ece18 122 */
demayer 0:6bf0743ece18 123 virtual void rewind()
demayer 0:6bf0743ece18 124 {
demayer 0:6bf0743ece18 125 seek(0, SEEK_SET);
demayer 0:6bf0743ece18 126 }
demayer 0:6bf0743ece18 127
demayer 0:6bf0743ece18 128 /** Get the size of the file
demayer 0:6bf0743ece18 129 *
demayer 0:6bf0743ece18 130 * @return Size of the file in bytes
demayer 0:6bf0743ece18 131 */
demayer 0:6bf0743ece18 132 virtual off_t size();
demayer 0:6bf0743ece18 133
demayer 0:6bf0743ece18 134 /** Move the file position to a given offset from a given location.
demayer 0:6bf0743ece18 135 *
demayer 0:6bf0743ece18 136 * @param offset The offset from whence to move to
demayer 0:6bf0743ece18 137 * @param whence SEEK_SET for the start of the file, SEEK_CUR for the
demayer 0:6bf0743ece18 138 * current file position, or SEEK_END for the end of the file.
demayer 0:6bf0743ece18 139 *
demayer 0:6bf0743ece18 140 * @returns
demayer 0:6bf0743ece18 141 * new file position on success,
demayer 0:6bf0743ece18 142 * -1 on failure or unsupported
demayer 0:6bf0743ece18 143 */
demayer 0:6bf0743ece18 144 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by FileHandle::seek")
demayer 0:6bf0743ece18 145 virtual off_t lseek(off_t offset, int whence)
demayer 0:6bf0743ece18 146 {
demayer 0:6bf0743ece18 147 return seek(offset, whence);
demayer 0:6bf0743ece18 148 }
demayer 0:6bf0743ece18 149
demayer 0:6bf0743ece18 150 /** Flush any buffers associated with the FileHandle, ensuring it
demayer 0:6bf0743ece18 151 * is up to date on disk
demayer 0:6bf0743ece18 152 *
demayer 0:6bf0743ece18 153 * @returns
demayer 0:6bf0743ece18 154 * 0 on success or un-needed,
demayer 0:6bf0743ece18 155 * -1 on error
demayer 0:6bf0743ece18 156 */
demayer 0:6bf0743ece18 157 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by FileHandle::sync")
demayer 0:6bf0743ece18 158 virtual int fsync()
demayer 0:6bf0743ece18 159 {
demayer 0:6bf0743ece18 160 return sync();
demayer 0:6bf0743ece18 161 }
demayer 0:6bf0743ece18 162
demayer 0:6bf0743ece18 163 /** Find the length of the file
demayer 0:6bf0743ece18 164 *
demayer 0:6bf0743ece18 165 * @returns
demayer 0:6bf0743ece18 166 * Length of the file
demayer 0:6bf0743ece18 167 */
demayer 0:6bf0743ece18 168 MBED_DEPRECATED_SINCE("mbed-os-5.4", "Replaced by FileHandle::size")
demayer 0:6bf0743ece18 169 virtual off_t flen()
demayer 0:6bf0743ece18 170 {
demayer 0:6bf0743ece18 171 return size();
demayer 0:6bf0743ece18 172 }
demayer 0:6bf0743ece18 173
demayer 0:6bf0743ece18 174 /** Set blocking or non-blocking mode of the file operation like read/write.
demayer 0:6bf0743ece18 175 * Definition depends upon the subclass implementing FileHandle.
demayer 0:6bf0743ece18 176 * The default is blocking.
demayer 0:6bf0743ece18 177 *
demayer 0:6bf0743ece18 178 * @param blocking true for blocking mode, false for non-blocking mode.
demayer 0:6bf0743ece18 179 *
demayer 0:6bf0743ece18 180 * @return 0 on success
demayer 0:6bf0743ece18 181 * @return Negative error code on failure
demayer 0:6bf0743ece18 182 */
demayer 0:6bf0743ece18 183 virtual int set_blocking(bool blocking)
demayer 0:6bf0743ece18 184 {
demayer 0:6bf0743ece18 185 return -1;
demayer 0:6bf0743ece18 186 }
demayer 0:6bf0743ece18 187
demayer 0:6bf0743ece18 188 /** Check for poll event flags
demayer 0:6bf0743ece18 189 * The input parameter can be used or ignored - the could always return all events,
demayer 0:6bf0743ece18 190 * or could check just the events listed in events.
demayer 0:6bf0743ece18 191 * Call is non-blocking - returns instantaneous state of events.
demayer 0:6bf0743ece18 192 * Whenever an event occurs, the derived class should call the sigio() callback).
demayer 0:6bf0743ece18 193 *
demayer 0:6bf0743ece18 194 * @param events bitmask of poll events we're interested in - POLLIN/POLLOUT etc.
demayer 0:6bf0743ece18 195 *
demayer 0:6bf0743ece18 196 * @returns bitmask of poll events that have occurred.
demayer 0:6bf0743ece18 197 */
demayer 0:6bf0743ece18 198 virtual short poll(short events) const
demayer 0:6bf0743ece18 199 {
demayer 0:6bf0743ece18 200 // Possible default for real files
demayer 0:6bf0743ece18 201 return POLLIN | POLLOUT;
demayer 0:6bf0743ece18 202 }
demayer 0:6bf0743ece18 203
demayer 0:6bf0743ece18 204 /** Definition depends upon the subclass implementing FileHandle.
demayer 0:6bf0743ece18 205 * For example, if the FileHandle is of type Stream, writable() could return
demayer 0:6bf0743ece18 206 * true when there is ample buffer space available for write() calls.
demayer 0:6bf0743ece18 207 *
demayer 0:6bf0743ece18 208 * @returns true if the FileHandle is writable.
demayer 0:6bf0743ece18 209 */
demayer 0:6bf0743ece18 210 bool writable() const
demayer 0:6bf0743ece18 211 {
demayer 0:6bf0743ece18 212 return poll(POLLOUT) & POLLOUT;
demayer 0:6bf0743ece18 213 }
demayer 0:6bf0743ece18 214
demayer 0:6bf0743ece18 215 /** Definition depends upon the subclass implementing FileHandle.
demayer 0:6bf0743ece18 216 * For example, if the FileHandle is of type Stream, readable() could return
demayer 0:6bf0743ece18 217 * true when there is something available to read.
demayer 0:6bf0743ece18 218 *
demayer 0:6bf0743ece18 219 * @returns true when there is something available to read.
demayer 0:6bf0743ece18 220 */
demayer 0:6bf0743ece18 221 bool readable() const
demayer 0:6bf0743ece18 222 {
demayer 0:6bf0743ece18 223 return poll(POLLIN) & POLLIN;
demayer 0:6bf0743ece18 224 }
demayer 0:6bf0743ece18 225
demayer 0:6bf0743ece18 226 /** Register a callback on state change of the file.
demayer 0:6bf0743ece18 227 *
demayer 0:6bf0743ece18 228 * The specified callback will be called on state changes such as when
demayer 0:6bf0743ece18 229 * the file can be written to or read from.
demayer 0:6bf0743ece18 230 *
demayer 0:6bf0743ece18 231 * The callback may be called in an interrupt context and should not
demayer 0:6bf0743ece18 232 * perform expensive operations.
demayer 0:6bf0743ece18 233 *
demayer 0:6bf0743ece18 234 * Note! This is not intended as an attach-like asynchronous api, but rather
demayer 0:6bf0743ece18 235 * as a building block for constructing such functionality.
demayer 0:6bf0743ece18 236 *
demayer 0:6bf0743ece18 237 * The exact timing of when the registered function
demayer 0:6bf0743ece18 238 * is called is not guaranteed and susceptible to change. It should be used
demayer 0:6bf0743ece18 239 * as a cue to make read/write/poll calls to find the current state.
demayer 0:6bf0743ece18 240 *
demayer 0:6bf0743ece18 241 * @param func Function to call on state change
demayer 0:6bf0743ece18 242 */
demayer 0:6bf0743ece18 243 virtual void sigio(Callback<void()> func)
demayer 0:6bf0743ece18 244 {
demayer 0:6bf0743ece18 245 //Default for real files. Do nothing for real files.
demayer 0:6bf0743ece18 246 }
demayer 0:6bf0743ece18 247 };
demayer 0:6bf0743ece18 248
demayer 0:6bf0743ece18 249 /** Not a member function
demayer 0:6bf0743ece18 250 * This call is equivalent to posix fdopen().
demayer 0:6bf0743ece18 251 * It associates a Stream to an already opened file descriptor (FileHandle)
demayer 0:6bf0743ece18 252 *
demayer 0:6bf0743ece18 253 * @param fh a pointer to an opened file descriptor
demayer 0:6bf0743ece18 254 * @param mode operation upon the file descriptor, e.g., 'wb+'
demayer 0:6bf0743ece18 255 *
demayer 0:6bf0743ece18 256 * @returns a pointer to std::FILE
demayer 0:6bf0743ece18 257 */
demayer 0:6bf0743ece18 258
demayer 0:6bf0743ece18 259 std::FILE *fdopen(FileHandle *fh, const char *mode);
demayer 0:6bf0743ece18 260
demayer 0:6bf0743ece18 261 /**@}*/
demayer 0:6bf0743ece18 262
demayer 0:6bf0743ece18 263 /**@}*/
demayer 0:6bf0743ece18 264
demayer 0:6bf0743ece18 265
demayer 0:6bf0743ece18 266 } // namespace mbed
demayer 0:6bf0743ece18 267
demayer 0:6bf0743ece18 268 #endif