2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
									
										
										
										
											2024-03-15 14:06:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  SPDX - FileCopyrightText :  2023 - 2024  Espressif  Systems  ( Shanghai )  CO  LTD 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  SPDX - License - Identifier :  Apache - 2.0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <stdint.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "esp_err.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "driver/i2c_types.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "hal/gpio_types.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef __cplusplus 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								extern  " C "  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  I2C  master  bus  specific  configurations 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  {  
						 
					
						
							
								
									
										
										
										
											2024-04-03 11:36:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    i2c_port_num_t  i2c_port ;               /*!< I2C port number, `-1` for auto selecting, (not include LP I2C instance) */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    gpio_num_t  sda_io_num ;                 /*!< GPIO number of I2C SDA signal, pulled-up internally */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gpio_num_t  scl_io_num ;                 /*!< GPIO number of I2C SCL signal, pulled-up internally */ 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-03 11:36:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    union  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        i2c_clock_source_t  clk_source ;         /*!< Clock source of I2C master bus */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if SOC_LP_I2C_SUPPORTED 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        lp_i2c_clock_source_t  lp_source_clk ;        /*!< LP_UART source clock selection */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    uint8_t  glitch_ignore_cnt ;             /*!< If the glitch period on the line is less than this value, it can be filtered out, typically value is 7 (unit: I2C module clock cycle)*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int  intr_priority ;                     /*!< I2C interrupt priority, if set to 0, driver will select the default priority (1,2,3). */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_t  trans_queue_depth ;              /*!< Depth of internal transfer queue, increase this value can support more transfers pending in the background, only valid in asynchronous transaction. (Typically max_device_num * per_transaction)*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    struct  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-12 16:46:27 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        uint32_t  enable_internal_pullup :  1 ;   /*!< Enable internal pullups. Note: This is not strong enough to pullup buses under high-speed frequency. Recommend proper external pull-up if possible */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  flags ;                               /*!< I2C master config flags */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  i2c_master_bus_config_t ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  I2C  device  configuration 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    i2c_addr_bit_len_t  dev_addr_length ;          /*!< Select the address length of the slave device. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uint16_t  device_address ;                     /*!< I2C device raw address. (The 7/10 bit address without read/write bit) */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uint32_t  scl_speed_hz ;                       /*!< I2C SCL line frequency. */ 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-19 12:15:24 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    uint32_t  scl_wait_us ;                       /*!< Timeout value. (unit: us). Please note this value should not be so small that it can handle stretch/disturbance properly. If 0 is set, that means use the default reg value*/ 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-15 14:06:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    struct  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-25 14:11:33 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        uint32_t  disable_ack_check :       1 ;      /*!< Disable ACK check. If this is set false, that means ack check is enabled, the transaction will be stopped and API returns error when nack is detected. */ 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-15 14:06:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    }  flags ;                                     /*!< I2C device config flags */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  i2c_device_config_t ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Group  of  I2C  master  callbacks ,  can  be  used  to  get  status  during  transaction  or  doing  other  small  things .  But  take  care  potential  concurrency  issues . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  The  callbacks  are  all  running  under  ISR  context 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  When  CONFIG_I2C_ISR_IRAM_SAFE  is  enabled ,  the  callback  itself  and  functions  called  by  it  should  be  placed  in  IRAM . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *        The  variables  used  in  the  function  should  be  in  the  SRAM  as  well . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    i2c_master_callback_t  on_trans_done ;   /*!< I2C master transaction finish callback */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  i2c_master_event_callbacks_t ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Allocate  an  I2C  master  bus 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  bus_config  I2C  master  bus  configuration . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ out ]  ret_bus_handle  I2C  bus  handle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  I2C  master  bus  initialized  successfully . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  I2C  bus  initialization  failed  because  of  invalid  argument . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_NO_MEM :  Create  I2C  bus  failed  because  of  out  of  memory . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_NOT_FOUND :  No  more  free  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_new_master_bus ( const  i2c_master_bus_config_t  * bus_config ,  i2c_master_bus_handle_t  * ret_bus_handle ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Add  I2C  master  BUS  device . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  bus_handle  I2C  bus  handle . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  dev_config  device  config . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ out ]  ret_handle  device  handle . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  Create  I2C  master  device  successfully . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  I2C  bus  initialization  failed  because  of  invalid  argument . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_NO_MEM :  Create  I2C  bus  failed  because  of  out  of  memory . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_master_bus_add_device ( i2c_master_bus_handle_t  bus_handle ,  const  i2c_device_config_t  * dev_config ,  i2c_master_dev_handle_t  * ret_handle ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Deinitialize  the  I2C  master  bus  and  delete  the  handle . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  bus_handle  I2C  bus  handle . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  Delete  I2C  bus  success ,  otherwise ,  failed . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  Otherwise :  Some  module  delete  failed . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_del_master_bus ( i2c_master_bus_handle_t  bus_handle ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  I2C  master  bus  delete  device 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param  handle  i2c  device  handle 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  If  device  is  successfully  deleted . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_master_bus_rm_device ( i2c_master_dev_handle_t  handle ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Perform  a  write  transaction  on  the  I2C  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *         The  transaction  will  be  undergoing  until  it  finishes  or  it  reaches 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *         the  timeout  provided . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  If  a  callback  was  registered  with  ` i2c_master_register_event_callbacks ` ,  the  transaction  will  be  asynchronous ,  and  thus ,  this  function  will  return  directly ,  without  blocking . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *        You  will  get  finish  information  from  callback .  Besides ,  data  buffer  should  always  be  completely  prepared  when  callback  is  registered ,  otherwise ,  the  data  will  get  corrupt . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  i2c_dev  I2C  master  device  handle  that  created  by  ` i2c_master_bus_add_device ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  write_buffer  Data  bytes  to  send  on  the  I2C  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  write_size  Size ,  in  bytes ,  of  the  write  buffer . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  xfer_timeout_ms  Wait  timeout ,  in  ms .  Note :  - 1  means  wait  forever . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  I2C  master  transmit  success 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 18:44:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  I2C  master  transmit  parameter  invalid . 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_TIMEOUT :  Operation  timeout ( larger  than  xfer_timeout_ms )  because  the  bus  is  busy  or  hardware  crash . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_master_transmit ( i2c_master_dev_handle_t  i2c_dev ,  const  uint8_t  * write_buffer ,  size_t  write_size ,  int  xfer_timeout_ms ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Perform  a  write - read  transaction  on  the  I2C  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *         The  transaction  will  be  undergoing  until  it  finishes  or  it  reaches 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *         the  timeout  provided . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  If  a  callback  was  registered  with  ` i2c_master_register_event_callbacks ` ,  the  transaction  will  be  asynchronous ,  and  thus ,  this  function  will  return  directly ,  without  blocking . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *        You  will  get  finish  information  from  callback .  Besides ,  data  buffer  should  always  be  completely  prepared  when  callback  is  registered ,  otherwise ,  the  data  will  get  corrupt . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  i2c_dev  I2C  master  device  handle  that  created  by  ` i2c_master_bus_add_device ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  write_buffer  Data  bytes  to  send  on  the  I2C  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  write_size  Size ,  in  bytes ,  of  the  write  buffer . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ out ]  read_buffer  Data  bytes  received  from  i2c  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  read_size  Size ,  in  bytes ,  of  the  read  buffer . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  xfer_timeout_ms  Wait  timeout ,  in  ms .  Note :  - 1  means  wait  forever . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  I2C  master  transmit - receive  success 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 18:44:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  I2C  master  transmit  parameter  invalid . 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_TIMEOUT :  Operation  timeout ( larger  than  xfer_timeout_ms )  because  the  bus  is  busy  or  hardware  crash . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_master_transmit_receive ( i2c_master_dev_handle_t  i2c_dev ,  const  uint8_t  * write_buffer ,  size_t  write_size ,  uint8_t  * read_buffer ,  size_t  read_size ,  int  xfer_timeout_ms ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Perform  a  read  transaction  on  the  I2C  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *         The  transaction  will  be  undergoing  until  it  finishes  or  it  reaches 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *         the  timeout  provided . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  If  a  callback  was  registered  with  ` i2c_master_register_event_callbacks ` ,  the  transaction  will  be  asynchronous ,  and  thus ,  this  function  will  return  directly ,  without  blocking . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *        You  will  get  finish  information  from  callback .  Besides ,  data  buffer  should  always  be  completely  prepared  when  callback  is  registered ,  otherwise ,  the  data  will  get  corrupt . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  i2c_dev  I2C  master  device  handle  that  created  by  ` i2c_master_bus_add_device ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ out ]  read_buffer  Data  bytes  received  from  i2c  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  read_size  Size ,  in  bytes ,  of  the  read  buffer . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  xfer_timeout_ms  Wait  timeout ,  in  ms .  Note :  - 1  means  wait  forever . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  I2C  master  receive  success 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 18:44:49 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  I2C  master  receive  parameter  invalid . 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_TIMEOUT :  Operation  timeout ( larger  than  xfer_timeout_ms )  because  the  bus  is  busy  or  hardware  crash . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_master_receive ( i2c_master_dev_handle_t  i2c_dev ,  uint8_t  * read_buffer ,  size_t  read_size ,  int  xfer_timeout_ms ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Probe  I2C  address ,  if  address  is  correct  and  ACK  is  received ,  this  function  will  return  ESP_OK . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ param [ in ]  bus_handle  I2C  master  device  handle  that  created  by  ` i2c_master_bus_add_device ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  address  I2C  device  address  that  you  want  to  probe . 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  xfer_timeout_ms  Wait  timeout ,  in  ms .  Note :  - 1  means  wait  forever  ( Not  recommended  in  this  function ) . 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-15 14:06:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ attention  Pull - ups  must  be  connected  to  the  SCL  and  SDA  pins  when  this  function  is  called .  If  you  get  ` ESP_ERR_TIMEOUT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  while  ` xfer_timeout_ms `  was  parsed  correctly ,  you  should  check  the  pull - up  resistors .  If  you  do  not  have  proper  resistors  nearby . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ` flags . enable_internal_pullup `  is  also  acceptable . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  The  principle  of  this  function  is  to  sent  device  address  with  a  write  command .  If  the  device  on  your  I2C  bus ,  there  would  be  an  ACK  signal  and  function 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  returns  ` ESP_OK ` .  If  the  device  is  not  on  your  I2C  bus ,  there  would  be  a  NACK  signal  and  function  returns  ` ESP_ERR_NOT_FOUND ` .  ` ESP_ERR_TIMEOUT `  is  not  an  expected 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  failure ,  which  indicated  that  the  i2c  probe  not  works  properly ,  usually  caused  by  pull - up  resistors  not  be  connected  properly .  Suggestion  check  data  on  SDA / SCL  line 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  to  see  whether  there  is  ACK / NACK  signal  is  on  line  when  i2c  probe  function  fails . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  There  are  lots  of  I2C  devices  all  over  the  world ,  we  assume  that  not  all  I2C  device  support  the  behavior  like  ` device_address + nack / ack ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  So ,  if  the  on  line  data  is  strange  and  no  ack / nack  got  respond .  Please  check  the  device  datasheet . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  I2C  device  probe  successfully 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *       -  ESP_ERR_NOT_FOUND :  I2C  probe  failed ,  doesn ' t  find  the  device  with  specific  address  you  gave . 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_TIMEOUT :  Operation  timeout ( larger  than  xfer_timeout_ms )  because  the  bus  is  busy  or  hardware  crash . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								esp_err_t  i2c_master_probe ( i2c_master_bus_handle_t  bus_handle ,  uint16_t  address ,  int  xfer_timeout_ms ) ;  
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Register  I2C  transaction  callbacks  for  a  master  device 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  User  can  deregister  a  previously  registered  callback  by  calling  this  function  and  setting  the  callback  member  in  the  ` cbs `  structure  to  NULL . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  When  CONFIG_I2C_ISR_IRAM_SAFE  is  enabled ,  the  callback  itself  and  functions  called  by  it  should  be  placed  in  IRAM . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *        The  variables  used  in  the  function  should  be  in  the  SRAM  as  well .  The  ` user_data `  should  also  reside  in  SRAM . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ note  If  the  callback  is  used  for  helping  asynchronous  transaction .  On  the  same  bus ,  only  one  device  can  be  used  for  performing  asynchronous  operation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  i2c_dev  I2C  master  device  handle  that  created  by  ` i2c_master_bus_add_device ` . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  cbs  Group  of  callback  functions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  user_data  User  data ,  which  will  be  passed  to  callback  functions  directly 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  Set  I2C  transaction  callbacks  successfully 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  Set  I2C  transaction  callbacks  failed  because  of  invalid  argument 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_FAIL :  Set  I2C  transaction  callbacks  failed  because  of  other  error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_master_register_event_callbacks ( i2c_master_dev_handle_t  i2c_dev ,  const  i2c_master_event_callbacks_t  * cbs ,  void  * user_data ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Reset  the  I2C  master  bus . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ param  bus_handle  I2C  bus  handle . 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  Reset  succeed . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  I2C  master  bus  handle  is  not  initialized . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  Otherwise :  Reset  failed . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								esp_err_t  i2c_master_bus_reset ( i2c_master_bus_handle_t  bus_handle ) ;  
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Wait  for  all  pending  I2C  transactions  done 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ param [ in ]  bus_handle  I2C  bus  handle 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  @ param [ in ]  timeout_ms  Wait  timeout ,  in  ms .  Specially ,  - 1  means  to  wait  forever . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_OK :  Flush  transactions  successfully 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_INVALID_ARG :  Flush  transactions  failed  because  of  invalid  argument 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_ERR_TIMEOUT :  Flush  transactions  failed  because  of  timeout 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *       -  ESP_FAIL :  Flush  transactions  failed  because  of  other  error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-07 18:42:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								esp_err_t  i2c_master_bus_wait_all_done ( i2c_master_bus_handle_t  bus_handle ,  int  timeout_ms ) ;  
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-10-25 16:06:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/**
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ brief  Retrieves  the  I2C  master  bus  handle  for  a  specified  I2C  port  number . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  This  function  retrieves  the  I2C  master  bus  handle  for  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  given  I2C  port  number .  Please  make  sure  the  handle  has  already  been  initialized ,  and  this 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  function  would  simply  returns  the  existing  handle .  Note  that  the  returned  handle  still  can ' t  be  used  concurrently 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param  port_num  I2C  port  number  for  which  the  handle  is  to  be  retrieved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ param  ret_handle  Pointer  to  a  variable  where  the  retrieved  handle  will  be  stored . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      -  ESP_OK :  Success .  The  handle  is  retrieved  successfully . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      -  ESP_ERR_INVALID_ARG :  Invalid  argument ,  such  as  invalid  port  number 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      -  ESP_ERR_INVALID_STATE :  Invalid  state ,  such  as  the  I2C  port  is  not  initialized . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								esp_err_t  i2c_master_get_bus_handle ( i2c_port_num_t  port_num ,  i2c_master_bus_handle_t  * ret_handle ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-03 12:29:44 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# ifdef __cplusplus 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif