| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | // modified Nov 2017 by Chuck Todd <StickBreaker> to support Interrupt Driven I/O
 | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef _ESP32_HAL_I2C_H_
 | 
					
						
							|  |  |  | #define _ESP32_HAL_I2C_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-11 15:11:51 +03:00
										 |  |  | #include <stdint.h>
 | 
					
						
							|  |  |  | #include <stdbool.h>
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | #include "freertos/FreeRTOS.h"
 | 
					
						
							|  |  |  | #include "freertos/event_groups.h"
 | 
					
						
							| 
									
										
										
										
											2016-10-11 15:11:51 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | // External Wire.h equivalent error Codes
 | 
					
						
							| 
									
										
										
										
											2016-10-11 15:11:51 +03:00
										 |  |  | typedef enum { | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  |     I2C_ERROR_OK=0, | 
					
						
							| 
									
										
										
										
											2016-10-11 15:11:51 +03:00
										 |  |  |     I2C_ERROR_DEV, | 
					
						
							|  |  |  |     I2C_ERROR_ACK, | 
					
						
							|  |  |  |     I2C_ERROR_TIMEOUT, | 
					
						
							| 
									
										
										
										
											2017-09-29 09:17:13 -04:00
										 |  |  |     I2C_ERROR_BUS, | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  |     I2C_ERROR_BUSY, | 
					
						
							|  |  |  |     I2C_ERROR_MEMORY, | 
					
						
							|  |  |  |     I2C_ERROR_CONTINUE, | 
					
						
							|  |  |  |     I2C_ERROR_NO_BEGIN | 
					
						
							| 
									
										
										
										
											2016-10-11 15:11:51 +03:00
										 |  |  | } i2c_err_t; | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-11 14:20:02 +03:00
										 |  |  | struct i2c_struct_t; | 
					
						
							|  |  |  | typedef struct i2c_struct_t i2c_t; | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | i2c_t * i2cInit(uint8_t i2c_num, int8_t sda, int8_t scl, uint32_t clk_speed); | 
					
						
							|  |  |  | void i2cRelease(i2c_t *i2c); // free ISR, Free DQ, Power off peripheral clock.  Must call i2cInit() to recover
 | 
					
						
							|  |  |  | i2c_err_t i2cWrite(i2c_t * i2c, uint16_t address, uint8_t* buff, uint16_t size, bool sendStop, uint16_t timeOutMillis); | 
					
						
							|  |  |  | i2c_err_t i2cRead(i2c_t * i2c, uint16_t address, uint8_t* buff, uint16_t size, bool sendStop, uint16_t timeOutMillis, uint32_t *readCount); | 
					
						
							|  |  |  | i2c_err_t i2cFlush(i2c_t *i2c); | 
					
						
							| 
									
										
										
										
											2016-10-11 15:11:51 +03:00
										 |  |  | i2c_err_t i2cSetFrequency(i2c_t * i2c, uint32_t clk_speed); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | uint32_t i2cGetFrequency(i2c_t * i2c); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | //Functions below should be used only if well understood
 | 
					
						
							|  |  |  | //Might be deprecated and removed in future
 | 
					
						
							| 
									
										
										
										
											2016-10-11 15:11:51 +03:00
										 |  |  | i2c_err_t i2cAttachSCL(i2c_t * i2c, int8_t scl); | 
					
						
							|  |  |  | i2c_err_t i2cDetachSCL(i2c_t * i2c, int8_t scl); | 
					
						
							|  |  |  | i2c_err_t i2cAttachSDA(i2c_t * i2c, int8_t sda); | 
					
						
							|  |  |  | i2c_err_t i2cDetachSDA(i2c_t * i2c, int8_t sda); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | //Stickbreakers ISR Support
 | 
					
						
							|  |  |  | i2c_err_t i2cProcQueue(i2c_t *i2c, uint32_t *readCount, uint16_t timeOutMillis); | 
					
						
							|  |  |  | i2c_err_t i2cAddQueueWrite(i2c_t *i2c, uint16_t i2cDeviceAddr, uint8_t *dataPtr, uint16_t dataLen, bool SendStop, EventGroupHandle_t event); | 
					
						
							|  |  |  | i2c_err_t i2cAddQueueRead(i2c_t *i2c, uint16_t i2cDeviceAddr, uint8_t *dataPtr, uint16_t dataLen, bool SendStop, EventGroupHandle_t event); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-27 09:01:06 +02:00
										 |  |  | //stickbreaker debug support
 | 
					
						
							|  |  |  | void i2cDumpInts(uint8_t num); | 
					
						
							|  |  |  | void i2cDumpI2c(i2c_t *i2c); | 
					
						
							| 
									
										
										
										
											2016-10-06 14:21:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* _ESP32_HAL_I2C_H_ */
 |