Midnight Sun Firmware
Loading...
Searching...
No Matches
i2c.h
1#pragma once
2
3/************************************************************************************************
4 * @file i2c.h
5 *
6 * @brief I2C Library Header file
7 *
8 * @date 2024-11-02
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13#include <stddef.h>
14#include <stdint.h>
15
16/* Inter-component Headers */
17
18/* Intra-component Headers */
19#include "gpio.h"
20#include "status.h"
21
29#define I2C_TIMEOUT_MS 100U
31#define I2C_MAX_NUM_DATA 32U
32
34typedef uint8_t I2CAddress;
35
37typedef enum {
42} I2CPort;
43
45typedef enum {
49} I2CSpeed;
50
56typedef struct {
61
71StatusCode i2c_init(I2CPort i2c, const I2CSettings *settings);
72
84StatusCode i2c_read(I2CPort i2c, I2CAddress addr, uint8_t *rx_data, size_t rx_len);
85
97StatusCode i2c_write(I2CPort i2c, I2CAddress addr, uint8_t *tx_data, size_t tx_len);
98
111StatusCode i2c_read_reg(I2CPort i2c, I2CAddress addr, uint8_t reg, uint8_t *rx_data, size_t rx_len);
112
125StatusCode i2c_write_reg(I2CPort i2c, I2CAddress addr, uint8_t reg, uint8_t *tx_data, size_t tx_len);
126
140StatusCode i2c_read_mem(I2CPort i2c, I2CAddress addr, uint8_t mem_addr, uint8_t *rx_data, size_t rx_len);
141
142#ifdef MS_PLATFORM_X86
143
152StatusCode i2c_set_rx_data(I2CPort i2c, const uint8_t *data, size_t len);
153
162StatusCode i2c_get_tx_data(I2CPort i2c, uint8_t *data, size_t len);
163
169size_t i2c_get_tx_num_bytes(I2CPort i2c);
170
177StatusCode i2c_clear_buffers(I2CPort i2c);
178
179#endif
180
StatusCode i2c_read_mem(I2CPort i2c, I2CAddress addr, uint8_t mem_addr, uint8_t *rx_data, size_t rx_len)
Reads from a memory address using the I2C port.
Definition: i2c.c:309
StatusCode i2c_write_reg(I2CPort i2c, I2CAddress addr, uint8_t reg, uint8_t *tx_data, size_t tx_len)
Writes data using the I2C port to the specified address and register.
Definition: i2c.c:299
uint8_t I2CAddress
I2C address type.
Definition: i2c.h:34
StatusCode i2c_read(I2CPort i2c, I2CAddress addr, uint8_t *rx_data, size_t rx_len)
Reads data using the I2C port from the specified address.
Definition: i2c.c:286
StatusCode i2c_init(I2CPort i2c, const I2CSettings *settings)
Initialize I2C instance.
Definition: i2c.c:211
I2CPort
I2C Port selection.
Definition: i2c.h:37
I2CSpeed
I2C speed type.
Definition: i2c.h:45
StatusCode i2c_read_reg(I2CPort i2c, I2CAddress addr, uint8_t reg, uint8_t *rx_data, size_t rx_len)
Reads data using the I2C port from the specified address and register.
Definition: i2c.c:294
StatusCode i2c_write(I2CPort i2c, I2CAddress addr, uint8_t *tx_data, size_t tx_len)
Writes data using the I2C port to the specified address.
Definition: i2c.c:290
@ I2C_PORT_1
Definition: i2c.h:38
@ I2C_PORT_2
Definition: i2c.h:39
@ NUM_I2C_PORTS
Definition: i2c.h:41
@ I2C_PORT_3
Definition: i2c.h:40
@ NUM_I2C_SPEEDS
Definition: i2c.h:48
@ I2C_SPEED_STANDARD
Definition: i2c.h:46
@ I2C_SPEED_FAST
Definition: i2c.h:47
StatusCode
StatusCodes for various errors.
Definition: status.h:27
Port and pin data.
Definition: network.h:62
I2C settings struct.
Definition: i2c.h:56
GpioAddress scl
Definition: i2c.h:59
I2CSpeed speed
Definition: i2c.h:57
GpioAddress sda
Definition: i2c.h:58