Skip to content

Commit

Permalink
Update ui_gps.h
Browse files Browse the repository at this point in the history
  • Loading branch information
mgrouch authored May 9, 2023
1 parent 0a829a9 commit b11e885
Showing 1 changed file with 86 additions and 101 deletions.
187 changes: 86 additions & 101 deletions bbn_m5tough_active_boat/ui_gps.h
Original file line number Diff line number Diff line change
@@ -1,120 +1,105 @@
#ifndef UI_ENGINE_H
#define UI_ENGINE_H
#ifndef UI_GPS_H
#define UI_GPS_H

#ifdef __cplusplus
extern "C" {
#endif

lv_updatable_screen_t engineScreen;
lv_updatable_screen_t gpsScreen;

static lv_obj_t *engine_rpm_meter;
static lv_meter_indicator_t *engine_rpm_indic;
static lv_obj_t *gps_time_label;
static lv_obj_t *gps_cogt_label;
static lv_obj_t *gps_cogm_label;
static lv_obj_t *gps_lat_label;
static lv_obj_t *gps_lon_label;

static lv_obj_t *oil_press_meter;
static lv_meter_indicator_t *oil_press_indic;
/**
* A GPS display
*/
static void lv_gps_display(lv_obj_t *parent) {

static lv_obj_t *eng_temp_meter;
static lv_meter_indicator_t *eng_temp_indic;
lv_obj_t *main_label = lv_label_create(parent);
lv_obj_align(main_label, LV_ALIGN_CENTER, 0, -105);
lv_label_set_recolor(main_label, true);
lv_label_set_text(main_label, "GPS #0080ff " LV_SYMBOL_GPS " #");

gps_time_label = lv_label_create(parent);
lv_obj_align(gps_time_label, LV_ALIGN_TOP_LEFT, 10, 40);
#if LV_FONT_MONTSERRAT_20
lv_obj_set_style_text_font(gps_time_label, &lv_font_montserrat_20, 0);
#endif
lv_label_set_text(gps_time_label, "GPS Time: --");

static void set_engine_rpm_value(void *indic, int32_t v) {
lv_meter_set_indicator_value(engine_rpm_meter, (lv_meter_indicator_t *)indic, v);
gps_lat_label = lv_label_create(parent);
lv_obj_align(gps_lat_label, LV_ALIGN_TOP_LEFT, 10, 80);
#if LV_FONT_MONTSERRAT_20
lv_obj_set_style_text_font(gps_lat_label, &lv_font_montserrat_20, 0);
#endif
lv_label_set_text(gps_lat_label, "LAT: --");

gps_lon_label = lv_label_create(parent);
lv_obj_align(gps_lon_label, LV_ALIGN_TOP_LEFT, 10, 120);
#if LV_FONT_MONTSERRAT_20
lv_obj_set_style_text_font(gps_lon_label, &lv_font_montserrat_20, 0);
#endif
lv_label_set_text(gps_lon_label, "LON: --");

gps_cogt_label = lv_label_create(parent);
lv_obj_align(gps_cogt_label, LV_ALIGN_TOP_LEFT, 10, 160);
#if LV_FONT_MONTSERRAT_20
lv_obj_set_style_text_font(gps_cogt_label, &lv_font_montserrat_20, 0);
#endif
lv_label_set_text(gps_cogt_label, "COGT: --");

gps_cogm_label = lv_label_create(parent);
lv_obj_align(gps_cogm_label, LV_ALIGN_TOP_LEFT, 10, 200);
#if LV_FONT_MONTSERRAT_20
lv_obj_set_style_text_font(gps_cogm_label, &lv_font_montserrat_20, 0);
#endif
lv_label_set_text(gps_cogm_label, "COGM: --");
}

/**
* A engine display
*/
static void lv_engine_display(lv_obj_t *parent) {
engine_rpm_meter = lv_meter_create(parent);
lv_obj_center(engine_rpm_meter);
lv_obj_set_size(engine_rpm_meter, 200, 200);
static String lat_print(float lat_deg) {
return String(lat_deg, 6) + String(LV_SYMBOL_DEGREES);
}

lv_obj_t *main_label = lv_label_create(parent);
lv_obj_align(main_label, LV_ALIGN_CENTER, 0, 50);
lv_label_set_text(main_label, "RPM\nx100");

/*Add a scale first*/
lv_meter_scale_t *scale = lv_meter_add_scale(engine_rpm_meter);
lv_meter_set_scale_ticks(engine_rpm_meter, scale, 31, 2, 10, lv_palette_main(LV_PALETTE_GREY));
lv_meter_set_scale_major_ticks(engine_rpm_meter, scale, 5, 4, 15, lv_palette_main(LV_PALETTE_GREY), 10);
lv_meter_set_scale_range(engine_rpm_meter, scale, 0, 60, 240, 150);

/*Add a blue arc to the start*/
engine_rpm_indic = lv_meter_add_arc(engine_rpm_meter, scale, 3, lv_palette_main(LV_PALETTE_BLUE), 0);
lv_meter_set_indicator_start_value(engine_rpm_meter, engine_rpm_indic, 0);
lv_meter_set_indicator_end_value(engine_rpm_meter, engine_rpm_indic, 20);

/*Make the tick lines blue at the start of the scale*/
engine_rpm_indic = lv_meter_add_scale_lines(
engine_rpm_meter, scale, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_BLUE), true, 0);
lv_meter_set_indicator_start_value(engine_rpm_meter, engine_rpm_indic, 0);
lv_meter_set_indicator_end_value(engine_rpm_meter, engine_rpm_indic, 20);

/*Add a red arc to the end*/
engine_rpm_indic = lv_meter_add_arc(engine_rpm_meter, scale, 3, lv_palette_main(LV_PALETTE_RED), 0);
lv_meter_set_indicator_start_value(engine_rpm_meter, engine_rpm_indic, 40);
lv_meter_set_indicator_end_value(engine_rpm_meter, engine_rpm_indic, 60);

/*Make the tick lines red at the end of the scale*/
engine_rpm_indic = lv_meter_add_scale_lines(
engine_rpm_meter, scale, lv_palette_main(LV_PALETTE_RED), lv_palette_main(LV_PALETTE_RED), true, 0);
lv_meter_set_indicator_start_value(engine_rpm_meter, engine_rpm_indic, 40);
lv_meter_set_indicator_end_value(engine_rpm_meter, engine_rpm_indic, 60);

/*Add a needle line indicator*/
engine_rpm_indic = lv_meter_add_needle_line(engine_rpm_meter, scale, 4, lv_palette_main(LV_PALETTE_GREY), -10);

oil_press_meter = lv_meter_create(parent);
lv_obj_align(oil_press_meter, LV_ALIGN_CENTER, -119, 79);
lv_obj_set_size(oil_press_meter, 75, 75);

lv_obj_remove_style(oil_press_meter, NULL, LV_PART_INDICATOR);
lv_obj_set_style_pad_all(oil_press_meter, 0, LV_PART_MAIN);

lv_meter_scale_t * oil_press_scale = lv_meter_add_scale(oil_press_meter);
lv_meter_set_scale_ticks(oil_press_meter, oil_press_scale, 10, 2, 7, lv_palette_main(LV_PALETTE_GREY));
lv_meter_set_scale_major_ticks(oil_press_meter, oil_press_scale, 3, 2, 7, lv_palette_main(LV_PALETTE_GREY), 10);
lv_meter_set_scale_range(oil_press_meter, oil_press_scale, 0, 90, 270, 90);

oil_press_indic = lv_meter_add_arc(oil_press_meter, oil_press_scale, 3, lv_palette_main(LV_PALETTE_BLUE), 1);
lv_meter_set_indicator_start_value(oil_press_meter, oil_press_indic, 0);
lv_meter_set_indicator_end_value(oil_press_meter, oil_press_indic, 50); // TODO:

lv_obj_t *oil_press_label = lv_label_create(parent);
lv_obj_align(oil_press_label, LV_ALIGN_BOTTOM_LEFT, 80, -2);
lv_label_set_text(oil_press_label, "psi");

eng_temp_meter = lv_meter_create(parent);
lv_obj_align(eng_temp_meter, LV_ALIGN_CENTER, 119, 79);
lv_obj_set_size(eng_temp_meter, 75, 75);

lv_obj_remove_style(eng_temp_meter, NULL, LV_PART_INDICATOR);
lv_obj_set_style_pad_all(eng_temp_meter, 0, LV_PART_MAIN);

lv_meter_scale_t * eng_temp_scale = lv_meter_add_scale(eng_temp_meter);
lv_meter_set_scale_ticks(eng_temp_meter, eng_temp_scale, 10, 2, 7, lv_palette_main(LV_PALETTE_GREY));
lv_meter_set_scale_major_ticks(eng_temp_meter, eng_temp_scale, 3, 2, 7, lv_palette_main(LV_PALETTE_GREY), 10);
lv_meter_set_scale_range(eng_temp_meter, eng_temp_scale, 0, 120, 270, 90);

eng_temp_indic = lv_meter_add_arc(eng_temp_meter, eng_temp_scale, 3, lv_palette_main(LV_PALETTE_ORANGE), 1);
lv_meter_set_indicator_start_value(eng_temp_meter, eng_temp_indic, 0);
lv_meter_set_indicator_end_value(eng_temp_meter, eng_temp_indic, 50); // TODO:

lv_obj_t *eng_temp_label = lv_label_create(parent);
lv_obj_align(eng_temp_label, LV_ALIGN_BOTTOM_RIGHT, -80, -2);
lv_label_set_text(eng_temp_label, LV_SYMBOL_DEGREES "C");
static String lon_print(float lon_deg) {
return String(lon_deg, 6) + String(LV_SYMBOL_DEGREES);
}

static String time_format(tm &t) {
char bufferTime[9];
sprintf(bufferTime, "%02d:%02d:%02d", t.tm_hour, t.tm_min, t.tm_sec);
return String(bufferTime);
}

static void engine_update_cb() {
set_engine_rpm_value(engine_rpm_indic,
(fresh(shipDataModel.propulsion.engines[0].revolutions_RPM.age)
? shipDataModel.propulsion.engines[0].revolutions_RPM.rpm / 100
: 0));
static void gps_update_cb() {
lv_label_set_text(gps_time_label,
(String("GPS Time: ")
+ (fresh(shipDataModel.environment.time_gps.age) ? time_format(shipDataModel.environment.time_gps.t) : String("--")))
.c_str());
lv_label_set_text(gps_lat_label,
(String("LAT: ")
+ (fresh(shipDataModel.navigation.position.lat.age) ? lat_print(shipDataModel.navigation.position.lat.deg) : String("--")))
.c_str());
lv_label_set_text(gps_lon_label,
(String("LON: ")
+ (fresh(shipDataModel.navigation.position.lon.age) ? lon_print(shipDataModel.navigation.position.lon.deg) : String("--")))
.c_str());
lv_label_set_text(gps_cogt_label,
(String("COGT: ")
+ (fresh(shipDataModel.navigation.course_over_ground_true.age) ? String(shipDataModel.navigation.course_over_ground_true.deg, 1) + String(LV_SYMBOL_DEGREES) : String("--")))
.c_str());
lv_label_set_text(gps_cogm_label,
(String("COGM: ")
+ (fresh(shipDataModel.navigation.course_over_ground_mag.age) ? String(shipDataModel.navigation.course_over_ground_mag.deg, 1) + String(LV_SYMBOL_DEGREES) : String("--")))
.c_str());
}

void init_engineScreen() {
engineScreen.screen = lv_obj_create(NULL); // Creates a Screen object
engineScreen.init_cb = lv_engine_display;
engineScreen.update_cb = engine_update_cb;
void init_gpsScreen() {
gpsScreen.screen = lv_obj_create(NULL); // Creates a Screen object
gpsScreen.init_cb = lv_gps_display;
gpsScreen.update_cb = gps_update_cb;
}

#ifdef __cplusplus
Expand Down

0 comments on commit b11e885

Please sign in to comment.