SmartSnippets DA1459x SDK
ad_i2c.h
Go to the documentation of this file.
1 
44 #ifndef AD_I2C_H_
45 #define AD_I2C_H_
46 
47 #if dg_configI2C_ADAPTER
48 
49 #include "ad.h"
50 #include "hw_i2c.h"
51 #if (HW_I2C_DMA_SUPPORT == 1)
52 #include "hw_dma.h"
53 #endif /* HW_I2C_DMA_SUPPORT */
54 #include "hw_gpio.h"
55 #include "osal.h"
56 #include "resmgmt.h"
57 
58 #ifdef __cplusplus
59 extern "C" {
60 #endif
61 
71 #ifndef CONFIG_I2C_USE_ASYNC_TRANSACTIONS
72 #define CONFIG_I2C_USE_ASYNC_TRANSACTIONS (1)
73 #endif
74 
84 #ifndef CONFIG_I2C_USE_SYNC_TRANSACTIONS
85 #define CONFIG_I2C_USE_SYNC_TRANSACTIONS (1)
86 #endif
87 
88 #if (CONFIG_I2C_USE_SYNC_TRANSACTIONS == 0) && (CONFIG_I2C_USE_ASYNC_TRANSACTIONS == 0)
89 #error "At least one macro CONFIG_I2C_USE_SYNC_TRANSACTIONS or CONFIG_I2C_USE_ASYNC_TRANSACTIONS must be set."
90 #endif
91 
92 #if (HW_I2C_SLAVE_SUPPORT == 1)
93 #if (CONFIG_I2C_USE_SYNC_TRANSACTIONS == 0)
94  #error "CONFIG_I2C_USE_SYNC_TRANSACTIONS must be set if HW_I2C_SLAVE_SUPPORT is set."
95 #endif
96 #endif
97 
98 #ifndef I2C_DEFAULT_CLK_CFG
99  #define I2C_DEFAULT_CLK_CFG .i2c.clock_cfg = { 0, 0, 0, 0, 0, 0 }
100 #endif
101 
102 /*
103  * Data types definitions section
104  */
105 
109 typedef void *ad_i2c_handle_t;
110 
117 typedef struct {
121 
130 typedef struct {
132 #if (HW_I2C_DMA_SUPPORT == 1)
134 #endif /* HW_I2C_DMA_SUPPORT */
136 
143 typedef struct {
144  const HW_I2C_ID id;
148 
153 typedef enum {
154  AD_I2C_ERROR_IO_CFG_INVALID = -6,
155  AD_I2C_ERROR_CONTROLLER_ABORT_FAIL = -5,
156  AD_I2C_ERROR_TRANSFER_TIMEOUT = -4,
157  AD_I2C_ERROR_CONTROLLER_BUSY = -3,
158  AD_I2C_ERROR_DRIVER_CONF_INVALID = -2,
159  AD_I2C_ERROR_HANDLE_INVALID = -1,
160  AD_I2C_ERROR_NONE = 0,
161 } AD_I2C_ERROR;
162 
167 typedef void (*ad_i2c_user_cb)(void *user_data, HW_I2C_ABORT_SOURCE error);
168 
173 void ad_i2c_init(void);
174 
191 
206 
224 int ad_i2c_close(ad_i2c_handle_t p, bool force);
225 
239 int ad_i2c_io_config(HW_I2C_ID id, const ad_i2c_io_conf_t *io, AD_IO_CONF_STATE state);
240 
241 #if CONFIG_I2C_USE_SYNC_TRANSACTIONS
242 
267 int ad_i2c_write(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t condition_flags);
268 
302 int ad_i2c_write_with_to(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t condition_flags, OS_TICK_TIME timeout);
303 
329 int ad_i2c_read(ad_i2c_handle_t p, uint8_t *rbuf, size_t rlen, uint8_t condition_flags);
330 
365 int ad_i2c_read_with_to(ad_i2c_handle_t p, uint8_t *rbuf, size_t rlen, uint8_t condition_flags, OS_TICK_TIME timeout);
366 
394 int ad_i2c_write_read(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t *rbuf,
395  size_t rlen, uint8_t condition_flags);
396 
433 int ad_i2c_write_read_with_to(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t *rbuf,
434  size_t rlen, uint8_t condition_flags, OS_TICK_TIME timeout);
435 #endif /* CONFIG_I2C_USE_SYNC_TRANSACTIONS */
436 
446 
447 #if CONFIG_I2C_USE_ASYNC_TRANSACTIONS
448 /*
449  * The following macros are used to construct asynchronous transactions on I2C device.
450  */
451 
481 int ad_i2c_write_async(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen,
482  ad_i2c_user_cb cb, void *user_data, uint8_t condition_flags);
483 
513 int ad_i2c_read_async(ad_i2c_handle_t p, uint8_t *rbuf, size_t rlen, ad_i2c_user_cb cb,
514  void *user_data, uint8_t condition_flags);
515 
545 int ad_i2c_write_read_async(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t *rbuf,
546  size_t rlen, ad_i2c_user_cb cb, void *user_data,
547  uint8_t condition_flags);
548 
549 #endif /* CONFIG_I2C_USE_ASYNC_TRANSACTIONS */
550 
551 #if (HW_I2C_SLAVE_SUPPORT == 1)
552 
553 typedef void (* ad_i2c_slave_event)(ad_i2c_handle_t p, void *user_data);
554 typedef void (* ad_i2c_slave_data_event)(ad_i2c_handle_t p, uint16_t len, bool success,
555  void *user_data);
556 
563 typedef struct {
564  ad_i2c_slave_data_event data_sent;
565  ad_i2c_slave_data_event data_received;
567  ad_i2c_slave_event data_ready;
568  ad_i2c_slave_event read_request;
569 } i2c_dev_slave_event_callbacks_t;
570 
574 typedef enum {
576  AD_I2C_SLAVE_STATE_STOPPED = 0,
577 
579  AD_I2C_SLAVE_STATE_INIT = 0x1,
580 
582  AD_I2C_SLAVE_STATE_READ_PENDING = 0x2,
583 
585  AD_I2C_SLAVE_STATE_WRITE_PENDING = 0x4,
586 } AD_I2C_SLAVE_STATE;
587 
588 typedef struct {
589  const i2c_dev_slave_event_callbacks_t *event_callbacks;
590  void *user_data;
591  const uint8_t *output_buffer;
592  uint16_t output_buffer_len;
593  uint8_t *input_buffer;
594  uint16_t input_buffer_len;
595 
597  AD_I2C_SLAVE_STATE state;
599  OS_EVENT operation_done_event;
600 } i2c_slave_state_data_t;
601 
660 int ad_i2c_start_slave(ad_i2c_handle_t p, const uint8_t *wbuf, uint16_t wlen, uint8_t *rbuf,
661  uint16_t rlen, const i2c_dev_slave_event_callbacks_t *events,
662  void *user_data);
663 
682 int ad_i2c_stop_slave(ad_i2c_handle_t p);
683 
694 void ad_i2c_clear_read_slave(ad_i2c_handle_t p);
695 
696 #endif
697 
698 #ifdef __cplusplus
699 }
700 #endif
701 
702 #endif /* dg_configI2C_ADAPTER */
703 
704 #endif /* AD_I2C_H_ */
705 
hw_dma.h
Definition of API for the DMA Low Level Driver.
ad_i2c_write_read_with_to
int ad_i2c_write_read_with_to(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t *rbuf, size_t rlen, uint8_t condition_flags, OS_TICK_TIME timeout)
Perform synchronous write/read transaction with time out.
ad_i2c_read
int ad_i2c_read(ad_i2c_handle_t p, uint8_t *rbuf, size_t rlen, uint8_t condition_flags)
Perform a blocking read transaction.
ad_i2c_write_read_async
int ad_i2c_write_read_async(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t *rbuf, size_t rlen, ad_i2c_user_cb cb, void *user_data, uint8_t condition_flags)
Perform write and asynchronous read I2C transaction.
ad_i2c_read_async
int ad_i2c_read_async(ad_i2c_handle_t p, uint8_t *rbuf, size_t rlen, ad_i2c_user_cb cb, void *user_data, uint8_t condition_flags)
Perform a non blocking read transaction.
ad_i2c_write_with_to
int ad_i2c_write_with_to(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t condition_flags, OS_TICK_TIME timeout)
Perform a blocking write transaction with time out.
ad_i2c_wait_while_master_busy
void ad_i2c_wait_while_master_busy(ad_i2c_handle_t p)
Wait while I2C master device is busy.
ad_i2c_driver_conf_t::dma_channel
HW_DMA_CHANNEL dma_channel
Definition: ad_i2c.h:133
ad_i2c_write_async
int ad_i2c_write_async(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, ad_i2c_user_cb cb, void *user_data, uint8_t condition_flags)
Perform a non blocking write transaction.
ad_i2c_open
ad_i2c_handle_t ad_i2c_open(const ad_i2c_controller_conf_t *conf)
Open I2C controller.
ad_i2c_init
void ad_i2c_init(void)
Initialize adapter.
ad_i2c_handle_t
void * ad_i2c_handle_t
I2C Handle returned by ad_i2c_open()
Definition: ad_i2c.h:109
ad_i2c_write_read
int ad_i2c_write_read(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t *rbuf, size_t rlen, uint8_t condition_flags)
Perform synchronous write/read transaction.
ad_i2c_controller_conf_t::id
const HW_I2C_ID id
Definition: ad_i2c.h:144
resmgmt.h
Resource management API.
osal.h
OS abstraction layer API.
HW_DMA_CHANNEL
HW_DMA_CHANNEL
DMA channel number.
Definition: hw_dma.h:62
hw_i2c.h
Definition of API for the I2C Low Level Driver.
HW_I2C_ABORT_SOURCE
HW_I2C_ABORT_SOURCE
I2C abort source.
Definition: hw_i2c.h:142
ad.h
Adapters shared definitions.
AD_IO_CONF_STATE
AD_IO_CONF_STATE
Adapters IO configuration state.
Definition: ad.h:65
ad_i2c_io_conf_t
I2C I/O configuration.
Definition: ad_i2c.h:117
AD_I2C_ERROR
AD_I2C_ERROR
I2C adapter error codes.
Definition: ad_i2c.h:153
ad_i2c_write
int ad_i2c_write(ad_i2c_handle_t p, const uint8_t *wbuf, size_t wlen, uint8_t condition_flags)
Perform a blocking write transaction.
ad_i2c_user_cb
void(* ad_i2c_user_cb)(void *user_data, HW_I2C_ABORT_SOURCE error)
Asynchronous callback function.
Definition: ad_i2c.h:167
ad_i2c_controller_conf_t
I2C controller configuration.
Definition: ad_i2c.h:143
ad_i2c_io_conf_t::scl
ad_io_conf_t scl
Definition: ad_i2c.h:118
ad_i2c_controller_conf_t::drv
const ad_i2c_driver_conf_t * drv
Definition: ad_i2c.h:146
hw_gpio.h
Definition of API for the GPIO Low Level Driver.
ad_i2c_reconfig
int ad_i2c_reconfig(ad_i2c_handle_t p, const ad_i2c_driver_conf_t *conf)
Reconfigure I2C controller.
ad_i2c_read_with_to
int ad_i2c_read_with_to(ad_i2c_handle_t p, uint8_t *rbuf, size_t rlen, uint8_t condition_flags, OS_TICK_TIME timeout)
Perform a blocking read transaction with time out.
i2c_config
I2C configuration.
Definition: hw_i2c.h:282
ad_i2c_controller_conf_t::io
const ad_i2c_io_conf_t * io
Definition: ad_i2c.h:145
ad_i2c_driver_conf_t::i2c
i2c_config i2c
Definition: ad_i2c.h:131
ad_io_conf_t
Adapters IO configuration.
Definition: ad.h:104
ad_i2c_io_conf_t::sda
ad_io_conf_t sda
Definition: ad_i2c.h:119
ad_i2c_io_config
int ad_i2c_io_config(HW_I2C_ID id, const ad_i2c_io_conf_t *io, AD_IO_CONF_STATE state)
Initialize controller pins to on / off io configuration.
ad_i2c_close
int ad_i2c_close(ad_i2c_handle_t p, bool force)
Close I2C controller.
ad_i2c_driver_conf_t
I2C driver configuration.
Definition: ad_i2c.h:130