From ef0abe0ab78fa720347202fa4c8c7e269f969ec6 Mon Sep 17 00:00:00 2001 From: anschrammh Date: Thu, 20 Apr 2023 13:14:05 +0200 Subject: [PATCH] Added new informations in the about section (raw magnetometer data, raw pressure and temperature and more). --- .../app/gfx/settings_screen.c | 85 ++++++++++++++++++- .../app/gfx/settings_screen.h | 14 +++ 2 files changed, 95 insertions(+), 4 deletions(-) diff --git a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c index 7cfb955..a39e75c 100644 --- a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c +++ b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.c @@ -26,6 +26,8 @@ static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *tex static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsScreen, lv_obj_t *item); static void _set_rtc_time_to_label(SettingsScreen_t * const settingsScreen); static void _set_battery_voltage_to_label(SettingsScreen_t * const settingsScreen); +static void _set_magnetometer_data_to_label(SettingsScreen_t * const settingsScreen); +static void _set_bmp280_data_to_label(SettingsScreen_t * const settingsScreen); static void _reset_switch_pointers(SettingsScreen_t * const settingsScreen); static void _enable_time_and_date_rollers(bool enabled, SettingsScreen_t * const settingsScreen); @@ -253,8 +255,16 @@ static void factory_reset_cb(lv_event_t *e) static void about_refresh_timer_cb(lv_timer_t *timer) { SettingsScreen_t *settingsScreen = timer->user_data; - _set_rtc_time_to_label(settingsScreen); - _set_battery_voltage_to_label(settingsScreen); + + static uint8_t timer_divider = 6; + if(timer_divider++ == 6) + { + _set_rtc_time_to_label(settingsScreen); + _set_battery_voltage_to_label(settingsScreen); + _set_bmp280_data_to_label(settingsScreen); + timer_divider = 0; + } + _set_magnetometer_data_to_label(settingsScreen); } static void load_time_and_date_side_screen(SettingsScreen_t *settingsScreen) @@ -589,9 +599,45 @@ static void load_about_side_screen(SettingsScreen_t *settingsScreen) lv_obj_align_to(settingsScreen->currentTime.current_time_label, rtc_time, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); _set_rtc_time_to_label(settingsScreen); + lv_obj_t *magnetometer_data = lv_label_create(settingsScreen->side_screen); + lv_label_set_text_static(magnetometer_data, "Magnetometer :"); + lv_obj_align_to(magnetometer_data, settingsScreen->currentTime.current_time_label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + + /* Display the magnetometer raw data with refresh */ + settingsScreen->magnetometer_x.label = lv_label_create(settingsScreen->side_screen); + lv_obj_set_style_text_color(settingsScreen->magnetometer_x.label, lv_color_make(130, 130, 130), LV_PART_MAIN); + lv_obj_align_to(settingsScreen->magnetometer_x.label, magnetometer_data, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + + settingsScreen->magnetometer_y.label = lv_label_create(settingsScreen->side_screen); + lv_obj_set_style_text_color(settingsScreen->magnetometer_y.label, lv_color_make(130, 130, 130), LV_PART_MAIN); + lv_obj_align_to(settingsScreen->magnetometer_y.label, settingsScreen->magnetometer_x.label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + + settingsScreen->magnetometer_z.label = lv_label_create(settingsScreen->side_screen); + lv_obj_set_style_text_color(settingsScreen->magnetometer_z.label, lv_color_make(130, 130, 130), LV_PART_MAIN); + lv_obj_align_to(settingsScreen->magnetometer_z.label, settingsScreen->magnetometer_y.label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + + settingsScreen->magnetometer_temperature.label = lv_label_create(settingsScreen->side_screen); + lv_obj_set_style_text_color(settingsScreen->magnetometer_temperature.label, lv_color_make(130, 130, 130), LV_PART_MAIN); + lv_obj_align_to(settingsScreen->magnetometer_temperature.label, settingsScreen->magnetometer_z.label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + _set_magnetometer_data_to_label(settingsScreen); + + lv_obj_t *bmp280_data = lv_label_create(settingsScreen->side_screen); + lv_label_set_text_static(bmp280_data, "Pressure & temp :"); + lv_obj_align_to(bmp280_data, settingsScreen->magnetometer_temperature.label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + + /* Display pressure and temperature sensor data with refresh */ + settingsScreen->bmp280_pressure.label = lv_label_create(settingsScreen->side_screen); + lv_obj_set_style_text_color(settingsScreen->bmp280_pressure.label, lv_color_make(130, 130, 130), LV_PART_MAIN); + lv_obj_align_to(settingsScreen->bmp280_pressure.label, bmp280_data, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + + settingsScreen->bmp280_temperature.label = lv_label_create(settingsScreen->side_screen); + lv_obj_set_style_text_color(settingsScreen->bmp280_temperature.label, lv_color_make(130, 130, 130), LV_PART_MAIN); + lv_obj_align_to(settingsScreen->bmp280_temperature.label, settingsScreen->bmp280_pressure.label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + _set_bmp280_data_to_label(settingsScreen); + lv_obj_t *battery_label = lv_label_create(settingsScreen->side_screen); lv_label_set_text_static(battery_label, "Battery Voltage :"); - lv_obj_align_to(battery_label, settingsScreen->currentTime.current_time_label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); + lv_obj_align_to(battery_label, settingsScreen->bmp280_temperature.label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 5); settingsScreen->batteryVoltage.batteryVoltageLabel = lv_label_create(settingsScreen->side_screen); _set_battery_voltage_to_label(settingsScreen); @@ -617,7 +663,7 @@ static void load_about_side_screen(SettingsScreen_t *settingsScreen) lv_timer_del(settingsScreen->about_refresh_timer); settingsScreen->about_refresh_timer = NULL; } - settingsScreen->about_refresh_timer = lv_timer_create(&(about_refresh_timer_cb), 1000, settingsScreen); + settingsScreen->about_refresh_timer = lv_timer_create(&(about_refresh_timer_cb), 150, settingsScreen); } static void menu_list_item_event_handler(lv_event_t * e) @@ -786,6 +832,37 @@ static void _set_battery_voltage_to_label(SettingsScreen_t * const settingsScree lv_label_set_text_static(settingsScreen->batteryVoltage.batteryVoltageLabel, settingsScreen->batteryVoltage.batteryVoltageText); } +static void _set_magnetometer_data_to_label(SettingsScreen_t * const settingsScreen) +{ + int16_t field_x = 0, field_y = 0, field_z = 0; + float temperature = 0.0; + if(settingsScreen->settingsScreenAPIInterface.getMagnetometerRawDataCb) settingsScreen->settingsScreenAPIInterface.getMagnetometerRawDataCb(&field_x, &field_y, &field_z, &temperature); + + sprintf(settingsScreen->magnetometer_x.text, "x: %d", field_x); + lv_label_set_text_static(settingsScreen->magnetometer_x.label, settingsScreen->magnetometer_x.text); + + sprintf(settingsScreen->magnetometer_y.text, "y: %d", field_y); + lv_label_set_text_static(settingsScreen->magnetometer_y.label, settingsScreen->magnetometer_y.text); + + sprintf(settingsScreen->magnetometer_z.text, "z: %d", field_z); + lv_label_set_text_static(settingsScreen->magnetometer_z.label, settingsScreen->magnetometer_z.text); + + sprintf(settingsScreen->magnetometer_temperature.text, "%.2f °C", temperature); + lv_label_set_text_static(settingsScreen->magnetometer_temperature.label, settingsScreen->magnetometer_temperature.text); +} + +static void _set_bmp280_data_to_label(SettingsScreen_t * const settingsScreen) +{ + float pressure = 0.0, temperature = 0.0; + if(settingsScreen->settingsScreenAPIInterface.getBMP280DataCb) settingsScreen->settingsScreenAPIInterface.getBMP280DataCb(&temperature, &pressure); + + sprintf(settingsScreen->bmp280_pressure.text, "%.2f hPa", pressure); + lv_label_set_text_static(settingsScreen->bmp280_pressure.label, settingsScreen->bmp280_pressure.text); + + sprintf(settingsScreen->bmp280_temperature.text, "%.2f °C", temperature); + lv_label_set_text_static(settingsScreen->bmp280_temperature.label, settingsScreen->bmp280_temperature.text); +} + static void _reset_switch_pointers(SettingsScreen_t * const settingsScreen) { settingsScreen->auto_set_time_switch = NULL; diff --git a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h index 108d0e7..11ba482 100644 --- a/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h +++ b/src/W800_SDK_v1.00.10/app/gfx/settings_screen.h @@ -25,6 +25,8 @@ typedef struct SettingsScreenAPIInterface void (*setLanguageSettingsCb)(uint8_t *language, SettingMode_e mode); void (*getBLEDeviceNameCb)(const char **dev_name); void (*getBatteryVoltageCb)(uint16_t *battery_voltage); + void (*getMagnetometerRawDataCb)(int16_t *field_x, int16_t *field_y, int16_t *field_z, float *temperature); + void (*getBMP280DataCb)(float *temperature, float *pressure); void (*saveSettingsCb)(void); void (*factoryResetCb)(void); } SettingsScreenAPIInterface_t; @@ -67,6 +69,18 @@ typedef struct SettingsScreen lv_obj_t *batteryVoltageLabel; char batteryVoltageText[8]; } batteryVoltage; + + struct + { + lv_obj_t *label; + char text[11]; + } magnetometer_x, magnetometer_y, magnetometer_z, magnetometer_temperature, bmp280_temperature; + + struct + { + lv_obj_t *label; + char text[13]; + } bmp280_pressure; /* Main screen */ lv_obj_t *display;