diff --git a/bootloader/power/bq24193.c b/bootloader/power/bq24193.c index 6dd3cb1..e5f24a7 100644 --- a/bootloader/power/bq24193.c +++ b/bootloader/power/bq24193.c @@ -31,6 +31,7 @@ int bq24193_get_property(enum BQ24193_reg_prop prop, int *value) case BQ24193_InputVoltageLimit: // Input voltage limit (mV). data = i2c_recv_byte(I2C_1, BQ24193_I2C_ADDR, BQ24193_InputSource); data = (data & BQ24193_INCONFIG_VINDPM_MASK) >> 3; + *value = 0; *value += ((data >> 0) & 1) ? 80 : 0; *value += ((data >> 1) & 1) ? 160 : 0; *value += ((data >> 2) & 1) ? 320 : 0; @@ -77,6 +78,7 @@ int bq24193_get_property(enum BQ24193_reg_prop prop, int *value) case BQ24193_FastChargeCurrentLimit: // Fast charge current limit (mA). data = i2c_recv_byte(I2C_1, BQ24193_I2C_ADDR, BQ24193_ChrgCurr); data = (data & BQ24193_CHRGCURR_ICHG_MASK) >> 2; + *value = 0; *value += ((data >> 0) & 1) ? 64 : 0; *value += ((data >> 1) & 1) ? 128 : 0; *value += ((data >> 2) & 1) ? 256 : 0; @@ -92,6 +94,7 @@ int bq24193_get_property(enum BQ24193_reg_prop prop, int *value) case BQ24193_ChargeVoltageLimit: // Charge voltage limit (mV). data = i2c_recv_byte(I2C_1, BQ24193_I2C_ADDR, BQ24193_ChrgVolt); data = (data & BQ24193_CHRGVOLT_VREG) >> 2; + *value = 0; *value += ((data >> 0) & 1) ? 16 : 0; *value += ((data >> 1) & 1) ? 32 : 0; *value += ((data >> 2) & 1) ? 64 : 0; diff --git a/bootloader/power/max17050.c b/bootloader/power/max17050.c index 635a437..bfd80c4 100644 --- a/bootloader/power/max17050.c +++ b/bootloader/power/max17050.c @@ -46,6 +46,12 @@ #pragma GCC push_options #pragma GCC optimize ("Os") +static u32 battery_voltage = 0; +u32 max17050_get_cached_batt_volt() +{ + return battery_voltage; +} + int max17050_get_property(enum MAX17050_reg reg, int *value) { u16 data; @@ -74,6 +80,7 @@ int max17050_get_property(enum MAX17050_reg reg, int *value) case MAX17050_VCELL: // Voltage now. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_VCELL); *value = data * 625 / 8 / 1000; + battery_voltage = *value; break; case MAX17050_AvgVCELL: // Voltage avg. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_AvgVCELL); diff --git a/bootloader/power/max17050.h b/bootloader/power/max17050.h index 30a7ca0..eb55e65 100644 --- a/bootloader/power/max17050.h +++ b/bootloader/power/max17050.h @@ -24,6 +24,8 @@ #ifndef __MAX17050_H_ #define __MAX17050_H_ +#include "../utils/types.h" + #define MAX17050_STATUS_BattAbsent (1 << 3) #define MAX17050_DEFAULT_SNS_RESISTOR 10000 @@ -128,5 +130,6 @@ enum MAX17050_reg { int max17050_get_property(enum MAX17050_reg reg, int *value); int max17050_fix_configuration(); +u32 max17050_get_cached_batt_volt(); #endif /* __MAX17050_H_ */ diff --git a/nyx/nyx_gui/power/bq24193.c b/nyx/nyx_gui/power/bq24193.c index 6aa5dcb..d95b322 100644 --- a/nyx/nyx_gui/power/bq24193.c +++ b/nyx/nyx_gui/power/bq24193.c @@ -28,6 +28,7 @@ int bq24193_get_property(enum BQ24193_reg_prop prop, int *value) case BQ24193_InputVoltageLimit: // Input voltage limit (mV). data = i2c_recv_byte(I2C_1, BQ24193_I2C_ADDR, BQ24193_InputSource); data = (data & BQ24193_INCONFIG_VINDPM_MASK) >> 3; + *value = 0; *value += ((data >> 0) & 1) ? 80 : 0; *value += ((data >> 1) & 1) ? 160 : 0; *value += ((data >> 2) & 1) ? 320 : 0; @@ -74,6 +75,7 @@ int bq24193_get_property(enum BQ24193_reg_prop prop, int *value) case BQ24193_FastChargeCurrentLimit: // Fast charge current limit (mA). data = i2c_recv_byte(I2C_1, BQ24193_I2C_ADDR, BQ24193_ChrgCurr); data = (data & BQ24193_CHRGCURR_ICHG_MASK) >> 2; + *value = 0; *value += ((data >> 0) & 1) ? 64 : 0; *value += ((data >> 1) & 1) ? 128 : 0; *value += ((data >> 2) & 1) ? 256 : 0; @@ -89,6 +91,7 @@ int bq24193_get_property(enum BQ24193_reg_prop prop, int *value) case BQ24193_ChargeVoltageLimit: // Charge voltage limit (mV). data = i2c_recv_byte(I2C_1, BQ24193_I2C_ADDR, BQ24193_ChrgVolt); data = (data & BQ24193_CHRGVOLT_VREG) >> 2; + *value = 0; *value += ((data >> 0) & 1) ? 16 : 0; *value += ((data >> 1) & 1) ? 32 : 0; *value += ((data >> 2) & 1) ? 64 : 0; diff --git a/nyx/nyx_gui/power/max17050.c b/nyx/nyx_gui/power/max17050.c index b3a8b21..5fc9e3f 100644 --- a/nyx/nyx_gui/power/max17050.c +++ b/nyx/nyx_gui/power/max17050.c @@ -43,6 +43,12 @@ #define MAX17050_VMAX_TOLERANCE 50 /* 50 mV */ +static u32 battery_voltage = 0; +u32 max17050_get_cached_batt_volt() +{ + return battery_voltage; +} + int max17050_get_property(enum MAX17050_reg reg, int *value) { u16 data; @@ -71,6 +77,7 @@ int max17050_get_property(enum MAX17050_reg reg, int *value) case MAX17050_VCELL: // Voltage now. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_VCELL); *value = data * 625 / 8 / 1000; + battery_voltage = *value; break; case MAX17050_AvgVCELL: // Voltage avg. i2c_recv_buf_small((u8 *)&data, 2, I2C_1, MAXIM17050_I2C_ADDR, MAX17050_AvgVCELL); diff --git a/nyx/nyx_gui/power/max17050.h b/nyx/nyx_gui/power/max17050.h index 30a7ca0..eb55e65 100644 --- a/nyx/nyx_gui/power/max17050.h +++ b/nyx/nyx_gui/power/max17050.h @@ -24,6 +24,8 @@ #ifndef __MAX17050_H_ #define __MAX17050_H_ +#include "../utils/types.h" + #define MAX17050_STATUS_BattAbsent (1 << 3) #define MAX17050_DEFAULT_SNS_RESISTOR 10000 @@ -128,5 +130,6 @@ enum MAX17050_reg { int max17050_get_property(enum MAX17050_reg reg, int *value); int max17050_fix_configuration(); +u32 max17050_get_cached_batt_volt(); #endif /* __MAX17050_H_ */