![]() |
no-OS
|
Implementation of the I3C Interface. More...
#include <inttypes.h>#include <stdlib.h>#include <string.h>#include "no_os_i3c.h"#include "no_os_error.h"#include "no_os_mutex.h"#include "no_os_alloc.h"Functions | |
| int | no_os_i3c_init (struct no_os_i3c_desc **desc, const struct no_os_i3c_init_param *param) |
| Initialize the I3C device. If the bus of the I3C device is not initialized, it will call to init it. | |
| int | no_os_i3c_init_bus (struct no_os_i3c_bus_desc **desc, const struct no_os_i3c_bus_init_param *param) |
| Initialize the I3C bus. | |
| int | no_os_i3c_remove (struct no_os_i3c_desc *desc) |
| Free the resources allocated by no_os_i3c_init(). | |
| int | no_os_i3c_remove_bus (struct no_os_i3c_bus_desc *desc) |
| Free the resources allocated by no_os_i3c_init_bus. Must remove all devices first, if not, -EBUSY is returned. | |
| int | no_os_i3c_do_daa (struct no_os_i3c_bus_desc *desc, bool rstdaa) |
| Do DAA to assign the dynamic addresses. | |
| int | no_os_i3c_send_ccc (struct no_os_i3c_bus_desc *desc, uint8_t addr, uint32_t ccc, uint8_t *data) |
| Send CCC, either to a device device or broadcast to all. | |
| int | no_os_i3c_send_direct_ccc (struct no_os_i3c_desc *desc, uint32_t ccc, uint8_t *data) |
| Send CCC to device device. | |
| int | no_os_i3c_write (struct no_os_i3c_desc *desc, uint8_t *data, uint8_t size) |
| Write data to device device. | |
| int | no_os_i3c_read (struct no_os_i3c_desc *desc, uint8_t *data, uint8_t size) |
| Read data from device device. | |
| int | no_os_i3c_write_and_read (struct no_os_i3c_desc *desc, uint8_t *tx_data, uint8_t tx_data_len, uint8_t *rx_data, uint8_t rx_data_len) |
| Read and write the device. | |
| int | no_os_i3c_conf_irq (struct no_os_i3c_bus_desc *desc, uint8_t irq, bool en) |
| Configure I3C interrupts. | |
| int | no_os_i3c_async_irq (struct no_os_i3c_bus_desc *desc, bool en) |
| Enable I3C non-blocking interrupts. | |
| int | no_os_i3c_wait_irq (struct no_os_i3c_bus_desc *desc, uint8_t irq) |
| Wait I3C interrupt. Set async_irq on call to false to ensure single entry point. | |
| int | no_os_i3c_call_irq (struct no_os_i3c_bus_desc *desc) |
| Non-blocking I3C interrupt. Since a payload is always retrieved with it, also update the no_os_i3c_ccc_info fields. | |
| uint8_t | no_os_i3c_addr_get_free (struct no_os_i3c_bus_desc *desc, uint8_t start_addr) |
| Get a free address. | |
| void | no_os_i3c_addr_set_status (struct no_os_i3c_bus_desc *desc, uint8_t addr, enum no_os_i3c_slot_status status) |
| Set status of an address. | |
| void | no_os_i3c_attach_callback (struct no_os_i3c_desc *desc, void(*callback)(struct no_os_i3c_desc *, uint32_t, uint32_t)) |
| Attach event callback. | |
| void | no_os_i3c_detach_callback (struct no_os_i3c_desc *desc) |
| Detach event callback. | |
| int32_t | no_os_i3c_transfer_dma_async (struct no_os_i3c_desc *desc, struct no_os_i3c_msg *msgs, uint32_t len, void(*callback)(void *), void *ctx) |
| Transfer a list of messages using DMA. Non-blocking, invokes a callback after the last message is concluded. | |
| int32_t | no_os_i3c_transfer_abort (struct no_os_i3c_desc *desc) |
| Abort the ongoing DMA transaction. | |
Variables | |
| struct no_os_i3c_bus_desc * | i3c_table [NO_OS_I3C_MAX_BUS_NUMBER+1] = {NULL} |
| i3c_table contains the pointers towards the I3C buses. | |
Implementation of the I3C Interface.
Copyright 2024(c) Analog Devices, Inc.
SPDX-License-Identifier: BSD-3-Clause
| uint8_t no_os_i3c_addr_get_free | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | start_addr ) |
Get a free address.
| desc | - The I3C bus descriptor. |
| start_addr | - Start address to search from. |
| void no_os_i3c_addr_set_status | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | addr, | ||
| enum no_os_i3c_slot_status | status ) |
Set status of an address.
| desc | - The I3C bus descriptor. |
| addr | - The address to set. |
| status | - The value to write. |
| int no_os_i3c_async_irq | ( | struct no_os_i3c_bus_desc * | desc, |
| bool | en ) |
Enable I3C non-blocking interrupts.
| desc | - The I3C descriptor. |
| en | - 1 to enable, 0 to disable async callback. |
| void no_os_i3c_attach_callback | ( | struct no_os_i3c_desc * | desc, |
| void(* | callback )(struct no_os_i3c_desc *, uint32_t, uint32_t) ) |
Attach event callback.
| desc | - The I3C device descriptor. |
| callback | - Method to call on event. |
| int no_os_i3c_call_irq | ( | struct no_os_i3c_bus_desc * | desc | ) |
Non-blocking I3C interrupt. Since a payload is always retrieved with it, also update the no_os_i3c_ccc_info fields.
| desc | - The I3C descriptor. |
| int no_os_i3c_conf_irq | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | irq, | ||
| bool | en ) |
Configure I3C interrupts.
| desc | - The I3C descriptor. |
| irq | - The interrupt type to enable. |
| en | - 1 to enable, 0 to disable irq type. |
| void no_os_i3c_detach_callback | ( | struct no_os_i3c_desc * | desc | ) |
Detach event callback.
| desc | - The I3C device descriptor. |
| int no_os_i3c_do_daa | ( | struct no_os_i3c_bus_desc * | desc, |
| bool | rstdaa ) |
Do DAA to assign the dynamic addresses.
| desc | - The I3C descriptor. |
| rstdaa | - Do RSTDAA CCC before the DAA. |
| int no_os_i3c_init | ( | struct no_os_i3c_desc ** | desc, |
| const struct no_os_i3c_init_param * | param ) |
Initialize the I3C device. If the bus of the I3C device is not initialized, it will call to init it.
| desc | - The I3C device descriptor. |
| param | - The structure that contains the I3C device parameters, to match PID. |
| int no_os_i3c_init_bus | ( | struct no_os_i3c_bus_desc ** | desc, |
| const struct no_os_i3c_bus_init_param * | param ) |
Initialize the I3C bus.
| desc | - The I3C bus descriptor. |
| param | - The structure that contains the I3C bus parameters. |
| int no_os_i3c_read | ( | struct no_os_i3c_desc * | desc, |
| uint8_t * | data, | ||
| uint8_t | size ) |
Read data from device device.
| desc | - The I3C descriptor. |
| data | - The buffer with the received data. |
| size | - Number of bytes to read. |
| int no_os_i3c_remove | ( | struct no_os_i3c_desc * | desc | ) |
Free the resources allocated by no_os_i3c_init().
| desc | - The I3C device descriptor. |
| int no_os_i3c_remove_bus | ( | struct no_os_i3c_bus_desc * | desc | ) |
Free the resources allocated by no_os_i3c_init_bus. Must remove all devices first, if not, -EBUSY is returned.
| desc | - The I3C bus descriptor. |
| int no_os_i3c_send_ccc | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | addr, | ||
| uint32_t | ccc, | ||
| uint8_t * | data ) |
Send CCC, either to a device device or broadcast to all.
| desc | - The I3C descriptor. |
| addr | - Device address or broadcast address. |
| ccc | - CCC RnW, CCC Length, CCC ID. |
| data | - The buffer with the transmitted/received data. |
| int no_os_i3c_send_direct_ccc | ( | struct no_os_i3c_desc * | desc, |
| uint32_t | ccc, | ||
| uint8_t * | data ) |
Send CCC to device device.
| desc | - The I3C descriptor. |
| ccc | - CCC RnW, CCC length, CCC id. |
| data | - The buffer with the transmitted/received data. |
| int32_t no_os_i3c_transfer_abort | ( | struct no_os_i3c_desc * | desc | ) |
Abort the ongoing DMA transaction.
| desc | - The I3C descriptor. |
| int32_t no_os_i3c_transfer_dma_async | ( | struct no_os_i3c_desc * | desc, |
| struct no_os_i3c_msg * | msgs, | ||
| uint32_t | len, | ||
| void(* | callback )(void *), | ||
| void * | ctx ) |
Transfer a list of messages using DMA. Non-blocking, invokes a callback after the last message is concluded.
| desc | - The I3C descriptor. |
| msgs | - The list of messages to transfer. |
| len | - The number of messages to transfer. |
| callback | - The callback to invoke after the transfer is concluded. |
| ctx | - The context to pass to the callback. |
| int no_os_i3c_wait_irq | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | irq ) |
Wait I3C interrupt. Set async_irq on call to false to ensure single entry point.
| desc | - The I3C descriptor. |
| irq | - The interrupt to wait for. |
| int no_os_i3c_write | ( | struct no_os_i3c_desc * | desc, |
| uint8_t * | data, | ||
| uint8_t | size ) |
Write data to device device.
| desc | - The I3C descriptor. |
| data | - The buffer with the transmitted data. |
| size | - Number of bytes to write. |
| int no_os_i3c_write_and_read | ( | struct no_os_i3c_desc * | desc, |
| uint8_t * | tx_data, | ||
| uint8_t | tx_data_len, | ||
| uint8_t * | rx_data, | ||
| uint8_t | rx_data_len ) |
Read and write the device.
| desc | - The I3C descriptor. |
| tx_data | - The buffer with the transmitted data. |
| tx_data_len | - Number of bytes to write. |
| rx_data | - The buffer with the received data. |
| rx_data_len | - Number of bytes to read. |
| struct no_os_i3c_bus_desc* i3c_table[NO_OS_I3C_MAX_BUS_NUMBER+1] = {NULL} |
i3c_table contains the pointers towards the I3C buses.