# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "Utility Library"

config JSON_LIBRARY
	bool "Build JSON library"
	help
	  Build a minimal JSON parsing/encoding library. Used by sample
	  applications such as the NATS client.

config JSON_LIBRARY_FP_SUPPORT
	bool "Floating point support in JSON library"
	depends on JSON_LIBRARY
	select CBPRINTF_FP_SUPPORT
	select REQUIRES_FULL_LIBC
	help
	  Build the JSON library with support for floating point types.

	  Requires a libc implementation with support for floating point
	  functions: strtof(), strtod(), isnan() and isinf().

config RING_BUFFER
	bool "Ring buffers"
	help
	  Provide highly efficient ring buffer management for arbitrary data.
	  Some facilities such as kernel pipes are built on top of this.
	  May be used directly e.g. when the pipe overhead is unnecessary.

config RING_BUFFER_LARGE
	bool "Allow large ring buffer sizes"
	depends on RING_BUFFER
	help
	  Increase maximum buffer size from 32KB to 2GB. When this is enabled,
	  all struct ring_buf instances become 12 bytes bigger.

config NOTIFY
	bool "Asynchronous Notifications"
	help
	  Use this API to support async transactions.

config BASE64
	bool "Base64 encoding and decoding"
	help
	  Enable base64 encoding and decoding functionality

config ONOFF
	bool "On-Off Manager"
	select NOTIFY
	help
	  An on-off manager supports an arbitrary number of clients of a
	  service which has a binary state.  Example applications are power
	  rails, clocks, and binary device power management.

config WINSTREAM
	bool "Lockless shared memory window byte stream"
	help
	  Winstream is a byte stream IPC for use in shared memory
	  "windows", generally for transmit to non-Zephyr contexts that
	  can't share Zephyr APIs or data structures.

if WINSTREAM
config WINSTREAM_STDLIB_MEMCOPY
	bool "Use standard memcpy() in winstream"
	help
	  The sys_winstream utility is sometimes used in early boot
	  environments before the standard library is usable.  By
	  default it uses a simple internal bytewise memcpy().  Set
	  this to use the one from the standard library.
endif

config UTF8
	bool "UTF-8 string operation supported"
	help
	  Enable the utf8 API. The API implements functions to specifically
	  handle UTF-8 encoded strings.

config COBS
	bool "Consistent overhead byte stuffing"
	select NET_BUF
	help
	  Enable consistent overhead byte stuffing

endmenu
