aboutsummaryrefslogtreecommitdiffstats
path: root/os
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-12-03 09:36:46 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-12-03 09:36:46 +0000
commit130e3be57409f06dd395ef8626bf848097ea1b79 (patch)
tree5eb4e21a89a543453639eb63d85d437ca79254c0 /os
parent5e84acec84ad4a804440c0ab1dfc7020ee07649f (diff)
downloadChibiOS-130e3be57409f06dd395ef8626bf848097ea1b79.tar.gz
ChibiOS-130e3be57409f06dd395ef8626bf848097ea1b79.tar.bz2
ChibiOS-130e3be57409f06dd395ef8626bf848097ea1b79.zip
chsnprintf() implementation added.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6528 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os')
-rw-r--r--os/various/chprintf.c45
-rw-r--r--os/various/chprintf.h1
-rw-r--r--os/various/memstreams.h3
3 files changed, 48 insertions, 1 deletions
diff --git a/os/various/chprintf.c b/os/various/chprintf.c
index ffb6650f8..190a7defa 100644
--- a/os/various/chprintf.c
+++ b/os/various/chprintf.c
@@ -29,6 +29,7 @@
#include "ch.h"
#include "chprintf.h"
+#include "memstreams.h"
#define MAX_FILLER 11
#define FLOAT_PRECISION 100000
@@ -259,4 +260,48 @@ unsigned_common:
}
}
+/**
+ * @brief System formatted output function.
+ * @details This function implements a minimal @p vprintf()-like functionality
+ * with output on a @p BaseSequentialStream.
+ * The general parameters format is: %[-][width|*][.precision|*][l|L]p.
+ * The following parameter types (p) are supported:
+ * - <b>x</b> hexadecimal integer.
+ * - <b>X</b> hexadecimal long.
+ * - <b>o</b> octal integer.
+ * - <b>O</b> octal long.
+ * - <b>d</b> decimal signed integer.
+ * - <b>D</b> decimal signed long.
+ * - <b>u</b> decimal unsigned integer.
+ * - <b>U</b> decimal unsigned long.
+ * - <b>c</b> character.
+ * - <b>s</b> string.
+ * .
+ *
+ * @param[in] str pointer to a buffer
+ * @param[in] size maximum size of the buffer
+ * @param[in] fmt formatting string
+ * @param[in] ap list of parameters
+ *
+ * @api
+ */
+int chsnprintf(char *str, size_t size, const char *fmt, ...) {
+ va_list ap;
+ MemoryStream ms;
+ BaseSequentialStream *chp;
+
+ /* Memory stream object to be used as a string writer.*/
+ msObjectInit(&ms, (uint8_t *)str, size, 0);
+
+ /* Performing the print operation using the common code.*/
+ chp = (BaseSequentialStream *)&ms;
+ va_start(ap, fmt);
+ chvprintf(chp, fmt, ap);
+ va_end(ap);
+
+ /* Final zero and size return.*/
+ chSequentialStreamPut(chp, 0);
+ return ms.eos - 1;
+}
+
/** @} */
diff --git a/os/various/chprintf.h b/os/various/chprintf.h
index 306adc988..591f98130 100644
--- a/os/various/chprintf.h
+++ b/os/various/chprintf.h
@@ -38,6 +38,7 @@
extern "C" {
#endif
void chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap);
+ int chsnprintf(char *str, size_t size, const char *fmt, ...);
#ifdef __cplusplus
}
#endif
diff --git a/os/various/memstreams.h b/os/various/memstreams.h
index 3daa8ee92..ff2fc464f 100644
--- a/os/various/memstreams.h
+++ b/os/various/memstreams.h
@@ -84,7 +84,8 @@ typedef struct {
#ifdef __cplusplus
extern "C" {
#endif
- void msObjectInit(MemoryStream *msp, uint8_t *buffer, size_t size, size_t eos);
+ void msObjectInit(MemoryStream *msp, uint8_t *buffer,
+ size_t size, size_t eos);
#ifdef __cplusplus
}
#endif