From f0a6562c99555e4c8bf682dbae90bfd50cbf0371 Mon Sep 17 00:00:00 2001 From: anschrammh Date: Tue, 29 Apr 2025 07:11:22 +0200 Subject: [PATCH] Added header comments in both files, improved the temperature reading function and refactored the calibrated magnetic fields reading function --- .../app/app_drivers/i2c/QMC5883L.c | 38 ++++++++++--------- .../app/app_drivers/i2c/QMC5883L.h | 10 +++++ 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.c b/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.c index 2b82c7d..38bf5f5 100644 --- a/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.c +++ b/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.c @@ -1,3 +1,13 @@ +/** + * @file QMC5883L.c + * @author Anatole SCHRAMM-HENRY + * @brief QMC5883L magnetometer functions implementation source file. + * @version 0.1 + * @date 2025-03-17 + * + * @copyright MIT + */ + #include #include "i2c.h" #include "QMC5883L.h" @@ -45,18 +55,17 @@ bool QMC5883L_software_reset(void) float QMC5883L_get_temperature(void) { - uint8_t data; + uint8_t data[2]; int16_t raw_temp; + float temperature = 0.0F; - i2c_read_reg(QMC5883L_I2C_ADDR, QMC5883L_TEMP_MSB_REG, &data); + if(i2c_read(QMC5883L_I2C_ADDR, QMC5883L_TEMP_LSB_REG, data, sizeof data)) + { + raw_temp = (data[1] << 8) | data[0]; + temperature = (float)raw_temp / 100.0F + _calibration_data.temperature_offset; + } - raw_temp = data << 8; - - i2c_read_reg(QMC5883L_I2C_ADDR, QMC5883L_TEMP_LSB_REG, &data); - - raw_temp |= data; - - return (float) raw_temp / 100.0 + _calibration_data.temperature_offset; + return temperature; } bool QMC5883L_is_data_available(void) @@ -96,15 +105,10 @@ QMC5883L_MData_t QMC5883L_get_MFields_raw(void) QMC5883L_MData_calibrated_t QMC5883L_get_MFields_calibrated(void) { - uint8_t data[6]; - QMC5883L_MData_calibrated_t Mdata = {.MFieldX = -1, .MFieldY = -1, .MFieldZ = -1}; + /* Read the raw magnetic field values first */ + QMC5883L_MData_t raw_data = QMC5883L_get_MFields_raw(); - if(i2c_read(QMC5883L_I2C_ADDR, QMC5883L_DATA_X_LSB_REG, data, sizeof data)) - { - Mdata.MFieldX = (data[1] << 8) | data[0]; - Mdata.MFieldY = (data[3] << 8) | data[2]; - Mdata.MFieldZ = (data[5] << 8) | data[4]; - } + QMC5883L_MData_calibrated_t Mdata = {.MFieldX = raw_data.MFieldX, .MFieldY = raw_data.MFieldY, .MFieldZ = raw_data.MFieldZ}; int x_offset = (_calibration_data.x_min + _calibration_data.x_max) / 2; int y_offset = (_calibration_data.y_min + _calibration_data.y_max) / 2; diff --git a/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.h b/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.h index 374f9f2..ec820f0 100644 --- a/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.h +++ b/src/W800_SDK_v1.00.10/app/app_drivers/i2c/QMC5883L.h @@ -1,3 +1,13 @@ +/** + * @file QMC5883L.h + * @author Anatole SCHRAMM-HENRY + * @brief QMC5883L magnetometer functions API header file. + * @version 0.1 + * @date 2025-03-17 + * + * @copyright MIT + */ + #ifndef QMC5883L_H #define QMC5883L_H