...

Dependents:   2doejemplo Labo_TRSE_Drone

Fork of mbed by mbed official

Committer:
emilmont
Date:
Wed Nov 21 10:49:56 2012 +0000
Revision:
44:24d45a770a51
Parent:
43:e2ed12d17f06
Child:
54:71b101360fb9
Complete refactoring of the mbed library to move the target dependent code to a thin well defined layer, defining a proper object oriented C API to be implemented by the different silicon vendors.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 44:24d45a770a51 1 /* mbed Microcontroller Library
emilmont 44:24d45a770a51 2 * Copyright (c) 2006-2012 ARM Limited
emilmont 44:24d45a770a51 3 *
emilmont 44:24d45a770a51 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
emilmont 44:24d45a770a51 5 * of this software and associated documentation files (the "Software"), to deal
emilmont 44:24d45a770a51 6 * in the Software without restriction, including without limitation the rights
emilmont 44:24d45a770a51 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
emilmont 44:24d45a770a51 8 * copies of the Software, and to permit persons to whom the Software is
emilmont 44:24d45a770a51 9 * furnished to do so, subject to the following conditions:
emilmont 44:24d45a770a51 10 *
emilmont 44:24d45a770a51 11 * The above copyright notice and this permission notice shall be included in
emilmont 44:24d45a770a51 12 * all copies or substantial portions of the Software.
emilmont 44:24d45a770a51 13 *
emilmont 44:24d45a770a51 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
emilmont 44:24d45a770a51 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
emilmont 44:24d45a770a51 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
emilmont 44:24d45a770a51 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
emilmont 44:24d45a770a51 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
emilmont 44:24d45a770a51 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
emilmont 44:24d45a770a51 20 * SOFTWARE.
emilmont 44:24d45a770a51 21 */
simon.ford@mbed.co.uk 0:82220227f4fa 22 #ifndef MBED_FILEHANDLE_H
simon.ford@mbed.co.uk 0:82220227f4fa 23 #define MBED_FILEHANDLE_H
simon.ford@mbed.co.uk 0:82220227f4fa 24
simon.ford@mbed.co.uk 4:5d1359a283bc 25 typedef int FILEHANDLE;
simon.ford@mbed.co.uk 4:5d1359a283bc 26
simon.ford@mbed.co.uk 4:5d1359a283bc 27 #include <stdio.h>
simon.ford@mbed.co.uk 4:5d1359a283bc 28 #ifdef __ARMCC_VERSION
simon.ford@mbed.co.uk 4:5d1359a283bc 29 typedef int ssize_t;
simon.ford@mbed.co.uk 4:5d1359a283bc 30 typedef long off_t;
simon.ford@mbed.co.uk 4:5d1359a283bc 31 #else
simon.ford@mbed.co.uk 4:5d1359a283bc 32 #include <sys/types.h>
simon.ford@mbed.co.uk 4:5d1359a283bc 33 #endif
simon.ford@mbed.co.uk 4:5d1359a283bc 34
simon.ford@mbed.co.uk 0:82220227f4fa 35 namespace mbed {
simon.ford@mbed.co.uk 0:82220227f4fa 36
emilmont 43:e2ed12d17f06 37 /** An OO equivalent of the internal FILEHANDLE variable
emilmont 43:e2ed12d17f06 38 * and associated _sys_* functions.
simon.ford@mbed.co.uk 0:82220227f4fa 39 *
emilmont 44:24d45a770a51 40 * FileHandle is an abstract class, needing at least sys_write and
emilmont 43:e2ed12d17f06 41 * sys_read to be implmented for a simple interactive device.
simon.ford@mbed.co.uk 0:82220227f4fa 42 *
emilmont 44:24d45a770a51 43 * No one ever directly tals to/instanciates a FileHandle - it gets
emilmont 43:e2ed12d17f06 44 * created by FileSystem, and wrapped up by stdio.
simon.ford@mbed.co.uk 0:82220227f4fa 45 */
simon.ford@mbed.co.uk 0:82220227f4fa 46 class FileHandle {
simon.ford@mbed.co.uk 0:82220227f4fa 47
simon.ford@mbed.co.uk 0:82220227f4fa 48 public:
emilmont 43:e2ed12d17f06 49 /** Write the contents of a buffer to the file
simon.ford@mbed.co.uk 0:82220227f4fa 50 *
emilmont 43:e2ed12d17f06 51 * @param buffer the buffer to write from
emilmont 43:e2ed12d17f06 52 * @param length the number of characters to write
simon.ford@mbed.co.uk 0:82220227f4fa 53 *
emilmont 43:e2ed12d17f06 54 * @returns
emilmont 44:24d45a770a51 55 * The number of characters written (possibly 0) on success, -1 on error.
simon.ford@mbed.co.uk 0:82220227f4fa 56 */
simon.ford@mbed.co.uk 4:5d1359a283bc 57 virtual ssize_t write(const void* buffer, size_t length) = 0;
simon.ford@mbed.co.uk 0:82220227f4fa 58
emilmont 43:e2ed12d17f06 59 /** Close the file
simon.ford@mbed.co.uk 4:5d1359a283bc 60 *
emilmont 43:e2ed12d17f06 61 * @returns
emilmont 44:24d45a770a51 62 * Zero on success, -1 on error.
simon.ford@mbed.co.uk 4:5d1359a283bc 63 */
simon.ford@mbed.co.uk 4:5d1359a283bc 64 virtual int close() = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 65
emilmont 43:e2ed12d17f06 66 /** Function read
simon.ford@mbed.co.uk 4:5d1359a283bc 67 * Reads the contents of the file into a buffer
simon.ford@mbed.co.uk 4:5d1359a283bc 68 *
emilmont 43:e2ed12d17f06 69 * @param buffer the buffer to read in to
emilmont 43:e2ed12d17f06 70 * @param length the number of characters to read
simon.ford@mbed.co.uk 0:82220227f4fa 71 *
emilmont 43:e2ed12d17f06 72 * @returns
emilmont 44:24d45a770a51 73 * The number of characters read (zero at end of file) on success, -1 on error.
simon.ford@mbed.co.uk 4:5d1359a283bc 74 */
simon.ford@mbed.co.uk 4:5d1359a283bc 75 virtual ssize_t read(void* buffer, size_t length) = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 76
emilmont 43:e2ed12d17f06 77 /** Check if the handle is for a interactive terminal device.
emilmont 44:24d45a770a51 78 * If so, line buffered behaviour is used by default
simon.ford@mbed.co.uk 4:5d1359a283bc 79 *
emilmont 43:e2ed12d17f06 80 * @returns
emilmont 43:e2ed12d17f06 81 * 1 if it is a terminal,
emilmont 43:e2ed12d17f06 82 * 0 otherwise
simon.ford@mbed.co.uk 4:5d1359a283bc 83 */
emilmont 44:24d45a770a51 84 virtual int isatty() = 0;
simon.ford@mbed.co.uk 0:82220227f4fa 85
emilmont 43:e2ed12d17f06 86 /** Move the file position to a given offset from a given location.
simon.ford@mbed.co.uk 4:5d1359a283bc 87 *
emilmont 43:e2ed12d17f06 88 * @param offset The offset from whence to move to
emilmont 43:e2ed12d17f06 89 * @param whence SEEK_SET for the start of the file, SEEK_CUR for the
simon.ford@mbed.co.uk 4:5d1359a283bc 90 * current file position, or SEEK_END for the end of the file.
simon.ford@mbed.co.uk 4:5d1359a283bc 91 *
emilmont 43:e2ed12d17f06 92 * @returns
emilmont 43:e2ed12d17f06 93 * new file position on success,
emilmont 43:e2ed12d17f06 94 * -1 on failure or unsupported
simon.ford@mbed.co.uk 4:5d1359a283bc 95 */
simon.ford@mbed.co.uk 4:5d1359a283bc 96 virtual off_t lseek(off_t offset, int whence) = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 97
emilmont 43:e2ed12d17f06 98 /** Flush any buffers associated with the FileHandle, ensuring it
simon.ford@mbed.co.uk 4:5d1359a283bc 99 * is up to date on disk
simon.ford@mbed.co.uk 4:5d1359a283bc 100 *
emilmont 43:e2ed12d17f06 101 * @returns
emilmont 43:e2ed12d17f06 102 * 0 on success or un-needed,
emilmont 43:e2ed12d17f06 103 * -1 on error
simon.ford@mbed.co.uk 4:5d1359a283bc 104 */
simon.ford@mbed.co.uk 4:5d1359a283bc 105 virtual int fsync() = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 106
simon.ford@mbed.co.uk 4:5d1359a283bc 107 virtual off_t flen() {
simon.ford@mbed.co.uk 4:5d1359a283bc 108 /* remember our current position */
simon.ford@mbed.co.uk 4:5d1359a283bc 109 off_t pos = lseek(0, SEEK_CUR);
simon.ford@mbed.co.uk 4:5d1359a283bc 110 if(pos == -1) return -1;
simon.ford@mbed.co.uk 4:5d1359a283bc 111 /* seek to the end to get the file length */
simon.ford@mbed.co.uk 4:5d1359a283bc 112 off_t res = lseek(0, SEEK_END);
simon.ford@mbed.co.uk 4:5d1359a283bc 113 /* return to our old position */
simon.ford@mbed.co.uk 4:5d1359a283bc 114 lseek(pos, SEEK_SET);
simon.ford@mbed.co.uk 4:5d1359a283bc 115 return res;
simon.ford@mbed.co.uk 4:5d1359a283bc 116 }
emilmont 44:24d45a770a51 117
emilmont 44:24d45a770a51 118 virtual ~FileHandle();
simon.ford@mbed.co.uk 0:82220227f4fa 119 };
simon.ford@mbed.co.uk 0:82220227f4fa 120
simon.ford@mbed.co.uk 0:82220227f4fa 121 } // namespace mbed
simon.ford@mbed.co.uk 0:82220227f4fa 122
simon.ford@mbed.co.uk 1:6b7f447ca868 123 #endif