fix for mbed lib issue 3 (i2c problem) see also https://mbed.org/users/mbed_official/code/mbed/issues/3 affected implementations: LPC812, LPC11U24, LPC1768, LPC2368, LPC4088

Fork of mbed-src by mbed official

Files at this revision

API Documentation at this revision

Comitter:
emilmont
Date:
Thu Nov 29 15:41:14 2012 +0000
Parent:
0:fd0d7bdfcdc2
Child:
2:143cac498751
Commit message:
Update sources to [Rev 49]

Changed in this revision

capi/error.h Show annotated file Show diff for this revision Revisions of this file
capi/mbed_debug.h Show annotated file Show diff for this revision Revisions of this file
capi/serial_api.h Show annotated file Show diff for this revision Revisions of this file
cpp/FileSystemLike.cpp Show annotated file Show diff for this revision Revisions of this file
cpp/FileSystemLike.h Show annotated file Show diff for this revision Revisions of this file
cpp/stdio.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/capi/error.h	Tue Nov 20 17:24:08 2012 +0000
+++ b/capi/error.h	Thu Nov 29 15:41:14 2012 +0000
@@ -62,7 +62,7 @@
 #include <stdlib.h>
 #include "device.h"
 
-#ifdef DEVICE_STDIO_ERROR
+#ifdef DEVICE_STDIO_MESSAGES
     #include <stdio.h>
     #define error(...) (fprintf(stderr, __VA_ARGS__), exit(1))
 #else
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/capi/mbed_debug.h	Thu Nov 29 15:41:14 2012 +0000
@@ -0,0 +1,72 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2012 ARM Limited
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef MBED_DEBUG_H
+#define MBED_DEBUG_H
+#include "device.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef DEVICE_STDIO_MESSAGES
+#include <stdio.h>
+#include <stdarg.h>
+
+/** Output a debug message
+ * 
+ * @param format printf-style format string, followed by variables
+ */
+static inline void debug(const char *format, ...) {
+    va_list args;
+    va_start(args, format);
+    vfprintf(stderr, format, args);
+    va_end(args);
+}
+ 
+/** Conditionally output a debug message
+ * 
+ * NOTE: If the condition is constant false (!= 1) and the compiler optimization
+ * level is greater than 0, then the whole function will be compiled away.
+ * 
+ * @param condition output only if condition is true (== 1)
+ * @param format printf-style format string, followed by variables
+ */
+static inline void debug_if(int condition, const char *format, ...) {
+    if (condition == 1) {
+        va_list args;
+        va_start(args, format);
+        vfprintf(stderr, format, args);
+        va_end(args);
+    }
+}
+
+#else
+static inline void debug(const char *format, ...) {}
+static inline void debug_if(int condition, const char *format, ...) {}
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- a/capi/serial_api.h	Tue Nov 20 17:24:08 2012 +0000
+++ b/capi/serial_api.h	Thu Nov 29 15:41:14 2012 +0000
@@ -39,8 +39,8 @@
 } SerialParity;
 
 typedef enum {
-    TxIrq,
-    RxIrq
+    RxIrq,
+    TxIrq
 } SerialIrq;
 
 typedef void (*uart_irq_handler)(uint32_t id, SerialIrq event);
--- a/cpp/FileSystemLike.cpp	Tue Nov 20 17:24:08 2012 +0000
+++ b/cpp/FileSystemLike.cpp	Thu Nov 29 15:41:14 2012 +0000
@@ -131,16 +131,16 @@
     file_name = file_system;
     int len = 0;
     while (true) {
-        char c = *file_name++;
+        char c = *file_name;
         if (c == '/') { // end of object name
-            /* file now points to one char after the '/' */
+            file_name++; // point to one char after the '/'
             break;
         }
         if (c == 0) { // end of object name, with no filename
-            file_name = NULL;
             break;
         }
         len++;
+        file_name++;
     }
     
     fs = FileSystemLike::lookup(file_system, len);
@@ -154,9 +154,4 @@
     return fs;
 }
 
-FileSystemLike* FilePath::getFileSystem(const char* path) {
-    FilePath f(path);
-    return f.fs;
-}
-
 } // namespace mbed
--- a/cpp/FileSystemLike.h	Tue Nov 20 17:24:08 2012 +0000
+++ b/cpp/FileSystemLike.h	Thu Nov 29 15:41:14 2012 +0000
@@ -137,8 +137,6 @@
     
     const char* fileName(void);
     FileSystemLike* fileSystem(void);
-    
-    static FileSystemLike* getFileSystem(const char* path);
 
 private:
     const char* file_name;
--- a/cpp/stdio.cpp	Tue Nov 20 17:24:08 2012 +0000
+++ b/cpp/stdio.cpp	Thu Nov 29 15:41:14 2012 +0000
@@ -274,10 +274,11 @@
 
 namespace std {
 extern "C" int remove(const char *path) {
-    FileSystemLike *fs = FilePath::getFileSystem(path);
+    FilePath fp(path);
+    FileSystemLike *fs = fp.fileSystem();
     if (fs == NULL) return -1;
     
-    return fs->remove(path);
+    return fs->remove(fp.fileName());
 }
 
 extern "C" int rename(const char *oldname, const char *newname) {
@@ -305,10 +306,11 @@
         return FileSystemLike::opendir();
     }
     
-    FileSystemLike *fs = FilePath::getFileSystem(path);
+    FilePath fp(path);
+    FileSystemLike* fs = fp.fileSystem();
     if (fs == NULL) return NULL;
     
-    return fs->opendir(path);
+    return fs->opendir(fp.fileName());
 }
 
 extern "C" struct dirent *readdir(DIR *dir) {
@@ -332,10 +334,11 @@
 }
 
 extern "C" int mkdir(const char *path, mode_t mode) {
-    FileSystemLike *fs = FilePath::getFileSystem(path);
+    FilePath fp(path);
+    FileSystemLike *fs = fp.fileSystem();
     if (fs == NULL) return -1;
     
-    return fs->mkdir(path, mode);
+    return fs->mkdir(fp.fileName(), mode);
 }
 
 #if defined(TOOLCHAIN_GCC_CR) || defined(TOOLCHAIN_GCC_CS) || defined(TOOLCHAIN_GCC_ARM)