...

Dependents:   2doejemplo Labo_TRSE_Drone

Fork of mbed by mbed official

Committer:
emilmont
Date:
Mon Feb 18 11:12:58 2013 +0000
Revision:
59:0883845fe643
Parent:
55:d722ed6a4237
Child:
65:5798e58a58b1
Add pinmap NC terminators for LPC1768 CAN.
Update the license from MIT to Apache v2.
Make the semihost code target independent using opportune defines for the UID and MAC.

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 59:0883845fe643 4 * Licensed under the Apache License, Version 2.0 (the "License");
emilmont 59:0883845fe643 5 * you may not use this file except in compliance with the License.
emilmont 59:0883845fe643 6 * You may obtain a copy of the License at
emilmont 59:0883845fe643 7 *
emilmont 59:0883845fe643 8 * http://www.apache.org/licenses/LICENSE-2.0
emilmont 44:24d45a770a51 9 *
emilmont 59:0883845fe643 10 * Unless required by applicable law or agreed to in writing, software
emilmont 59:0883845fe643 11 * distributed under the License is distributed on an "AS IS" BASIS,
emilmont 59:0883845fe643 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
emilmont 59:0883845fe643 13 * See the License for the specific language governing permissions and
emilmont 59:0883845fe643 14 * limitations under the License.
emilmont 44:24d45a770a51 15 */
simon.ford@mbed.co.uk 0:82220227f4fa 16 #ifndef MBED_FILEHANDLE_H
simon.ford@mbed.co.uk 0:82220227f4fa 17 #define MBED_FILEHANDLE_H
simon.ford@mbed.co.uk 0:82220227f4fa 18
simon.ford@mbed.co.uk 4:5d1359a283bc 19 typedef int FILEHANDLE;
simon.ford@mbed.co.uk 4:5d1359a283bc 20
simon.ford@mbed.co.uk 4:5d1359a283bc 21 #include <stdio.h>
emilmont 55:d722ed6a4237 22
emilmont 55:d722ed6a4237 23 #if defined(__ARMCC_VERSION) || defined(__ICCARM__)
simon.ford@mbed.co.uk 4:5d1359a283bc 24 typedef int ssize_t;
simon.ford@mbed.co.uk 4:5d1359a283bc 25 typedef long off_t;
emilmont 55:d722ed6a4237 26
simon.ford@mbed.co.uk 4:5d1359a283bc 27 #else
emilmont 55:d722ed6a4237 28 # include <sys/types.h>
simon.ford@mbed.co.uk 4:5d1359a283bc 29 #endif
simon.ford@mbed.co.uk 4:5d1359a283bc 30
emilmont 55:d722ed6a4237 31 namespace mbed {
simon.ford@mbed.co.uk 0:82220227f4fa 32
emilmont 43:e2ed12d17f06 33 /** An OO equivalent of the internal FILEHANDLE variable
emilmont 43:e2ed12d17f06 34 * and associated _sys_* functions.
simon.ford@mbed.co.uk 0:82220227f4fa 35 *
emilmont 44:24d45a770a51 36 * FileHandle is an abstract class, needing at least sys_write and
emilmont 43:e2ed12d17f06 37 * sys_read to be implmented for a simple interactive device.
simon.ford@mbed.co.uk 0:82220227f4fa 38 *
emilmont 55:d722ed6a4237 39 * No one ever directly tals to/instanciates a FileHandle - it gets
emilmont 43:e2ed12d17f06 40 * created by FileSystem, and wrapped up by stdio.
simon.ford@mbed.co.uk 0:82220227f4fa 41 */
simon.ford@mbed.co.uk 0:82220227f4fa 42 class FileHandle {
simon.ford@mbed.co.uk 0:82220227f4fa 43
simon.ford@mbed.co.uk 0:82220227f4fa 44 public:
emilmont 43:e2ed12d17f06 45 /** Write the contents of a buffer to the file
simon.ford@mbed.co.uk 0:82220227f4fa 46 *
emilmont 43:e2ed12d17f06 47 * @param buffer the buffer to write from
emilmont 43:e2ed12d17f06 48 * @param length the number of characters to write
simon.ford@mbed.co.uk 0:82220227f4fa 49 *
emilmont 43:e2ed12d17f06 50 * @returns
emilmont 44:24d45a770a51 51 * The number of characters written (possibly 0) on success, -1 on error.
simon.ford@mbed.co.uk 0:82220227f4fa 52 */
simon.ford@mbed.co.uk 4:5d1359a283bc 53 virtual ssize_t write(const void* buffer, size_t length) = 0;
simon.ford@mbed.co.uk 0:82220227f4fa 54
emilmont 43:e2ed12d17f06 55 /** Close the file
simon.ford@mbed.co.uk 4:5d1359a283bc 56 *
emilmont 43:e2ed12d17f06 57 * @returns
emilmont 44:24d45a770a51 58 * Zero on success, -1 on error.
simon.ford@mbed.co.uk 4:5d1359a283bc 59 */
simon.ford@mbed.co.uk 4:5d1359a283bc 60 virtual int close() = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 61
emilmont 43:e2ed12d17f06 62 /** Function read
simon.ford@mbed.co.uk 4:5d1359a283bc 63 * Reads the contents of the file into a buffer
simon.ford@mbed.co.uk 4:5d1359a283bc 64 *
emilmont 43:e2ed12d17f06 65 * @param buffer the buffer to read in to
emilmont 43:e2ed12d17f06 66 * @param length the number of characters to read
simon.ford@mbed.co.uk 0:82220227f4fa 67 *
emilmont 43:e2ed12d17f06 68 * @returns
emilmont 44:24d45a770a51 69 * The number of characters read (zero at end of file) on success, -1 on error.
simon.ford@mbed.co.uk 4:5d1359a283bc 70 */
simon.ford@mbed.co.uk 4:5d1359a283bc 71 virtual ssize_t read(void* buffer, size_t length) = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 72
emilmont 43:e2ed12d17f06 73 /** Check if the handle is for a interactive terminal device.
emilmont 44:24d45a770a51 74 * If so, line buffered behaviour is used by default
simon.ford@mbed.co.uk 4:5d1359a283bc 75 *
emilmont 43:e2ed12d17f06 76 * @returns
emilmont 43:e2ed12d17f06 77 * 1 if it is a terminal,
emilmont 43:e2ed12d17f06 78 * 0 otherwise
simon.ford@mbed.co.uk 4:5d1359a283bc 79 */
emilmont 44:24d45a770a51 80 virtual int isatty() = 0;
simon.ford@mbed.co.uk 0:82220227f4fa 81
emilmont 43:e2ed12d17f06 82 /** Move the file position to a given offset from a given location.
simon.ford@mbed.co.uk 4:5d1359a283bc 83 *
emilmont 43:e2ed12d17f06 84 * @param offset The offset from whence to move to
emilmont 43:e2ed12d17f06 85 * @param whence SEEK_SET for the start of the file, SEEK_CUR for the
simon.ford@mbed.co.uk 4:5d1359a283bc 86 * current file position, or SEEK_END for the end of the file.
simon.ford@mbed.co.uk 4:5d1359a283bc 87 *
emilmont 43:e2ed12d17f06 88 * @returns
emilmont 43:e2ed12d17f06 89 * new file position on success,
emilmont 43:e2ed12d17f06 90 * -1 on failure or unsupported
simon.ford@mbed.co.uk 4:5d1359a283bc 91 */
simon.ford@mbed.co.uk 4:5d1359a283bc 92 virtual off_t lseek(off_t offset, int whence) = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 93
emilmont 43:e2ed12d17f06 94 /** Flush any buffers associated with the FileHandle, ensuring it
simon.ford@mbed.co.uk 4:5d1359a283bc 95 * is up to date on disk
simon.ford@mbed.co.uk 4:5d1359a283bc 96 *
emilmont 43:e2ed12d17f06 97 * @returns
emilmont 43:e2ed12d17f06 98 * 0 on success or un-needed,
emilmont 43:e2ed12d17f06 99 * -1 on error
simon.ford@mbed.co.uk 4:5d1359a283bc 100 */
simon.ford@mbed.co.uk 4:5d1359a283bc 101 virtual int fsync() = 0;
simon.ford@mbed.co.uk 4:5d1359a283bc 102
simon.ford@mbed.co.uk 4:5d1359a283bc 103 virtual off_t flen() {
simon.ford@mbed.co.uk 4:5d1359a283bc 104 /* remember our current position */
simon.ford@mbed.co.uk 4:5d1359a283bc 105 off_t pos = lseek(0, SEEK_CUR);
simon.ford@mbed.co.uk 4:5d1359a283bc 106 if(pos == -1) return -1;
simon.ford@mbed.co.uk 4:5d1359a283bc 107 /* seek to the end to get the file length */
simon.ford@mbed.co.uk 4:5d1359a283bc 108 off_t res = lseek(0, SEEK_END);
simon.ford@mbed.co.uk 4:5d1359a283bc 109 /* return to our old position */
simon.ford@mbed.co.uk 4:5d1359a283bc 110 lseek(pos, SEEK_SET);
simon.ford@mbed.co.uk 4:5d1359a283bc 111 return res;
simon.ford@mbed.co.uk 4:5d1359a283bc 112 }
emilmont 55:d722ed6a4237 113
emilmont 44:24d45a770a51 114 virtual ~FileHandle();
simon.ford@mbed.co.uk 0:82220227f4fa 115 };
simon.ford@mbed.co.uk 0:82220227f4fa 116
simon.ford@mbed.co.uk 0:82220227f4fa 117 } // namespace mbed
simon.ford@mbed.co.uk 0:82220227f4fa 118
simon.ford@mbed.co.uk 1:6b7f447ca868 119 #endif