XCORE SDK
XCORE Software Development Kit
rtos_i2c_slave.h
1 // Copyright 2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #ifndef RTOS_I2C_SLAVE_H_
5 #define RTOS_I2C_SLAVE_H_
6 
14 #include <xcore/channel_streaming.h>
15 #include "i2c.h"
16 
17 #include "rtos_osal.h"
18 #include "rtos_driver_rpc.h"
19 
24 #ifndef RTOS_I2C_SLAVE_BUF_LEN
25 #define RTOS_I2C_SLAVE_BUF_LEN 256
26 #endif
27 
32 #define RTOS_I2C_SLAVE_CALLBACK_ATTR __attribute__((fptrgroup("rtos_i2c_slave_cb_fptr_grp")))
33 
38 
51 typedef void (*rtos_i2c_slave_start_cb_t)(rtos_i2c_slave_t *ctx, void *app_data);
52 
66 typedef void (*rtos_i2c_slave_rx_cb_t)(rtos_i2c_slave_t *ctx, void *app_data, uint8_t *data, size_t len);
67 
87 typedef size_t (*rtos_i2c_slave_tx_start_cb_t)(rtos_i2c_slave_t *ctx, void *app_data, uint8_t **data);
88 
105 typedef void (*rtos_i2c_slave_tx_done_cb_t)(rtos_i2c_slave_t *ctx, void *app_data, uint8_t *data, size_t len);
106 
113  port_t p_scl;
114  port_t p_sda;
115  uint8_t device_addr;
116 
117  void *app_data;
118  uint8_t data_buf[RTOS_I2C_SLAVE_BUF_LEN];
119  size_t rx_data_i;
120 
121  uint8_t *tx_data;
122  size_t tx_data_len;
123  size_t tx_data_i;
124  size_t tx_data_sent;
125 
126  int waiting_for_complete_cb;
127 
132 
133  streaming_channel_t c;
134  rtos_osal_event_group_t events;
135  rtos_osal_thread_t hil_thread;
136  rtos_osal_thread_t app_thread;
137 };
138 
159  rtos_i2c_slave_t *i2c_slave_ctx,
160  void *app_data,
165  unsigned interrupt_core_id,
166  unsigned priority);
167 
184  rtos_i2c_slave_t *i2c_slave_ctx,
185  uint32_t io_core_mask,
186  const port_t p_scl,
187  const port_t p_sda,
188  uint8_t device_addr);
189 
192 #endif /* RTOS_I2C_SLAVE_H_ */
#define RTOS_I2C_SLAVE_CALLBACK_ATTR
Definition: rtos_i2c_slave.h:32
#define RTOS_I2C_SLAVE_BUF_LEN
Definition: rtos_i2c_slave.h:25
size_t(* rtos_i2c_slave_tx_start_cb_t)(rtos_i2c_slave_t *ctx, void *app_data, uint8_t **data)
Definition: rtos_i2c_slave.h:87
void rtos_i2c_slave_start(rtos_i2c_slave_t *i2c_slave_ctx, void *app_data, rtos_i2c_slave_start_cb_t start, rtos_i2c_slave_rx_cb_t rx, rtos_i2c_slave_tx_start_cb_t tx_start, rtos_i2c_slave_tx_done_cb_t tx_done, unsigned interrupt_core_id, unsigned priority)
Definition: rtos_i2c_slave.c:206
void(* rtos_i2c_slave_rx_cb_t)(rtos_i2c_slave_t *ctx, void *app_data, uint8_t *data, size_t len)
Definition: rtos_i2c_slave.h:66
void rtos_i2c_slave_init(rtos_i2c_slave_t *i2c_slave_ctx, uint32_t io_core_mask, const port_t p_scl, const port_t p_sda, uint8_t device_addr)
Definition: rtos_i2c_slave.c:250
void(* rtos_i2c_slave_start_cb_t)(rtos_i2c_slave_t *ctx, void *app_data)
Definition: rtos_i2c_slave.h:51
void(* rtos_i2c_slave_tx_done_cb_t)(rtos_i2c_slave_t *ctx, void *app_data, uint8_t *data, size_t len)
Definition: rtos_i2c_slave.h:105
Definition: rtos_i2c_slave.h:112