Skip to content

Commit

Permalink
major refactor and implement hal
Browse files Browse the repository at this point in the history
  • Loading branch information
fred13kim committed Dec 17, 2024
1 parent 4f73812 commit a690abe
Show file tree
Hide file tree
Showing 8 changed files with 257 additions and 115 deletions.
15 changes: 12 additions & 3 deletions components/fk/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,27 @@

int app_main(void)
{
mpu6050_init();
mpu6050_handle_t mpu6050_handle;
mpu6050_config_t mpu6050_config = {
.fs = FS_SEL_500,
.afs = AFS_SEL_4G,
.scl = (gpio_num_t) (40),
.sda = (gpio_num_t) (37),
};

i2c_mpu6050_raw_gyro_t raw_gyro;
mpu6050_init(&mpu6050_handle, &mpu6050_config);

mpu6050_raw_gyro_t raw_gyro;

float x, y, z;
for (;;) {
mpu6050_get_raw_gyro(dev_handle, &raw_gyro);
mpu6050_get_raw_gyro(&mpu6050_handle, &raw_gyro);
x = raw_gyro.gyro_raw_xout / 65.5;
y = raw_gyro.gyro_raw_yout / 65.5;
z = raw_gyro.gyro_raw_zout / 65.5;
printf("%f %f %f\n", x, y, z);
vTaskDelay(pdMS_TO_TICKS(10));
}

return EXIT_SUCCESS;
}
2 changes: 2 additions & 0 deletions lib/drivers/SConscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
env.Dir(f'{dir}')
for dir in [
'mpu6050',
'hal',
]
]
)
Expand All @@ -16,6 +17,7 @@
f'{driver}/SConscript.py'
for driver in [
'mpu6050',
'hal',
]
]
)
Expand Down
2 changes: 1 addition & 1 deletion lib/drivers/mpu6050/SConscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

Import('env')

source = [env.File('mpu6050.c')]
source = [env.File('mpu6050.c'), env.File('i2c_hal_esp32.c')]

Return('source')
24 changes: 24 additions & 0 deletions lib/drivers/mpu6050/i2c_hal.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#ifndef I2C_HAL_H
#define I2C_HAL_H

#include <stdint.h>

typedef struct i2c_hal_handle_s i2c_hal_handle_t;
typedef struct i2c_hal_config_s i2c_hal_config_t;

typedef struct {
void (*i2c_hal_init)(i2c_hal_handle_t *i2c_hal_handle,
i2c_hal_config_t *i2c_hal_config);
void (*i2c_hal_read)(i2c_hal_handle_t *i2c_hal_handle,
const uint8_t addr,
uint8_t *data,
uint32_t num_bytes);
void (*i2c_hal_write)(i2c_hal_handle_t *i2c_hal_handle,
const uint8_t addr,
uint8_t *data,
uint32_t num_bytes);
} i2c_hal_t;

extern i2c_hal_t i2c_hal;

#endif // I2C_HAL_H
70 changes: 70 additions & 0 deletions lib/drivers/mpu6050/i2c_hal_esp32.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#include "i2c_hal_esp32.h"

#include "i2c_hal.h"

#include <string.h>

#define I2C_MASTER_PORT I2C_NUM_0

#define I2C_TIMEOUT_MS 500

i2c_hal_t i2c_hal = {
.i2c_hal_init = i2c_hal_init,
.i2c_hal_read = i2c_hal_read,
.i2c_hal_write = i2c_hal_write,
};

void i2c_hal_init(
i2c_hal_handle_t *i2c_hal_handle, i2c_hal_config_t *i2c_hal_config)
{
i2c_master_bus_config_t i2c_master_conf = {
.clk_source = I2C_CLK_SRC_DEFAULT,
.i2c_port = I2C_MASTER_PORT,
.scl_io_num = i2c_hal_config->scl,
.sda_io_num = i2c_hal_config->sda,
.glitch_ignore_cnt = 7,
};

i2c_master_bus_handle_t bus_handle;

ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_master_conf, &bus_handle));

i2c_device_config_t i2c_dev_conf = {
.dev_addr_length = I2C_ADDR_BIT_LEN_7,

// should probably make a check that device_address &
// scl_speed_hz is configured properly before we continue
.device_address = i2c_hal_config->device_address,
.scl_speed_hz = i2c_hal_config->scl_speed_hz,
};

ESP_ERROR_CHECK(i2c_master_bus_add_device(
bus_handle, &i2c_dev_conf, &(i2c_hal_handle->dev_handle)));
}

void i2c_hal_read(i2c_hal_handle_t *i2c_hal_handle,
const uint8_t addr,
uint8_t *data,
uint32_t num_bytes)
{
i2c_master_transmit_receive(i2c_hal_handle->dev_handle,
&addr,
1,
data,
num_bytes,
I2C_TIMEOUT_MS);
}

void i2c_hal_write(i2c_hal_handle_t *i2c_hal_handle,
const uint8_t addr,
uint8_t *data,
uint32_t num_bytes)
{
uint8_t tx[num_bytes + 1];
tx[0] = addr;

memcpy(tx + 1, data, num_bytes);

i2c_master_transmit(
i2c_hal_handle->dev_handle, tx, sizeof(tx), I2C_TIMEOUT_MS);
}
30 changes: 30 additions & 0 deletions lib/drivers/mpu6050/i2c_hal_esp32.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#ifndef I2C_HAL_ESP32
#define I2C_HAL_ESP32

#include "i2c_hal.h"
#include <driver/i2c_master.h>
#include <freertos/FreeRTOS.h>

struct i2c_hal_handle_s {
i2c_master_dev_handle_t dev_handle;
};

struct i2c_hal_config_s {
uint8_t device_address;
uint32_t scl_speed_hz;
uint8_t scl;
uint8_t sda;
};

void i2c_hal_init(
i2c_hal_handle_t *i2c_hal_handle, i2c_hal_config_t *i2c_hal_config);
void i2c_hal_read(i2c_hal_handle_t *i2c_hal_handle,
const uint8_t addr,
uint8_t *data,
uint32_t num_bytes);
void i2c_hal_write(i2c_hal_handle_t *i2c_hal_handle,
const uint8_t addr,
uint8_t *data,
uint32_t num_bytes);

#endif // I2C_HAL_ESP32
Loading

0 comments on commit a690abe

Please sign in to comment.