diff options
Diffstat (limited to 'ChibiOS_20.3.2/os/hal/lib/streams')
-rw-r--r-- | ChibiOS_20.3.2/os/hal/lib/streams/chprintf.c | 473 | ||||
-rw-r--r-- | ChibiOS_20.3.2/os/hal/lib/streams/chprintf.h | 50 | ||||
-rw-r--r-- | ChibiOS_20.3.2/os/hal/lib/streams/memstreams.c | 114 | ||||
-rw-r--r-- | ChibiOS_20.3.2/os/hal/lib/streams/memstreams.h | 95 | ||||
-rw-r--r-- | ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.c | 93 | ||||
-rw-r--r-- | ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.h | 86 | ||||
-rw-r--r-- | ChibiOS_20.3.2/os/hal/lib/streams/streams.mk | 10 |
7 files changed, 921 insertions, 0 deletions
diff --git a/ChibiOS_20.3.2/os/hal/lib/streams/chprintf.c b/ChibiOS_20.3.2/os/hal/lib/streams/chprintf.c new file mode 100644 index 0000000..33134da --- /dev/null +++ b/ChibiOS_20.3.2/os/hal/lib/streams/chprintf.c @@ -0,0 +1,473 @@ +/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ Concepts and parts of this file have been contributed by Fabio Utzig,
+ chvprintf() added by Brent Roman.
+ */
+
+/**
+ * @file chprintf.c
+ * @brief Mini printf-like functionality.
+ *
+ * @addtogroup HAL_CHPRINTF
+ * @details Mini printf-like functionality.
+ * @{
+ */
+
+#include "hal.h"
+#include "chprintf.h"
+#include "memstreams.h"
+
+#define MAX_FILLER 11
+#define FLOAT_PRECISION 9
+
+static char *long_to_string_with_divisor(char *p,
+ long num,
+ unsigned radix,
+ long divisor) {
+ int i;
+ char *q;
+ long l, ll;
+
+ l = num;
+ if (divisor == 0) {
+ ll = num;
+ } else {
+ ll = divisor;
+ }
+
+ q = p + MAX_FILLER;
+ do {
+ i = (int)(l % radix);
+ i += '0';
+ if (i > '9') {
+ i += 'A' - '0' - 10;
+ }
+ *--q = i;
+ l /= radix;
+ } while ((ll /= radix) != 0);
+
+ i = (int)(p + MAX_FILLER - q);
+ do
+ *p++ = *q++;
+ while (--i);
+
+ return p;
+}
+
+static char *ch_ltoa(char *p, long num, unsigned radix) {
+
+ return long_to_string_with_divisor(p, num, radix, 0);
+}
+
+#if CHPRINTF_USE_FLOAT
+static const long pow10[FLOAT_PRECISION] = {
+ 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
+};
+
+static char *ftoa(char *p, double num, unsigned long precision) {
+ long l;
+
+ if ((precision == 0) || (precision > FLOAT_PRECISION)) {
+ precision = FLOAT_PRECISION;
+ }
+ precision = pow10[precision - 1];
+
+ l = (long)num;
+ p = long_to_string_with_divisor(p, l, 10, 0);
+ *p++ = '.';
+ l = (long)((num - l) * precision);
+
+ return long_to_string_with_divisor(p, l, 10, precision / 10);
+}
+#endif
+
+/**
+ * @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] chp pointer to a @p BaseSequentialStream implementing object
+ * @param[in] fmt formatting string
+ * @param[in] ap list of parameters
+ * @return The number of bytes that would have been
+ * written to @p chp if no stream error occurs
+ *
+ * @api
+ */
+int chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap) {
+ char *p, *s, c, filler;
+ int i, precision, width;
+ int n = 0;
+ bool is_long, left_align, do_sign;
+ long l;
+#if CHPRINTF_USE_FLOAT
+ float f;
+ char tmpbuf[2*MAX_FILLER + 1];
+#else
+ char tmpbuf[MAX_FILLER + 1];
+#endif
+
+ while (true) {
+ c = *fmt++;
+ if (c == 0) {
+ return n;
+ }
+
+ if (c != '%') {
+ streamPut(chp, (uint8_t)c);
+ n++;
+ continue;
+ }
+
+ p = tmpbuf;
+ s = tmpbuf;
+
+ /* Alignment mode.*/
+ left_align = false;
+ if (*fmt == '-') {
+ fmt++;
+ left_align = true;
+ }
+
+ /* Sign mode.*/
+ do_sign = false;
+ if (*fmt == '+') {
+ fmt++;
+ do_sign = true;
+ }
+
+ /* Filler mode.*/
+ filler = ' ';
+ if (*fmt == '0') {
+ fmt++;
+ filler = '0';
+ }
+
+ /* Width modifier.*/
+ if ( *fmt == '*') {
+ width = va_arg(ap, int);
+ ++fmt;
+ c = *fmt++;
+ }
+ else {
+ width = 0;
+ while (true) {
+ c = *fmt++;
+ if (c == 0) {
+ return n;
+ }
+ if (c >= '0' && c <= '9') {
+ c -= '0';
+ width = width * 10 + c;
+ }
+ else {
+ break;
+ }
+ }
+ }
+
+ /* Precision modifier.*/
+ precision = 0;
+ if (c == '.') {
+ c = *fmt++;
+ if (c == 0) {
+ return n;
+ }
+ if (c == '*') {
+ precision = va_arg(ap, int);
+ c = *fmt++;
+ }
+ else {
+ while (c >= '0' && c <= '9') {
+ c -= '0';
+ precision = precision * 10 + c;
+ c = *fmt++;
+ if (c == 0) {
+ return n;
+ }
+ }
+ }
+ }
+
+ /* Long modifier.*/
+ if (c == 'l' || c == 'L') {
+ is_long = true;
+ c = *fmt++;
+ if (c == 0) {
+ return n;
+ }
+ }
+ else {
+ is_long = (c >= 'A') && (c <= 'Z');
+ }
+
+ /* Command decoding.*/
+ switch (c) {
+ case 'c':
+ filler = ' ';
+ *p++ = va_arg(ap, int);
+ break;
+ case 's':
+ filler = ' ';
+ if ((s = va_arg(ap, char *)) == 0) {
+ s = "(null)";
+ }
+ if (precision == 0) {
+ precision = 32767;
+ }
+ for (p = s; *p && (--precision >= 0); p++)
+ ;
+ break;
+ case 'D':
+ case 'd':
+ case 'I':
+ case 'i':
+ if (is_long) {
+ l = va_arg(ap, long);
+ }
+ else {
+ l = va_arg(ap, int);
+ }
+ if (l < 0) {
+ *p++ = '-';
+ l = -l;
+ }
+ else
+ if (do_sign) {
+ *p++ = '+';
+ }
+ p = ch_ltoa(p, l, 10);
+ break;
+#if CHPRINTF_USE_FLOAT
+ case 'f':
+ f = (float) va_arg(ap, double);
+ if (f < 0) {
+ *p++ = '-';
+ f = -f;
+ }
+ else {
+ if (do_sign) {
+ *p++ = '+';
+ }
+ }
+ p = ftoa(p, f, precision);
+ break;
+#endif
+ case 'X':
+ case 'x':
+ case 'P':
+ case 'p':
+ c = 16;
+ goto unsigned_common;
+ case 'U':
+ case 'u':
+ c = 10;
+ goto unsigned_common;
+ case 'O':
+ case 'o':
+ c = 8;
+unsigned_common:
+ if (is_long) {
+ l = va_arg(ap, unsigned long);
+ }
+ else {
+ l = va_arg(ap, unsigned int);
+ }
+ p = ch_ltoa(p, l, c);
+ break;
+ default:
+ *p++ = c;
+ break;
+ }
+ i = (int)(p - s);
+ if ((width -= i) < 0) {
+ width = 0;
+ }
+ if (left_align == false) {
+ width = -width;
+ }
+ if (width < 0) {
+ if (*s == '-' && filler == '0') {
+ streamPut(chp, (uint8_t)*s++);
+ n++;
+ i--;
+ }
+ do {
+ streamPut(chp, (uint8_t)filler);
+ n++;
+ } while (++width != 0);
+ }
+ while (--i >= 0) {
+ streamPut(chp, (uint8_t)*s++);
+ n++;
+ }
+
+ while (width) {
+ streamPut(chp, (uint8_t)filler);
+ n++;
+ width--;
+ }
+ }
+}
+
+/**
+ * @brief System formatted output function.
+ * @details This function implements a minimal @p printf() 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] chp pointer to a @p BaseSequentialStream implementing object
+ * @param[in] fmt formatting string
+ * @return The number of bytes that would have been
+ * written to @p chp if no stream error occurs
+ *
+ * @api
+ */
+int chprintf(BaseSequentialStream *chp, const char *fmt, ...) {
+ va_list ap;
+ int formatted_bytes;
+
+ va_start(ap, fmt);
+ formatted_bytes = chvprintf(chp, fmt, ap);
+ va_end(ap);
+
+ return formatted_bytes;
+}
+
+/**
+ * @brief System formatted output function.
+ * @details This function implements a minimal @p snprintf()-like functionality.
+ * 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.
+ * .
+ * @post @p str is NUL-terminated, unless @p size is 0.
+ *
+ * @param[in] str pointer to a buffer
+ * @param[in] size maximum size of the buffer
+ * @param[in] fmt formatting string
+ * @return The number of characters (excluding the
+ * terminating NUL byte) that would have been
+ * stored in @p str if there was room.
+ *
+ * @api
+ */
+int chsnprintf(char *str, size_t size, const char *fmt, ...) {
+ va_list ap;
+ int retval;
+
+ /* Performing the print operation.*/
+ va_start(ap, fmt);
+ retval = chvsnprintf(str, size, fmt, ap);
+ va_end(ap);
+
+ /* Return number of bytes that would have been written.*/
+ return retval;
+}
+
+/**
+ * @brief System formatted output function.
+ * @details This function implements a minimal @p vsnprintf()-like functionality.
+ * 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.
+ * .
+ * @post @p str is NUL-terminated, unless @p size is 0.
+ *
+ * @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
+ * @return The number of characters (excluding the
+ * terminating NUL byte) that would have been
+ * stored in @p str if there was room.
+ *
+ * @api
+ */
+int chvsnprintf(char *str, size_t size, const char *fmt, va_list ap) {
+ MemoryStream ms;
+ BaseSequentialStream *chp;
+ size_t size_wo_nul;
+ int retval;
+
+ if (size > 0)
+ size_wo_nul = size - 1;
+ else
+ size_wo_nul = 0;
+
+ /* Memory stream object to be used as a string writer, reserving one
+ byte for the final zero.*/
+ msObjectInit(&ms, (uint8_t *)str, size_wo_nul, 0);
+
+ /* Performing the print operation using the common code.*/
+ chp = (BaseSequentialStream *)(void *)&ms;
+ retval = chvprintf(chp, fmt, ap);
+
+ /* Terminate with a zero, unless size==0.*/
+ if (ms.eos < size) {
+ str[ms.eos] = 0;
+ }
+
+ /* Return number of bytes that would have been written.*/
+ return retval;
+}
+
+/** @} */
diff --git a/ChibiOS_20.3.2/os/hal/lib/streams/chprintf.h b/ChibiOS_20.3.2/os/hal/lib/streams/chprintf.h new file mode 100644 index 0000000..9eb3afd --- /dev/null +++ b/ChibiOS_20.3.2/os/hal/lib/streams/chprintf.h @@ -0,0 +1,50 @@ +/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file chprintf.h
+ * @brief Mini printf-like functionality.
+ *
+ * @addtogroup HAL_CHPRINTF
+ * @{
+ */
+
+#ifndef CHPRINTF_H
+#define CHPRINTF_H
+
+#include <stdarg.h>
+
+/**
+ * @brief Float type support.
+ */
+#if !defined(CHPRINTF_USE_FLOAT) || defined(__DOXYGEN__)
+#define CHPRINTF_USE_FLOAT FALSE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ int chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap);
+ int chprintf(BaseSequentialStream *chp, const char *fmt, ...);
+ int chsnprintf(char *str, size_t size, const char *fmt, ...);
+ int chvsnprintf(char *str, size_t size, const char *fmt, va_list ap);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CHPRINTF_H */
+
+/** @} */
diff --git a/ChibiOS_20.3.2/os/hal/lib/streams/memstreams.c b/ChibiOS_20.3.2/os/hal/lib/streams/memstreams.c new file mode 100644 index 0000000..98b3fe6 --- /dev/null +++ b/ChibiOS_20.3.2/os/hal/lib/streams/memstreams.c @@ -0,0 +1,114 @@ +/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file memstreams.c
+ * @brief Memory streams code.
+ *
+ * @addtogroup HAL_MEMORY_STREAMS
+ * @details Memory buffers handled as streams.
+ * @{
+ */
+
+#include <string.h>
+
+#include "hal.h"
+#include "memstreams.h"
+
+/*===========================================================================*/
+/* Driver local definitions. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver exported variables. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver local variables. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver local functions. */
+/*===========================================================================*/
+
+static size_t _writes(void *ip, const uint8_t *bp, size_t n) {
+ MemoryStream *msp = ip;
+
+ if (msp->size - msp->eos < n)
+ n = msp->size - msp->eos;
+ memcpy(msp->buffer + msp->eos, bp, n);
+ msp->eos += n;
+ return n;
+}
+
+static size_t _reads(void *ip, uint8_t *bp, size_t n) {
+ MemoryStream *msp = ip;
+
+ if (msp->eos - msp->offset < n)
+ n = msp->eos - msp->offset;
+ memcpy(bp, msp->buffer + msp->offset, n);
+ msp->offset += n;
+ return n;
+}
+
+static msg_t _put(void *ip, uint8_t b) {
+ MemoryStream *msp = ip;
+
+ if (msp->size - msp->eos <= 0)
+ return MSG_RESET;
+ *(msp->buffer + msp->eos) = b;
+ msp->eos += 1;
+ return MSG_OK;
+}
+
+static msg_t _get(void *ip) {
+ uint8_t b;
+ MemoryStream *msp = ip;
+
+ if (msp->eos - msp->offset <= 0)
+ return MSG_RESET;
+ b = *(msp->buffer + msp->offset);
+ msp->offset += 1;
+ return b;
+}
+
+static const struct MemStreamVMT vmt = {(size_t)0, _writes, _reads, _put, _get};
+
+/*===========================================================================*/
+/* Driver exported functions. */
+/*===========================================================================*/
+
+/**
+ * @brief Memory stream object initialization.
+ *
+ * @param[out] msp pointer to the @p MemoryStream object to be initialized
+ * @param[in] buffer pointer to the memory buffer for the memory stream
+ * @param[in] size total size of the memory stream buffer
+ * @param[in] eos initial End Of Stream offset. Normally you need to
+ * put this to zero for RAM buffers or equal to @p size
+ * for ROM streams.
+ */
+void msObjectInit(MemoryStream *msp, uint8_t *buffer,
+ size_t size, size_t eos) {
+
+ msp->vmt = &vmt;
+ msp->buffer = buffer;
+ msp->size = size;
+ msp->eos = eos;
+ msp->offset = 0;
+}
+
+/** @} */
diff --git a/ChibiOS_20.3.2/os/hal/lib/streams/memstreams.h b/ChibiOS_20.3.2/os/hal/lib/streams/memstreams.h new file mode 100644 index 0000000..0c2236b --- /dev/null +++ b/ChibiOS_20.3.2/os/hal/lib/streams/memstreams.h @@ -0,0 +1,95 @@ +/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file memstreams.h
+ * @brief Memory streams structures and macros.
+
+ * @addtogroup HAL_MEMORY_STREAMS
+ * @{
+ */
+
+#ifndef MEMSTREAMS_H
+#define MEMSTREAMS_H
+
+/*===========================================================================*/
+/* Driver constants. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver pre-compile time settings. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Derived constants and error checks. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver data structures and types. */
+/*===========================================================================*/
+
+/**
+ * @brief @p MemStream specific data.
+ */
+#define _memory_stream_data \
+ _base_sequential_stream_data \
+ /* Pointer to the stream buffer.*/ \
+ uint8_t *buffer; \
+ /* Size of the stream.*/ \
+ size_t size; \
+ /* Current end of stream.*/ \
+ size_t eos; \
+ /* Current read offset.*/ \
+ size_t offset;
+
+/**
+ * @brief @p MemStream virtual methods table.
+ */
+struct MemStreamVMT {
+ _base_sequential_stream_methods
+};
+
+/**
+ * @extends BaseSequentialStream
+ *
+ * @brief Memory stream object.
+ */
+typedef struct {
+ /** @brief Virtual Methods Table.*/
+ const struct MemStreamVMT *vmt;
+ _memory_stream_data
+} MemoryStream;
+
+/*===========================================================================*/
+/* Driver macros. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void msObjectInit(MemoryStream *msp, uint8_t *buffer,
+ size_t size, size_t eos);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MEMSTREAMS_H */
+
+/** @} */
diff --git a/ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.c b/ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.c new file mode 100644 index 0000000..dcfd424 --- /dev/null +++ b/ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.c @@ -0,0 +1,93 @@ +/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file nullstreams.c
+ * @brief Null streams code.
+ *
+ * @addtogroup HAL_NULL_STREAMS
+ * @details A null streams.
+ * @{
+ */
+
+#include "hal.h"
+#include "nullstreams.h"
+
+/*===========================================================================*/
+/* Driver local definitions. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver exported variables. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver local variables. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver local functions. */
+/*===========================================================================*/
+
+static size_t writes(void *ip, const uint8_t *bp, size_t n) {
+
+ (void)ip;
+ (void)bp;
+
+ return n;
+}
+
+static size_t reads(void *ip, uint8_t *bp, size_t n) {
+
+ (void)ip;
+ (void)bp;
+ (void)n;
+
+ return 0;
+}
+
+static msg_t put(void *ip, uint8_t b) {
+
+ (void)ip;
+ (void)b;
+
+ return MSG_OK;
+}
+
+static msg_t get(void *ip) {
+
+ (void)ip;
+
+ return 4;
+}
+
+static const struct NullStreamVMT vmt = {(size_t)0, writes, reads, put, get};
+
+/*===========================================================================*/
+/* Driver exported functions. */
+/*===========================================================================*/
+
+/**
+ * @brief Null stream object initialization.
+ *
+ * @param[out] nsp pointer to the @p NullStream object to be initialized
+ */
+void nullObjectInit(NullStream *nsp) {
+
+ nsp->vmt = &vmt;
+}
+
+/** @} */
diff --git a/ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.h b/ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.h new file mode 100644 index 0000000..c874815 --- /dev/null +++ b/ChibiOS_20.3.2/os/hal/lib/streams/nullstreams.h @@ -0,0 +1,86 @@ +/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file nullstreams.h
+ * @brief Null streams structures and macros.
+
+ * @addtogroup HAL_NULL_STREAMS
+ * @{
+ */
+
+#ifndef NULLSTREAMS_H
+#define NULLSTREAMS_H
+
+/*===========================================================================*/
+/* Driver constants. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver pre-compile time settings. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Derived constants and error checks. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Driver data structures and types. */
+/*===========================================================================*/
+
+/**
+ * @brief @p NullStream specific data.
+ */
+#define _null_stream_data \
+ _base_sequential_stream_data
+
+/**
+ * @brief @p NullStream virtual methods table.
+ */
+struct NullStreamVMT {
+ _base_sequential_stream_methods
+};
+
+/**
+ * @extends BaseSequentialStream
+ *
+ * @brief Null stream object.
+ */
+typedef struct {
+ /** @brief Virtual Methods Table.*/
+ const struct NullStreamVMT *vmt;
+ _null_stream_data
+} NullStream;
+
+/*===========================================================================*/
+/* Driver macros. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void nullObjectInit(NullStream *nsp);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NULLSTREAMS_H */
+
+/** @} */
diff --git a/ChibiOS_20.3.2/os/hal/lib/streams/streams.mk b/ChibiOS_20.3.2/os/hal/lib/streams/streams.mk new file mode 100644 index 0000000..9c746e9 --- /dev/null +++ b/ChibiOS_20.3.2/os/hal/lib/streams/streams.mk @@ -0,0 +1,10 @@ +# RT Shell files.
+STREAMSSRC = $(CHIBIOS)/os/hal/lib/streams/chprintf.c \
+ $(CHIBIOS)/os/hal/lib/streams/memstreams.c \
+ $(CHIBIOS)/os/hal/lib/streams/nullstreams.c
+
+STREAMSINC = $(CHIBIOS)/os/hal/lib/streams
+
+# Shared variables
+ALLCSRC += $(STREAMSSRC)
+ALLINC += $(STREAMSINC)
\ No newline at end of file |