blob: 1772d719d96d6521c94b247960ea1352a38a1ebd [file] [log] [blame]
/*
* Copyright (c) 2023, Meta
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief Public APIs for the Device Multiplexer driver
*/
#ifndef INCLUDE_ZEPHYR_DRIVERS_MISC_DEVMUX_H_
#define INCLUDE_ZEPHYR_DRIVERS_MISC_DEVMUX_H_
#include <stdint.h>
#include <zephyr/device.h>
#include <zephyr/kernel.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Devmux Driver APIs
* @defgroup demux_interface Devmux Driver APIs
* @ingroup misc_interfaces
*
* @details
* Devmux operates as a device multiplexer, forwarding the characteristics of
* the selected device.
*
* ```
* +----------+ +----------+
* | devmux | | devmux |
* | | | |
* dev0 | | dev0 | |
* +----------> \ | +----------> |
* | \ | | |
* dev1 | \ | dev0 dev1 | | dev2
* +----------> O +----------> +----------> O +---------->
* | | | / |
* dev2 | | dev2 | / |
* +----------> | +----------> / |
* | | | |
* | | | |
* | | | |
* +-----^----+ +-----^----+
* | |
* select == 0 | select == 2 |
* +--------------+ +---------------+
* ```
* @{
*/
/**
* @brief Get the current selection of a devmux device.
*
* Return the index of the currently selected device.
*
* @param dev the devmux device
* @return The index (>= 0) of the currently active multiplexed device on success
* @retval -EINVAL If @p dev is invalid
*/
__syscall ssize_t devmux_select_get(const struct device *dev);
/**
* @brief Set the selection of a devmux device.
*
* Select the device at @p index.
*
* @param[in] dev the devmux device
* @param index the index representing the desired selection
* @retval 0 On success
* @retval -EINVAL If @p dev is invalid
* @retval -ENODEV If the multiplexed device at @p index is not ready
*/
__syscall int devmux_select_set(struct device *dev, size_t index);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#include <syscalls/devmux.h>
#endif /* INCLUDE_ZEPHYR_DRIVERS_MISC_DEVMUX_H_ */