...

Dependents:   2doejemplo Labo_TRSE_Drone

Fork of mbed by mbed official

Committer:
emilmont
Date:
Wed Jan 16 12:56:34 2013 +0000
Revision:
55:d722ed6a4237
Parent:
54:71b101360fb9
Child:
59:0883845fe643
Include "sleep_api.h" in "mbed.h"
Add initial IAR toolchain support
LPC I2C: better handling of status
Add sleep mode support for the LPC1768
Correct GCC "__semihost" definition
Correct GCC "_isatty" retargeting

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 44:24d45a770a51 1 /* mbed Microcontroller Library
emilmont 54:71b101360fb9 2 * Copyright (c) 2006-2013 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>
emilmont 55:d722ed6a4237 28
emilmont 55:d722ed6a4237 29 #if defined(__ARMCC_VERSION) || defined(__ICCARM__)
simon.ford@mbed.co.uk 4:5d1359a283bc 30 typedef int ssize_t;
simon.ford@mbed.co.uk 4:5d1359a283bc 31 typedef long off_t;
emilmont 55:d722ed6a4237 32
simon.ford@mbed.co.uk 4:5d1359a283bc 33 #else
emilmont 55:d722ed6a4237 34 # include <sys/types.h>
simon.ford@mbed.co.uk 4:5d1359a283bc 35 #endif
simon.ford@mbed.co.uk 4:5d1359a283bc 36
emilmont 55:d722ed6a4237 37 namespace mbed {
simon.ford@mbed.co.uk 0:82220227f4fa 38
emilmont 43:e2ed12d17f06 39 /** An OO equivalent of the internal FILEHANDLE variable
emilmont 43:e2ed12d17f06 40 * and associated _sys_* functions.
simon.ford@mbed.co.uk 0:82220227f4fa 41 *
emilmont 44:24d45a770a51 42 * FileHandle is an abstract class, needing at least sys_write and
emilmont 43:e2ed12d17f06 43 * sys_read to be implmented for a simple interactive device.
simon.ford@mbed.co.uk 0:82220227f4fa 44 *
emilmont 55:d722ed6a4237 45 * No one ever directly tals to/instanciates a FileHandle - it gets
emilmont 43:e2ed12d17f06 46 * created by FileSystem, and wrapped up by stdio.
simon.ford@mbed.co.uk 0:82220227f4fa 47 */
simon.ford@mbed.co.uk 0:82220227f4fa 48 class FileHandle {
simon.ford@mbed.co.uk 0:82220227f4fa 49
simon.ford@mbed.co.uk 0:82220227f4fa 50 public:
emilmont 43:e2ed12d17f06 51 /** Write the contents of a buffer to the file
simon.ford@mbed.co.uk 0:82220227f4fa 52 *
emilmont 43:e2ed12d17f06 53 * @param buffer the buffer to write from
emilmont 43:e2ed12d17f06 54 * @param length the number of characters to write
simon.ford@mbed.co.uk 0:82220227f4fa 55 *
emilmont 43:e2ed12d17f06 56 * @returns
emilmont 44:24d45a770a51 57 * The number of characters written (possibly 0) on success, -1 on error.
simon.ford@mbed.co.uk 0:82220227f4fa 58 */
simon.ford@mbed.co.uk 4:5d1359a283bc 59 virtual ssize_t write(const void* buffer, size_t length) = 0;
simon.ford@mbed.co.uk 0:82220227f4fa 60
emilmont 43:e2ed12d17f06 61 /** Close the file
simon.ford@mbed.co.uk 4:5d1359a283bc 62 *
emilmont 43:e2ed12d17f06 63 * @returns
emilmont 44:24d45a770a51 64 * Zero on success, -1 on error.
simon.ford@mbed.co.uk 4:5d1359a283bc 65 */
simon.ford@mbed.co.uk 4:5d1359a283bc 66 virtual int close() = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 67
emilmont 43:e2ed12d17f06 68 /** Function read
simon.ford@mbed.co.uk 4:5d1359a283bc 69 * Reads the contents of the file into a buffer
simon.ford@mbed.co.uk 4:5d1359a283bc 70 *
emilmont 43:e2ed12d17f06 71 * @param buffer the buffer to read in to
emilmont 43:e2ed12d17f06 72 * @param length the number of characters to read
simon.ford@mbed.co.uk 0:82220227f4fa 73 *
emilmont 43:e2ed12d17f06 74 * @returns
emilmont 44:24d45a770a51 75 * The number of characters read (zero at end of file) on success, -1 on error.
simon.ford@mbed.co.uk 4:5d1359a283bc 76 */
simon.ford@mbed.co.uk 4:5d1359a283bc 77 virtual ssize_t read(void* buffer, size_t length) = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 78
emilmont 43:e2ed12d17f06 79 /** Check if the handle is for a interactive terminal device.
emilmont 44:24d45a770a51 80 * If so, line buffered behaviour is used by default
simon.ford@mbed.co.uk 4:5d1359a283bc 81 *
emilmont 43:e2ed12d17f06 82 * @returns
emilmont 43:e2ed12d17f06 83 * 1 if it is a terminal,
emilmont 43:e2ed12d17f06 84 * 0 otherwise
simon.ford@mbed.co.uk 4:5d1359a283bc 85 */
emilmont 44:24d45a770a51 86 virtual int isatty() = 0;
simon.ford@mbed.co.uk 0:82220227f4fa 87
emilmont 43:e2ed12d17f06 88 /** Move the file position to a given offset from a given location.
simon.ford@mbed.co.uk 4:5d1359a283bc 89 *
emilmont 43:e2ed12d17f06 90 * @param offset The offset from whence to move to
emilmont 43:e2ed12d17f06 91 * @param whence SEEK_SET for the start of the file, SEEK_CUR for the
simon.ford@mbed.co.uk 4:5d1359a283bc 92 * current file position, or SEEK_END for the end of the file.
simon.ford@mbed.co.uk 4:5d1359a283bc 93 *
emilmont 43:e2ed12d17f06 94 * @returns
emilmont 43:e2ed12d17f06 95 * new file position on success,
emilmont 43:e2ed12d17f06 96 * -1 on failure or unsupported
simon.ford@mbed.co.uk 4:5d1359a283bc 97 */
simon.ford@mbed.co.uk 4:5d1359a283bc 98 virtual off_t lseek(off_t offset, int whence) = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 99
emilmont 43:e2ed12d17f06 100 /** Flush any buffers associated with the FileHandle, ensuring it
simon.ford@mbed.co.uk 4:5d1359a283bc 101 * is up to date on disk
simon.ford@mbed.co.uk 4:5d1359a283bc 102 *
emilmont 43:e2ed12d17f06 103 * @returns
emilmont 43:e2ed12d17f06 104 * 0 on success or un-needed,
emilmont 43:e2ed12d17f06 105 * -1 on error
simon.ford@mbed.co.uk 4:5d1359a283bc 106 */
simon.ford@mbed.co.uk 4:5d1359a283bc 107 virtual int fsync() = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 108
simon.ford@mbed.co.uk 4:5d1359a283bc 109 virtual off_t flen() {
simon.ford@mbed.co.uk 4:5d1359a283bc 110 /* remember our current position */
simon.ford@mbed.co.uk 4:5d1359a283bc 111 off_t pos = lseek(0, SEEK_CUR);
simon.ford@mbed.co.uk 4:5d1359a283bc 112 if(pos == -1) return -1;
simon.ford@mbed.co.uk 4:5d1359a283bc 113 /* seek to the end to get the file length */
simon.ford@mbed.co.uk 4:5d1359a283bc 114 off_t res = lseek(0, SEEK_END);
simon.ford@mbed.co.uk 4:5d1359a283bc 115 /* return to our old position */
simon.ford@mbed.co.uk 4:5d1359a283bc 116 lseek(pos, SEEK_SET);
simon.ford@mbed.co.uk 4:5d1359a283bc 117 return res;
simon.ford@mbed.co.uk 4:5d1359a283bc 118 }
emilmont 55:d722ed6a4237 119
emilmont 44:24d45a770a51 120 virtual ~FileHandle();
simon.ford@mbed.co.uk 0:82220227f4fa 121 };
simon.ford@mbed.co.uk 0:82220227f4fa 122
simon.ford@mbed.co.uk 0:82220227f4fa 123 } // namespace mbed
simon.ford@mbed.co.uk 0:82220227f4fa 124
simon.ford@mbed.co.uk 1:6b7f447ca868 125 #endif