Compare commits

...

7 Commits

18 changed files with 1320 additions and 601 deletions

View File

@ -168,15 +168,15 @@ lv_font_conv -v
python3, the **built_in_font_gen.py** script : python3, the **built_in_font_gen.py** script :
```bash ```bash
#Here are some font regeneration examples using the tool : #Here are some font regeneration examples using the tool :
python3 built_in_font_gen.py -s 14 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 -o lv_font_montserrat_14.c python3 built_in_font_gen.py -s 14 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 -o lv_font_montserrat_14.c
python3 built_in_font_gen.py -s 16 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 -o lv_font_montserrat_16.c python3 built_in_font_gen.py -s 16 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 -o lv_font_montserrat_16.c
python3 built_in_font_gen.py -s 24 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 -o lv_font_montserrat_24.c python3 built_in_font_gen.py -s 24 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 -o lv_font_montserrat_24.c
python3 built_in_font_gen.py -s 28 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 -o lv_font_montserrat_28.c python3 built_in_font_gen.py -s 28 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 -o lv_font_montserrat_28.c
python3 built_in_font_gen.py -s 30 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 -o lv_font_montserrat_30.c python3 built_in_font_gen.py -s 30 --bpp 4 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 -o lv_font_montserrat_30.c
``` ```
7) Once done, the new generated fonts file will be in the same folder (***src/W800_SDK_v1.00.10/lvlg/lvgl_v8.3/scripts/built_in_font***) named **lv_font_'font name'_'size'.c** 7) Once done, the new generated fonts file will be in the same folder (***src/W800_SDK_v1.00.10/lvlg/lvgl_v8.3/scripts/built_in_font***) named **lv_font_'font name'_'size'.c**
like lv_font_monserrat_14.c, happy fonting !!! like lv_font_monserrat_14.c, happy fonting !!!

View File

@ -98,11 +98,11 @@ float BMP280_get_temperature(void);
float BMP280_get_pressure(float * const temperature); float BMP280_get_pressure(float * const temperature);
/** /**
* @brief Returns an approximation of the altitude using the measured atmospheric pressure. * @brief Returns an approximation of the altitude in meters using the measured atmospheric pressure.
* *
* @param pressureAtSeeLevel the current atmospheric pressure at see level in hPa. Can be 0 if unknown and a default value of 1013.25 hPa will be used. * @param pressureAtSeeLevel the current atmospheric pressure at see level in hPa. Can be 0 if unknown and a default value of 1013.25 hPa will be used.
* @param pressure the address of a float which will contain the measured pressure. If not needed, can be NULL. * @param pressure the address of a float which will contain the measured pressure in Pa. If not needed, can be NULL.
* @param temperature the address of a float which will contain the measured temperature. If not needed, can be NULL. * @param temperature the address of a float which will contain the measured temperature in °C. If not needed, can be NULL.
* @return float the altitude in meters * @return float the altitude in meters
*/ */
float BMP280_get_altitude(float pressureAtSeeLevel, float * const pressure, float * const temperature); float BMP280_get_altitude(float pressureAtSeeLevel, float * const pressure, float * const temperature);

View File

@ -2,9 +2,12 @@
* @file altimeter_screen.c * @file altimeter_screen.c
* @author Anatole SCHRAMM-HENRY * @author Anatole SCHRAMM-HENRY
* @brief Altimeter screen source file containing the application's implementations * @brief Altimeter screen source file containing the application's implementations
* @version 0.1 * @version 0.2
* @date 2024-01-16 * @date 2024-01-16
* *
* Updated on 2024-07-31 Added time and date on the altitude screen, added colors to texts and modified
* the buttons presses which now require a long press to react.
*
* @copyright MIT * @copyright MIT
* *
*/ */
@ -22,8 +25,10 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen);
static void _create_altitude_setting_display(AltimeterScreen_t * const altimeterScreen); static void _create_altitude_setting_display(AltimeterScreen_t * const altimeterScreen);
static void _update_min_and_max_pressure_data(AltimeterScreen_t * const altimeterScreen, float minPressure, float maxPressure); static void _update_min_and_max_pressure_data(AltimeterScreen_t * const altimeterScreen, float minPressure, float maxPressure);
static void _update_pressure_chart(AltimeterScreen_t * const altimeterScreen); static void _update_pressure_chart(AltimeterScreen_t * const altimeterScreen);
static void _update_pressure_info(AltimeterScreen_t * const altimeterScreen);
static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen); static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen);
static void _update_temperature_info(AltimeterScreen_t * const altimeterScreen, float temperature); static void _update_temperature_info(AltimeterScreen_t * const altimeterScreen, float temperature);
static void _update_date_time_info(AltimeterScreen_t * const altimeterScreen);
static void gesture_event_cb(lv_event_t *e) static void gesture_event_cb(lv_event_t *e)
{ {
@ -117,10 +122,19 @@ static void altitude_display_cleanup_event_cb(lv_event_t *e)
altimeterScreen->altitudeUpdateTimer = NULL; altimeterScreen->altitudeUpdateTimer = NULL;
} }
if(altimeterScreen->dateTimeUpdateTimer)
{
lv_timer_del(altimeterScreen->dateTimeUpdateTimer);
altimeterScreen->dateTimeUpdateTimer = NULL;
}
altimeterScreen->altitudeValue.value = NULL; altimeterScreen->altitudeValue.value = NULL;
altimeterScreen->altitudeValue.unit = NULL; altimeterScreen->altitudeValue.unit = NULL;
altimeterScreen->vsiValue.value_unit = NULL; altimeterScreen->vsiValue.value_unit = NULL;
altimeterScreen->temperatureValue.value = NULL; altimeterScreen->temperatureValue.value = NULL;
altimeterScreen->dateTimeValue.timeLabel = NULL;
altimeterScreen->dateTimeValue.monthLabel = NULL;
altimeterScreen->dateTimeValue.dayLabel = NULL;
LV_LOG_USER("Altitude display cleanup"); LV_LOG_USER("Altitude display cleanup");
} }
@ -138,27 +152,7 @@ static void altitude_setting_display_cleanup_event_cb(lv_event_t *e)
static void pressure_update_timer_cb(lv_timer_t *timer) static void pressure_update_timer_cb(lv_timer_t *timer)
{ {
AltimeterScreen_t *altimeterScreen = timer->user_data; AltimeterScreen_t *altimeterScreen = timer->user_data;
_update_pressure_info(altimeterScreen);
if(altimeterScreen->altimeterScreenMeasurementCb)
{
LV_LOG_USER("Updating pressure measurements");
float pressure;
/* We don't need to retrieve the temperature nor the altitude in this view */
altimeterScreen->altimeterScreenMeasurementCb(NULL, &pressure, NULL);
sprintf(altimeterScreen->pressureValue.value_text, "%.2f", pressure);
if(altimeterScreen->pressureValue.value)
{
lv_label_set_text_static(altimeterScreen->pressureValue.value, altimeterScreen->pressureValue.value_text);
}
//Mock up part needs to be changed on embedded target
altimeter_screen_shift_chart_pressure_measurement(altimeterScreen, pressure);
}
else
{
LV_LOG_USER("altimeterScreenMeasurementCb is NULL, be sure to register a callback !");
}
} }
static void altitude_update_timer_cb(lv_timer_t *timer) static void altitude_update_timer_cb(lv_timer_t *timer)
@ -188,6 +182,12 @@ static void altitude_update_timer_cb(lv_timer_t *timer)
} }
} }
static void date_time_update_timer_cb(lv_timer_t *timer)
{
AltimeterScreen_t *altimeterScreen = timer->user_data;
_update_date_time_info(altimeterScreen);
}
static void reset_pressure_event_cb(lv_event_t *e) static void reset_pressure_event_cb(lv_event_t *e)
{ {
AltimeterScreen_t *altimeterScreen = lv_event_get_user_data(e); AltimeterScreen_t *altimeterScreen = lv_event_get_user_data(e);
@ -280,17 +280,19 @@ static void apply_altitude_setting_event_cb(lv_event_t *e)
{ {
AltimeterScreen_t *altimeterScreen = lv_event_get_user_data(e); AltimeterScreen_t *altimeterScreen = lv_event_get_user_data(e);
bool apply_action = (bool)lv_obj_get_user_data(lv_event_get_target(e));
/* Call the user feedback function if one is registered */ /* Call the user feedback function if one is registered */
if(altimeterScreen->altimeterScreenUserFeedbackCb)altimeterScreen->altimeterScreenUserFeedbackCb(); if(altimeterScreen->altimeterScreenUserFeedbackCb)altimeterScreen->altimeterScreenUserFeedbackCb();
altimeterScreen->altitudeOffset_spinbox.value = lv_spinbox_get_value(altimeterScreen->altitudeOffset_spinbox.spinbox); if(apply_action)
{
altimeterScreen->altitudeOffset = altimeterScreen->lastReadAltitude - (altimeterScreen->altitudeOffset_spinbox.value / 10.0); altimeterScreen->altitudeOffset_spinbox.value = lv_spinbox_get_value(altimeterScreen->altitudeOffset_spinbox.spinbox);
altimeterScreen->altitudeOffset = altimeterScreen->lastReadAltitude - (altimeterScreen->altitudeOffset_spinbox.value / 10.0);
altimeterScreen->vsiFloat = altimeterScreen->lastReadAltitude; altimeterScreen->vsiFloat = altimeterScreen->lastReadAltitude;
}
altimeterScreen->altimeterScreenDisplayedView = ALTIMETER_SCREEN_ALTITUDE_VIEW; altimeterScreen->altimeterScreenDisplayedView = ALTIMETER_SCREEN_ALTITUDE_VIEW;
lv_obj_t *display = _create_altimeter_display(altimeterScreen); lv_obj_t *display = _create_altimeter_display(altimeterScreen);
if(display) lv_scr_load_anim(display, LV_SCR_LOAD_ANIM_MOVE_BOTTOM, 400, 0, true); if(display) lv_scr_load_anim(display, LV_SCR_LOAD_ANIM_MOVE_BOTTOM, 400, 0, true);
@ -341,6 +343,28 @@ void altimeter_screen_register_measurement_cb(AltimeterScreen_t * const altimete
altimeterScreen->altimeterScreenMeasurementCb = altimeterScreenMeasurementCb; altimeterScreen->altimeterScreenMeasurementCb = altimeterScreenMeasurementCb;
} }
void altimeter_screen_register_date_time_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenDateTimeCb_t altimeterScreenDateTimeCb)
{
if(!altimeterScreen)
{
LV_LOG_ERROR("NULL pointer given !");
return;
}
altimeterScreen->altimeterScreenDateTimeCb = altimeterScreenDateTimeCb;
}
void altimeter_screen_set_displayed_hour_format(AltimeterScreen_t * const altimeterScreen, bool hour_24H_format)
{
if(!altimeterScreen)
{
LV_LOG_ERROR("NULL pointer given !");
return;
}
altimeterScreen->hour_24H_format = hour_24H_format;
}
void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure) void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure)
{ {
if(!altimeterScreen) if(!altimeterScreen)
@ -438,7 +462,8 @@ static void _create_pressure_display(AltimeterScreen_t * const altimeterScreen)
altimeterScreen->pressureValue.value = lv_label_create(inner_circle); altimeterScreen->pressureValue.value = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->pressureValue.value, &lv_font_montserrat_30, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->pressureValue.value, &lv_font_montserrat_30, LV_PART_MAIN);
lv_obj_align(altimeterScreen->pressureValue.value, LV_ALIGN_TOP_MID, 0, 15); lv_obj_align(altimeterScreen->pressureValue.value, LV_ALIGN_TOP_MID, 0, 15);
lv_label_set_text_static(altimeterScreen->pressureValue.value, altimeterScreen->pressureValue.value_text);
_update_pressure_info(altimeterScreen);
if(altimeterScreen->pressureValue.unit) if(altimeterScreen->pressureValue.unit)
{ {
@ -456,7 +481,8 @@ static void _create_pressure_display(AltimeterScreen_t * const altimeterScreen)
lv_img_set_src(reset_btn, &altimeter_asset_reset_icon); lv_img_set_src(reset_btn, &altimeter_asset_reset_icon);
lv_obj_align(reset_btn, LV_ALIGN_CENTER, 0 ,0); lv_obj_align(reset_btn, LV_ALIGN_CENTER, 0 ,0);
lv_obj_add_flag(reset_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE); lv_obj_add_flag(reset_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(reset_btn, &(reset_pressure_event_cb), LV_EVENT_CLICKED, altimeterScreen); /* Using a long pressed event so that no missclicks trigger a reset */
lv_obj_add_event_cb(reset_btn, &(reset_pressure_event_cb), LV_EVENT_LONG_PRESSED, altimeterScreen);
/* Set the min and max text */ /* Set the min and max text */
if(altimeterScreen->minValue.value_unit) if(altimeterScreen->minValue.value_unit)
@ -551,6 +577,47 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
lv_obj_set_style_border_color(inner_circle, lv_color_make(238, 82, 83), LV_PART_MAIN); lv_obj_set_style_border_color(inner_circle, lv_color_make(238, 82, 83), LV_PART_MAIN);
lv_obj_set_scroll_dir(inner_circle, LV_DIR_NONE); lv_obj_set_scroll_dir(inner_circle, LV_DIR_NONE);
/* Let's create the month label */
if(altimeterScreen->dateTimeValue.monthLabel)
{
LV_LOG_ERROR("monthLabel should be NULL here !");
lv_obj_del(altimeterScreen->dateTimeValue.monthLabel);
altimeterScreen->dateTimeValue.monthLabel = NULL;
}
altimeterScreen->dateTimeValue.monthLabel = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->dateTimeValue.monthLabel, &lv_font_montserrat_16, LV_PART_MAIN);
lv_obj_align_to(altimeterScreen->dateTimeValue.monthLabel, inner_circle, LV_ALIGN_TOP_LEFT, 30, 5);
lv_obj_set_style_text_color(altimeterScreen->dateTimeValue.monthLabel, lv_color_make(158, 157, 36), LV_PART_MAIN);
/* Let's create the day label */
if(altimeterScreen->dateTimeValue.dayLabel)
{
LV_LOG_ERROR("dayLabel should be NULL here !");
lv_obj_del(altimeterScreen->dateTimeValue.dayLabel);
altimeterScreen->dateTimeValue.dayLabel = NULL;
}
altimeterScreen->dateTimeValue.dayLabel = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->dateTimeValue.dayLabel, &lv_font_montserrat_16, LV_PART_MAIN);
lv_obj_align_to(altimeterScreen->dateTimeValue.dayLabel, inner_circle, LV_ALIGN_TOP_RIGHT, -15, 5);
lv_obj_set_style_text_color(altimeterScreen->dateTimeValue.dayLabel, lv_color_make(142, 36, 170), LV_PART_MAIN);
lv_obj_set_style_text_align(altimeterScreen->dateTimeValue.dayLabel, LV_TEXT_ALIGN_RIGHT, LV_PART_MAIN);
/* Let's create the time label */
if(altimeterScreen->dateTimeValue.timeLabel)
{
LV_LOG_ERROR("timeLabel should be NULL here !");
lv_obj_del(altimeterScreen->dateTimeValue.timeLabel);
altimeterScreen->dateTimeValue.timeLabel = NULL;
}
altimeterScreen->dateTimeValue.timeLabel = lv_label_create(inner_circle);
lv_obj_set_width(altimeterScreen->dateTimeValue.timeLabel, lv_pct(100));
lv_obj_set_style_text_font(altimeterScreen->dateTimeValue.timeLabel, &lv_font_montserrat_24, LV_PART_MAIN);
lv_obj_set_style_text_align(altimeterScreen->dateTimeValue.timeLabel, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN);
lv_obj_align_to(altimeterScreen->dateTimeValue.timeLabel, inner_circle, LV_ALIGN_TOP_MID, 0, 20);
lv_obj_set_style_text_color(altimeterScreen->dateTimeValue.timeLabel, lv_color_make(251, 140, 0), LV_PART_MAIN);
_update_date_time_info(altimeterScreen);
/* Let's create the altitude main and unit label */ /* Let's create the altitude main and unit label */
if(altimeterScreen->altitudeValue.value) if(altimeterScreen->altitudeValue.value)
{ {
@ -560,7 +627,8 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
} }
altimeterScreen->altitudeValue.value = lv_label_create(inner_circle); altimeterScreen->altitudeValue.value = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->altitudeValue.value, &lv_font_montserrat_30, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->altitudeValue.value, &lv_font_montserrat_30, LV_PART_MAIN);
lv_obj_align(altimeterScreen->altitudeValue.value, LV_ALIGN_TOP_MID, 0, 15); lv_obj_align(altimeterScreen->altitudeValue.value, LV_ALIGN_TOP_MID, 0, 45);
lv_obj_set_style_text_color(altimeterScreen->altitudeValue.value, lv_color_make(0, 105, 92), LV_PART_MAIN);
lv_label_set_text_static(altimeterScreen->altitudeValue.value, altimeterScreen->altitudeValue.value_text); lv_label_set_text_static(altimeterScreen->altitudeValue.value, altimeterScreen->altitudeValue.value_text);
if(altimeterScreen->altitudeValue.unit) if(altimeterScreen->altitudeValue.unit)
@ -571,22 +639,9 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
} }
altimeterScreen->altitudeValue.unit = lv_label_create(inner_circle); altimeterScreen->altitudeValue.unit = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->altitudeValue.unit, &lv_font_montserrat_30, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->altitudeValue.unit, &lv_font_montserrat_30, LV_PART_MAIN);
lv_obj_set_style_text_color(altimeterScreen->altitudeValue.unit, lv_color_make(0, 105, 92), LV_PART_MAIN);
lv_label_set_text_static(altimeterScreen->altitudeValue.unit, "m"); lv_label_set_text_static(altimeterScreen->altitudeValue.unit, "m");
lv_obj_align_to(altimeterScreen->altitudeValue.unit, altimeterScreen->altitudeValue.value, LV_ALIGN_CENTER, 0, 25); lv_obj_align_to(altimeterScreen->altitudeValue.unit, altimeterScreen->altitudeValue.value, LV_ALIGN_OUT_BOTTOM_MID, 0, -13);
/* Let's create the zeroing button */
lv_obj_t *zeroing_btn = lv_img_create(inner_circle);
lv_img_set_src(zeroing_btn, &altimeter_asset_calibration_icon);
lv_obj_align(zeroing_btn, LV_ALIGN_CENTER, 75 ,5);
lv_obj_add_flag(zeroing_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(zeroing_btn, &(zeroing_altitude_event_cb), LV_EVENT_CLICKED, altimeterScreen);
/* Let's create the settings button */
lv_obj_t *setting_btn = lv_img_create(inner_circle);
lv_img_set_src(setting_btn, &watch_menu_settings_icon);
lv_obj_align(setting_btn, LV_ALIGN_CENTER, -75 ,5);
lv_obj_add_flag(setting_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(setting_btn, &(set_altitude_settings_event_cb), LV_EVENT_CLICKED, altimeterScreen);
/* Let's create the temperature label */ /* Let's create the temperature label */
if(altimeterScreen->temperatureValue.value) if(altimeterScreen->temperatureValue.value)
@ -600,7 +655,24 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
lv_obj_set_style_text_font(altimeterScreen->temperatureValue.value, &lv_font_montserrat_24, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->temperatureValue.value, &lv_font_montserrat_24, LV_PART_MAIN);
strcpy(altimeterScreen->temperatureValue.value_text, "°C"); strcpy(altimeterScreen->temperatureValue.value_text, "°C");
lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text); lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text);
lv_obj_align(altimeterScreen->temperatureValue.value, LV_ALIGN_CENTER, 0, 5); lv_obj_align(altimeterScreen->temperatureValue.value, LV_ALIGN_CENTER, 0, 20);
lv_obj_set_style_text_color(altimeterScreen->temperatureValue.value, lv_color_make(93, 64, 55), LV_PART_MAIN);
/* Let's create the zeroing button */
lv_obj_t *zeroing_btn = lv_img_create(inner_circle);
lv_img_set_src(zeroing_btn, &altimeter_asset_calibration_icon);
lv_obj_align_to(zeroing_btn, altimeterScreen->temperatureValue.value, LV_ALIGN_OUT_RIGHT_MID, 45, 0);
lv_obj_add_flag(zeroing_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
/* Using a long pressed event so that no missclicks trigger a reset */
lv_obj_add_event_cb(zeroing_btn, &(zeroing_altitude_event_cb), LV_EVENT_LONG_PRESSED, altimeterScreen);
/* Let's create the settings button */
lv_obj_t *setting_btn = lv_img_create(inner_circle);
lv_img_set_src(setting_btn, &watch_menu_settings_icon);
lv_obj_align_to(setting_btn, altimeterScreen->temperatureValue.value, LV_ALIGN_OUT_LEFT_MID, -45, 0);
lv_obj_add_flag(setting_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
/* Using a long pressed event so that no missclicks trigger a reset */
lv_obj_add_event_cb(setting_btn, &(set_altitude_settings_event_cb), LV_EVENT_LONG_PRESSED, altimeterScreen);
/* Let's create the VSI label */ /* Let's create the VSI label */
if(altimeterScreen->vsiValue.value_unit) if(altimeterScreen->vsiValue.value_unit)
@ -625,10 +697,19 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
lv_timer_del(altimeterScreen->altitudeUpdateTimer); lv_timer_del(altimeterScreen->altitudeUpdateTimer);
altimeterScreen->altitudeUpdateTimer = NULL; altimeterScreen->altitudeUpdateTimer = NULL;
} }
/* Update the pressure value on the screen at the defined refresh rate in Hz */
/* Update the pressure value on the screen every second */
altimeterScreen->altitudeUpdateTimer = lv_timer_create(&(altitude_update_timer_cb), 1000 / ALTITUDE_TIMER_UPDATE_RATE_HZ, altimeterScreen); altimeterScreen->altitudeUpdateTimer = lv_timer_create(&(altitude_update_timer_cb), 1000 / ALTITUDE_TIMER_UPDATE_RATE_HZ, altimeterScreen);
/* Let's create the time update timer */
if(altimeterScreen->dateTimeUpdateTimer)
{
LV_LOG_ERROR("dateTimeUpdateTimer should be NULL here !");
lv_timer_del(altimeterScreen->dateTimeUpdateTimer);
altimeterScreen->dateTimeUpdateTimer = NULL;
}
/* Update the displayed time every 200 ms */
altimeterScreen->dateTimeUpdateTimer = lv_timer_create(&(date_time_update_timer_cb), 500, altimeterScreen);
/* We register the event callback to handle gestures */ /* We register the event callback to handle gestures */
lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_VIEW], &(gesture_event_cb), LV_EVENT_GESTURE, altimeterScreen); lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_VIEW], &(gesture_event_cb), LV_EVENT_GESTURE, altimeterScreen);
/* We register the event callback to handle the cleanup */ /* We register the event callback to handle the cleanup */
@ -672,8 +753,9 @@ static void _create_altitude_setting_display(AltimeterScreen_t * const altimeter
} }
altimeterScreen->altitudeOffset_spinbox.spinbox = lv_spinbox_create(inner_circle); altimeterScreen->altitudeOffset_spinbox.spinbox = lv_spinbox_create(inner_circle);
lv_obj_set_align(altimeterScreen->altitudeOffset_spinbox.spinbox, LV_ALIGN_CENTER); lv_obj_align(altimeterScreen->altitudeOffset_spinbox.spinbox, LV_ALIGN_CENTER, 0, -10);
lv_obj_set_width(altimeterScreen->altitudeOffset_spinbox.spinbox, lv_pct(50)); lv_obj_set_width(altimeterScreen->altitudeOffset_spinbox.spinbox, lv_pct(50));
lv_obj_set_style_text_font(altimeterScreen->altitudeOffset_spinbox.spinbox, &lv_font_montserrat_16, LV_PART_MAIN);
lv_spinbox_set_digit_format(altimeterScreen->altitudeOffset_spinbox.spinbox, 5, 4); lv_spinbox_set_digit_format(altimeterScreen->altitudeOffset_spinbox.spinbox, 5, 4);
//Max 9000 and min -1000 since we have a digit after the comma //Max 9000 and min -1000 since we have a digit after the comma
lv_spinbox_set_range(altimeterScreen->altitudeOffset_spinbox.spinbox, -10000, 90000); lv_spinbox_set_range(altimeterScreen->altitudeOffset_spinbox.spinbox, -10000, 90000);
@ -694,12 +776,25 @@ static void _create_altitude_setting_display(AltimeterScreen_t * const altimeter
lv_obj_add_event_cb(dec_btn, &(lv_spinbox_decrement_event_cb), LV_EVENT_ALL, altimeterScreen); lv_obj_add_event_cb(dec_btn, &(lv_spinbox_decrement_event_cb), LV_EVENT_ALL, altimeterScreen);
lv_obj_t *apply_btn = lv_btn_create(inner_circle); lv_obj_t *apply_btn = lv_btn_create(inner_circle);
lv_obj_align(apply_btn, LV_ALIGN_CENTER, 0, 50); lv_obj_set_user_data(apply_btn, (void *)true);
lv_obj_set_width(apply_btn, 86);
lv_obj_t *apply_btn_lbl = lv_label_create(apply_btn); lv_obj_t *apply_btn_lbl = lv_label_create(apply_btn);
lv_label_set_text_static(apply_btn_lbl, translation_get_word(TRANSLATION_ALTIMETER_APPLY_BUTTON)); lv_label_set_text_static(apply_btn_lbl, translation_get_word(TRANSLATION_ALTIMETER_APPLY_BUTTON));
lv_obj_center(apply_btn_lbl); lv_obj_center(apply_btn_lbl);
lv_obj_add_event_cb(apply_btn, &(apply_altitude_setting_event_cb), LV_EVENT_CLICKED, altimeterScreen); lv_obj_add_event_cb(apply_btn, &(apply_altitude_setting_event_cb), LV_EVENT_CLICKED, altimeterScreen);
lv_obj_align_to(apply_btn, dec_btn, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10);
lv_obj_t *cancel_btn = lv_btn_create(inner_circle);
lv_obj_set_user_data(cancel_btn, (void *)false);
lv_obj_set_width(cancel_btn, 86);
lv_obj_t *cancel_btn_lbl = lv_label_create(cancel_btn);
lv_label_set_text_static(cancel_btn_lbl, translation_get_word(TRANSLATION_ALTIMETER_CANCEL_BUTTON));
lv_obj_center(cancel_btn_lbl);
lv_obj_add_event_cb(cancel_btn, &(apply_altitude_setting_event_cb), LV_EVENT_CLICKED, altimeterScreen);
lv_obj_align_to(cancel_btn, inc_btn, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, 10);
/* We register the event callback to handle the cleanup */ /* We register the event callback to handle the cleanup */
lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_SETTING_VIEW], &(altitude_setting_display_cleanup_event_cb), LV_EVENT_DELETE, altimeterScreen); lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_SETTING_VIEW], &(altitude_setting_display_cleanup_event_cb), LV_EVENT_DELETE, altimeterScreen);
@ -753,6 +848,30 @@ static void _update_pressure_chart(AltimeterScreen_t * const altimeterScreen)
_update_min_and_max_pressure_data(altimeterScreen, min, max); _update_min_and_max_pressure_data(altimeterScreen, min, max);
} }
static void _update_pressure_info(AltimeterScreen_t * const altimeterScreen)
{
if(altimeterScreen->altimeterScreenMeasurementCb)
{
LV_LOG_USER("Updating pressure measurements");
float pressure;
/* We don't need to retrieve the temperature nor the altitude in this view */
altimeterScreen->altimeterScreenMeasurementCb(NULL, &pressure, NULL);
sprintf(altimeterScreen->pressureValue.value_text, "%.2f", pressure);
if(altimeterScreen->pressureValue.value)
{
lv_label_set_text_static(altimeterScreen->pressureValue.value, altimeterScreen->pressureValue.value_text);
}
//Mock up part needs to be changed on embedded target
altimeter_screen_shift_chart_pressure_measurement(altimeterScreen, pressure);
}
else
{
LV_LOG_USER("altimeterScreenMeasurementCb is NULL, be sure to register a callback !");
}
}
static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen) static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen)
{ {
sprintf(altimeterScreen->altitudeValue.value_text, "%.1f", altimeterScreen->lastReadAltitude - altimeterScreen->altitudeOffset); sprintf(altimeterScreen->altitudeValue.value_text, "%.1f", altimeterScreen->lastReadAltitude - altimeterScreen->altitudeOffset);
@ -766,3 +885,41 @@ static void _update_temperature_info(AltimeterScreen_t * const altimeterScreen,
sprintf(altimeterScreen->temperatureValue.value_text, "%.2f°C", temperature); sprintf(altimeterScreen->temperatureValue.value_text, "%.2f°C", temperature);
lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text); lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text);
} }
static void _update_date_time_info(AltimeterScreen_t * const altimeterScreen)
{
if(altimeterScreen->altimeterScreenDateTimeCb)
{
struct tm date_time = {0};
altimeterScreen->altimeterScreenDateTimeCb(&date_time);
if(altimeterScreen->hour_24H_format)
{
sprintf(altimeterScreen->dateTimeValue.time_text, "%s%d:%s%d:%s%d",
date_time.tm_hour < 10 ? "0" : "", date_time.tm_hour,
date_time.tm_min < 10 ? "0" : "", date_time.tm_min,
date_time.tm_sec < 10 ? "0" : "", date_time.tm_sec);
}
else
{
// Intermediate hour var to set it on a 12H format
uint8_t hour = date_time.tm_hour;
if(hour > 12)hour -= 12;
sprintf(altimeterScreen->dateTimeValue.time_text, "%d:%s%d:%s%d%s", hour,
date_time.tm_min < 10 ? "0" : "", date_time.tm_min,
date_time.tm_sec < 10 ? "0" : "", date_time.tm_sec,
date_time.tm_hour < 13 ? "AM" : "PM");
}
strncpy(altimeterScreen->dateTimeValue.month_text, translation_get_word(TRANSLATION_JANUARY_SHORT + date_time.tm_mon), sizeof(altimeterScreen->dateTimeValue.month_text)-1);
sprintf(altimeterScreen->dateTimeValue.day_text, "%s%d", date_time.tm_mday < 10 ? "0":"", date_time.tm_mday);
lv_label_set_text_static(altimeterScreen->dateTimeValue.timeLabel, altimeterScreen->dateTimeValue.time_text);
lv_label_set_text_static(altimeterScreen->dateTimeValue.monthLabel, altimeterScreen->dateTimeValue.month_text);
lv_label_set_text_static(altimeterScreen->dateTimeValue.dayLabel, altimeterScreen->dateTimeValue.day_text);
}
else
{
LV_LOG_USER("altimeterScreenDateTimeCb is NULL, be sure to register a callback !");
}
}

View File

@ -2,9 +2,12 @@
* @file altimeter_screen.h * @file altimeter_screen.h
* @author Anatole SCHRAMM-HENRY * @author Anatole SCHRAMM-HENRY
* @brief Altimeter screen header file exposing the application's API. * @brief Altimeter screen header file exposing the application's API.
* @version 0.1 * @version 0.2
* @date 2024-01-16 * @date 2024-01-16
* *
* Updated on 2024-07-31 Added time and date on the altitude screen, added colors to texts and modified
* the buttons presses which now require a long press to react.
*
* @copyright MIT * @copyright MIT
* *
*/ */
@ -13,6 +16,7 @@
#define ALTIMETER_SCREEN_H #define ALTIMETER_SCREEN_H
#include "lvgl.h" #include "lvgl.h"
#include <time.h>
#define ALTITUDE_TIMER_UPDATE_RATE_HZ (20) #define ALTITUDE_TIMER_UPDATE_RATE_HZ (20)
@ -46,6 +50,7 @@ typedef struct MinMaxVSIValue
typedef void (*AltimeterScreenOnStateChangeCb_t)(AltimeterScreenState_e altimeterScreenState); typedef void (*AltimeterScreenOnStateChangeCb_t)(AltimeterScreenState_e altimeterScreenState);
typedef void(*AltimeterScreenMeasurementCb_t)(float * const temperature, float * const pressure, float * const altitude); typedef void(*AltimeterScreenMeasurementCb_t)(float * const temperature, float * const pressure, float * const altitude);
typedef void (*AltimeterScreenUserFeedbackCb_t)(void); typedef void (*AltimeterScreenUserFeedbackCb_t)(void);
typedef void (*AltimeterScreenDateTimeCb_t)(struct tm * const dateTime);
typedef struct PressureChart typedef struct PressureChart
{ {
@ -58,6 +63,12 @@ typedef struct TemperatureValue
char value_text[9]; char value_text[9];
} TemperatureValue_t; } TemperatureValue_t;
typedef struct DateTimeValue
{
lv_obj_t *timeLabel, *monthLabel, *dayLabel;
char time_text[11], month_text[5], day_text[3];
} DateTimeValue_t;
typedef struct SpinBox typedef struct SpinBox
{ {
lv_obj_t *spinbox; lv_obj_t *spinbox;
@ -73,12 +84,14 @@ typedef struct AltimeterScreen
PressureChart_t pressureChart; PressureChart_t pressureChart;
lv_timer_t *pressureUpdateTimer; lv_timer_t *pressureUpdateTimer;
lv_timer_t *altitudeUpdateTimer; lv_timer_t *altitudeUpdateTimer;
lv_timer_t *dateTimeUpdateTimer;
MainValue_t pressureValue; MainValue_t pressureValue;
MainValue_t altitudeValue; MainValue_t altitudeValue;
MinMaxVSIValue_t minValue; MinMaxVSIValue_t minValue;
MinMaxVSIValue_t maxValue; MinMaxVSIValue_t maxValue;
MinMaxVSIValue_t vsiValue; MinMaxVSIValue_t vsiValue;
TemperatureValue_t temperatureValue; TemperatureValue_t temperatureValue;
DateTimeValue_t dateTimeValue;
float vsiFloat; float vsiFloat;
float lastReadAltitude; float lastReadAltitude;
//Should not be erased attributes //Should not be erased attributes
@ -86,13 +99,21 @@ typedef struct AltimeterScreen
AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb; AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb;
AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb; AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb;
AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb; AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb;
AltimeterScreenDateTimeCb_t altimeterScreenDateTimeCb;
float minValueFloat; float minValueFloat;
float maxValueFloat; float maxValueFloat;
float altitudeOffset; float altitudeOffset;
lv_coord_t pressure_data_points[10]; lv_coord_t pressure_data_points[10];
float pressure_data_points_float[10]; float pressure_data_points_float[10];
bool hour_24H_format : 1;
} AltimeterScreen_t; } AltimeterScreen_t;
/**
* @brief Initializes the altimeter screen context object
* @note This function has to be called first before any others
*
* @param altimeterScreen a pointer to the altimeter screen context structure to initialize.
*/
void altimeter_screen_init(AltimeterScreen_t * const altimeterScreen); void altimeter_screen_init(AltimeterScreen_t * const altimeterScreen);
/** /**
@ -100,27 +121,62 @@ void altimeter_screen_init(AltimeterScreen_t * const altimeterScreen);
* This callback should be used to initialize and deinitialize needed devices drivers like the pressure/temperature sensor. * This callback should be used to initialize and deinitialize needed devices drivers like the pressure/temperature sensor.
* @note The state of the application is passed as a parameter of the callback function. * @note The state of the application is passed as a parameter of the callback function.
* *
* @param altimeterScreen a pointer to the altimeter screen object structure. * @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param altimeterScreenOnStateChangeCb the callback of type @ref AltimeterScreenOnStateChangeCb_t to register. * @param altimeterScreenOnStateChangeCb the callback of type @ref AltimeterScreenOnStateChangeCb_t to register.
*/ */
void altimeter_screen_register_on_state_change_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb); void altimeter_screen_register_on_state_change_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb);
/** /**
* @brief Registers a callback functions which will be called every time a user feedback should * @brief Registers a callback function which will be called every time a user feedback should
* be made. In this case, every time a button is clicked, the callback will be called. * be made. In this case, every time a button is clicked, the callback will be called.
* This enables the app to react to this user event. * This enables the app to react to this user event.
* *
* @param menuScreen a pointer to the previously initialized menu screen's context structure. * @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param menuScreenUserFeedbackCb a pointer to a function having the following signature : void(void). * @param altimeterScreenUserFeedbackCb a pointer to a function having the following signature : void(void) @ref AltimeterScreenUserFeedbackCb_t.
*/ */
void altimeter_screen_register_user_feedback_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb); void altimeter_screen_register_user_feedback_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb);
/**
* @brief Registers the callback function used to retrieve the data displayed in the altimeter app.
* The various data are : the temperature in °C, the pressure in hPa and the altitude in meters.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param altimeterScreenMeasurementCb the callback of type @ref AltimeterScreenMeasurementCb_t to register.
* The function's signature is : void(float * const, float * const, float * const).
*/
void altimeter_screen_register_measurement_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb); void altimeter_screen_register_measurement_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb);
/**
* @brief Registers the callback function used to retrieve the system time to be displayed on the altitude view.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param altimeterScreenDateTimeCb the callback of type @ref AltimeterScreenDateTimeCb_t to register.
* The function's signature is : void(struct tm * const).
*/
void altimeter_screen_register_date_time_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenDateTimeCb_t altimeterScreenDateTimeCb);
/**
* @brief Sets the format used to display the time on the altitude screen, ie 12H or 24H hour format.
*
* @param altimeterScreen altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param hour_24H_format a boolean value indicating if the hour format is 24H (true) or 12H (false).
*/
void altimeter_screen_set_displayed_hour_format(AltimeterScreen_t * const altimeterScreen, bool hour_24H_format);
void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure); void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure);
/**
* @brief Graphically builds the altimeter screen.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
*/
void altimeter_screen_create(AltimeterScreen_t * const altimeterScreen); void altimeter_screen_create(AltimeterScreen_t * const altimeterScreen);
/**
* @brief Frees all resources used by the AltimeterScreen object.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
*/
void altimeter_screen_destroy(AltimeterScreen_t * const altimeterScreen); void altimeter_screen_destroy(AltimeterScreen_t * const altimeterScreen);
#endif //ALTIMETER_SCREEN_H #endif //ALTIMETER_SCREEN_H

View File

@ -153,6 +153,7 @@ static void setTimeFormatCb(bool *hour_24H_format, SettingMode_e mode)
{ {
watch_settings_time_and_date_set_hour_format(*hour_24H_format); watch_settings_time_and_date_set_hour_format(*hour_24H_format);
notification_screen_set_displayed_hour_format(&notificationScreen, *hour_24H_format); notification_screen_set_displayed_hour_format(&notificationScreen, *hour_24H_format);
altimeter_screen_set_displayed_hour_format(&altimeterScreen, *hour_24H_format);
} }
} }
@ -791,6 +792,8 @@ void gfx_task(void *param)
altimeter_screen_register_on_state_change_cb(&altimeterScreen, &(altimeter_screen_on_state_change_cb)); altimeter_screen_register_on_state_change_cb(&altimeterScreen, &(altimeter_screen_on_state_change_cb));
altimeter_screen_register_user_feedback_cb(&altimeterScreen, &(watch_peripherals_vibrate_on_item_click)); altimeter_screen_register_user_feedback_cb(&altimeterScreen, &(watch_peripherals_vibrate_on_item_click));
altimeter_screen_register_measurement_cb(&altimeterScreen, &(altimeter_screen_measurement_cb)); altimeter_screen_register_measurement_cb(&altimeterScreen, &(altimeter_screen_measurement_cb));
altimeter_screen_register_date_time_cb(&altimeterScreen, &(date_time_cb));
altimeter_screen_set_displayed_hour_format(&altimeterScreen, persistency_get_settings()->timeAndDate.time_and_date_hour_format);
find_my_phone_screen_init(&findMyPhoneScreen); find_my_phone_screen_init(&findMyPhoneScreen);
find_my_phone_screen_register_BLE_command_send_cb(&findMyPhoneScreen, &(sendFindMyPhoneBLECommandCb)); find_my_phone_screen_register_BLE_command_send_cb(&findMyPhoneScreen, &(sendFindMyPhoneBLECommandCb));

View File

@ -1138,7 +1138,7 @@ static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *tex
lv_obj_t *label = lv_obj_get_child(menu_list_item, 0); lv_obj_t *label = lv_obj_get_child(menu_list_item, 0);
if(label) if(label)
{ {
lv_label_set_text(label, text); lv_label_set_text_static(label, text);
} }
} }

View File

@ -194,6 +194,11 @@ static const char * const translation_dictionary[][TRANSLATED_LANGUAGES_COUNT] =
[TRANSLATION_GERMAN] = "Bestätigen", [TRANSLATION_GERMAN] = "Bestätigen",
[TRANSLATION_ENGLISH]= "Apply", [TRANSLATION_ENGLISH]= "Apply",
}, },
[TRANSLATION_ALTIMETER_CANCEL_BUTTON] = {
[TRANSLATION_FRENCH] = "Annuler",
[TRANSLATION_GERMAN] = "Abbrechen",
[TRANSLATION_ENGLISH]= "Cancel",
},
[TRANSLATION_PHONE_NOT_CONNECTED] = { [TRANSLATION_PHONE_NOT_CONNECTED] = {
[TRANSLATION_FRENCH] = "Mobile\nnon\ncon-\nnecté !", [TRANSLATION_FRENCH] = "Mobile\nnon\ncon-\nnecté !",
[TRANSLATION_GERMAN] = "Keine\nVerbind-\nung zum\nHandy !", [TRANSLATION_GERMAN] = "Keine\nVerbind-\nung zum\nHandy !",
@ -223,7 +228,67 @@ static const char * const translation_dictionary[][TRANSLATED_LANGUAGES_COUNT] =
[TRANSLATION_FRENCH] = "[Artiste inconnu]", [TRANSLATION_FRENCH] = "[Artiste inconnu]",
[TRANSLATION_GERMAN] = "[Unbekannten Sanger]", [TRANSLATION_GERMAN] = "[Unbekannten Sanger]",
[TRANSLATION_ENGLISH] = "[Unknown artist]", [TRANSLATION_ENGLISH] = "[Unknown artist]",
} },
[TRANSLATION_JANUARY_SHORT] = {
[TRANSLATION_FRENCH] = "JAN",
[TRANSLATION_GERMAN] = "JAN",
[TRANSLATION_ENGLISH] = "JAN",
},
[TRANSLATION_FEBRUARY_SHORT] = {
[TRANSLATION_FRENCH] = "FÉV",
[TRANSLATION_GERMAN] = "FEB",
[TRANSLATION_ENGLISH] = "FEB",
},
[TRANSLATION_MARCH_SHORT] = {
[TRANSLATION_FRENCH] = "MAR",
[TRANSLATION_GERMAN] = "MÄR",
[TRANSLATION_ENGLISH] = "MAR",
},
[TRANSLATION_APRIL_SHORT] = {
[TRANSLATION_FRENCH] = "AVR",
[TRANSLATION_GERMAN] = "APR",
[TRANSLATION_ENGLISH] = "APR",
},
[TRANSLATION_MAY_SHORT] = {
[TRANSLATION_FRENCH] = "MAI",
[TRANSLATION_GERMAN] = "MAI",
[TRANSLATION_ENGLISH] = "MAY",
},
[TRANSLATION_JUNE_SHORT] = {
[TRANSLATION_FRENCH] = "JUI",
[TRANSLATION_GERMAN] = "JUN",
[TRANSLATION_ENGLISH] = "JUN",
},
[TRANSLATION_JULY_SHORT] = {
[TRANSLATION_FRENCH] = "JUL",
[TRANSLATION_GERMAN] = "JUL",
[TRANSLATION_ENGLISH] = "JUL",
},
[TRANSLATION_AUGUST_SHORT] = {
[TRANSLATION_FRENCH] = "AOÛ",
[TRANSLATION_GERMAN] = "AUG",
[TRANSLATION_ENGLISH] = "AUG",
},
[TRANSLATION_SEPTEMBER_SHORT] = {
[TRANSLATION_FRENCH] = "SEP",
[TRANSLATION_GERMAN] = "SEP",
[TRANSLATION_ENGLISH] = "SEP",
},
[TRANSLATION_OCTOBER_SHORT] = {
[TRANSLATION_FRENCH] = "OCT",
[TRANSLATION_GERMAN] = "OKT",
[TRANSLATION_ENGLISH] = "OCT",
},
[TRANSLATION_NOVEMBER_SHORT] = {
[TRANSLATION_FRENCH] = "NOV",
[TRANSLATION_GERMAN] = "NOV",
[TRANSLATION_ENGLISH] = "NOV",
},
[TRANSLATION_DECEMBER_SHORT] = {
[TRANSLATION_FRENCH] = "DÉC",
[TRANSLATION_GERMAN] = "DEZ",
[TRANSLATION_ENGLISH] = "DEC",
},
}; };
const char *translation_get_word(TranslationWord_e word) const char *translation_get_word(TranslationWord_e word)

View File

@ -53,6 +53,7 @@ typedef enum TranslationWord
/* Altimeter screen app translations */ /* Altimeter screen app translations */
TRANSLATION_ALTIMETER_SETTING_LABEL, TRANSLATION_ALTIMETER_SETTING_LABEL,
TRANSLATION_ALTIMETER_APPLY_BUTTON, TRANSLATION_ALTIMETER_APPLY_BUTTON,
TRANSLATION_ALTIMETER_CANCEL_BUTTON,
/* Find my phone app translation */ /* Find my phone app translation */
TRANSLATION_PHONE_NOT_CONNECTED, TRANSLATION_PHONE_NOT_CONNECTED,
TRANSLATION_FIND_MY_PHONE_BTN, TRANSLATION_FIND_MY_PHONE_BTN,
@ -61,7 +62,19 @@ typedef enum TranslationWord
TRANSLATION_PHONE_NOT_CONNECTED_2, TRANSLATION_PHONE_NOT_CONNECTED_2,
TRANSLATION_NO_TRACK_TITLE, TRANSLATION_NO_TRACK_TITLE,
TRANSLATION_NO_TRACK_ARTIST, TRANSLATION_NO_TRACK_ARTIST,
/* Short month translations */
TRANSLATION_JANUARY_SHORT,
TRANSLATION_FEBRUARY_SHORT,
TRANSLATION_MARCH_SHORT,
TRANSLATION_APRIL_SHORT,
TRANSLATION_MAY_SHORT,
TRANSLATION_JUNE_SHORT,
TRANSLATION_JULY_SHORT,
TRANSLATION_AUGUST_SHORT,
TRANSLATION_SEPTEMBER_SHORT,
TRANSLATION_OCTOBER_SHORT,
TRANSLATION_NOVEMBER_SHORT,
TRANSLATION_DECEMBER_SHORT,
} TranslationWord_e; } TranslationWord_e;
const char * translation_get_word(TranslationWord_e word); const char * translation_get_word(TranslationWord_e word);

View File

@ -1,7 +1,7 @@
/******************************************************************************* /*******************************************************************************
* Size: 14 px * Size: 14 px
* Bpp: 4 * Bpp: 4
* Opts: --no-compress --no-prefilter --bpp 4 --size 14 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_14.c --force-fast-kern-format * Opts: --no-compress --no-prefilter --bpp 4 --size 14 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_14.c --force-fast-kern-format
******************************************************************************/ ******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE #ifdef LV_LVGL_H_INCLUDE_SIMPLE
@ -809,6 +809,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xd, 0x94, 0xf4, 0x0, 0x3, 0xf5, 0xc, 0xf8, 0xd, 0x94, 0xf4, 0x0, 0x3, 0xf5, 0xc, 0xf8,
0x68, 0xfd, 0x0, 0x9, 0xef, 0xe9, 0x10, 0x68, 0xfd, 0x0, 0x9, 0xef, 0xe9, 0x10,
/* U+00DB "Û" */
0x0, 0x2, 0x83, 0x0, 0x0, 0x2, 0xe8, 0xe2,
0x0, 0x0, 0x54, 0x3, 0x60, 0x0, 0x0, 0x0,
0x0, 0x0, 0x9c, 0x0, 0x0, 0xb, 0xa9, 0xc0,
0x0, 0x0, 0xba, 0x9c, 0x0, 0x0, 0xb, 0xa9,
0xc0, 0x0, 0x0, 0xba, 0x9c, 0x0, 0x0, 0xb,
0xa9, 0xc0, 0x0, 0x0, 0xba, 0x8e, 0x0, 0x0,
0xd, 0x94, 0xf4, 0x0, 0x3, 0xf5, 0xc, 0xf8,
0x68, 0xfd, 0x0, 0x9, 0xef, 0xe9, 0x10,
/* U+00DC "Ü" */ /* U+00DC "Ü" */
0x0, 0x4c, 0xb, 0x60, 0x0, 0x1, 0x50, 0x52, 0x0, 0x4c, 0xb, 0x60, 0x0, 0x1, 0x50, 0x52,
0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xc0, 0x0,
@ -912,6 +922,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x0, 0x9f, 0x74, 0x8f, 0x70, 0x0, 0x7d, 0xfd, 0x0, 0x9f, 0x74, 0x8f, 0x70, 0x0, 0x7d, 0xfd,
0x60, 0x0, 0x60, 0x0,
/* U+00FB "û" */
0x0, 0x6e, 0xc0, 0x0, 0x5, 0xb1, 0x7a, 0x0,
0x0, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x2, 0xf3,
0xc8, 0x0, 0x2, 0xf3, 0xc8, 0x0, 0x2, 0xf3,
0xc8, 0x0, 0x2, 0xf3, 0xc9, 0x0, 0x3, 0xf3,
0xab, 0x0, 0x7, 0xf3, 0x5f, 0x83, 0x7e, 0xf3,
0x6, 0xdf, 0xc5, 0xf3,
/* U+00FC "ü" */ /* U+00FC "ü" */
0x2, 0xe0, 0x88, 0x0, 0x0, 0x60, 0x33, 0x0, 0x2, 0xe0, 0x88, 0x0, 0x0, 0x60, 0x33, 0x0,
0x0, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x2, 0xf3, 0x0, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x2, 0xf3,
@ -1860,82 +1878,84 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 4032, .adv_w = 188, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4032, .adv_w = 188, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4116, .adv_w = 188, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4116, .adv_w = 188, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4194, .adv_w = 177, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 4194, .adv_w = 177, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 4257, .adv_w = 177, .box_w = 9, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 4257, .adv_w = 177, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 4316, .adv_w = 151, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 4320, .adv_w = 177, .box_w = 9, .box_h = 13, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 4360, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4379, .adv_w = 151, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 4404, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4423, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4448, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4467, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4492, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 4511, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4536, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4555, .adv_w = 128, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4580, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4599, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4624, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4643, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4668, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4687, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4712, .adv_w = 62, .box_w = 6, .box_h = 11, .ofs_x = -1, .ofs_y = 0}, {.bitmap_index = 4731, .adv_w = 137, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4745, .adv_w = 62, .box_w = 4, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4775, .adv_w = 62, .box_w = 6, .box_h = 11, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 4767, .adv_w = 142, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4808, .adv_w = 62, .box_w = 4, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4817, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 4830, .adv_w = 142, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4861, .adv_w = 239, .box_w = 15, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 4880, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 4921, .adv_w = 70, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 3}, {.bitmap_index = 4924, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 4927, .adv_w = 224, .box_w = 15, .box_h = 15, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 4968, .adv_w = 239, .box_w = 15, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5040, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5028, .adv_w = 70, .box_w = 4, .box_h = 3, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 5117, .adv_w = 224, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 5034, .adv_w = 224, .box_w = 15, .box_h = 15, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 5208, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5147, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5285, .adv_w = 154, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5224, .adv_w = 224, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 5340, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 5315, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5445, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 5392, .adv_w = 154, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5550, .adv_w = 252, .box_w = 16, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 5447, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 5654, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 5552, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 5759, .adv_w = 252, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5657, .adv_w = 252, .box_w = 16, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 5847, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 5761, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 5952, .adv_w = 112, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 5866, .adv_w = 252, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5994, .adv_w = 168, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 5954, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 6060, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 6059, .adv_w = 112, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 6172, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6101, .adv_w = 168, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 6249, .adv_w = 154, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 6167, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 6324, .adv_w = 196, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 6279, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6394, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 6356, .adv_w = 154, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 6492, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 6431, .adv_w = 196, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 6577, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 6501, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 6662, .adv_w = 196, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 6599, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 6732, .adv_w = 196, .box_w = 14, .box_h = 13, .ofs_x = -1, .ofs_y = -1}, {.bitmap_index = 6684, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 6823, .adv_w = 140, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 6769, .adv_w = 196, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 6882, .adv_w = 140, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 6839, .adv_w = 196, .box_w = 14, .box_h = 13, .ofs_x = -1, .ofs_y = -1},
{.bitmap_index = 6941, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 6930, .adv_w = 140, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 7026, .adv_w = 196, .box_w = 13, .box_h = 4, .ofs_x = 0, .ofs_y = 3}, {.bitmap_index = 6989, .adv_w = 140, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 7052, .adv_w = 252, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 7048, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 7140, .adv_w = 280, .box_w = 18, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 7133, .adv_w = 196, .box_w = 13, .box_h = 4, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 7275, .adv_w = 252, .box_w = 17, .box_h = 15, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 7159, .adv_w = 252, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 7403, .adv_w = 224, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 7247, .adv_w = 280, .box_w = 18, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 7494, .adv_w = 196, .box_w = 13, .box_h = 8, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 7382, .adv_w = 252, .box_w = 17, .box_h = 15, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 7546, .adv_w = 196, .box_w = 13, .box_h = 8, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 7510, .adv_w = 224, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 7598, .adv_w = 280, .box_w = 18, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 7601, .adv_w = 196, .box_w = 13, .box_h = 8, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 7697, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 7653, .adv_w = 196, .box_w = 13, .box_h = 8, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 7774, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 7705, .adv_w = 280, .box_w = 18, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 7879, .adv_w = 224, .box_w = 15, .box_h = 15, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 7804, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 7992, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 7881, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 8077, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 7986, .adv_w = 224, .box_w = 15, .box_h = 15, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 8175, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8099, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8260, .adv_w = 196, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8184, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 8338, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 8282, .adv_w = 196, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8415, .adv_w = 140, .box_w = 10, .box_h = 15, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 8367, .adv_w = 196, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8490, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 8445, .adv_w = 224, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 8588, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 8522, .adv_w = 140, .box_w = 10, .box_h = 15, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 8686, .adv_w = 252, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 8597, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 8774, .adv_w = 224, .box_w = 16, .box_h = 15, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 8695, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 8894, .adv_w = 168, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 8793, .adv_w = 252, .box_w = 16, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 8977, .adv_w = 280, .box_w = 18, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8881, .adv_w = 224, .box_w = 16, .box_h = 15, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 9094, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9001, .adv_w = 168, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 9184, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9084, .adv_w = 280, .box_w = 18, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 9274, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9201, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 9364, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9291, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 9454, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9381, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 9544, .adv_w = 280, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 9471, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 9652, .adv_w = 196, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 9561, .adv_w = 280, .box_w = 18, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 9742, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 9651, .adv_w = 280, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 9840, .adv_w = 224, .box_w = 15, .box_h = 15, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 9759, .adv_w = 196, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 9953, .adv_w = 280, .box_w = 18, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9849, .adv_w = 196, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 10052, .adv_w = 168, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 9947, .adv_w = 224, .box_w = 15, .box_h = 15, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 10135, .adv_w = 225, .box_w = 15, .box_h = 10, .ofs_x = 0, .ofs_y = 0} {.bitmap_index = 10060, .adv_w = 280, .box_w = 18, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 10159, .adv_w = 168, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 10242, .adv_w = 225, .box_w = 15, .box_h = 10, .ofs_x = 0, .ofs_y = 0}
}; };
/*--------------------- /*---------------------
@ -1944,16 +1964,17 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
static const uint16_t unicode_list_1[] = { static const uint16_t unicode_list_1[] = {
0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b,
0x1e, 0x24, 0x26, 0x29, 0x2c, 0x2f, 0x30, 0x32, 0x1e, 0x24, 0x26, 0x29, 0x2b, 0x2c, 0x2f, 0x30,
0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e, 0x3f, 0x32, 0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e,
0x46, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0x3f, 0x46, 0x4b, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58,
0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef5b, 0xef5c, 0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c,
0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xef71, 0xef76, 0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b,
0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8,
0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb,
0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037, 0xf03a, 0xf043, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037,
0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191, 0xf192, 0xf193, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191,
0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa, 0xf712, 0xf7f2 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa,
0xf712, 0xf7f2
}; };
/*Collect the unicode lists and glyph_id offsets*/ /*Collect the unicode lists and glyph_id offsets*/
@ -1965,7 +1986,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
}, },
{ {
.range_start = 176, .range_length = 63475, .glyph_id_start = 96, .range_start = 176, .range_length = 63475, .glyph_id_start = 96,
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 88, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 90, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
} }
}; };
@ -1990,16 +2011,17 @@ static const uint8_t kern_left_class_mapping[] =
46, 46, 54, 55, 56, 57, 51, 58, 46, 46, 54, 55, 56, 57, 51, 58,
58, 59, 58, 60, 41, 0, 0, 9, 58, 59, 58, 60, 41, 0, 0, 9,
61, 23, 23, 25, 26, 26, 26, 26, 61, 23, 23, 25, 26, 26, 26, 26,
29, 22, 22, 30, 30, 46, 45, 45, 29, 22, 22, 30, 30, 30, 46, 45,
45, 47, 49, 49, 49, 49, 62, 51, 45, 45, 47, 49, 49, 49, 49, 62,
46, 51, 49, 9, 0, 0, 0, 0, 51, 46, 51, 51, 49, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Map glyph_ids to kern right classes*/ /*Map glyph_ids to kern right classes*/
@ -2018,16 +2040,17 @@ static const uint8_t kern_right_class_mapping[] =
39, 42, 39, 42, 43, 44, 45, 46, 39, 42, 39, 42, 43, 44, 45, 46,
46, 47, 46, 48, 0, 0, 35, 9, 46, 47, 46, 48, 0, 0, 35, 9,
49, 24, 24, 23, 25, 25, 25, 25, 49, 24, 24, 23, 25, 25, 25, 25,
25, 23, 23, 28, 28, 38, 37, 37, 25, 23, 23, 28, 28, 28, 38, 37,
37, 39, 39, 39, 39, 39, 50, 51, 37, 37, 39, 39, 39, 39, 39, 50,
39, 45, 39, 9, 0, 0, 0, 0, 51, 39, 45, 45, 39, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Kern values between classes*/ /*Kern values between classes*/

View File

@ -1,7 +1,7 @@
/******************************************************************************* /*******************************************************************************
* Size: 16 px * Size: 16 px
* Bpp: 4 * Bpp: 4
* Opts: --no-compress --no-prefilter --bpp 4 --size 16 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_16.c --force-fast-kern-format * Opts: --no-compress --no-prefilter --bpp 4 --size 16 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_16.c --force-fast-kern-format
******************************************************************************/ ******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE #ifdef LV_LVGL_H_INCLUDE_SIMPLE
@ -972,6 +972,19 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x4f, 0xfa, 0x8b, 0xfd, 0x0, 0x0, 0x3b, 0xef, 0x4f, 0xfa, 0x8b, 0xfd, 0x0, 0x0, 0x3b, 0xef,
0xd8, 0x10, 0x0, 0xd8, 0x10, 0x0,
/* U+00DB "Û" */
0x0, 0x1, 0xdf, 0x90, 0x0, 0x0, 0x2, 0xd7,
0x1b, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x6, 0xf3, 0x0, 0x0, 0x8, 0xf1, 0x6f, 0x30,
0x0, 0x0, 0x8f, 0x16, 0xf3, 0x0, 0x0, 0x8,
0xf1, 0x6f, 0x30, 0x0, 0x0, 0x8f, 0x16, 0xf3,
0x0, 0x0, 0x8, 0xf1, 0x6f, 0x30, 0x0, 0x0,
0x8f, 0x16, 0xf3, 0x0, 0x0, 0x8, 0xf0, 0x5f,
0x40, 0x0, 0x0, 0x9f, 0x3, 0xf7, 0x0, 0x0,
0xc, 0xd0, 0xd, 0xe2, 0x0, 0x5, 0xf8, 0x0,
0x4f, 0xfa, 0x8b, 0xfd, 0x0, 0x0, 0x3b, 0xef,
0xd8, 0x10, 0x0,
/* U+00DC "Ü" */ /* U+00DC "Ü" */
0x0, 0xc, 0x70, 0xc6, 0x0, 0x0, 0x0, 0x84, 0x0, 0xc, 0x70, 0xc6, 0x0, 0x0, 0x0, 0x84,
0x8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -1094,6 +1107,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xb, 0xf1, 0x4, 0xfd, 0x77, 0xcf, 0x60, 0x0, 0xb, 0xf1, 0x4, 0xfd, 0x77, 0xcf, 0x60, 0x0,
0x3b, 0xef, 0xc4, 0x0, 0x3b, 0xef, 0xc4, 0x0,
/* U+00FB "û" */
0x0, 0x1d, 0xea, 0x0, 0x0, 0x1c, 0x70, 0x9a,
0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0x0,
0x2, 0xf5, 0xae, 0x0, 0x0, 0x2f, 0x5a, 0xe0,
0x0, 0x2, 0xf5, 0xae, 0x0, 0x0, 0x2f, 0x5a,
0xe0, 0x0, 0x2, 0xf5, 0x9f, 0x0, 0x0, 0x4f,
0x56, 0xf3, 0x0, 0xa, 0xf5, 0x1e, 0xe7, 0x6b,
0xff, 0x50, 0x2b, 0xef, 0xb3, 0xf5,
/* U+00FC "ü" */ /* U+00FC "ü" */
0x0, 0xb7, 0xb, 0x70, 0x0, 0x7, 0x40, 0x74, 0x0, 0xb7, 0xb, 0x70, 0x0, 0x7, 0x40, 0x74,
0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe0, 0x0,
@ -2176,81 +2198,83 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 5339, .adv_w = 215, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5339, .adv_w = 215, .box_w = 13, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5437, .adv_w = 202, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 5437, .adv_w = 202, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 5520, .adv_w = 202, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 5520, .adv_w = 202, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 5603, .adv_w = 173, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 5603, .adv_w = 202, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 5663, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5686, .adv_w = 173, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 5717, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5746, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5771, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5800, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5825, .adv_w = 146, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 5854, .adv_w = 153, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5879, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5908, .adv_w = 146, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 5939, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 5962, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 5999, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6022, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6059, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6082, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6119, .adv_w = 71, .box_w = 6, .box_h = 12, .ofs_x = -1, .ofs_y = 0}, {.bitmap_index = 6142, .adv_w = 157, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6155, .adv_w = 71, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6202, .adv_w = 71, .box_w = 6, .box_h = 12, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 6185, .adv_w = 163, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6238, .adv_w = 71, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6245, .adv_w = 173, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 6268, .adv_w = 163, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6299, .adv_w = 273, .box_w = 17, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6328, .adv_w = 173, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 6376, .adv_w = 80, .box_w = 3, .box_h = 4, .ofs_x = 1, .ofs_y = 3}, {.bitmap_index = 6382, .adv_w = 173, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 6382, .adv_w = 256, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 6436, .adv_w = 273, .box_w = 17, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6518, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6513, .adv_w = 80, .box_w = 3, .box_h = 4, .ofs_x = 1, .ofs_y = 3},
{.bitmap_index = 6614, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 6519, .adv_w = 256, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 6726, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6655, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 6822, .adv_w = 176, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 6751, .adv_w = 256, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 6888, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 6863, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 7016, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 6959, .adv_w = 176, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 7144, .adv_w = 288, .box_w = 18, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 7025, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 7270, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 7153, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 7398, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 7281, .adv_w = 288, .box_w = 18, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 7506, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 7407, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 7634, .adv_w = 128, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 7535, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 7690, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 7643, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 7774, .adv_w = 288, .box_w = 18, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 7771, .adv_w = 128, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 7918, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 7827, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8014, .adv_w = 176, .box_w = 11, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 7911, .adv_w = 288, .box_w = 18, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 8102, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2}, {.bitmap_index = 8055, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 8182, .adv_w = 224, .box_w = 14, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 8151, .adv_w = 176, .box_w = 11, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 8308, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8239, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2},
{.bitmap_index = 8413, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8319, .adv_w = 224, .box_w = 14, .box_h = 18, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 8511, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2}, {.bitmap_index = 8445, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8591, .adv_w = 224, .box_w = 16, .box_h = 14, .ofs_x = -1, .ofs_y = -1}, {.bitmap_index = 8550, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8703, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8648, .adv_w = 224, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = -2},
{.bitmap_index = 8773, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8728, .adv_w = 224, .box_w = 16, .box_h = 14, .ofs_x = -1, .ofs_y = -1},
{.bitmap_index = 8843, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 8840, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8941, .adv_w = 224, .box_w = 14, .box_h = 4, .ofs_x = 0, .ofs_y = 4}, {.bitmap_index = 8910, .adv_w = 160, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 8969, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 8980, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 9077, .adv_w = 320, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 9078, .adv_w = 224, .box_w = 14, .box_h = 4, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 9237, .adv_w = 288, .box_w = 20, .box_h = 16, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 9106, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 9397, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 9214, .adv_w = 320, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 9525, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 9374, .adv_w = 288, .box_w = 20, .box_h = 16, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 9595, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 9534, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 9665, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 9662, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 9805, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9732, .adv_w = 224, .box_w = 14, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 9901, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 9802, .adv_w = 320, .box_w = 20, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 10029, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 9942, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 10174, .adv_w = 224, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 10038, .adv_w = 256, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 10279, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 10166, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 10391, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 10311, .adv_w = 224, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 10489, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 10416, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 10587, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 10528, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 10683, .adv_w = 160, .box_w = 12, .box_h = 16, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 10626, .adv_w = 224, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 10779, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 10724, .adv_w = 256, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 10891, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 10820, .adv_w = 160, .box_w = 12, .box_h = 16, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 11003, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 10916, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 11111, .adv_w = 256, .box_w = 18, .box_h = 18, .ofs_x = -1, .ofs_y = -3}, {.bitmap_index = 11028, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 11273, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 11140, .adv_w = 288, .box_w = 18, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 11369, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 11248, .adv_w = 256, .box_w = 18, .box_h = 18, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 11519, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 11410, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 11619, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 11506, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 11719, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 11656, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 11819, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 11756, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 11919, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 11856, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 12019, .adv_w = 320, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 11956, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 12166, .adv_w = 224, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 12056, .adv_w = 320, .box_w = 20, .box_h = 10, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 12262, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 12156, .adv_w = 320, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 12374, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -3}, {.bitmap_index = 12303, .adv_w = 224, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 12519, .adv_w = 320, .box_w = 20, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 12399, .adv_w = 224, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 12639, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 12511, .adv_w = 256, .box_w = 17, .box_h = 17, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 12735, .adv_w = 258, .box_w = 17, .box_h = 11, .ofs_x = 0, .ofs_y = 1} {.bitmap_index = 12656, .adv_w = 320, .box_w = 20, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 12776, .adv_w = 192, .box_w = 12, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 12872, .adv_w = 258, .box_w = 17, .box_h = 11, .ofs_x = 0, .ofs_y = 1}
}; };
/*--------------------- /*---------------------
@ -2259,16 +2283,17 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
static const uint16_t unicode_list_1[] = { static const uint16_t unicode_list_1[] = {
0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b,
0x1e, 0x24, 0x26, 0x29, 0x2c, 0x2f, 0x30, 0x32, 0x1e, 0x24, 0x26, 0x29, 0x2b, 0x2c, 0x2f, 0x30,
0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e, 0x3f, 0x32, 0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e,
0x46, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0x3f, 0x46, 0x4b, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58,
0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef5b, 0xef5c, 0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c,
0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xef71, 0xef76, 0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b,
0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8,
0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb,
0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037, 0xf03a, 0xf043, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037,
0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191, 0xf192, 0xf193, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191,
0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa, 0xf712, 0xf7f2 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa,
0xf712, 0xf7f2
}; };
/*Collect the unicode lists and glyph_id offsets*/ /*Collect the unicode lists and glyph_id offsets*/
@ -2280,7 +2305,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
}, },
{ {
.range_start = 176, .range_length = 63475, .glyph_id_start = 96, .range_start = 176, .range_length = 63475, .glyph_id_start = 96,
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 88, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 90, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
} }
}; };
@ -2305,16 +2330,17 @@ static const uint8_t kern_left_class_mapping[] =
46, 46, 54, 55, 56, 57, 51, 58, 46, 46, 54, 55, 56, 57, 51, 58,
58, 59, 58, 60, 41, 0, 0, 9, 58, 59, 58, 60, 41, 0, 0, 9,
61, 23, 23, 25, 26, 26, 26, 26, 61, 23, 23, 25, 26, 26, 26, 26,
29, 22, 22, 30, 30, 46, 45, 45, 29, 22, 22, 30, 30, 30, 46, 45,
45, 47, 49, 49, 49, 49, 62, 51, 45, 45, 47, 49, 49, 49, 49, 62,
46, 51, 49, 9, 0, 0, 0, 0, 51, 46, 51, 51, 49, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Map glyph_ids to kern right classes*/ /*Map glyph_ids to kern right classes*/
@ -2333,16 +2359,17 @@ static const uint8_t kern_right_class_mapping[] =
39, 42, 39, 42, 43, 44, 45, 46, 39, 42, 39, 42, 43, 44, 45, 46,
46, 47, 46, 48, 0, 0, 35, 9, 46, 47, 46, 48, 0, 0, 35, 9,
49, 24, 24, 23, 25, 25, 25, 25, 49, 24, 24, 23, 25, 25, 25, 25,
25, 23, 23, 28, 28, 38, 37, 37, 25, 23, 23, 28, 28, 28, 38, 37,
37, 39, 39, 39, 39, 39, 50, 51, 37, 37, 39, 39, 39, 39, 39, 50,
39, 45, 39, 9, 0, 0, 0, 0, 51, 39, 45, 45, 39, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Kern values between classes*/ /*Kern values between classes*/

View File

@ -1,7 +1,7 @@
/******************************************************************************* /*******************************************************************************
* Size: 24 px * Size: 24 px
* Bpp: 4 * Bpp: 4
* Opts: --no-compress --no-prefilter --bpp 4 --size 24 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_24.c --force-fast-kern-format * Opts: --no-compress --no-prefilter --bpp 4 --size 24 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_24.c --force-fast-kern-format
******************************************************************************/ ******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE #ifdef LV_LVGL_H_INCLUDE_SIMPLE
@ -1689,6 +1689,29 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x17, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x17,
0xce, 0xfe, 0xc7, 0x10, 0x0, 0xce, 0xfe, 0xc7, 0x10, 0x0,
/* U+00DB "Û" */
0x0, 0x0, 0x0, 0x68, 0x60, 0x0, 0x0, 0x0,
0x0, 0x0, 0xaf, 0xef, 0xa0, 0x0, 0x0, 0x0,
0x0, 0xbf, 0x80, 0x8f, 0xb0, 0x0, 0x0, 0x0,
0x48, 0x40, 0x0, 0x48, 0x40, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xfc, 0x0,
0x0, 0x0, 0x0, 0xc, 0xf9, 0xaf, 0xc0, 0x0,
0x0, 0x0, 0x0, 0xcf, 0x9a, 0xfc, 0x0, 0x0,
0x0, 0x0, 0xc, 0xf9, 0xaf, 0xc0, 0x0, 0x0,
0x0, 0x0, 0xcf, 0x9a, 0xfc, 0x0, 0x0, 0x0,
0x0, 0xc, 0xf9, 0xaf, 0xc0, 0x0, 0x0, 0x0,
0x0, 0xcf, 0x9a, 0xfc, 0x0, 0x0, 0x0, 0x0,
0xc, 0xf9, 0xaf, 0xc0, 0x0, 0x0, 0x0, 0x0,
0xcf, 0x9a, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xc,
0xf9, 0x9f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xcf,
0x99, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf8,
0x7f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x63,
0xff, 0x50, 0x0, 0x0, 0x0, 0x5f, 0xf2, 0xd,
0xfe, 0x10, 0x0, 0x0, 0x1e, 0xfc, 0x0, 0x3f,
0xfe, 0x73, 0x23, 0x8e, 0xff, 0x30, 0x0, 0x4f,
0xff, 0xff, 0xff, 0xfe, 0x40, 0x0, 0x0, 0x17,
0xce, 0xfe, 0xc7, 0x10, 0x0,
/* U+00DC "Ü" */ /* U+00DC "Ü" */
0x0, 0x0, 0x36, 0x0, 0x6, 0x30, 0x0, 0x0, 0x0, 0x0, 0x36, 0x0, 0x6, 0x30, 0x0, 0x0,
0x0, 0xe, 0xf6, 0x6, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf6, 0x6, 0xfe, 0x0, 0x0, 0x0,
@ -1904,6 +1927,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x0, 0x9f, 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xc1, 0x0, 0x0,
0x4, 0xad, 0xfe, 0xb5, 0x0, 0x0, 0x4, 0xad, 0xfe, 0xb5, 0x0, 0x0,
/* U+00FB "û" */
0x0, 0x0, 0x8f, 0xfa, 0x0, 0x0, 0x0, 0x0,
0x9f, 0xba, 0xfa, 0x0, 0x0, 0x0, 0x9f, 0x90,
0x7, 0xfa, 0x0, 0x0, 0x2, 0x20, 0x0, 0x1,
0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xf, 0xf6, 0x0, 0x0, 0x0, 0x4f, 0xf0, 0xff,
0x60, 0x0, 0x0, 0x4, 0xff, 0xf, 0xf6, 0x0,
0x0, 0x0, 0x4f, 0xf0, 0xff, 0x60, 0x0, 0x0,
0x4, 0xff, 0xf, 0xf6, 0x0, 0x0, 0x0, 0x4f,
0xf0, 0xff, 0x60, 0x0, 0x0, 0x4, 0xff, 0xf,
0xf6, 0x0, 0x0, 0x0, 0x4f, 0xf0, 0xef, 0x60,
0x0, 0x0, 0x5, 0xff, 0xd, 0xf8, 0x0, 0x0,
0x0, 0x8f, 0xf0, 0xaf, 0xe0, 0x0, 0x0, 0x1e,
0xff, 0x3, 0xff, 0xb2, 0x0, 0x4d, 0xff, 0xf0,
0x8, 0xff, 0xff, 0xff, 0xf9, 0xff, 0x0, 0x4,
0xbe, 0xfe, 0xa3, 0x2f, 0xf0,
/* U+00FC "ü" */ /* U+00FC "ü" */
0x0, 0x2e, 0xb0, 0x9, 0xe3, 0x0, 0x0, 0x5, 0x0, 0x2e, 0xb0, 0x9, 0xe3, 0x0, 0x0, 0x5,
0xff, 0x0, 0xdf, 0x70, 0x0, 0x0, 0x6, 0x40, 0xff, 0x0, 0xdf, 0x70, 0x0, 0x0, 0x6, 0x40,
@ -4005,81 +4045,83 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 10949, .adv_w = 323, .box_w = 19, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 10949, .adv_w = 323, .box_w = 19, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 11158, .adv_w = 304, .box_w = 15, .box_h = 22, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 11158, .adv_w = 304, .box_w = 15, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 11323, .adv_w = 304, .box_w = 15, .box_h = 22, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 11323, .adv_w = 304, .box_w = 15, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 11488, .adv_w = 260, .box_w = 14, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 11488, .adv_w = 304, .box_w = 15, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 11614, .adv_w = 230, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 11653, .adv_w = 260, .box_w = 14, .box_h = 18, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 11722, .adv_w = 230, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 11779, .adv_w = 230, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 11830, .adv_w = 230, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 11887, .adv_w = 230, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 11938, .adv_w = 219, .box_w = 12, .box_h = 19, .ofs_x = 1, .ofs_y = -6}, {.bitmap_index = 11995, .adv_w = 230, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 12052, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 12103, .adv_w = 219, .box_w = 12, .box_h = 19, .ofs_x = 1, .ofs_y = -6},
{.bitmap_index = 12169, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 12217, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 12286, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 12334, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 12403, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 12451, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 12520, .adv_w = 107, .box_w = 9, .box_h = 18, .ofs_x = -1, .ofs_y = 0}, {.bitmap_index = 12568, .adv_w = 235, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 12601, .adv_w = 107, .box_w = 7, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 12685, .adv_w = 107, .box_w = 9, .box_h = 18, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 12664, .adv_w = 244, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 12766, .adv_w = 107, .box_w = 7, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 12790, .adv_w = 260, .box_w = 13, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 12829, .adv_w = 244, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 12907, .adv_w = 410, .box_w = 24, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 12955, .adv_w = 260, .box_w = 13, .box_h = 18, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 13063, .adv_w = 121, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 4}, {.bitmap_index = 13072, .adv_w = 260, .box_w = 13, .box_h = 18, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 13076, .adv_w = 384, .box_w = 24, .box_h = 25, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 13189, .adv_w = 410, .box_w = 24, .box_h = 13, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 13376, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 13345, .adv_w = 121, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 4},
{.bitmap_index = 13592, .adv_w = 384, .box_w = 24, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 13358, .adv_w = 384, .box_w = 24, .box_h = 25, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 13856, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 13658, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 14072, .adv_w = 264, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 13874, .adv_w = 384, .box_w = 24, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 14225, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 14138, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 14513, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 14354, .adv_w = 264, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 14801, .adv_w = 432, .box_w = 27, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 14507, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 15098, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 14795, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 15386, .adv_w = 432, .box_w = 27, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 15083, .adv_w = 432, .box_w = 27, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 15629, .adv_w = 384, .box_w = 24, .box_h = 26, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 15380, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 15941, .adv_w = 192, .box_w = 12, .box_h = 19, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 15668, .adv_w = 432, .box_w = 27, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 16055, .adv_w = 288, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 15911, .adv_w = 384, .box_w = 24, .box_h = 26, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 16226, .adv_w = 432, .box_w = 27, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 16223, .adv_w = 192, .box_w = 12, .box_h = 19, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 16550, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 16337, .adv_w = 288, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 16766, .adv_w = 264, .box_w = 17, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 16508, .adv_w = 432, .box_w = 27, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 16970, .adv_w = 336, .box_w = 15, .box_h = 22, .ofs_x = 3, .ofs_y = -2}, {.bitmap_index = 16832, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 17135, .adv_w = 336, .box_w = 21, .box_h = 26, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 17048, .adv_w = 264, .box_w = 17, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 17408, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 17252, .adv_w = 336, .box_w = 15, .box_h = 22, .ofs_x = 3, .ofs_y = -2},
{.bitmap_index = 17639, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 17417, .adv_w = 336, .box_w = 21, .box_h = 26, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 17870, .adv_w = 336, .box_w = 15, .box_h = 22, .ofs_x = 3, .ofs_y = -2}, {.bitmap_index = 17690, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 18035, .adv_w = 336, .box_w = 23, .box_h = 22, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 17921, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 18288, .adv_w = 240, .box_w = 13, .box_h = 22, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 18152, .adv_w = 336, .box_w = 15, .box_h = 22, .ofs_x = 3, .ofs_y = -2},
{.bitmap_index = 18431, .adv_w = 240, .box_w = 13, .box_h = 22, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 18317, .adv_w = 336, .box_w = 23, .box_h = 22, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 18574, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 18570, .adv_w = 240, .box_w = 13, .box_h = 22, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 18805, .adv_w = 336, .box_w = 21, .box_h = 6, .ofs_x = 0, .ofs_y = 6}, {.bitmap_index = 18713, .adv_w = 240, .box_w = 13, .box_h = 22, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 18868, .adv_w = 432, .box_w = 27, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 18856, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 19111, .adv_w = 480, .box_w = 31, .box_h = 24, .ofs_x = -1, .ofs_y = -3}, {.bitmap_index = 19087, .adv_w = 336, .box_w = 21, .box_h = 6, .ofs_x = 0, .ofs_y = 6},
{.bitmap_index = 19483, .adv_w = 432, .box_w = 29, .box_h = 24, .ofs_x = -1, .ofs_y = -3}, {.bitmap_index = 19150, .adv_w = 432, .box_w = 27, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 19831, .adv_w = 384, .box_w = 24, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 19393, .adv_w = 480, .box_w = 31, .box_h = 24, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 20095, .adv_w = 336, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = 2}, {.bitmap_index = 19765, .adv_w = 432, .box_w = 29, .box_h = 24, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 20242, .adv_w = 336, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = 2}, {.bitmap_index = 20113, .adv_w = 384, .box_w = 24, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 20389, .adv_w = 480, .box_w = 31, .box_h = 19, .ofs_x = -1, .ofs_y = -1}, {.bitmap_index = 20377, .adv_w = 336, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 20684, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 20524, .adv_w = 336, .box_w = 21, .box_h = 14, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 20900, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 20671, .adv_w = 480, .box_w = 31, .box_h = 19, .ofs_x = -1, .ofs_y = -1},
{.bitmap_index = 21188, .adv_w = 384, .box_w = 25, .box_h = 25, .ofs_x = -1, .ofs_y = -3}, {.bitmap_index = 20966, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 21501, .adv_w = 336, .box_w = 22, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 21182, .adv_w = 384, .box_w = 24, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 21743, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 21470, .adv_w = 384, .box_w = 25, .box_h = 25, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 21995, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 21783, .adv_w = 336, .box_w = 22, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 22226, .adv_w = 336, .box_w = 21, .box_h = 20, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 22025, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 22436, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 22277, .adv_w = 336, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 22652, .adv_w = 240, .box_w = 17, .box_h = 24, .ofs_x = -1, .ofs_y = -3}, {.bitmap_index = 22508, .adv_w = 336, .box_w = 21, .box_h = 20, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 22856, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 22718, .adv_w = 384, .box_w = 24, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 23108, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 22934, .adv_w = 240, .box_w = 17, .box_h = 24, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 23360, .adv_w = 432, .box_w = 27, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 23138, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 23603, .adv_w = 384, .box_w = 26, .box_h = 26, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 23390, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 23941, .adv_w = 288, .box_w = 18, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 23642, .adv_w = 432, .box_w = 27, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 24157, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 23885, .adv_w = 384, .box_w = 26, .box_h = 26, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 24502, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 24223, .adv_w = 288, .box_w = 18, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 24742, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 24439, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 24982, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 24784, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 25222, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 25024, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 25462, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 25264, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 25702, .adv_w = 480, .box_w = 31, .box_h = 20, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 25504, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 26012, .adv_w = 336, .box_w = 19, .box_h = 24, .ofs_x = 1, .ofs_y = -3}, {.bitmap_index = 25744, .adv_w = 480, .box_w = 30, .box_h = 16, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 26240, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 25984, .adv_w = 480, .box_w = 31, .box_h = 20, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 26492, .adv_w = 384, .box_w = 25, .box_h = 25, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 26294, .adv_w = 336, .box_w = 19, .box_h = 24, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 26805, .adv_w = 480, .box_w = 30, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 26522, .adv_w = 336, .box_w = 21, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 27075, .adv_w = 288, .box_w = 18, .box_h = 24, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 26774, .adv_w = 384, .box_w = 25, .box_h = 25, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 27291, .adv_w = 386, .box_w = 25, .box_h = 16, .ofs_x = 0, .ofs_y = 1} {.bitmap_index = 27087, .adv_w = 480, .box_w = 30, .box_h = 18, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 27357, .adv_w = 288, .box_w = 18, .box_h = 24, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 27573, .adv_w = 386, .box_w = 25, .box_h = 16, .ofs_x = 0, .ofs_y = 1}
}; };
/*--------------------- /*---------------------
@ -4088,16 +4130,17 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
static const uint16_t unicode_list_1[] = { static const uint16_t unicode_list_1[] = {
0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b,
0x1e, 0x24, 0x26, 0x29, 0x2c, 0x2f, 0x30, 0x32, 0x1e, 0x24, 0x26, 0x29, 0x2b, 0x2c, 0x2f, 0x30,
0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e, 0x3f, 0x32, 0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e,
0x46, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0x3f, 0x46, 0x4b, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58,
0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef5b, 0xef5c, 0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c,
0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xef71, 0xef76, 0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b,
0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8,
0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb,
0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037, 0xf03a, 0xf043, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037,
0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191, 0xf192, 0xf193, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191,
0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa, 0xf712, 0xf7f2 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa,
0xf712, 0xf7f2
}; };
/*Collect the unicode lists and glyph_id offsets*/ /*Collect the unicode lists and glyph_id offsets*/
@ -4109,7 +4152,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
}, },
{ {
.range_start = 176, .range_length = 63475, .glyph_id_start = 96, .range_start = 176, .range_length = 63475, .glyph_id_start = 96,
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 88, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 90, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
} }
}; };
@ -4134,16 +4177,17 @@ static const uint8_t kern_left_class_mapping[] =
46, 46, 54, 55, 56, 57, 51, 58, 46, 46, 54, 55, 56, 57, 51, 58,
58, 59, 58, 60, 41, 0, 0, 9, 58, 59, 58, 60, 41, 0, 0, 9,
61, 23, 23, 25, 26, 26, 26, 26, 61, 23, 23, 25, 26, 26, 26, 26,
29, 22, 22, 30, 30, 46, 45, 45, 29, 22, 22, 30, 30, 30, 46, 45,
45, 47, 49, 49, 49, 49, 62, 51, 45, 45, 47, 49, 49, 49, 49, 62,
46, 51, 49, 9, 0, 0, 0, 0, 51, 46, 51, 51, 49, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Map glyph_ids to kern right classes*/ /*Map glyph_ids to kern right classes*/
@ -4162,16 +4206,17 @@ static const uint8_t kern_right_class_mapping[] =
39, 42, 39, 42, 43, 44, 45, 46, 39, 42, 39, 42, 43, 44, 45, 46,
46, 47, 46, 48, 0, 0, 35, 9, 46, 47, 46, 48, 0, 0, 35, 9,
49, 24, 24, 23, 25, 25, 25, 25, 49, 24, 24, 23, 25, 25, 25, 25,
25, 23, 23, 28, 28, 38, 37, 37, 25, 23, 23, 28, 28, 28, 38, 37,
37, 39, 39, 39, 39, 39, 50, 51, 37, 37, 39, 39, 39, 39, 39, 50,
39, 45, 39, 9, 0, 0, 0, 0, 51, 39, 45, 45, 39, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Kern values between classes*/ /*Kern values between classes*/

View File

@ -1,7 +1,7 @@
/******************************************************************************* /*******************************************************************************
* Size: 28 px * Size: 28 px
* Bpp: 4 * Bpp: 4
* Opts: --no-compress --no-prefilter --bpp 4 --size 28 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_28.c --force-fast-kern-format * Opts: --no-compress --no-prefilter --bpp 4 --size 28 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_28.c --force-fast-kern-format
******************************************************************************/ ******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE #ifdef LV_LVGL_H_INCLUDE_SIMPLE
@ -2188,6 +2188,37 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x0, 0x0, 0x6, 0xae, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x0, 0x6, 0xae, 0xff, 0xeb, 0x60, 0x0,
0x0, 0x0,
/* U+00DB "Û" */
0x0, 0x0, 0x0, 0xb, 0xff, 0xd1, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xbf, 0xdb, 0xfd, 0x10,
0x0, 0x0, 0x0, 0x0, 0x1c, 0xfb, 0x0, 0x9f,
0xe2, 0x0, 0x0, 0x0, 0x0, 0x58, 0x60, 0x0,
0x5, 0x86, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf9, 0x0,
0x0, 0x0, 0x0, 0x0, 0x6f, 0xf5, 0x3f, 0xf9,
0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf5, 0x3f,
0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf5,
0x3f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
0xf5, 0x3f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0,
0x6f, 0xf5, 0x3f, 0xf9, 0x0, 0x0, 0x0, 0x0,
0x0, 0x6f, 0xf5, 0x3f, 0xf9, 0x0, 0x0, 0x0,
0x0, 0x0, 0x6f, 0xf5, 0x3f, 0xf9, 0x0, 0x0,
0x0, 0x0, 0x0, 0x6f, 0xf5, 0x3f, 0xf9, 0x0,
0x0, 0x0, 0x0, 0x0, 0x6f, 0xf5, 0x3f, 0xf9,
0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf5, 0x3f,
0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf5,
0x3f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
0xf5, 0x2f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0,
0x7f, 0xf4, 0xf, 0xfd, 0x0, 0x0, 0x0, 0x0,
0x0, 0xaf, 0xf2, 0xc, 0xff, 0x20, 0x0, 0x0,
0x0, 0x0, 0xef, 0xe0, 0x7, 0xff, 0xa0, 0x0,
0x0, 0x0, 0x7, 0xff, 0x90, 0x0, 0xef, 0xf9,
0x0, 0x0, 0x0, 0x7f, 0xff, 0x20, 0x0, 0x4f,
0xff, 0xea, 0x88, 0xae, 0xff, 0xf5, 0x0, 0x0,
0x3, 0xef, 0xff, 0xff, 0xff, 0xfe, 0x40, 0x0,
0x0, 0x0, 0x6, 0xae, 0xff, 0xeb, 0x60, 0x0,
0x0,
/* U+00DC "Ü" */ /* U+00DC "Ü" */
0x0, 0x0, 0x6, 0xd6, 0x0, 0x4d, 0x80, 0x0, 0x0, 0x0, 0x6, 0xd6, 0x0, 0x4d, 0x80, 0x0,
0x0, 0x0, 0x0, 0xe, 0xfd, 0x0, 0xbf, 0xf1, 0x0, 0x0, 0x0, 0xe, 0xfd, 0x0, 0xbf, 0xf1,
@ -2467,6 +2498,28 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x0, 0x1b, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x1b, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0,
0x0, 0x0, 0x4a, 0xdf, 0xed, 0x92, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xdf, 0xed, 0x92, 0x0, 0x0,
/* U+00FB "û" */
0x0, 0x0, 0x6, 0xff, 0xf3, 0x0, 0x0, 0x0,
0x0, 0x5, 0xff, 0xcf, 0xf3, 0x0, 0x0, 0x0,
0x5, 0xff, 0x50, 0x7f, 0xf3, 0x0, 0x0, 0x2,
0xcc, 0x30, 0x0, 0x5c, 0xb1, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0,
0x0, 0x0, 0x5, 0xff, 0x69, 0xff, 0x10, 0x0,
0x0, 0x0, 0x5f, 0xf6, 0x9f, 0xf1, 0x0, 0x0,
0x0, 0x5, 0xff, 0x69, 0xff, 0x10, 0x0, 0x0,
0x0, 0x5f, 0xf6, 0x9f, 0xf1, 0x0, 0x0, 0x0,
0x5, 0xff, 0x69, 0xff, 0x10, 0x0, 0x0, 0x0,
0x5f, 0xf6, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x5,
0xff, 0x69, 0xff, 0x10, 0x0, 0x0, 0x0, 0x5f,
0xf6, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x5, 0xff,
0x68, 0xff, 0x30, 0x0, 0x0, 0x0, 0x8f, 0xf6,
0x5f, 0xf7, 0x0, 0x0, 0x0, 0xe, 0xff, 0x61,
0xff, 0xe2, 0x0, 0x0, 0xa, 0xff, 0xf6, 0x8,
0xff, 0xe8, 0x44, 0x6d, 0xff, 0xff, 0x60, 0xa,
0xff, 0xff, 0xff, 0xfe, 0x5f, 0xf6, 0x0, 0x4,
0xae, 0xfe, 0xc7, 0x2, 0xff, 0x60,
/* U+00FC "ü" */ /* U+00FC "ü" */
0x0, 0x3, 0xeb, 0x0, 0x1d, 0xd1, 0x0, 0x0, 0x0, 0x3, 0xeb, 0x0, 0x1d, 0xd1, 0x0, 0x0,
0x0, 0x9f, 0xf2, 0x6, 0xff, 0x60, 0x0, 0x0, 0x0, 0x9f, 0xf2, 0x6, 0xff, 0x60, 0x0, 0x0,
@ -5245,81 +5298,83 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 14784, .adv_w = 376, .box_w = 22, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 14784, .adv_w = 376, .box_w = 22, .box_h = 25, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 15059, .adv_w = 354, .box_w = 18, .box_h = 25, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 15059, .adv_w = 354, .box_w = 18, .box_h = 25, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 15284, .adv_w = 354, .box_w = 18, .box_h = 25, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 15284, .adv_w = 354, .box_w = 18, .box_h = 25, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 15509, .adv_w = 303, .box_w = 16, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 15509, .adv_w = 354, .box_w = 18, .box_h = 25, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 15677, .adv_w = 268, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 15734, .adv_w = 303, .box_w = 16, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 15824, .adv_w = 268, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 15902, .adv_w = 268, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 15971, .adv_w = 268, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 16049, .adv_w = 268, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 16118, .adv_w = 256, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = -6}, {.bitmap_index = 16196, .adv_w = 268, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 16276, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 16343, .adv_w = 256, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = -6},
{.bitmap_index = 16434, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 16501, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 16592, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 16659, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 16750, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 16817, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 16908, .adv_w = 125, .box_w = 10, .box_h = 21, .ofs_x = -1, .ofs_y = 0}, {.bitmap_index = 16975, .adv_w = 274, .box_w = 15, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 17013, .adv_w = 125, .box_w = 8, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 17133, .adv_w = 125, .box_w = 10, .box_h = 21, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 17097, .adv_w = 284, .box_w = 16, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 17238, .adv_w = 125, .box_w = 8, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 17265, .adv_w = 303, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 17322, .adv_w = 284, .box_w = 16, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 17423, .adv_w = 478, .box_w = 28, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 17490, .adv_w = 303, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 17633, .adv_w = 141, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 5}, {.bitmap_index = 17648, .adv_w = 303, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 17651, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 17806, .adv_w = 478, .box_w = 28, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 18057, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 18016, .adv_w = 141, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 5},
{.bitmap_index = 18351, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 18034, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 18701, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 18440, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 18995, .adv_w = 308, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 18734, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 19205, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 19084, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 19611, .adv_w = 448, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, {.bitmap_index = 19378, .adv_w = 308, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 20003, .adv_w = 504, .box_w = 32, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 19588, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 20403, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 19994, .adv_w = 448, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
{.bitmap_index = 20809, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 20386, .adv_w = 504, .box_w = 32, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 21145, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 20786, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 21551, .adv_w = 224, .box_w = 14, .box_h = 23, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 21192, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 21712, .adv_w = 336, .box_w = 21, .box_h = 23, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 21528, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 21954, .adv_w = 504, .box_w = 32, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 21934, .adv_w = 224, .box_w = 14, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 22386, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 22095, .adv_w = 336, .box_w = 21, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 22680, .adv_w = 308, .box_w = 20, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 22337, .adv_w = 504, .box_w = 32, .box_h = 27, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 22970, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, {.bitmap_index = 22769, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 23204, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 23063, .adv_w = 308, .box_w = 20, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 23567, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 23353, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
{.bitmap_index = 23880, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 23587, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 24193, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, {.bitmap_index = 23950, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 24427, .adv_w = 392, .box_w = 26, .box_h = 25, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 24263, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 24752, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 24576, .adv_w = 392, .box_w = 18, .box_h = 26, .ofs_x = 3, .ofs_y = -3},
{.bitmap_index = 24952, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 24810, .adv_w = 392, .box_w = 26, .box_h = 25, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 25152, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 25135, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 25465, .adv_w = 392, .box_w = 25, .box_h = 7, .ofs_x = 0, .ofs_y = 7}, {.bitmap_index = 25335, .adv_w = 280, .box_w = 16, .box_h = 25, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 25553, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 25535, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 25889, .adv_w = 560, .box_w = 35, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 25848, .adv_w = 392, .box_w = 25, .box_h = 7, .ofs_x = 0, .ofs_y = 7},
{.bitmap_index = 26397, .adv_w = 504, .box_w = 33, .box_h = 29, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 25936, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 26876, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 26272, .adv_w = 560, .box_w = 35, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 27226, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3}, {.bitmap_index = 26780, .adv_w = 504, .box_w = 33, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 27414, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3}, {.bitmap_index = 27259, .adv_w = 448, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 27602, .adv_w = 560, .box_w = 35, .box_h = 22, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 27609, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 27987, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 27797, .adv_w = 392, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 28281, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 27985, .adv_w = 560, .box_w = 35, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 28687, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 28370, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 29108, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 28664, .adv_w = 448, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 29421, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 29070, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 29784, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 29491, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 30097, .adv_w = 392, .box_w = 25, .box_h = 23, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 29804, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 30385, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 30167, .adv_w = 392, .box_w = 25, .box_h = 25, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 30679, .adv_w = 280, .box_w = 19, .box_h = 29, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 30480, .adv_w = 392, .box_w = 25, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 30955, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 30768, .adv_w = 448, .box_w = 28, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 31318, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 31062, .adv_w = 280, .box_w = 19, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 31681, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 31338, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 32017, .adv_w = 448, .box_w = 30, .box_h = 29, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 31701, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 32452, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 32064, .adv_w = 504, .box_w = 32, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 32757, .adv_w = 560, .box_w = 35, .box_h = 26, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 32400, .adv_w = 448, .box_w = 30, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 33212, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 32835, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 33545, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 33140, .adv_w = 560, .box_w = 35, .box_h = 26, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 33878, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 33595, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 34211, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 33928, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 34544, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 34261, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 34877, .adv_w = 560, .box_w = 36, .box_h = 23, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 34594, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 35291, .adv_w = 392, .box_w = 22, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, {.bitmap_index = 34927, .adv_w = 560, .box_w = 35, .box_h = 19, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 35610, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 35260, .adv_w = 560, .box_w = 36, .box_h = 23, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 35973, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 35674, .adv_w = 392, .box_w = 22, .box_h = 29, .ofs_x = 1, .ofs_y = -4},
{.bitmap_index = 36394, .adv_w = 560, .box_w = 35, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 35993, .adv_w = 392, .box_w = 25, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 36762, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 36356, .adv_w = 448, .box_w = 29, .box_h = 29, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 37067, .adv_w = 451, .box_w = 29, .box_h = 19, .ofs_x = 0, .ofs_y = 1} {.bitmap_index = 36777, .adv_w = 560, .box_w = 35, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 37145, .adv_w = 336, .box_w = 21, .box_h = 29, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 37450, .adv_w = 451, .box_w = 29, .box_h = 19, .ofs_x = 0, .ofs_y = 1}
}; };
/*--------------------- /*---------------------
@ -5328,16 +5383,17 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
static const uint16_t unicode_list_1[] = { static const uint16_t unicode_list_1[] = {
0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b,
0x1e, 0x24, 0x26, 0x29, 0x2c, 0x2f, 0x30, 0x32, 0x1e, 0x24, 0x26, 0x29, 0x2b, 0x2c, 0x2f, 0x30,
0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e, 0x3f, 0x32, 0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e,
0x46, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0x3f, 0x46, 0x4b, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58,
0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef5b, 0xef5c, 0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c,
0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xef71, 0xef76, 0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b,
0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8,
0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb,
0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037, 0xf03a, 0xf043, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037,
0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191, 0xf192, 0xf193, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191,
0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa, 0xf712, 0xf7f2 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa,
0xf712, 0xf7f2
}; };
/*Collect the unicode lists and glyph_id offsets*/ /*Collect the unicode lists and glyph_id offsets*/
@ -5349,7 +5405,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
}, },
{ {
.range_start = 176, .range_length = 63475, .glyph_id_start = 96, .range_start = 176, .range_length = 63475, .glyph_id_start = 96,
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 88, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 90, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
} }
}; };
@ -5374,16 +5430,17 @@ static const uint8_t kern_left_class_mapping[] =
46, 46, 54, 55, 56, 57, 51, 58, 46, 46, 54, 55, 56, 57, 51, 58,
58, 59, 58, 60, 41, 0, 0, 9, 58, 59, 58, 60, 41, 0, 0, 9,
61, 23, 23, 25, 26, 26, 26, 26, 61, 23, 23, 25, 26, 26, 26, 26,
29, 22, 22, 30, 30, 46, 45, 45, 29, 22, 22, 30, 30, 30, 46, 45,
45, 47, 49, 49, 49, 49, 62, 51, 45, 45, 47, 49, 49, 49, 49, 62,
46, 51, 49, 9, 0, 0, 0, 0, 51, 46, 51, 51, 49, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Map glyph_ids to kern right classes*/ /*Map glyph_ids to kern right classes*/
@ -5402,16 +5459,17 @@ static const uint8_t kern_right_class_mapping[] =
39, 42, 39, 42, 43, 44, 45, 46, 39, 42, 39, 42, 43, 44, 45, 46,
46, 47, 46, 48, 0, 0, 35, 9, 46, 47, 46, 48, 0, 0, 35, 9,
49, 24, 24, 23, 25, 25, 25, 25, 49, 24, 24, 23, 25, 25, 25, 25,
25, 23, 23, 28, 28, 38, 37, 37, 25, 23, 23, 28, 28, 28, 38, 37,
37, 39, 39, 39, 39, 39, 50, 51, 37, 37, 39, 39, 39, 39, 39, 50,
39, 45, 39, 9, 0, 0, 0, 0, 51, 39, 45, 45, 39, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Kern values between classes*/ /*Kern values between classes*/

View File

@ -1,7 +1,7 @@
/******************************************************************************* /*******************************************************************************
* Size: 30 px * Size: 30 px
* Bpp: 4 * Bpp: 4
* Opts: --no-compress --no-prefilter --bpp 4 --size 30 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_30.c --force-fast-kern-format * Opts: --no-compress --no-prefilter --bpp 4 --size 30 --font Montserrat-Medium.ttf -r 0x20-0x7F,0xB0,0x2022,0xC0,0xC4,0xC7,0xC8,0xC9,0xCA,0xCB,0xCE,0xD4,0xD6,0xD9,0xDB,0xDC,0xDF,0xE0,0xE2,0xE4,0xE7-0xEB,0xEE,0xEF,0xF6,0xFB,0xFC,0x153 --font FontAwesome5-Solid+Brands+Regular.woff -r 61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,61468,61473,61478,61479,61480,61502,61507,61512,61515,61516,61517,61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,61559,61560,61561,61563,61587,61589,61636,61637,61639,61641,61664,61671,61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,62020,62087,62099,62212,62189,62810,63426,63650 --format lvgl -o lv_font_montserrat_30.c --force-fast-kern-format
******************************************************************************/ ******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE #ifdef LV_LVGL_H_INCLUDE_SIMPLE
@ -2416,6 +2416,41 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x0, 0x2, 0x8c, 0xef, 0xfe, 0xa6, 0x0, 0x0, 0x0, 0x2, 0x8c, 0xef, 0xfe, 0xa6, 0x0, 0x0,
0x0, 0x0,
/* U+00DB "Û" */
0x0, 0x0, 0x0, 0x1, 0xdf, 0xfb, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xef, 0xfb,
0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xc1,
0x3e, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf,
0xa0, 0x0, 0x1d, 0xfb, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
0x3, 0xff, 0xb0, 0xff, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x3f, 0xfb, 0xf, 0xff, 0x0, 0x0,
0x0, 0x0, 0x0, 0x3, 0xff, 0xb0, 0xff, 0xf0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfb, 0xf,
0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
0xb0, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x3f, 0xfb, 0xf, 0xff, 0x0, 0x0, 0x0, 0x0,
0x0, 0x3, 0xff, 0xb0, 0xff, 0xf0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x3f, 0xfb, 0xf, 0xff, 0x0,
0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xb0, 0xff,
0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xfb,
0xf, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3,
0xff, 0xb0, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x3f, 0xfb, 0xf, 0xff, 0x0, 0x0, 0x0,
0x0, 0x0, 0x3, 0xff, 0xa0, 0xef, 0xf1, 0x0,
0x0, 0x0, 0x0, 0x0, 0x5f, 0xf9, 0xb, 0xff,
0x50, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x70,
0x7f, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
0xf3, 0x1, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
0x9f, 0xfc, 0x0, 0x8, 0xff, 0xf7, 0x0, 0x0,
0x2, 0xaf, 0xff, 0x40, 0x0, 0xb, 0xff, 0xff,
0xca, 0xbd, 0xff, 0xff, 0x70, 0x0, 0x0, 0x8,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x50, 0x0, 0x0,
0x0, 0x2, 0x8c, 0xef, 0xfe, 0xa6, 0x0, 0x0,
0x0,
/* U+00DC "Ü" */ /* U+00DC "Ü" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x1e, 0xf3, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xf3, 0x0, 0x7f,
@ -2730,6 +2765,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0xf7, 0x0, 0x0, 0x0, 0x1, 0x7c, 0xef, 0xfc, 0xf7, 0x0, 0x0, 0x0, 0x1, 0x7c, 0xef, 0xfc,
0x81, 0x0, 0x0, 0x81, 0x0, 0x0,
/* U+00FB "û" */
0x0, 0x0, 0x0, 0xcf, 0xfd, 0x10, 0x0, 0x0,
0x0, 0x0, 0x1c, 0xfe, 0xdf, 0xe2, 0x0, 0x0,
0x0, 0x1, 0xdf, 0xc1, 0xa, 0xfe, 0x30, 0x0,
0x0, 0xa, 0xc9, 0x0, 0x0, 0x7c, 0xb1, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8,
0x6f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf8,
0x5f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf8,
0x1f, 0xfe, 0x0, 0x0, 0x0, 0x2, 0xff, 0xf8,
0xc, 0xff, 0xa0, 0x0, 0x0, 0x2d, 0xff, 0xf8,
0x3, 0xff, 0xfe, 0x86, 0x7a, 0xff, 0xef, 0xf8,
0x0, 0x5f, 0xff, 0xff, 0xff, 0xfc, 0x4f, 0xf8,
0x0, 0x1, 0x8c, 0xff, 0xeb, 0x50, 0x3f, 0xf8,
/* U+00FC "ü" */ /* U+00FC "ü" */
0x0, 0x0, 0xbf, 0x50, 0x3, 0xec, 0x10, 0x0, 0x0, 0x0, 0xbf, 0x50, 0x3, 0xec, 0x10, 0x0,
0x0, 0x3, 0xff, 0xc0, 0x9, 0xff, 0x50, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x9, 0xff, 0x50, 0x0,
@ -5902,81 +5961,83 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 16591, .adv_w = 403, .box_w = 23, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 16591, .adv_w = 403, .box_w = 23, .box_h = 27, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 16902, .adv_w = 380, .box_w = 19, .box_h = 27, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 16902, .adv_w = 380, .box_w = 19, .box_h = 27, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 17159, .adv_w = 380, .box_w = 19, .box_h = 27, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 17159, .adv_w = 380, .box_w = 19, .box_h = 27, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 17416, .adv_w = 324, .box_w = 17, .box_h = 22, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 17416, .adv_w = 380, .box_w = 19, .box_h = 27, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 17603, .adv_w = 287, .box_w = 15, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 17673, .adv_w = 324, .box_w = 17, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 17768, .adv_w = 287, .box_w = 15, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 17860, .adv_w = 287, .box_w = 15, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 17933, .adv_w = 287, .box_w = 15, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 18025, .adv_w = 287, .box_w = 15, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 18098, .adv_w = 274, .box_w = 16, .box_h = 23, .ofs_x = 1, .ofs_y = -7}, {.bitmap_index = 18190, .adv_w = 287, .box_w = 15, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 18282, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 18355, .adv_w = 274, .box_w = 16, .box_h = 23, .ofs_x = 1, .ofs_y = -7},
{.bitmap_index = 18469, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 18539, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 18656, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 18726, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 18843, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 18913, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 19030, .adv_w = 134, .box_w = 10, .box_h = 22, .ofs_x = -1, .ofs_y = 0}, {.bitmap_index = 19100, .adv_w = 294, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 19140, .adv_w = 134, .box_w = 8, .box_h = 22, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 19287, .adv_w = 134, .box_w = 10, .box_h = 22, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 19228, .adv_w = 305, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 19397, .adv_w = 134, .box_w = 8, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 19415, .adv_w = 325, .box_w = 16, .box_h = 22, .ofs_x = 2, .ofs_y = 0}, {.bitmap_index = 19485, .adv_w = 305, .box_w = 17, .box_h = 22, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 19591, .adv_w = 512, .box_w = 30, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 19672, .adv_w = 325, .box_w = 16, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 19831, .adv_w = 151, .box_w = 7, .box_h = 6, .ofs_x = 1, .ofs_y = 6}, {.bitmap_index = 19848, .adv_w = 325, .box_w = 16, .box_h = 22, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 19852, .adv_w = 480, .box_w = 31, .box_h = 31, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 20024, .adv_w = 512, .box_w = 30, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 20333, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 20264, .adv_w = 151, .box_w = 7, .box_h = 6, .ofs_x = 1, .ofs_y = 6},
{.bitmap_index = 20678, .adv_w = 480, .box_w = 30, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 20285, .adv_w = 480, .box_w = 31, .box_h = 31, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 21083, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 20766, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 21428, .adv_w = 330, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 21111, .adv_w = 480, .box_w = 30, .box_h = 27, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 21659, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 21516, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 22124, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 21861, .adv_w = 330, .box_w = 21, .box_h = 22, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 22589, .adv_w = 540, .box_w = 34, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 22092, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 23048, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 22557, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 23513, .adv_w = 540, .box_w = 34, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 23022, .adv_w = 540, .box_w = 34, .box_h = 27, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 23904, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 23481, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 24369, .adv_w = 240, .box_w = 15, .box_h = 24, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 23946, .adv_w = 540, .box_w = 34, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 24549, .adv_w = 360, .box_w = 23, .box_h = 24, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 24337, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 24825, .adv_w = 540, .box_w = 34, .box_h = 29, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 24802, .adv_w = 240, .box_w = 15, .box_h = 24, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 25318, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 24982, .adv_w = 360, .box_w = 23, .box_h = 24, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 25663, .adv_w = 330, .box_w = 21, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 25258, .adv_w = 540, .box_w = 34, .box_h = 29, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 25989, .adv_w = 420, .box_w = 20, .box_h = 28, .ofs_x = 3, .ofs_y = -3}, {.bitmap_index = 25751, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 26269, .adv_w = 420, .box_w = 27, .box_h = 32, .ofs_x = 0, .ofs_y = -5}, {.bitmap_index = 26096, .adv_w = 330, .box_w = 21, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 26701, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 26422, .adv_w = 420, .box_w = 20, .box_h = 28, .ofs_x = 3, .ofs_y = -3},
{.bitmap_index = 27066, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 26702, .adv_w = 420, .box_w = 27, .box_h = 32, .ofs_x = 0, .ofs_y = -5},
{.bitmap_index = 27431, .adv_w = 420, .box_w = 20, .box_h = 28, .ofs_x = 3, .ofs_y = -3}, {.bitmap_index = 27134, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 27711, .adv_w = 420, .box_w = 28, .box_h = 27, .ofs_x = -1, .ofs_y = -2}, {.bitmap_index = 27499, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 28089, .adv_w = 300, .box_w = 17, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 27864, .adv_w = 420, .box_w = 20, .box_h = 28, .ofs_x = 3, .ofs_y = -3},
{.bitmap_index = 28319, .adv_w = 300, .box_w = 17, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, {.bitmap_index = 28144, .adv_w = 420, .box_w = 28, .box_h = 27, .ofs_x = -1, .ofs_y = -2},
{.bitmap_index = 28549, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 28522, .adv_w = 300, .box_w = 17, .box_h = 27, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 28914, .adv_w = 420, .box_w = 27, .box_h = 7, .ofs_x = 0, .ofs_y = 8}, {.bitmap_index = 28752, .adv_w = 300, .box_w = 17, .box_h = 27, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 29009, .adv_w = 540, .box_w = 34, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 28982, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 29400, .adv_w = 600, .box_w = 38, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 29347, .adv_w = 420, .box_w = 27, .box_h = 7, .ofs_x = 0, .ofs_y = 8},
{.bitmap_index = 29989, .adv_w = 540, .box_w = 36, .box_h = 31, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 29442, .adv_w = 540, .box_w = 34, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 30547, .adv_w = 480, .box_w = 30, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 29833, .adv_w = 600, .box_w = 38, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 30967, .adv_w = 420, .box_w = 26, .box_h = 17, .ofs_x = 0, .ofs_y = 3}, {.bitmap_index = 30422, .adv_w = 540, .box_w = 36, .box_h = 31, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 31188, .adv_w = 420, .box_w = 26, .box_h = 17, .ofs_x = 0, .ofs_y = 3}, {.bitmap_index = 30980, .adv_w = 480, .box_w = 30, .box_h = 28, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 31409, .adv_w = 600, .box_w = 38, .box_h = 24, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 31400, .adv_w = 420, .box_w = 26, .box_h = 17, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 31865, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 31621, .adv_w = 420, .box_w = 26, .box_h = 17, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 32210, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 31842, .adv_w = 600, .box_w = 38, .box_h = 24, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 32675, .adv_w = 480, .box_w = 31, .box_h = 31, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 32298, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 33156, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 32643, .adv_w = 480, .box_w = 30, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 33521, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 33108, .adv_w = 480, .box_w = 31, .box_h = 31, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 33940, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 33589, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 34305, .adv_w = 420, .box_w = 27, .box_h = 24, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 33954, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 34629, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 34373, .adv_w = 420, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 34974, .adv_w = 300, .box_w = 20, .box_h = 31, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 34738, .adv_w = 420, .box_w = 27, .box_h = 24, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 35284, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 35062, .adv_w = 480, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 35703, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 35407, .adv_w = 300, .box_w = 20, .box_h = 31, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 36122, .adv_w = 540, .box_w = 34, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 35717, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 36513, .adv_w = 480, .box_w = 32, .box_h = 31, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 36136, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 37009, .adv_w = 360, .box_w = 23, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 36555, .adv_w = 540, .box_w = 34, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 37366, .adv_w = 600, .box_w = 38, .box_h = 28, .ofs_x = 0, .ofs_y = -2}, {.bitmap_index = 36946, .adv_w = 480, .box_w = 32, .box_h = 31, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 37898, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 37442, .adv_w = 360, .box_w = 23, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 38278, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 37799, .adv_w = 600, .box_w = 38, .box_h = 28, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 38658, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 38331, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 39038, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 38711, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 39418, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 39091, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 39798, .adv_w = 600, .box_w = 38, .box_h = 24, .ofs_x = 0, .ofs_y = -1}, {.bitmap_index = 39471, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 40254, .adv_w = 420, .box_w = 24, .box_h = 31, .ofs_x = 1, .ofs_y = -4}, {.bitmap_index = 39851, .adv_w = 600, .box_w = 38, .box_h = 20, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 40626, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 40231, .adv_w = 600, .box_w = 38, .box_h = 24, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 41045, .adv_w = 480, .box_w = 31, .box_h = 31, .ofs_x = -1, .ofs_y = -4}, {.bitmap_index = 40687, .adv_w = 420, .box_w = 24, .box_h = 31, .ofs_x = 1, .ofs_y = -4},
{.bitmap_index = 41526, .adv_w = 600, .box_w = 38, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 41059, .adv_w = 420, .box_w = 27, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 41963, .adv_w = 360, .box_w = 23, .box_h = 31, .ofs_x = 0, .ofs_y = -4}, {.bitmap_index = 41478, .adv_w = 480, .box_w = 31, .box_h = 31, .ofs_x = -1, .ofs_y = -4},
{.bitmap_index = 42320, .adv_w = 483, .box_w = 31, .box_h = 20, .ofs_x = 0, .ofs_y = 1} {.bitmap_index = 41959, .adv_w = 600, .box_w = 38, .box_h = 23, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 42396, .adv_w = 360, .box_w = 23, .box_h = 31, .ofs_x = 0, .ofs_y = -4},
{.bitmap_index = 42753, .adv_w = 483, .box_w = 31, .box_h = 20, .ofs_x = 0, .ofs_y = 1}
}; };
/*--------------------- /*---------------------
@ -5985,16 +6046,17 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
static const uint16_t unicode_list_1[] = { static const uint16_t unicode_list_1[] = {
0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x0, 0x10, 0x14, 0x17, 0x18, 0x19, 0x1a, 0x1b,
0x1e, 0x24, 0x26, 0x29, 0x2c, 0x2f, 0x30, 0x32, 0x1e, 0x24, 0x26, 0x29, 0x2b, 0x2c, 0x2f, 0x30,
0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e, 0x3f, 0x32, 0x34, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3e,
0x46, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58, 0xef5b, 0xef5c, 0x3f, 0x46, 0x4b, 0x4c, 0xa3, 0x1f72, 0xef51, 0xef58,
0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c, 0xef71, 0xef76, 0xef5b, 0xef5c, 0xef5d, 0xef61, 0xef63, 0xef65, 0xef69, 0xef6c,
0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b, 0xef9c, 0xef9d, 0xef71, 0xef76, 0xef77, 0xef78, 0xef8e, 0xef93, 0xef98, 0xef9b,
0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8, 0xefbe, 0xefc0, 0xef9c, 0xef9d, 0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefb7, 0xefb8,
0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb, 0xefe3, 0xefe5, 0xefbe, 0xefc0, 0xefc1, 0xefc4, 0xefc7, 0xefc8, 0xefc9, 0xefcb,
0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037, 0xf03a, 0xf043, 0xefe3, 0xefe5, 0xf014, 0xf015, 0xf017, 0xf019, 0xf030, 0xf037,
0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191, 0xf192, 0xf193, 0xf03a, 0xf043, 0xf06c, 0xf074, 0xf0ab, 0xf13b, 0xf190, 0xf191,
0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa, 0xf712, 0xf7f2 0xf192, 0xf193, 0xf194, 0xf1d7, 0xf1e3, 0xf23d, 0xf254, 0xf4aa,
0xf712, 0xf7f2
}; };
/*Collect the unicode lists and glyph_id offsets*/ /*Collect the unicode lists and glyph_id offsets*/
@ -6006,7 +6068,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
}, },
{ {
.range_start = 176, .range_length = 63475, .glyph_id_start = 96, .range_start = 176, .range_length = 63475, .glyph_id_start = 96,
.unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 88, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 90, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
} }
}; };
@ -6031,16 +6093,17 @@ static const uint8_t kern_left_class_mapping[] =
46, 46, 54, 55, 56, 57, 51, 58, 46, 46, 54, 55, 56, 57, 51, 58,
58, 59, 58, 60, 41, 0, 0, 9, 58, 59, 58, 60, 41, 0, 0, 9,
61, 23, 23, 25, 26, 26, 26, 26, 61, 23, 23, 25, 26, 26, 26, 26,
29, 22, 22, 30, 30, 46, 45, 45, 29, 22, 22, 30, 30, 30, 46, 45,
45, 47, 49, 49, 49, 49, 62, 51, 45, 45, 47, 49, 49, 49, 49, 62,
46, 51, 49, 9, 0, 0, 0, 0, 51, 46, 51, 51, 49, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Map glyph_ids to kern right classes*/ /*Map glyph_ids to kern right classes*/
@ -6059,16 +6122,17 @@ static const uint8_t kern_right_class_mapping[] =
39, 42, 39, 42, 43, 44, 45, 46, 39, 42, 39, 42, 43, 44, 45, 46,
46, 47, 46, 48, 0, 0, 35, 9, 46, 47, 46, 48, 0, 0, 35, 9,
49, 24, 24, 23, 25, 25, 25, 25, 49, 24, 24, 23, 25, 25, 25, 25,
25, 23, 23, 28, 28, 38, 37, 37, 25, 23, 23, 28, 28, 28, 38, 37,
37, 39, 39, 39, 39, 39, 50, 51, 37, 37, 39, 39, 39, 39, 39, 50,
39, 45, 39, 9, 0, 0, 0, 0, 51, 39, 45, 45, 39, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0,
0, 0
}; };
/*Kern values between classes*/ /*Kern values between classes*/

View File

@ -3,6 +3,21 @@
#include "menu_screen.h" #include "menu_screen.h"
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
const char * const MONTH[] =
{
"JAN",
"FÉV",
"MAR",
"AVR",
"MAI",
"JUI",
"JUL",
"AOÛ",
"SEP",
"OCT",
"NOV",
"DÉC",
};
static lv_obj_t *_create_altimeter_display(AltimeterScreen_t * const altimeterScreen); static lv_obj_t *_create_altimeter_display(AltimeterScreen_t * const altimeterScreen);
static void _create_pressure_display(AltimeterScreen_t * const altimeterScreen); static void _create_pressure_display(AltimeterScreen_t * const altimeterScreen);
@ -10,8 +25,10 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen);
static void _create_altitude_setting_display(AltimeterScreen_t * const altimeterScreen); static void _create_altitude_setting_display(AltimeterScreen_t * const altimeterScreen);
static void _update_min_and_max_pressure_data(AltimeterScreen_t * const altimeterScreen, float minPressure, float maxPressure); static void _update_min_and_max_pressure_data(AltimeterScreen_t * const altimeterScreen, float minPressure, float maxPressure);
static void _update_pressure_chart(AltimeterScreen_t * const altimeterScreen); static void _update_pressure_chart(AltimeterScreen_t * const altimeterScreen);
static void _update_pressure_info(AltimeterScreen_t * const altimeterScreen);
static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen); static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen);
static void _update_temperature_info(AltimeterScreen_t * const altimeterScreen, float temperature); static void _update_temperature_info(AltimeterScreen_t * const altimeterScreen, float temperature);
static void _update_date_time_info(AltimeterScreen_t * const altimeterScreen);
static void gesture_event_cb(lv_event_t *e) static void gesture_event_cb(lv_event_t *e)
{ {
@ -105,10 +122,19 @@ static void altitude_display_cleanup_event_cb(lv_event_t *e)
altimeterScreen->altitudeUpdateTimer = NULL; altimeterScreen->altitudeUpdateTimer = NULL;
} }
if(altimeterScreen->dateTimeUpdateTimer)
{
lv_timer_del(altimeterScreen->dateTimeUpdateTimer);
altimeterScreen->dateTimeUpdateTimer = NULL;
}
altimeterScreen->altitudeValue.value = NULL; altimeterScreen->altitudeValue.value = NULL;
altimeterScreen->altitudeValue.unit = NULL; altimeterScreen->altitudeValue.unit = NULL;
altimeterScreen->vsiValue.value_unit = NULL; altimeterScreen->vsiValue.value_unit = NULL;
altimeterScreen->temperatureValue.value = NULL; altimeterScreen->temperatureValue.value = NULL;
altimeterScreen->dateTimeValue.timeLabel = NULL;
altimeterScreen->dateTimeValue.monthLabel = NULL;
altimeterScreen->dateTimeValue.dayLabel = NULL;
LV_LOG_USER("Altitude display cleanup"); LV_LOG_USER("Altitude display cleanup");
} }
@ -126,27 +152,7 @@ static void altitude_setting_display_cleanup_event_cb(lv_event_t *e)
static void pressure_update_timer_cb(lv_timer_t *timer) static void pressure_update_timer_cb(lv_timer_t *timer)
{ {
AltimeterScreen_t *altimeterScreen = timer->user_data; AltimeterScreen_t *altimeterScreen = timer->user_data;
_update_pressure_info(altimeterScreen);
if(altimeterScreen->altimeterScreenMeasurementCb)
{
LV_LOG_USER("Updating pressure measurements");
float pressure;
/* We don't need to retrieve the temperature nor the altitude in this view */
altimeterScreen->altimeterScreenMeasurementCb(NULL, &pressure, NULL);
sprintf(altimeterScreen->pressureValue.value_text, "%.2f", pressure);
if(altimeterScreen->pressureValue.value)
{
lv_label_set_text_static(altimeterScreen->pressureValue.value, altimeterScreen->pressureValue.value_text);
}
//Mock up part needs to be changed on embedded target
altimeter_screen_shift_chart_pressure_measurement(altimeterScreen, pressure);
}
else
{
LV_LOG_USER("altimeterScreenMeasurementCb is NULL, be sure to register a callback !");
}
} }
static void altitude_update_timer_cb(lv_timer_t *timer) static void altitude_update_timer_cb(lv_timer_t *timer)
@ -176,6 +182,12 @@ static void altitude_update_timer_cb(lv_timer_t *timer)
} }
} }
static void date_time_update_timer_cb(lv_timer_t *timer)
{
AltimeterScreen_t *altimeterScreen = timer->user_data;
_update_date_time_info(altimeterScreen);
}
static void reset_pressure_event_cb(lv_event_t *e) static void reset_pressure_event_cb(lv_event_t *e)
{ {
AltimeterScreen_t *altimeterScreen = lv_event_get_user_data(e); AltimeterScreen_t *altimeterScreen = lv_event_get_user_data(e);
@ -331,6 +343,28 @@ void altimeter_screen_register_measurement_cb(AltimeterScreen_t * const altimete
altimeterScreen->altimeterScreenMeasurementCb = altimeterScreenMeasurementCb; altimeterScreen->altimeterScreenMeasurementCb = altimeterScreenMeasurementCb;
} }
void altimeter_screen_register_date_time_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenDateTimeCb_t altimeterScreenDateTimeCb)
{
if(!altimeterScreen)
{
LV_LOG_ERROR("NULL pointer given !");
return;
}
altimeterScreen->altimeterScreenDateTimeCb = altimeterScreenDateTimeCb;
}
void altimeter_screen_set_displayed_hour_format(AltimeterScreen_t * const altimeterScreen, bool hour_24H_format)
{
if(!altimeterScreen)
{
LV_LOG_ERROR("NULL pointer given !");
return;
}
altimeterScreen->hour_24H_format = hour_24H_format;
}
void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure) void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure)
{ {
if(!altimeterScreen) if(!altimeterScreen)
@ -428,7 +462,8 @@ static void _create_pressure_display(AltimeterScreen_t * const altimeterScreen)
altimeterScreen->pressureValue.value = lv_label_create(inner_circle); altimeterScreen->pressureValue.value = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->pressureValue.value, &lv_font_montserrat_30, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->pressureValue.value, &lv_font_montserrat_30, LV_PART_MAIN);
lv_obj_align(altimeterScreen->pressureValue.value, LV_ALIGN_TOP_MID, 0, 15); lv_obj_align(altimeterScreen->pressureValue.value, LV_ALIGN_TOP_MID, 0, 15);
lv_label_set_text_static(altimeterScreen->pressureValue.value, altimeterScreen->pressureValue.value_text);
_update_pressure_info(altimeterScreen);
if(altimeterScreen->pressureValue.unit) if(altimeterScreen->pressureValue.unit)
{ {
@ -542,6 +577,47 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
lv_obj_set_style_border_color(inner_circle, lv_color_make(238, 82, 83), LV_PART_MAIN); lv_obj_set_style_border_color(inner_circle, lv_color_make(238, 82, 83), LV_PART_MAIN);
lv_obj_set_scroll_dir(inner_circle, LV_DIR_NONE); lv_obj_set_scroll_dir(inner_circle, LV_DIR_NONE);
/* Let's create the month label */
if(altimeterScreen->dateTimeValue.monthLabel)
{
LV_LOG_ERROR("monthLabel should be NULL here !");
lv_obj_del(altimeterScreen->dateTimeValue.monthLabel);
altimeterScreen->dateTimeValue.monthLabel = NULL;
}
altimeterScreen->dateTimeValue.monthLabel = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->dateTimeValue.monthLabel, &lv_font_montserrat_16, LV_PART_MAIN);
lv_obj_align_to(altimeterScreen->dateTimeValue.monthLabel, inner_circle, LV_ALIGN_TOP_LEFT, 30, 5);
lv_obj_set_style_text_color(altimeterScreen->dateTimeValue.monthLabel, lv_color_make(158, 157, 36), LV_PART_MAIN);
/* Let's create the day label */
if(altimeterScreen->dateTimeValue.dayLabel)
{
LV_LOG_ERROR("dayLabel should be NULL here !");
lv_obj_del(altimeterScreen->dateTimeValue.dayLabel);
altimeterScreen->dateTimeValue.dayLabel = NULL;
}
altimeterScreen->dateTimeValue.dayLabel = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->dateTimeValue.dayLabel, &lv_font_montserrat_16, LV_PART_MAIN);
lv_obj_align_to(altimeterScreen->dateTimeValue.dayLabel, inner_circle, LV_ALIGN_TOP_RIGHT, -15, 5);
lv_obj_set_style_text_color(altimeterScreen->dateTimeValue.dayLabel, lv_color_make(142, 36, 170), LV_PART_MAIN);
lv_obj_set_style_text_align(altimeterScreen->dateTimeValue.dayLabel, LV_TEXT_ALIGN_RIGHT, LV_PART_MAIN);
/* Let's create the time label */
if(altimeterScreen->dateTimeValue.timeLabel)
{
LV_LOG_ERROR("timeLabel should be NULL here !");
lv_obj_del(altimeterScreen->dateTimeValue.timeLabel);
altimeterScreen->dateTimeValue.timeLabel = NULL;
}
altimeterScreen->dateTimeValue.timeLabel = lv_label_create(inner_circle);
lv_obj_set_width(altimeterScreen->dateTimeValue.timeLabel, lv_pct(100));
lv_obj_set_style_text_font(altimeterScreen->dateTimeValue.timeLabel, &lv_font_montserrat_24, LV_PART_MAIN);
lv_obj_set_style_text_align(altimeterScreen->dateTimeValue.timeLabel, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN);
lv_obj_align_to(altimeterScreen->dateTimeValue.timeLabel, inner_circle, LV_ALIGN_TOP_MID, 0, 20);
lv_obj_set_style_text_color(altimeterScreen->dateTimeValue.timeLabel, lv_color_make(251, 140, 0), LV_PART_MAIN);
_update_date_time_info(altimeterScreen);
/* Let's create the altitude main and unit label */ /* Let's create the altitude main and unit label */
if(altimeterScreen->altitudeValue.value) if(altimeterScreen->altitudeValue.value)
{ {
@ -551,7 +627,8 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
} }
altimeterScreen->altitudeValue.value = lv_label_create(inner_circle); altimeterScreen->altitudeValue.value = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->altitudeValue.value, &lv_font_montserrat_30, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->altitudeValue.value, &lv_font_montserrat_30, LV_PART_MAIN);
lv_obj_align(altimeterScreen->altitudeValue.value, LV_ALIGN_TOP_MID, 0, 15); lv_obj_align(altimeterScreen->altitudeValue.value, LV_ALIGN_TOP_MID, 0, 45);
lv_obj_set_style_text_color(altimeterScreen->altitudeValue.value, lv_color_make(0, 105, 92), LV_PART_MAIN);
lv_label_set_text_static(altimeterScreen->altitudeValue.value, altimeterScreen->altitudeValue.value_text); lv_label_set_text_static(altimeterScreen->altitudeValue.value, altimeterScreen->altitudeValue.value_text);
if(altimeterScreen->altitudeValue.unit) if(altimeterScreen->altitudeValue.unit)
@ -562,23 +639,9 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
} }
altimeterScreen->altitudeValue.unit = lv_label_create(inner_circle); altimeterScreen->altitudeValue.unit = lv_label_create(inner_circle);
lv_obj_set_style_text_font(altimeterScreen->altitudeValue.unit, &lv_font_montserrat_30, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->altitudeValue.unit, &lv_font_montserrat_30, LV_PART_MAIN);
lv_obj_set_style_text_color(altimeterScreen->altitudeValue.unit, lv_color_make(0, 105, 92), LV_PART_MAIN);
lv_label_set_text_static(altimeterScreen->altitudeValue.unit, "m"); lv_label_set_text_static(altimeterScreen->altitudeValue.unit, "m");
lv_obj_align_to(altimeterScreen->altitudeValue.unit, altimeterScreen->altitudeValue.value, LV_ALIGN_CENTER, 0, 25); lv_obj_align_to(altimeterScreen->altitudeValue.unit, altimeterScreen->altitudeValue.value, LV_ALIGN_OUT_BOTTOM_MID, 0, -13);
/* Let's create the zeroing button */
lv_obj_t *zeroing_btn = lv_img_create(inner_circle);
lv_img_set_src(zeroing_btn, &altimeter_asset_calibration_icon);
lv_obj_align(zeroing_btn, LV_ALIGN_CENTER, 75 ,5);
lv_obj_add_flag(zeroing_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
/* Using a long pressed event so that no missclicks trigger a reset */
lv_obj_add_event_cb(zeroing_btn, &(zeroing_altitude_event_cb), LV_EVENT_LONG_PRESSED, altimeterScreen);
/* Let's create the settings button */
lv_obj_t *setting_btn = lv_img_create(inner_circle);
lv_img_set_src(setting_btn, &watch_menu_settings_icon);
lv_obj_align(setting_btn, LV_ALIGN_CENTER, -75 ,5);
lv_obj_add_flag(setting_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(setting_btn, &(set_altitude_settings_event_cb), LV_EVENT_CLICKED, altimeterScreen);
/* Let's create the temperature label */ /* Let's create the temperature label */
if(altimeterScreen->temperatureValue.value) if(altimeterScreen->temperatureValue.value)
@ -592,7 +655,24 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
lv_obj_set_style_text_font(altimeterScreen->temperatureValue.value, &lv_font_montserrat_24, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->temperatureValue.value, &lv_font_montserrat_24, LV_PART_MAIN);
strcpy(altimeterScreen->temperatureValue.value_text, "°C"); strcpy(altimeterScreen->temperatureValue.value_text, "°C");
lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text); lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text);
lv_obj_align(altimeterScreen->temperatureValue.value, LV_ALIGN_CENTER, 0, 5); lv_obj_align(altimeterScreen->temperatureValue.value, LV_ALIGN_CENTER, 0, 20);
lv_obj_set_style_text_color(altimeterScreen->temperatureValue.value, lv_color_make(93, 64, 55), LV_PART_MAIN);
/* Let's create the zeroing button */
lv_obj_t *zeroing_btn = lv_img_create(inner_circle);
lv_img_set_src(zeroing_btn, &altimeter_asset_calibration_icon);
lv_obj_align_to(zeroing_btn, altimeterScreen->temperatureValue.value, LV_ALIGN_OUT_RIGHT_MID, 45, 0);
lv_obj_add_flag(zeroing_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
/* Using a long pressed event so that no missclicks trigger a reset */
lv_obj_add_event_cb(zeroing_btn, &(zeroing_altitude_event_cb), LV_EVENT_LONG_PRESSED, altimeterScreen);
/* Let's create the settings button */
lv_obj_t *setting_btn = lv_img_create(inner_circle);
lv_img_set_src(setting_btn, &watch_menu_settings_icon);
lv_obj_align_to(setting_btn, altimeterScreen->temperatureValue.value, LV_ALIGN_OUT_LEFT_MID, -45, 0);
lv_obj_add_flag(setting_btn, LV_OBJ_FLAG_ADV_HITTEST | LV_OBJ_FLAG_CLICKABLE);
/* Using a long pressed event so that no missclicks trigger a reset */
lv_obj_add_event_cb(setting_btn, &(set_altitude_settings_event_cb), LV_EVENT_LONG_PRESSED, altimeterScreen);
/* Let's create the VSI label */ /* Let's create the VSI label */
if(altimeterScreen->vsiValue.value_unit) if(altimeterScreen->vsiValue.value_unit)
@ -617,10 +697,19 @@ static void _create_altitude_display(AltimeterScreen_t * const altimeterScreen)
lv_timer_del(altimeterScreen->altitudeUpdateTimer); lv_timer_del(altimeterScreen->altitudeUpdateTimer);
altimeterScreen->altitudeUpdateTimer = NULL; altimeterScreen->altitudeUpdateTimer = NULL;
} }
/* Update the pressure value on the screen at the defined refresh rate in Hz */
/* Update the pressure value on the screen every second */
altimeterScreen->altitudeUpdateTimer = lv_timer_create(&(altitude_update_timer_cb), 1000 / ALTITUDE_TIMER_UPDATE_RATE_HZ, altimeterScreen); altimeterScreen->altitudeUpdateTimer = lv_timer_create(&(altitude_update_timer_cb), 1000 / ALTITUDE_TIMER_UPDATE_RATE_HZ, altimeterScreen);
/* Let's create the time update timer */
if(altimeterScreen->dateTimeUpdateTimer)
{
LV_LOG_ERROR("dateTimeUpdateTimer should be NULL here !");
lv_timer_del(altimeterScreen->dateTimeUpdateTimer);
altimeterScreen->dateTimeUpdateTimer = NULL;
}
/* Update the displayed time every 200 ms */
altimeterScreen->dateTimeUpdateTimer = lv_timer_create(&(date_time_update_timer_cb), 500, altimeterScreen);
/* We register the event callback to handle gestures */ /* We register the event callback to handle gestures */
lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_VIEW], &(gesture_event_cb), LV_EVENT_GESTURE, altimeterScreen); lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_VIEW], &(gesture_event_cb), LV_EVENT_GESTURE, altimeterScreen);
/* We register the event callback to handle the cleanup */ /* We register the event callback to handle the cleanup */
@ -664,7 +753,7 @@ static void _create_altitude_setting_display(AltimeterScreen_t * const altimeter
} }
altimeterScreen->altitudeOffset_spinbox.spinbox = lv_spinbox_create(inner_circle); altimeterScreen->altitudeOffset_spinbox.spinbox = lv_spinbox_create(inner_circle);
lv_obj_set_align(altimeterScreen->altitudeOffset_spinbox.spinbox, LV_ALIGN_CENTER); lv_obj_align(altimeterScreen->altitudeOffset_spinbox.spinbox, LV_ALIGN_CENTER, 0, -10);
lv_obj_set_width(altimeterScreen->altitudeOffset_spinbox.spinbox, lv_pct(50)); lv_obj_set_width(altimeterScreen->altitudeOffset_spinbox.spinbox, lv_pct(50));
lv_obj_set_style_text_font(altimeterScreen->altitudeOffset_spinbox.spinbox, &lv_font_montserrat_16, LV_PART_MAIN); lv_obj_set_style_text_font(altimeterScreen->altitudeOffset_spinbox.spinbox, &lv_font_montserrat_16, LV_PART_MAIN);
lv_spinbox_set_digit_format(altimeterScreen->altitudeOffset_spinbox.spinbox, 5, 4); lv_spinbox_set_digit_format(altimeterScreen->altitudeOffset_spinbox.spinbox, 5, 4);
@ -694,8 +783,7 @@ static void _create_altitude_setting_display(AltimeterScreen_t * const altimeter
lv_label_set_text_static(apply_btn_lbl, "Apply"); lv_label_set_text_static(apply_btn_lbl, "Apply");
lv_obj_center(apply_btn_lbl); lv_obj_center(apply_btn_lbl);
lv_obj_add_event_cb(apply_btn, &(apply_altitude_setting_event_cb), LV_EVENT_CLICKED, altimeterScreen); lv_obj_add_event_cb(apply_btn, &(apply_altitude_setting_event_cb), LV_EVENT_CLICKED, altimeterScreen);
lv_obj_align_to(apply_btn, dec_btn, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 10);
lv_obj_align(apply_btn, LV_ALIGN_CENTER, -45, 45);
lv_obj_t *cancel_btn = lv_btn_create(inner_circle); lv_obj_t *cancel_btn = lv_btn_create(inner_circle);
@ -706,8 +794,7 @@ static void _create_altitude_setting_display(AltimeterScreen_t * const altimeter
lv_label_set_text_static(cancel_btn_lbl, "Cancel"); lv_label_set_text_static(cancel_btn_lbl, "Cancel");
lv_obj_center(cancel_btn_lbl); lv_obj_center(cancel_btn_lbl);
lv_obj_add_event_cb(cancel_btn, &(apply_altitude_setting_event_cb), LV_EVENT_CLICKED, altimeterScreen); lv_obj_add_event_cb(cancel_btn, &(apply_altitude_setting_event_cb), LV_EVENT_CLICKED, altimeterScreen);
lv_obj_align_to(cancel_btn, inc_btn, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, 10);
lv_obj_align(cancel_btn, LV_ALIGN_CENTER, 45, 45);
/* We register the event callback to handle the cleanup */ /* We register the event callback to handle the cleanup */
lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_SETTING_VIEW], &(altitude_setting_display_cleanup_event_cb), LV_EVENT_DELETE, altimeterScreen); lv_obj_add_event_cb(altimeterScreen->displays[ALTIMETER_SCREEN_ALTITUDE_SETTING_VIEW], &(altitude_setting_display_cleanup_event_cb), LV_EVENT_DELETE, altimeterScreen);
@ -761,6 +848,30 @@ static void _update_pressure_chart(AltimeterScreen_t * const altimeterScreen)
_update_min_and_max_pressure_data(altimeterScreen, min, max); _update_min_and_max_pressure_data(altimeterScreen, min, max);
} }
static void _update_pressure_info(AltimeterScreen_t * const altimeterScreen)
{
if(altimeterScreen->altimeterScreenMeasurementCb)
{
LV_LOG_USER("Updating pressure measurements");
float pressure;
/* We don't need to retrieve the temperature nor the altitude in this view */
altimeterScreen->altimeterScreenMeasurementCb(NULL, &pressure, NULL);
sprintf(altimeterScreen->pressureValue.value_text, "%.2f", pressure);
if(altimeterScreen->pressureValue.value)
{
lv_label_set_text_static(altimeterScreen->pressureValue.value, altimeterScreen->pressureValue.value_text);
}
//Mock up part needs to be changed on embedded target
altimeter_screen_shift_chart_pressure_measurement(altimeterScreen, pressure);
}
else
{
LV_LOG_USER("altimeterScreenMeasurementCb is NULL, be sure to register a callback !");
}
}
static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen) static void _update_altitude_info(AltimeterScreen_t * const altimeterScreen)
{ {
sprintf(altimeterScreen->altitudeValue.value_text, "%.2f", altimeterScreen->lastReadAltitude - altimeterScreen->altitudeOffset); sprintf(altimeterScreen->altitudeValue.value_text, "%.2f", altimeterScreen->lastReadAltitude - altimeterScreen->altitudeOffset);
@ -774,3 +885,44 @@ static void _update_temperature_info(AltimeterScreen_t * const altimeterScreen,
sprintf(altimeterScreen->temperatureValue.value_text, "%.2f°C", temperature); sprintf(altimeterScreen->temperatureValue.value_text, "%.2f°C", temperature);
lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text); lv_label_set_text_static(altimeterScreen->temperatureValue.value, altimeterScreen->temperatureValue.value_text);
} }
static void _update_date_time_info(AltimeterScreen_t * const altimeterScreen)
{
if(altimeterScreen->altimeterScreenDateTimeCb)
{
struct tm date_time = {0};
altimeterScreen->altimeterScreenDateTimeCb(&date_time);
date_time.tm_hour = 23;
if(altimeterScreen->hour_24H_format)
{
sprintf(altimeterScreen->dateTimeValue.time_text, "%s%d:%s%d:%s%d",
date_time.tm_hour < 10 ? "0" : "", date_time.tm_hour,
date_time.tm_min < 10 ? "0" : "", date_time.tm_min,
date_time.tm_sec < 10 ? "0" : "", date_time.tm_sec);
}
else
{
// Intermediate hour var to set it on a 12H format
uint8_t hour = date_time.tm_hour;
if(hour > 12)hour -= 12;
sprintf(altimeterScreen->dateTimeValue.time_text, "%d:%s%d:%s%d%s", hour,
date_time.tm_min < 10 ? "0" : "", date_time.tm_min,
date_time.tm_sec < 10 ? "0" : "", date_time.tm_sec,
date_time.tm_hour < 13 ? "AM" : "PM");
}
static uint8_t cnt = 0;
strncpy(altimeterScreen->dateTimeValue.month_text, MONTH[cnt++ % 12], sizeof(altimeterScreen->dateTimeValue.month_text)-1);
date_time.tm_mday = (cnt % 32)+1;
sprintf(altimeterScreen->dateTimeValue.day_text, "%s%d", date_time.tm_mday < 10 ? "0":"", date_time.tm_mday);
lv_label_set_text_static(altimeterScreen->dateTimeValue.timeLabel, altimeterScreen->dateTimeValue.time_text);
lv_label_set_text_static(altimeterScreen->dateTimeValue.monthLabel, altimeterScreen->dateTimeValue.month_text);
lv_label_set_text_static(altimeterScreen->dateTimeValue.dayLabel, altimeterScreen->dateTimeValue.day_text);
}
else
{
LV_LOG_USER("altimeterScreenDateTimeCb is NULL, be sure to register a callback !");
}
}

View File

@ -3,6 +3,7 @@
#define ALTIMETER_SCREEN_H #define ALTIMETER_SCREEN_H
#include "lvgl.h" #include "lvgl.h"
#include <time.h>
#define ALTITUDE_TIMER_UPDATE_RATE_HZ (10) #define ALTITUDE_TIMER_UPDATE_RATE_HZ (10)
@ -36,6 +37,7 @@ typedef struct MinMaxVSIValue
typedef void (*AltimeterScreenOnStateChangeCb_t)(AltimeterScreenState_e altimeterScreenState); typedef void (*AltimeterScreenOnStateChangeCb_t)(AltimeterScreenState_e altimeterScreenState);
typedef void(*AltimeterScreenMeasurementCb_t)(float * const temperature, float * const pressure, float * const altitude); typedef void(*AltimeterScreenMeasurementCb_t)(float * const temperature, float * const pressure, float * const altitude);
typedef void (*AltimeterScreenUserFeedbackCb_t)(void); typedef void (*AltimeterScreenUserFeedbackCb_t)(void);
typedef void (*AltimeterScreenDateTimeCb_t)(struct tm * const dateTime);
typedef struct PressureChart typedef struct PressureChart
{ {
@ -48,6 +50,12 @@ typedef struct TemperatureValue
char value_text[9]; char value_text[9];
} TemperatureValue_t; } TemperatureValue_t;
typedef struct DateTimeValue
{
lv_obj_t *timeLabel, *monthLabel, *dayLabel;
char time_text[11], month_text[5], day_text[3];
} DateTimeValue_t;
typedef struct SpinBox typedef struct SpinBox
{ {
lv_obj_t *spinbox; lv_obj_t *spinbox;
@ -63,12 +71,14 @@ typedef struct AltimeterScreen
PressureChart_t pressureChart; PressureChart_t pressureChart;
lv_timer_t *pressureUpdateTimer; lv_timer_t *pressureUpdateTimer;
lv_timer_t *altitudeUpdateTimer; lv_timer_t *altitudeUpdateTimer;
lv_timer_t *dateTimeUpdateTimer;
MainValue_t pressureValue; MainValue_t pressureValue;
MainValue_t altitudeValue; MainValue_t altitudeValue;
MinMaxVSIValue_t minValue; MinMaxVSIValue_t minValue;
MinMaxVSIValue_t maxValue; MinMaxVSIValue_t maxValue;
MinMaxVSIValue_t vsiValue; MinMaxVSIValue_t vsiValue;
TemperatureValue_t temperatureValue; TemperatureValue_t temperatureValue;
DateTimeValue_t dateTimeValue;
float vsiFloat; float vsiFloat;
float lastReadAltitude; float lastReadAltitude;
//Should not be erased attributes //Should not be erased attributes
@ -76,13 +86,21 @@ typedef struct AltimeterScreen
AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb; AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb;
AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb; AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb;
AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb; AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb;
AltimeterScreenDateTimeCb_t altimeterScreenDateTimeCb;
float minValueFloat; float minValueFloat;
float maxValueFloat; float maxValueFloat;
float altitudeOffset; float altitudeOffset;
lv_coord_t pressure_data_points[10]; lv_coord_t pressure_data_points[10];
float pressure_data_points_float[10]; float pressure_data_points_float[10];
bool hour_24H_format : 1;
} AltimeterScreen_t; } AltimeterScreen_t;
/**
* @brief Initializes the altimeter screen context object
* @note This function has to be called first before any others
*
* @param altimeterScreen a pointer to the altimeter screen context structure to initialize.
*/
void altimeter_screen_init(AltimeterScreen_t * const altimeterScreen); void altimeter_screen_init(AltimeterScreen_t * const altimeterScreen);
/** /**
@ -90,27 +108,62 @@ void altimeter_screen_init(AltimeterScreen_t * const altimeterScreen);
* This callback should be used to initialize and deinitialize needed devices drivers like the pressure/temperature sensor. * This callback should be used to initialize and deinitialize needed devices drivers like the pressure/temperature sensor.
* @note The state of the application is passed as a parameter of the callback function. * @note The state of the application is passed as a parameter of the callback function.
* *
* @param altimeterScreen a pointer to the altimeter screen object structure. * @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param altimeterScreenOnStateChangeCb the callback of type @ref AltimeterScreenOnStateChangeCb_t to register. * @param altimeterScreenOnStateChangeCb the callback of type @ref AltimeterScreenOnStateChangeCb_t to register.
*/ */
void altimeter_screen_register_on_state_change_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb); void altimeter_screen_register_on_state_change_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenOnStateChangeCb_t altimeterScreenOnStateChangeCb);
/** /**
* @brief Registers a callback functions which will be called every time a user feedback should * @brief Registers a callback function which will be called every time a user feedback should
* be made. In this case, every time a button is clicked, the callback will be called. * be made. In this case, every time a button is clicked, the callback will be called.
* This enables the app to react to this user event. * This enables the app to react to this user event.
* *
* @param menuScreen a pointer to the previously initialized menu screen's context structure. * @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param menuScreenUserFeedbackCb a pointer to a function having the following signature : void(void). * @param altimeterScreenUserFeedbackCb a pointer to a function having the following signature : void(void) @ref AltimeterScreenUserFeedbackCb_t.
*/ */
void altimeter_screen_register_user_feedback_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb); void altimeter_screen_register_user_feedback_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenUserFeedbackCb_t altimeterScreenUserFeedbackCb);
/**
* @brief Registers the callback function used to retrieve the data displayed in the altimeter app.
* The various data are : the temperature in °C, the pressure in hPa and the altitude in meters.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param altimeterScreenMeasurementCb the callback of type @ref AltimeterScreenMeasurementCb_t to register.
* The function's signature is : void(float * const, float * const, float * const).
*/
void altimeter_screen_register_measurement_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb); void altimeter_screen_register_measurement_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenMeasurementCb_t altimeterScreenMeasurementCb);
/**
* @brief Registers the callback function used to retrieve the system time to be displayed on the altitude view.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param altimeterScreenDateTimeCb the callback of type @ref AltimeterScreenDateTimeCb_t to register.
* The function's signature is : void(struct tm * const).
*/
void altimeter_screen_register_date_time_cb(AltimeterScreen_t * const altimeterScreen, AltimeterScreenDateTimeCb_t altimeterScreenDateTimeCb);
/**
* @brief Sets the format used to display the time on the altitude screen, ie 12H or 24H hour format.
*
* @param altimeterScreen altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
* @param hour_24H_format a boolean value indicating if the hour format is 24H (true) or 12H (false).
*/
void altimeter_screen_set_displayed_hour_format(AltimeterScreen_t * const altimeterScreen, bool hour_24H_format);
void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure); void altimeter_screen_shift_chart_pressure_measurement(AltimeterScreen_t * const altimeterScreen, float pressure);
/**
* @brief Graphically builds the altimeter screen.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
*/
void altimeter_screen_create(AltimeterScreen_t * const altimeterScreen); void altimeter_screen_create(AltimeterScreen_t * const altimeterScreen);
/**
* @brief Frees all resources used by the AltimeterScreen object.
*
* @param altimeterScreen a pointer to the previously initialized altimeter screen object structure using @ref altimeter_screen_init.
*/
void altimeter_screen_destroy(AltimeterScreen_t * const altimeterScreen); void altimeter_screen_destroy(AltimeterScreen_t * const altimeterScreen);
#endif //ALTIMETER_SCREEN_H #endif //ALTIMETER_SCREEN_H

View File

@ -120,7 +120,7 @@ static void alti_on_state_change_cb(AltimeterScreenState_e state)
static void alti_meas_cb(float * const temperature, float * const pressure, float * const altitude) static void alti_meas_cb(float * const temperature, float * const pressure, float * const altitude)
{ {
static float a = 425.5; static float a = 425.5;
if(temperature) *temperature = (rand() % 20) + 10; if(temperature) *temperature = (rand() % 30) + -10;
if(pressure) *pressure = (float)rand()/(float)(RAND_MAX) * 50 + 980; if(pressure) *pressure = (float)rand()/(float)(RAND_MAX) * 50 + 980;
a += 0.2; a += 0.2;
@ -187,6 +187,8 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLi
altimeter_screen_register_on_state_change_cb(&altimeterScreen, &(alti_on_state_change_cb)); altimeter_screen_register_on_state_change_cb(&altimeterScreen, &(alti_on_state_change_cb));
altimeter_screen_register_measurement_cb(&altimeterScreen, &(alti_meas_cb)); altimeter_screen_register_measurement_cb(&altimeterScreen, &(alti_meas_cb));
altimeter_screen_register_user_feedback_cb(&altimeterScreen, &(user_feedback)); altimeter_screen_register_user_feedback_cb(&altimeterScreen, &(user_feedback));
altimeter_screen_register_date_time_cb(&altimeterScreen, &(date_time_cb));
altimeter_screen_set_displayed_hour_format(&altimeterScreen, false);
notification_screen_init(&notificationScreen); notification_screen_init(&notificationScreen);
notification_screen_register_on_state_change_cb(&notificationScreen, &(notification_screen_on_state_change_cb)); notification_screen_register_on_state_change_cb(&notificationScreen, &(notification_screen_on_state_change_cb));
notification_screen_set_displayed_hour_format(&notificationScreen, false); notification_screen_set_displayed_hour_format(&notificationScreen, false);

View File

@ -802,7 +802,7 @@ static void update_menu_list_item_text(lv_obj_t *menu_list_item, const char *tex
lv_obj_t *label = lv_obj_get_child(menu_list_item, 0); lv_obj_t *label = lv_obj_get_child(menu_list_item, 0);
if(label) if(label)
{ {
lv_label_set_text(label, text); lv_label_set_text_static(label, text);
} }
} }

View File

@ -245,7 +245,8 @@ static void hide_hour_and_minutes_hand_cb(lv_event_t *e)
{ {
WatchFace_t *watchFace = lv_event_get_user_data(e); WatchFace_t *watchFace = lv_event_get_user_data(e);
if(255 == lv_obj_get_style_opa(watchFace->hourHand.handImg, LV_PART_MAIN)) // Consumes too much ram on embedded target :-(
/*if(255 == lv_obj_get_style_opa(watchFace->hourHand.handImg, LV_PART_MAIN))
{ {
lv_obj_set_style_opa(watchFace->hourHand.handImg, 120, LV_PART_MAIN); lv_obj_set_style_opa(watchFace->hourHand.handImg, 120, LV_PART_MAIN);
lv_obj_set_style_opa(watchFace->minuteHand.handImg, 120, LV_PART_MAIN); lv_obj_set_style_opa(watchFace->minuteHand.handImg, 120, LV_PART_MAIN);
@ -254,9 +255,9 @@ static void hide_hour_and_minutes_hand_cb(lv_event_t *e)
{ {
lv_obj_set_style_opa(watchFace->hourHand.handImg, 255, LV_PART_MAIN); lv_obj_set_style_opa(watchFace->hourHand.handImg, 255, LV_PART_MAIN);
lv_obj_set_style_opa(watchFace->minuteHand.handImg, 255, LV_PART_MAIN); lv_obj_set_style_opa(watchFace->minuteHand.handImg, 255, LV_PART_MAIN);
} }*/
/*if(lv_obj_has_flag(watchFace->hourHand.handImg, LV_OBJ_FLAG_HIDDEN)) if(lv_obj_has_flag(watchFace->hourHand.handImg, LV_OBJ_FLAG_HIDDEN))
{ {
lv_obj_clear_flag(watchFace->hourHand.handImg, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(watchFace->hourHand.handImg, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(watchFace->minuteHand.handImg, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(watchFace->minuteHand.handImg, LV_OBJ_FLAG_HIDDEN);
@ -265,7 +266,7 @@ static void hide_hour_and_minutes_hand_cb(lv_event_t *e)
{ {
lv_obj_add_flag(watchFace->hourHand.handImg, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(watchFace->hourHand.handImg, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(watchFace->minuteHand.handImg, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(watchFace->minuteHand.handImg, LV_OBJ_FLAG_HIDDEN);
}*/ }
//Just for testing purposes, create a new notification //Just for testing purposes, create a new notification
char *title = malloc(strlen("JoeJohny John")+1); char *title = malloc(strlen("JoeJohny John")+1);
@ -326,7 +327,7 @@ void watch_face_create(WatchFace_t * const watchFace)
//Our display is the watch face image : //Our display is the watch face image :
watchFace->display = lv_img_create(NULL); watchFace->display = lv_img_create(NULL);
lv_img_set_src(watchFace->display, watch_face_img); lv_img_set_src(watchFace->display, watch_face_img);
lv_obj_set_style_bg_color(watchFace->display, lv_color_black(), LV_PART_MAIN); lv_obj_set_style_bg_color(watchFace->display, lv_color_white(), LV_PART_MAIN);
lv_obj_add_event_cb(watchFace->display, &(hide_hour_and_minutes_hand_cb), LV_EVENT_LONG_PRESSED, watchFace); lv_obj_add_event_cb(watchFace->display, &(hide_hour_and_minutes_hand_cb), LV_EVENT_LONG_PRESSED, watchFace);
//Battery arc is created here //Battery arc is created here