Implemented the newly created settings_screen interface callbacks and freeing the default LVGL screen when loading the first screen

This commit is contained in:
anschrammh 2025-04-29 12:57:59 +02:00
parent f352d498f4
commit 204c2442e1

View File

@ -6,6 +6,8 @@
#include "lv_port_indev.h"
#include "lv_port_tick.h"
#include "FreeRTOS.h"
/* Needed to retrieve FreeRTOS version */
#include "task.h"
#include "wm_include.h"
#include "lcd.h"
#include "watch_face.h"
@ -379,12 +381,51 @@ static void getBatteryVoltageCb(uint16_t *battery_voltage)
static void getMagnetometerRawDataCb(int16_t *field_x, int16_t *field_y, int16_t *field_z, float *temperature)
{
QMC5883L_MData_t raw_data = watch_peripherals_magnetometer_raw_data_read();
*field_x = raw_data.MFieldX;
*field_y = raw_data.MFieldY;
*field_z = raw_data.MFieldZ;
if(field_x && field_y && field_z)
{
watch_peripherals_axes_t axes = watch_peripherals_magnetometer_raw_data_read();
*field_x = axes.mag.x;
*field_y = axes.mag.y;
*field_z = axes.mag.z;
}
*temperature = watch_peripherals_magnetometer_temperature_read();
if(temperature)
*temperature = watch_peripherals_magnetometer_temperature_read();
}
static void getAccelerometerRawDataCb(int16_t *accel_x, int16_t *accel_y, int16_t *accel_z, float *temperature, uint32_t *step_count)
{
if(accel_x && accel_y && accel_z)
{
watch_peripherals_axes_t axes;
if(!watch_peripherals_accelerometer_accel_read(&axes))
{
APP_LOG_DEBUG("Failed to read accelerations");
}
else
{
*accel_x = axes.accel.x;
*accel_y = axes.accel.y;
*accel_z = axes.accel.z;
}
}
if(temperature)
{
if(!watch_peripherals_accelerometer_temperature_read(temperature))
{
APP_LOG_DEBUG("Failed to read accelerometer's temperature");
}
}
if(step_count)
{
if(!watch_peripherals_accelerometer_step_count_read(step_count))
{
APP_LOG_DEBUG("Failed to read step counts");
}
}
}
static void getBMP280DataCb(float *temperature, float *pressure)
@ -393,6 +434,21 @@ static void getBMP280DataCb(float *temperature, float *pressure)
*pressure = watch_peripherals_pressure_sensor_get_pressure(temperature) / 100.0;
}
static void getComponentVersionCb(const char **version, ComponentVersion_e component)
{
switch(component)
{
case COMPONENT_FREERTOS:
*version = (const char *)STRINGIFY_VALUE(tskKERNEL_VERSION_MAJOR)"."STRINGIFY_VALUE(tskKERNEL_VERSION_MINOR)"."STRINGIFY_VALUE(tskKERNEL_VERSION_BUILD);
break;
case COMPONENT_LVGL:
*version = (const char *)STRINGIFY_VALUE(LVGL_VERSION_MAJOR)"."STRINGIFY_VALUE(LVGL_VERSION_MINOR)"."STRINGIFY_VALUE(LVGL_VERSION_PATCH);
break;
default:
break;
}
}
static void saveSettingsToFlashCb(void)
{
// Only enable the settings save feature if we compile in SMART_WATCH_PCB_RELEASE mode
@ -451,7 +507,9 @@ SettingsScreenAPIInterface_t settingsScreenAPIInterface =
.getBLEDevicePairingKeyCb = &(getBLEDevicePairingKeyCb),
.getBatteryVoltageCb = &(getBatteryVoltageCb),
.getMagnetometerRawDataCb = &(getMagnetometerRawDataCb),
.getAccelerometerRawDataCb = &(getAccelerometerRawDataCb),
.getBMP280DataCb = &(getBMP280DataCb),
.getComponentVersionCb = &(getComponentVersionCb),
.saveSettingsCb = &(saveSettingsToFlashCb),
.factoryResetCb = &(performFactoryResetCb),
};
@ -632,13 +690,13 @@ static void settings_screen_on_state_change_cb(SettingsScreenState_e settingsScr
switch(settingsScreenState)
{
case SETTINGS_SCREEN_STATE_OPENED:
if(settingsScreenCategory == SETTINGS_SCREEN_CATEGORY_ABOUT)
if(settingsScreenCategory == SETTINGS_SCREEN_CATEGORY_SENSORS)
{
watch_peripherals_magnetometer_power_mode_set(QMC5883L_Mode_Control_Continuous);
}
break;
case SETTINGS_SCREEN_STATE_CLOSED:
if(settingsScreenCategory == SETTINGS_SCREEN_CATEGORY_ABOUT)
if(settingsScreenCategory == SETTINGS_SCREEN_CATEGORY_SENSORS)
{
watch_peripherals_magnetometer_power_mode_set(QMC5883L_Mode_Control_Standby);
}
@ -817,7 +875,8 @@ void gfx_task(void *param)
watch_face_register_step_counter_indicator_cb(&watchFace, &(step_count_cb));
watch_face_create(&watchFace);
lv_scr_load(watchFace.display);
/* Using this function to load the first screen allows to free the default screen obj */
lv_scr_load_anim(watchFace.display, LV_SCR_LOAD_ANIM_NONE, 0U, 0U, true);
//QMC5883L_set_calibration_data(-900, 2500, -1400, 1400, 2300, 7500, 0.0);