Zephyr API 3.6.99
|
Topics | |
Package convert flags | |
Package flags | |
Macros | |
#define | CBPRINTF_PACKAGE_ALIGNMENT |
Required alignment of the buffer used for packaging. | |
#define | CBPRINTF_MUST_RUNTIME_PACKAGE(flags, ...) |
Determine if string must be packaged in run time. | |
#define | CBPRINTF_STATIC_PACKAGE(packaged, inlen, outlen, align_offset, flags, ...) |
Statically package string. | |
Typedefs | |
typedef int(* | cbprintf_cb) () |
Signature for a cbprintf callback function. | |
typedef int(* | cbprintf_cb_local) (int c, void *ctx) |
typedef int(* | cbprintf_convert_cb) (const void *buf, size_t len, void *ctx) |
Signature for a cbprintf multibyte callback function. | |
typedef int(* | cbvprintf_external_formatter_func) (cbprintf_cb out, void *ctx, const char *fmt, va_list ap) |
Signature for a external formatter function identical to cbvprintf. | |
Functions | |
int | cbprintf_package (void *packaged, size_t len, uint32_t flags, const char *format,...) |
Capture state required to output formatted data later. | |
int | cbvprintf_package (void *packaged, size_t len, uint32_t flags, const char *format, va_list ap) |
Capture state required to output formatted data later. | |
int | cbprintf_package_convert (void *in_packaged, size_t in_len, cbprintf_convert_cb cb, void *ctx, uint32_t flags, uint16_t *strl, size_t strl_len) |
Convert a package. | |
static int | cbprintf_package_copy (void *in_packaged, size_t in_len, void *packaged, size_t len, uint32_t flags, uint16_t *strl, size_t strl_len) |
Copy package with optional appending of strings. | |
static int | cbprintf_fsc_package (void *in_packaged, size_t in_len, void *packaged, size_t len) |
Convert package to fully self-contained (fsc) package. | |
int | cbpprintf_external (cbprintf_cb out, cbvprintf_external_formatter_func formatter, void *ctx, void *packaged) |
Generate the output for a previously captured format operation using an external formatter. | |
int | cbprintf (cbprintf_cb out, void *ctx, const char *format,...) |
*printf-like output through a callback. | |
static int | cbvprintf (cbprintf_cb out, void *ctx, const char *format, va_list ap) |
varargs-aware *printf-like output through a callback. | |
static int | cbvprintf_tagged_args (cbprintf_cb out, void *ctx, const char *format, va_list ap) |
varargs-aware *printf-like output through a callback with tagged arguments. | |
static int | cbpprintf (cbprintf_cb out, void *ctx, void *packaged) |
Generate the output for a previously captured format operation. | |
int | fprintfcb (FILE *stream, const char *format,...) |
fprintf using Zephyrs cbprintf infrastructure. | |
int | vfprintfcb (FILE *stream, const char *format, va_list ap) |
vfprintf using Zephyrs cbprintf infrastructure. | |
int | printfcb (const char *format,...) |
printf using Zephyrs cbprintf infrastructure. | |
int | vprintfcb (const char *format, va_list ap) |
vprintf using Zephyrs cbprintf infrastructure. | |
int | snprintfcb (char *str, size_t size, const char *format,...) |
snprintf using Zephyrs cbprintf infrastructure. | |
int | vsnprintfcb (char *str, size_t size, const char *format, va_list ap) |
vsnprintf using Zephyrs cbprintf infrastructure. | |
#define CBPRINTF_MUST_RUNTIME_PACKAGE | ( | flags, | |
... ) |
#include <zephyr/sys/cbprintf.h>
Determine if string must be packaged in run time.
Static packaging can be applied if size of the package can be determined at compile time. In general, package size can be determined at compile time if there are no string arguments which might be copied into package body if they are considered transient.
... | String with arguments. |
flags | option flags. See Package flags. |
1 | if string must be packaged in run time. |
0 | string can be statically packaged. |
#define CBPRINTF_PACKAGE_ALIGNMENT |
#include <zephyr/sys/cbprintf.h>
Required alignment of the buffer used for packaging.
#define CBPRINTF_STATIC_PACKAGE | ( | packaged, | |
inlen, | |||
outlen, | |||
align_offset, | |||
flags, | |||
... ) |
#include <zephyr/sys/cbprintf.h>
Statically package string.
Build string package from formatted string. It assumes that formatted string is in the read only memory.
If _Generic is not supported then runtime packaging is performed.
packaged | pointer to where the packaged data can be stored. Pass a null pointer to skip packaging but still calculate the total space required. The data stored here is relocatable, that is it can be moved to another contiguous block of memory. It must be aligned to the size of the longest argument. It is recommended to use CBPRINTF_PACKAGE_ALIGNMENT for alignment. |
inlen | set to the number of bytes available at packaged . If packaged is NULL the value is ignored. |
outlen | variable updated to the number of bytes required to completely store the packed information. If input buffer was too small it is set to -ENOSPC. |
align_offset | input buffer alignment offset in bytes. Where offset 0 means that buffer is aligned to CBPRINTF_PACKAGE_ALIGNMENT. Xtensa requires that packaged is aligned to CBPRINTF_PACKAGE_ALIGNMENT so it must be multiply of CBPRINTF_PACKAGE_ALIGNMENT or 0. |
flags | option flags. See Package flags. |
... | formatted string with arguments. Format string must be constant. |
typedef int(* cbprintf_cb) () |
#include <zephyr/sys/cbprintf.h>
Signature for a cbprintf callback function.
This function expects two parameters:
c
a character to output. The output behavior should be as if this was cast to an unsigned char.ctx
a pointer to an object that provides context for the output operation.The declaration does not specify the parameter types. This allows a function like fputc
to be used without requiring all context pointers to be to a FILE
object.
c
cast to an unsigned char then back to int, or a negative error code that will be returned from cbprintf(). typedef int(* cbprintf_cb_local) (int c, void *ctx) |
#include <zephyr/sys/cbprintf.h>
typedef int(* cbprintf_convert_cb) (const void *buf, size_t len, void *ctx) |
#include <zephyr/sys/cbprintf.h>
Signature for a cbprintf multibyte callback function.
buf | data. |
len | data length. |
ctx | a pointer to an object that provides context for the operation. |
return Amount of copied data or negative error code.
typedef int(* cbvprintf_external_formatter_func) (cbprintf_cb out, void *ctx, const char *fmt, va_list ap) |
#include <zephyr/sys/cbprintf.h>
Signature for a external formatter function identical to cbvprintf.
This function expects the following parameters:
out | the function used to emit each generated character. |
ctx | a pointer to an object that provides context for the external formatter. |
fmt | a standard ISO C format string with characters and conversion specifications. |
ap | captured stack arguments corresponding to the conversion specifications found within fmt . |
|
inlinestatic |
#include <zephyr/sys/cbprintf.h>
Generate the output for a previously captured format operation.
out | the function used to emit each generated character. |
ctx | context provided when invoking out |
packaged | the data required to generate the formatted output, as captured by cbprintf_package() or cbvprintf_package(). The alignment requirement on this data is the same as when it was initially created. |
packaged
will be modified in a non-destructive way, meaning that it could still be reused with this function again.out
. int cbpprintf_external | ( | cbprintf_cb | out, |
cbvprintf_external_formatter_func | formatter, | ||
void * | ctx, | ||
void * | packaged ) |
#include <zephyr/sys/cbprintf.h>
Generate the output for a previously captured format operation using an external formatter.
out | the function used to emit each generated character. |
formatter | external formatter function. |
ctx | a pointer to an object that provides context for the external formatter. |
packaged | the data required to generate the formatted output, as captured by cbprintf_package() or cbvprintf_package(). The alignment requirement on this data is the same as when it was initially created. |
packaged
will be modified in a non-destructive way, meaning that it could still be reused with this function again.int cbprintf | ( | cbprintf_cb | out, |
void * | ctx, | ||
const char * | format, | ||
... ) |
#include <zephyr/sys/cbprintf.h>
*printf-like output through a callback.
This is essentially printf() except the output is generated character-by-character using the provided out
function. This allows formatting text of unbounded length without incurring the cost of a temporary buffer.
All formatting specifiers of C99 are recognized, and most are supported if the functionality is enabled.
CONFIG_CBPRINTF_NANOis selected.
out | the function used to emit each generated character. |
ctx | context provided when invoking out |
format | a standard ISO C format string with characters and conversion specifications. |
... | arguments corresponding to the conversion specifications found within format . |
out
.
|
inlinestatic |
#include <zephyr/sys/cbprintf.h>
Convert package to fully self-contained (fsc) package.
Package may not be self contain since strings by default are stored by address. Package may be partially self-contained when transient (not read only) strings are appended to the package. Such package can be decoded only when there is an access to read-only strings.
Fully self-contained has (fsc) contains all strings used in the package. A package can be converted to fsc package if it was create with CBPRINTF_PACKAGE_ADD_RO_STR_POS flag. Such package will contain necessary data to find read only strings in the package and copy them into the package body.
in_packaged | pointer to original package created with CBPRINTF_PACKAGE_ADD_RO_STR_POS. |
in_len | in_packaged length. |
packaged | pointer to location where fully self-contained version of the input package will be written. Pass a null pointer to calculate space required. |
len | must be set to the number of bytes available at packaged . Not used if packaged is null. |
nonegative | the number of bytes successfully stored at packaged . This will not exceed len . If packaged is null, calculated length. |
-ENOSPC | if packaged was not null and the space required to store exceed len . |
-EINVAL | if in_packaged is null. |
#include <zephyr/sys/cbprintf.h>
Capture state required to output formatted data later.
Like cbprintf() but instead of processing the arguments and emitting the formatted results immediately all arguments are captured so this can be done in a different context, e.g. when the output function can block.
In addition to the values extracted from arguments this will ensure that copies are made of the necessary portions of any string parameters that are not confirmed to be stored in read-only memory (hence assumed to be safe to refer to directly later).
packaged | pointer to where the packaged data can be stored. Pass a null pointer to store nothing but still calculate the total space required. The data stored here is relocatable, that is it can be moved to another contiguous block of memory. However, under condition that alignment is maintained. It must be aligned to at least the size of a pointer. |
len | this must be set to the number of bytes available at packaged if it is not null. If packaged is null then it indicates hypothetical buffer alignment offset in bytes compared to CBPRINTF_PACKAGE_ALIGNMENT alignment. Buffer alignment offset impacts returned size of the package. Xtensa requires that buffer is always aligned to CBPRINTF_PACKAGE_ALIGNMENT so it must be multiply of CBPRINTF_PACKAGE_ALIGNMENT or 0 when packaged is null. |
flags | option flags. See Package flags. |
format | a standard ISO C format string with characters and conversion specifications. |
... | arguments corresponding to the conversion specifications found within format . |
nonegative | the number of bytes successfully stored at packaged . This will not exceed len . |
-EINVAL | if format is not acceptable |
-EFAULT | if packaged alignment is not acceptable |
-ENOSPC | if packaged was not null and the space required to store exceed len . |
int cbprintf_package_convert | ( | void * | in_packaged, |
size_t | in_len, | ||
cbprintf_convert_cb | cb, | ||
void * | ctx, | ||
uint32_t | flags, | ||
uint16_t * | strl, | ||
size_t | strl_len ) |
#include <zephyr/sys/cbprintf.h>
Convert a package.
Converting may include appending strings used in the package to the package body. If input package was created with CBPRINTF_PACKAGE_ADD_RO_STR_POS or CBPRINTF_PACKAGE_ADD_RW_STR_POS, it contains information where strings are located within the package. This information can be used to copy strings during the conversion.
cb
is called with portions of the output package. At the end of the conversion cb
is called with null buffer.
in_packaged | Input package. | |
in_len | Input package length. If 0 package length will be retrieved from the in_packaged | |
cb | callback called with portions of the converted package. If null only length of the output package is calculated. | |
ctx | Context provided to the cb . | |
flags | Flags. See Package convert flags. | |
[in,out] | strl | if packaged is null, it is a pointer to the array where strl_len first string lengths will is stored. If packaged is not null, it contains lengths of first strl_len strings. It can be used to optimize copying so that string length is calculated only once (at length calculation phase when packaged is null.) |
strl_len | Number of elements in strl array. |
Positive | output package size. |
-ENOSPC | if packaged was not null and the space required to store exceed len . |
|
inlinestatic |
#include <zephyr/sys/cbprintf.h>
Copy package with optional appending of strings.
cbprintf_package_convert is used to convert and store converted package in the new location.
in_packaged | Input package. | |
in_len | Input package length. If 0 package length will be retrieved from the in_packaged | |
[out] | packaged | Output package. If null only length of the output package is calculated. |
len | Available space in the location pointed by packaged . Not used when packaged is null. | |
flags | Flags. See Package convert flags. | |
[in,out] | strl | if packaged is null, it is a pointer to the array where strl_len first string lengths will is stored. If packaged is not null, it contains lengths of first strl_len strings. It can be used to optimize copying so that string length is calculated only once (at length calculation phase when packaged is null.) |
strl_len | Number of elements in strl array. |
Positive | Output package size. |
-ENOSPC | if packaged was not null and the space required to store exceed len . |
|
inlinestatic |
#include <zephyr/sys/cbprintf.h>
varargs-aware *printf-like output through a callback.
This is essentially vsprintf() except the output is generated character-by-character using the provided out
function. This allows formatting text of unbounded length without incurring the cost of a temporary buffer.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
out | the function used to emit each generated character. |
ctx | context provided when invoking out |
format | a standard ISO C format string with characters and conversion specifications. |
ap | a reference to the values to be converted. |
out
. int cbvprintf_package | ( | void * | packaged, |
size_t | len, | ||
uint32_t | flags, | ||
const char * | format, | ||
va_list | ap ) |
#include <zephyr/sys/cbprintf.h>
Capture state required to output formatted data later.
Like cbprintf() but instead of processing the arguments and emitting the formatted results immediately all arguments are captured so this can be done in a different context, e.g. when the output function can block.
In addition to the values extracted from arguments this will ensure that copies are made of the necessary portions of any string parameters that are not confirmed to be stored in read-only memory (hence assumed to be safe to refer to directly later).
packaged | pointer to where the packaged data can be stored. Pass a null pointer to store nothing but still calculate the total space required. The data stored here is relocatable, that is it can be moved to another contiguous block of memory. The pointer must be aligned to a multiple of the largest element in the argument list. |
len | this must be set to the number of bytes available at packaged . Ignored if packaged is NULL. |
flags | option flags. See Package flags. |
format | a standard ISO C format string with characters and conversion specifications. |
ap | captured stack arguments corresponding to the conversion specifications found within format . |
nonegative | the number of bytes successfully stored at packaged . This will not exceed len . |
-EINVAL | if format is not acceptable |
-ENOSPC | if packaged was not null and the space required to store exceed len . |
|
inlinestatic |
#include <zephyr/sys/cbprintf.h>
varargs-aware *printf-like output through a callback with tagged arguments.
This is essentially vsprintf() except the output is generated character-by-character using the provided out
function. This allows formatting text of unbounded length without incurring the cost of a temporary buffer.
Note that the argument list ap
are tagged.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
out | the function used to emit each generated character. |
ctx | context provided when invoking out |
format | a standard ISO C format string with characters and conversion specifications. |
ap | a reference to the values to be converted. |
out
. int fprintfcb | ( | FILE * | stream, |
const char * | format, | ||
... ) |
#include <zephyr/sys/cbprintf.h>
fprintf using Zephyrs cbprintf infrastructure.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
stream | the stream to which the output should be written. |
format | a standard ISO C format string with characters and conversion specifications. |
... | arguments corresponding to the conversion specifications found within format . |
return The number of characters printed.
int printfcb | ( | const char * | format, |
... ) |
#include <zephyr/sys/cbprintf.h>
printf using Zephyrs cbprintf infrastructure.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
format | a standard ISO C format string with characters and conversion specifications. |
... | arguments corresponding to the conversion specifications found within format . |
int snprintfcb | ( | char * | str, |
size_t | size, | ||
const char * | format, | ||
... ) |
#include <zephyr/sys/cbprintf.h>
snprintf using Zephyrs cbprintf infrastructure.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
str | where the formatted content should be written |
size | maximum number of chaacters for the formatted output, including the terminating null byte. |
format | a standard ISO C format string with characters and conversion specifications. |
... | arguments corresponding to the conversion specifications found within format . |
str
, excluding the terminating null byte. This is greater than the number actually written if size
is too small. int vfprintfcb | ( | FILE * | stream, |
const char * | format, | ||
va_list | ap ) |
#include <zephyr/sys/cbprintf.h>
vfprintf using Zephyrs cbprintf infrastructure.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
stream | the stream to which the output should be written. |
format | a standard ISO C format string with characters and conversion specifications. |
ap | a reference to the values to be converted. |
int vprintfcb | ( | const char * | format, |
va_list | ap ) |
#include <zephyr/sys/cbprintf.h>
vprintf using Zephyrs cbprintf infrastructure.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
format | a standard ISO C format string with characters and conversion specifications. |
ap | a reference to the values to be converted. |
int vsnprintfcb | ( | char * | str, |
size_t | size, | ||
const char * | format, | ||
va_list | ap ) |
#include <zephyr/sys/cbprintf.h>
vsnprintf using Zephyrs cbprintf infrastructure.
CONFIG_CBPRINTF_LIBC_SUBSTSis selected.
CONFIG_CBPRINTF_NANOis selected.
str | where the formatted content should be written |
size | maximum number of chaacters for the formatted output, including the terminating null byte. |
format | a standard ISO C format string with characters and conversion specifications. |
ap | a reference to the values to be converted. |
str
, excluding the terminating null byte. This is greater than the number actually written if size
is too small.