summaryrefslogtreecommitdiff
path: root/tmk_core/common/mbed/xprintf.cpp
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2015-10-27 12:42:30 -0400
committerJack Humbert <jack.humb@gmail.com>2015-10-27 12:42:30 -0400
commit547da78335298df6666200c6063ac6f1aba312fd (patch)
tree47df0252ee24b1ecc27b9dd0458c51f20bf088c3 /tmk_core/common/mbed/xprintf.cpp
parenta766918d5c48204375f4c207b30bbbf1389df14f (diff)
parentfa33719adab1393753312d298b8c365e04e844b9 (diff)
merging tmk
Diffstat (limited to 'tmk_core/common/mbed/xprintf.cpp')
-rw-r--r--tmk_core/common/mbed/xprintf.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/tmk_core/common/mbed/xprintf.cpp b/tmk_core/common/mbed/xprintf.cpp
new file mode 100644
index 0000000000..3647ece751
--- /dev/null
+++ b/tmk_core/common/mbed/xprintf.cpp
@@ -0,0 +1,51 @@
+#include <cstdarg>
+//#include <stdarg.h>
+#include "mbed.h"
+#include "mbed/xprintf.h"
+
+
+#define STRING_STACK_LIMIT 120
+
+//TODO
+int xprintf(const char* format, ...) { return 0; }
+
+#if 0
+/* mbed Serial */
+Serial ser(UART_TX, UART_RX);
+
+/* TODO: Need small implementation for embedded */
+int xprintf(const char* format, ...)
+{
+ /* copy from mbed/common/RawSerial.cpp */
+ std::va_list arg;
+ va_start(arg, format);
+ int len = vsnprintf(NULL, 0, format, arg);
+ if (len < STRING_STACK_LIMIT) {
+ char temp[STRING_STACK_LIMIT];
+ vsprintf(temp, format, arg);
+ ser.puts(temp);
+ } else {
+ char *temp = new char[len + 1];
+ vsprintf(temp, format, arg);
+ ser.puts(temp);
+ delete[] temp;
+ }
+ va_end(arg);
+ return len;
+
+/* Fail: __builtin_va_arg_pack?
+ * https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Constructing-Calls.html#Constructing-Calls
+ void *arg = __builtin_apply_args();
+ void *ret = __builtin_apply((void*)(&(ser.printf)), arg, 100);
+ __builtin_return(ret)
+*/
+/* Fail: varargs can not be passed to printf
+ //int r = ser.printf("test %i\r\n", 123);
+ va_list arg;
+ va_start(arg, format);
+ int r = ser.printf(format, arg);
+ va_end(arg);
+ return r;
+*/
+}
+#endif