LCOV - code coverage report
Current view: top level - zephyr/drivers - i2c_emul.h Hit Total Coverage
Test: new.info Lines: 7 11 63.6 %
Date: 2024-12-21 18:13:37

          Line data    Source code
       1           1 : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Public APIs for the I2C emulation drivers.
       5             :  */
       6             : 
       7             : /*
       8             :  * Copyright 2020 Google LLC
       9             :  * Copyright (c) 2020 Nordic Semiconductor ASA
      10             :  *
      11             :  * SPDX-License-Identifier: Apache-2.0
      12             :  */
      13             : #ifndef ZEPHYR_INCLUDE_DRIVERS_I2C_I2C_EMUL_H_
      14             : #define ZEPHYR_INCLUDE_DRIVERS_I2C_I2C_EMUL_H_
      15             : 
      16             : #include <zephyr/device.h>
      17             : #include <zephyr/drivers/emul.h>
      18             : #include <zephyr/drivers/i2c.h>
      19             : #include <zephyr/sys/slist.h>
      20             : #include <zephyr/types.h>
      21             : 
      22             : /**
      23             :  * @brief I2C Emulation Interface
      24             :  * @defgroup i2c_emul_interface I2C Emulation Interface
      25             :  * @ingroup io_emulators
      26             :  * @{
      27             :  */
      28             : 
      29             : #ifdef __cplusplus
      30             : extern "C" {
      31             : #endif
      32             : 
      33             : struct i2c_msg;
      34             : struct i2c_emul_api;
      35             : 
      36             : /** Node in a linked list of emulators for I2C devices */
      37           1 : struct i2c_emul {
      38           0 :         sys_snode_t node;
      39             : 
      40             :         /** Target emulator - REQUIRED for all emulated bus nodes of any type */
      41           1 :         const struct emul *target;
      42             : 
      43             :         /* API provided for this device */
      44           0 :         const struct i2c_emul_api *api;
      45             : 
      46             :         /**
      47             :          * A mock API that if not NULL will take precedence over the actual API. If set, a return
      48             :          * value of -ENOSYS will revert back to the default api.
      49             :          */
      50           1 :         struct i2c_emul_api *mock_api;
      51             : 
      52             :         /* I2C address of the emulated device */
      53           0 :         uint16_t addr;
      54             : };
      55             : 
      56             : /**
      57             :  * Passes I2C messages to the emulator. The emulator updates the data with what
      58             :  * was read back.
      59             :  *
      60             :  * @param target The device Emulator instance.
      61             :  * @param msgs Array of messages to transfer. For 'read' messages, this function
      62             :  *      updates the 'buf' member with the data that was read.
      63             :  * @param num_msgs Number of messages to transfer.
      64             :  * @param addr Address of the I2C target device.
      65             :  *
      66             :  * @retval 0 If successful.
      67             :  * @retval -EIO General input / output error.
      68             :  */
      69           1 : typedef int (*i2c_emul_transfer_t)(const struct emul *target, struct i2c_msg *msgs, int num_msgs,
      70             :                                    int addr);
      71             : 
      72             : /**
      73             :  * Register an emulated device on the controller
      74             :  *
      75             :  * @param dev Device that will use the emulator
      76             :  * @param emul I2C emulator to use
      77             :  * @return 0 indicating success (always)
      78             :  */
      79           1 : int i2c_emul_register(const struct device *dev, struct i2c_emul *emul);
      80             : 
      81             : /** Definition of the emulator API */
      82           1 : struct i2c_emul_api {
      83           0 :         i2c_emul_transfer_t transfer;
      84             : };
      85             : 
      86             : #ifdef __cplusplus
      87             : }
      88             : #endif
      89             : 
      90             : /**
      91             :  * @}
      92             :  */
      93             : 
      94             : #endif /* ZEPHYR_INCLUDE_DRIVERS_I2C_I2C_EMUL_H_ */

Generated by: LCOV version 1.14