HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
EspTypes_I2C.h
Go to the documentation of this file.
1
14#pragma once
15
16#include "BaseI2c.h" // For hf_i2c_err_t
17#include "EspTypes_Base.h"
18#include "HardwareTypes.h" // For basic hardware types
19#include "McuSelect.h" // Central MCU platform selection (includes all ESP-IDF)
20#include <vector>
21
22// ESP-IDF C headers must be wrapped in extern "C" for C++ compatibility
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#include "driver/i2c.h"
28
29#ifdef __cplusplus
30}
31#endif
32
33//==============================================================================
34// ESP32 I2C TYPE MAPPINGS
35//==============================================================================
36
37// Direct ESP-IDF type usage - no unnecessary aliases
38// These types are used internally by EspI2c implementation
39
40//==============================================================================
41// ESP32 I2C CONSTANTS
42//==============================================================================
43
44static constexpr uint8_t HF_I2C_MAX_PORTS = 2;
45static constexpr uint32_t HF_I2C_MAX_FREQ_HZ = 1000000;
46static constexpr uint32_t HF_I2C_MIN_FREQ_HZ = 1000;
47static constexpr uint32_t HF_I2C_DEFAULT_FREQ_HZ = 100000;
48static constexpr uint32_t HF_I2C_FAST_FREQ_HZ = 400000;
49static constexpr uint32_t HF_I2C_FAST_PLUS_FREQ_HZ = 1000000;
50static constexpr uint32_t HF_I2C_MAX_TRANSFER_BYTES = 1024;
51static constexpr uint32_t HF_I2C_FIFO_SIZE = 32;
52static constexpr uint32_t HF_I2C_DEFAULT_TIMEOUT_MS = 1000;
53static constexpr uint32_t HF_I2C_MAX_TIMEOUT_MS = 10000;
54static constexpr uint8_t HF_I2C_MAX_RETRY_COUNT = 3;
55
56//==============================================================================
57// ESP32 I2C ENUMS
58//==============================================================================
59
63enum class hf_i2c_clock_source_t : uint8_t {
64 HF_I2C_CLK_SRC_DEFAULT = I2C_CLK_SRC_DEFAULT,
65 HF_I2C_CLK_SRC_XTAL = I2C_CLK_SRC_XTAL,
66 HF_I2C_CLK_SRC_RC_FAST = I2C_CLK_SRC_RC_FAST
67};
68
72enum class hf_i2c_address_bits_t : uint8_t {
73 HF_I2C_ADDR_7_BIT = I2C_ADDR_BIT_LEN_7,
74 HF_I2C_ADDR_10_BIT = I2C_ADDR_BIT_LEN_10
75};
76
85
94
109
123
127enum class hf_i2c_command_type_t : uint8_t {
128 HF_I2C_CMD_START = 0,
129 HF_I2C_CMD_STOP = 1,
130 HF_I2C_CMD_WRITE = 2,
131 HF_I2C_CMD_READ = 3,
134};
135
140enum class hf_i2c_mode_t : uint8_t {
141 HF_I2C_MODE_SYNC = 0,
143};
144
145//==============================================================================
146// ESP32 I2C CALLBACK TYPES
147//==============================================================================
148
160 void(*)(hf_i2c_err_t result, size_t bytes_transferred, void* user_data);
161
173 void(*)(hf_i2c_event_type_t event_type, void* event_data, void* user_data);
174
175//==============================================================================
176// ESP32 I2C CONFIGURATION STRUCTURES
177//==============================================================================
178
190
220
240
271
272//==============================================================================
273// ESP32 I2C TRANSACTION STRUCTURES
274//==============================================================================
275
281 const uint8_t* buffer;
282 size_t length;
283 bool is_write;
284
288 hf_i2c_transaction_buffer_t(const uint8_t* buf, size_t len) noexcept
289 : buffer(buf), length(len), is_write(true) {}
290
294 hf_i2c_transaction_buffer_t(const uint8_t* buf, size_t len, bool write) noexcept
295 : buffer(buf), length(len), is_write(write) {}
296};
297
303 uint16_t device_address;
304 std::vector<hf_i2c_transaction_buffer_t> buffers;
305 uint32_t timeout_ms;
306 uint32_t flags;
307
312};
313
320 uint16_t device_addr;
321 std::vector<uint8_t> data;
322 uint32_t delay_us;
323 uint32_t timeout_ms;
325 uint32_t flags;
326
330 explicit hf_i2c_custom_command_t(hf_i2c_command_type_t type, uint16_t addr = 0) noexcept
331 : command_type(type), device_addr(addr), delay_us(0), timeout_ms(1000), expected_read_size(0),
332 flags(0) {}
333
337 explicit hf_i2c_custom_command_t(uint32_t delay_microseconds) noexcept
339 delay_us(delay_microseconds), timeout_ms(0), expected_read_size(0), flags(0) {}
340};
341
342//==============================================================================
343// END OF ESPI2C TYPES - MINIMAL AND ESSENTIAL ONLY
344//==============================================================================
Abstract base class for I2C device implementations in the HardFOC system.
hf_i2c_err_t
Definition BaseI2c.h:85
ESP32 base type definitions for hardware abstraction.
hf_i2c_event_type_t
ESP32 I2C event types.
Definition EspTypes_I2C.h:98
@ HF_I2C_EVENT_SLAVE_STOP
Slave stop event.
@ HF_I2C_EVENT_ERROR
Error event.
@ HF_I2C_EVENT_MASTER_WRITE
Master write event.
@ HF_I2C_EVENT_SLAVE_START
Slave start event.
@ HF_I2C_EVENT_MASTER_STOP
Master stop event.
@ HF_I2C_EVENT_SLAVE_READ
Slave read event.
@ HF_I2C_EVENT_MASTER_READ
Master read event.
@ HF_I2C_EVENT_SLAVE_WRITE
Slave write event.
@ HF_I2C_EVENT_MASTER_START
Master start event.
hf_i2c_power_mode_t
ESP32 I2C power mode configuration.
Definition EspTypes_I2C.h:80
@ HF_I2C_POWER_MODE_LOW
Low power mode.
@ HF_I2C_POWER_MODE_NORMAL
Normal power mode.
@ HF_I2C_POWER_MODE_SLEEP
Sleep mode.
hf_i2c_command_type_t
ESP32 I2C custom command types.
Definition EspTypes_I2C.h:127
@ HF_I2C_CMD_WRITE
Write data.
@ HF_I2C_CMD_READ
Read data.
@ HF_I2C_CMD_START
Start condition.
@ HF_I2C_CMD_STOP
Stop condition.
@ HF_I2C_CMD_WRITE_READ
Write then read in one transaction.
hf_i2c_glitch_filter_t
ESP32 I2C glitch filter configuration.
Definition EspTypes_I2C.h:113
@ HF_I2C_GLITCH_FILTER_7_CYCLES
7 cycle filter
@ HF_I2C_GLITCH_FILTER_3_CYCLES
3 cycle filter
@ HF_I2C_GLITCH_FILTER_4_CYCLES
4 cycle filter
@ HF_I2C_GLITCH_FILTER_2_CYCLES
2 cycle filter
@ HF_I2C_GLITCH_FILTER_5_CYCLES
5 cycle filter
@ HF_I2C_GLITCH_FILTER_6_CYCLES
6 cycle filter
@ HF_I2C_GLITCH_FILTER_1_CYCLES
1 cycle filter
@ HF_I2C_GLITCH_FILTER_0_CYCLES
No glitch filter.
static constexpr uint32_t HF_I2C_MAX_TIMEOUT_MS
Definition EspTypes_I2C.h:53
static constexpr uint8_t HF_I2C_MAX_RETRY_COUNT
Definition EspTypes_I2C.h:54
static constexpr uint32_t HF_I2C_FAST_PLUS_FREQ_HZ
Definition EspTypes_I2C.h:49
static constexpr uint8_t HF_I2C_MAX_PORTS
Definition EspTypes_I2C.h:44
static constexpr uint32_t HF_I2C_DEFAULT_FREQ_HZ
Definition EspTypes_I2C.h:47
static constexpr uint32_t HF_I2C_MIN_FREQ_HZ
Definition EspTypes_I2C.h:46
void(*)(hf_i2c_event_type_t event_type, void *event_data, void *user_data) hf_i2c_event_callback_t
Callback function signature for I2C event notifications.
Definition EspTypes_I2C.h:172
static constexpr uint32_t HF_I2C_MAX_TRANSFER_BYTES
Definition EspTypes_I2C.h:50
hf_i2c_transaction_type_t
ESP32 I2C transaction types.
Definition EspTypes_I2C.h:89
@ HF_I2C_TRANS_WRITE
Write transaction.
@ HF_I2C_TRANS_WRITE_READ
Write-then-read transaction.
@ HF_I2C_TRANS_READ
Read transaction.
static constexpr uint32_t HF_I2C_MAX_FREQ_HZ
Definition EspTypes_I2C.h:45
hf_i2c_mode_t
I2C operation mode - determines available APIs.
Definition EspTypes_I2C.h:140
@ HF_I2C_MODE_SYNC
Sync mode: blocking operations only, no queue.
@ HF_I2C_MODE_ASYNC
Async mode: non-blocking operations only, with queue.
static constexpr uint32_t HF_I2C_FAST_FREQ_HZ
Definition EspTypes_I2C.h:48
hf_i2c_clock_source_t
ESP32 I2C clock source selection.
Definition EspTypes_I2C.h:63
@ HF_I2C_CLK_SRC_RC_FAST
RC_FAST clock (ESP32-C6 SOC_MOD_CLK_RC_FAST)
@ HF_I2C_CLK_SRC_DEFAULT
Default clock source (APB for ESP32-C6)
@ HF_I2C_CLK_SRC_XTAL
External crystal oscillator clock.
hf_i2c_address_bits_t
ESP32 I2C address bit length.
Definition EspTypes_I2C.h:72
@ HF_I2C_ADDR_10_BIT
10-bit address
@ HF_I2C_ADDR_7_BIT
7-bit address
static constexpr uint32_t HF_I2C_FIFO_SIZE
Definition EspTypes_I2C.h:51
void(*)(hf_i2c_err_t result, size_t bytes_transferred, void *user_data) hf_i2c_async_callback_t
Callback function signature for asynchronous I2C operations.
Definition EspTypes_I2C.h:159
static constexpr uint32_t HF_I2C_DEFAULT_TIMEOUT_MS
Definition EspTypes_I2C.h:52
Platform-agnostic hardware type definitions for the HardFOC system.
constexpr hf_pin_num_t HF_INVALID_PIN
Invalid pin constant for unassigned or invalid pins.
Definition HardwareTypes.h:104
hf_i32_t hf_pin_num_t
Platform-agnostic GPIO pin number type.
Definition HardwareTypes.h:99
Centralized MCU platform selection and configuration header.
Asynchronous operation result structure.
Definition EspTypes_I2C.h:183
uint32_t operation_id
Unique operation identifier.
Definition EspTypes_I2C.h:186
hf_i2c_transaction_type_t transaction_type
Type of transaction completed.
Definition EspTypes_I2C.h:188
size_t bytes_transferred
Number of bytes successfully transferred.
Definition EspTypes_I2C.h:185
uint64_t completion_time_us
Completion timestamp in microseconds.
Definition EspTypes_I2C.h:187
hf_i2c_err_t error_code
Operation result code.
Definition EspTypes_I2C.h:184
Custom I2C command for non-standard protocols.
Definition EspTypes_I2C.h:318
uint32_t timeout_ms
Timeout for the command.
Definition EspTypes_I2C.h:323
uint32_t flags
Command-specific flags.
Definition EspTypes_I2C.h:325
hf_i2c_command_type_t command_type
Command type.
Definition EspTypes_I2C.h:319
uint32_t delay_us
Delay in microseconds (for DELAY command)
Definition EspTypes_I2C.h:322
uint16_t device_addr
Device address for the command.
Definition EspTypes_I2C.h:320
std::vector< uint8_t > data
Command data (if applicable)
Definition EspTypes_I2C.h:321
hf_i2c_custom_command_t(uint32_t delay_microseconds) noexcept
Constructor for delay command.
Definition EspTypes_I2C.h:337
size_t expected_read_size
Expected read size for READ commands.
Definition EspTypes_I2C.h:324
hf_i2c_custom_command_t(hf_i2c_command_type_t type, uint16_t addr=0) noexcept
Constructor for basic command.
Definition EspTypes_I2C.h:330
I2C device configuration structure.
Definition EspTypes_I2C.h:225
uint16_t device_address
7-bit or 10-bit device address
Definition EspTypes_I2C.h:226
hf_i2c_address_bits_t dev_addr_length
Address bit length (7 or 10 bit)
Definition EspTypes_I2C.h:227
uint32_t flags
Device-specific configuration flags.
Definition EspTypes_I2C.h:231
uint32_t scl_speed_hz
SCL clock frequency for this device.
Definition EspTypes_I2C.h:228
bool disable_ack_check
Disable ACK check for this device.
Definition EspTypes_I2C.h:230
hf_i2c_device_config_t() noexcept
Default constructor with sensible defaults.
Definition EspTypes_I2C.h:236
uint32_t scl_wait_us
SCL wait time in microseconds.
Definition EspTypes_I2C.h:229
I2C master bus configuration structure.
Definition EspTypes_I2C.h:195
hf_pin_num_t sda_io_num
SDA GPIO pin number.
Definition EspTypes_I2C.h:197
hf_i2c_master_bus_config_t() noexcept
Default constructor with sensible defaults.
Definition EspTypes_I2C.h:212
struct hf_i2c_master_bus_config_t::@0 flags
bool allow_pd
Definition EspTypes_I2C.h:206
uint32_t trans_queue_depth
Transaction queue depth for async ops.
Definition EspTypes_I2C.h:200
i2c_port_t i2c_port
I2C port number (0 to MAX_PORTS-1)
Definition EspTypes_I2C.h:196
hf_pin_num_t scl_io_num
SCL GPIO pin number.
Definition EspTypes_I2C.h:198
hf_i2c_mode_t mode
Operation mode (sync/async)
Definition EspTypes_I2C.h:199
hf_i2c_clock_source_t clk_source
Clock source selection.
Definition EspTypes_I2C.h:201
uint32_t intr_priority
Interrupt priority (0-7, 0=lowest)
Definition EspTypes_I2C.h:203
bool enable_internal_pullup
Definition EspTypes_I2C.h:205
hf_i2c_glitch_filter_t glitch_ignore_cnt
Digital glitch filter length.
Definition EspTypes_I2C.h:202
Multi-buffer I2C transaction structure.
Definition EspTypes_I2C.h:302
uint32_t flags
Transaction flags.
Definition EspTypes_I2C.h:306
uint16_t device_address
Target device address.
Definition EspTypes_I2C.h:303
hf_i2c_multi_buffer_transaction_t() noexcept
Default constructor.
Definition EspTypes_I2C.h:311
uint32_t timeout_ms
Transaction timeout.
Definition EspTypes_I2C.h:305
std::vector< hf_i2c_transaction_buffer_t > buffers
Buffer sequence.
Definition EspTypes_I2C.h:304
I2C slave configuration structure.
Definition EspTypes_I2C.h:245
hf_pin_num_t sda_io_num
SDA GPIO pin.
Definition EspTypes_I2C.h:249
uint32_t send_buf_depth
Send buffer depth.
Definition EspTypes_I2C.h:253
uint32_t intr_priority
Interrupt priority.
Definition EspTypes_I2C.h:255
hf_i2c_clock_source_t clk_source
Clock source selection.
Definition EspTypes_I2C.h:247
hf_pin_num_t scl_io_num
SCL GPIO pin.
Definition EspTypes_I2C.h:248
bool enable_internal_pullup
Enable internal pull-ups.
Definition EspTypes_I2C.h:256
hf_i2c_address_bits_t addr_bit_len
Address bit length.
Definition EspTypes_I2C.h:251
uint16_t slave_addr
Slave address.
Definition EspTypes_I2C.h:250
bool allow_pd
Allow power down in sleep modes.
Definition EspTypes_I2C.h:258
bool broadcast_en
Enable general call address (0x00) response.
Definition EspTypes_I2C.h:257
i2c_port_t i2c_port
I2C port number.
Definition EspTypes_I2C.h:246
hf_i2c_slave_config_t() noexcept
Default constructor with sensible defaults.
Definition EspTypes_I2C.h:263
uint32_t clk_speed_hz
SCL clock frequency.
Definition EspTypes_I2C.h:252
uint32_t receive_buf_depth
Receive buffer depth.
Definition EspTypes_I2C.h:254
I2C transaction buffer structure.
Definition EspTypes_I2C.h:280
hf_i2c_transaction_buffer_t(const uint8_t *buf, size_t len) noexcept
Constructor for read buffer.
Definition EspTypes_I2C.h:288
size_t length
Buffer length in bytes.
Definition EspTypes_I2C.h:282
bool is_write
true = write buffer, false = read buffer
Definition EspTypes_I2C.h:283
const uint8_t * buffer
Buffer pointer.
Definition EspTypes_I2C.h:281
hf_i2c_transaction_buffer_t(const uint8_t *buf, size_t len, bool write) noexcept
Constructor with explicit write/read flag.
Definition EspTypes_I2C.h:294