void gui_set_gps_detail_loop() { disp.LoadFont(F_TEXT_S); uint8_t f_h = disp.GetAHeight(); disp.GotoXY(1, 0); fprintf_P(lcd_out, PSTR("Lat: %s"), fc.gps_data.cache_gui_latitude); disp.GotoXY(0, f_h); fprintf_P(lcd_out, PSTR("Lon: %s"), fc.gps_data.cache_gui_longtitude); disp.GotoXY(0, f_h * 2); fprintf_P(lcd_out, PSTR("HDOP: %0.4f"), fc.gps_data.hdop); char tmp[10]; sprintf_P(tmp, PSTR("%d/%d"), fc.gps_data.sat_used, fc.gps_data.sat_total); gui_raligh_text(tmp, GUI_DISP_WIDTH, 0); switch (fc.gps_data.fix) { case(1): sprintf_P(tmp, PSTR("No Fix")); break; case(2): sprintf_P(tmp, PSTR("2D Fix")); break; case(3): sprintf_P(tmp, PSTR("3D Fix")); break; } gui_raligh_text(tmp, GUI_DISP_WIDTH, f_h); sprintf_P(tmp, PSTR("%0.0f"), fc.gps_data.altitude); gui_raligh_text(tmp, GUI_DISP_WIDTH, f_h * 2); disp.LoadFont(F_TEXT_S); for (uint8_t i=0; i < GPS_SAT_CNT; i++) { // uint8_t x = i < 6 ? (GUI_DISP_WIDTH * 1 / 4) : (GUI_DISP_WIDTH * 3 / 4); // uint8_t y = (3.5 + i % 6) * f_h; // // x -= GUI_DISP_WIDTH / 8; // // disp.GotoXY(x, y); // if (fc.gps_data.sat_id[i] != 0) // fprintf_P(lcd_out, PSTR("%03d: %d"), fc.gps_data.sat_id[i], fc.gps_data.sat_snr[i]); if (fc.gps_data.sat_id[i] == 0) continue; uint8_t x = 7 * i; uint8_t y = GUI_DISP_HEIGHT - 2 - fc.gps_data.sat_id[i] / 3; disp.DrawRectangle(x, y, x + 5, GUI_DISP_HEIGHT - 1, 1, 1); } }
void gui_list_draw() { char tmp_text[64]; char tmp_sub_text[32]; uint8_t flags; disp.LoadFont(F_TEXT_M); uint8_t t_h = disp.GetTextHeight(); int16_t y = gui_list_y_offset; int8_t height; int16_t total_height = 0; uint8_t sub_height; //emulate middle click if (button_in_reset(B_MIDDLE)) { if (task_get_ms_tick() - gui_list_middle_hold > BUTTON_LONG) { gui_switch_task(gui_list_back); if (config.gui.menu_audio_flags & CFG_AUDIO_MENU_BUTTONS && gui_buttons_override == false) seq_start(&snd_menu_exit, config.gui.menu_volume); } } else gui_list_middle_hold = task_get_ms_tick(); for (uint8_t i = 0; i < gui_list_size; i++) { height = 1 + t_h; flags = 0; if (i < gui_list_size - 1) { gui_list_gen_f(i, tmp_text, &flags, tmp_sub_text); } else { strcpy_P(tmp_text, PSTR("back")); flags = GUI_LIST_BACK; } uint8_t x_val = 5; switch(flags & GUI_LIST_T_MASK) { case(GUI_LIST_FOLDER): x_val = 5; break; case(GUI_LIST_BACK): x_val = 2; break; } if ((flags & GUI_LIST_T_MASK) == GUI_LIST_SUB_TEXT) { sub_height = disp.GetTextHeight(); height += sub_height; } if (gui_list_index[gui_task] == i) { if (y < 0) gui_list_y_offset = -total_height; if (y > GUI_DISP_HEIGHT - height) gui_list_y_offset = -total_height + GUI_DISP_HEIGHT - height; } if (y > GUI_DISP_HEIGHT) continue; disp.GotoXY(x_val, y + 1); fprintf_P(lcd_out, PSTR("%s"), tmp_text); //sub text if ((flags & GUI_LIST_T_MASK) == GUI_LIST_SUB_TEXT) gui_raligh_text(tmp_sub_text, GUI_DISP_WIDTH - 3, y + t_h + 1); //tick if ((flags & GUI_LIST_T_MASK) == GUI_LIST_CHECK_OFF || (flags & GUI_LIST_T_MASK) == GUI_LIST_CHECK_ON) { disp.DrawRectangle(GUI_DISP_WIDTH - 9, y + 1, GUI_DISP_WIDTH - 3, y + 7, 1, 0); if ((flags & GUI_LIST_T_MASK) == GUI_LIST_CHECK_ON) { disp.DrawLine(GUI_DISP_WIDTH - 8, y + 5, GUI_DISP_WIDTH - 7, y + 6, 1); disp.DrawLine(GUI_DISP_WIDTH - 6, y + 5, GUI_DISP_WIDTH - 4, y + 3, 1); } } if (flags & GUI_LIST_DISABLED) { for (uint8_t cx = 0; cx < GUI_DISP_WIDTH - 1; cx++) for (uint8_t cy = y + cx % 2 + 1; cy < y + t_h; cy += 2) disp.PutPixel(cx, cy, 0); } if (gui_list_index[gui_task] == i) { disp.Invert(0, y, GUI_DISP_WIDTH - 1, y + height - 1); disp.PutPixel(0, y, 0); disp.PutPixel(GUI_DISP_WIDTH - 1, y, 0); disp.PutPixel(GUI_DISP_WIDTH - 1, y + height - 1, 0); disp.PutPixel(0, y + height - 1, 0); } y += height; total_height += height; } }
void gui_value_loop() { char tmp[20]; uint8_t f_h; uint8_t sec; uint8_t min; uint8_t hour; uint8_t day; uint8_t wday; uint8_t month; uint16_t year; gui_dialog(gui_value_label); disp.LoadFont(F_TEXT_L); f_h = disp.GetTextHeight(); switch(gui_value_type) { case(GUI_VAL_NUMBER): sprintf(tmp, gui_value_format, gui_value_tmp); gui_caligh_text(tmp, GUI_DISP_WIDTH / 2, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2); break; case(GUI_VAL_NUMBER_DISABLE): if (gui_value_tmp > 0) sprintf(tmp, gui_value_format, gui_value_tmp); else strcpy_P(tmp, PSTR("disabled")); gui_caligh_text(tmp, GUI_DISP_WIDTH / 2, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2); break; case(GUI_VAL_VARIO_TEST): sprintf(tmp, gui_value_format, gui_value_tmp); gui_raligh_text(tmp, GUI_DIALOG_RIGHT - 2, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2); disp.LoadFont(F_TEXT_S); f_h = disp.GetTextHeight(); disp.GotoXY(GUI_DIALOG_LEFT + 1, GUI_DIALOG_TOP + 2); fprintf(lcd_out, "f=%0.0f", audio_vario_freq); disp.GotoXY(GUI_DIALOG_LEFT + 1, GUI_DIALOG_TOP + 4 + f_h); fprintf(lcd_out, "l=%4u", audio_vario_length / 31); disp.GotoXY(GUI_DIALOG_LEFT + 1, GUI_DIALOG_TOP + 6 + f_h * 2); fprintf(lcd_out, "p=%4u", audio_vario_pause / 31); break; case(GUI_VAL_TIME): time_from_epoch(time_get_actual(), &sec, &min, &hour); sprintf_P(tmp, PSTR("%02d : %02d . %02d"), hour, min, sec); gui_caligh_text(tmp, GUI_DISP_WIDTH / 2, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2); if (gui_value_index == 0) disp.Invert(18, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2, 32, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 + f_h / 2 - 2); if (gui_value_index == 1) disp.Invert(36, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2, 50, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 + f_h / 2 - 2); if (gui_value_index == 2) disp.Invert(54, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2, 68, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 + f_h / 2 - 2); break; case(GUI_VAL_DATE): datetime_from_epoch(time_get_actual(), &sec, &min, &hour, &day, &wday, &month, &year); sprintf_P(tmp, PSTR("%02d / %02d / %04d"), day, month, year); gui_caligh_text(tmp, GUI_DISP_WIDTH / 2, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2); if (gui_value_index == 0) disp.Invert(10, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2, 24, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 + f_h / 2 - 2); if (gui_value_index == 1) disp.Invert(30, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2, 44, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 + f_h / 2 - 2); if (gui_value_index == 2) disp.Invert(50, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 - f_h / 2, 76, GUI_DIALOG_TOP + (GUI_DIALOG_BOTTOM - GUI_DIALOG_TOP) / 2 + f_h / 2 - 2); break; case(GUI_VAL_CONTRAST): gui_value_draw_bar(); break; case(GUI_VAL_BRIGTHNES): gui_value_draw_bar(); break; case(GUI_VAL_VOLUME): gui_value_draw_bar(); break; } if (button_hold(B_LEFT)) { uint8_t t_param = BE_CLICK; gui_value_irqh(TASK_IRQ_BUTTON_L, &t_param); } if (button_hold(B_RIGHT)) { uint8_t t_param = BE_CLICK; gui_value_irqh(TASK_IRQ_BUTTON_R, &t_param); } }
void gui_dialog_loop() { if (gui_dialog_style & GUI_STYLE_NO_TITLE) { //no title mode (GUI_STYLE_NO_TITLE is set) disp.DrawRectangle(0, 0, GUI_DISP_WIDTH - 2, GUI_DISP_HEIGHT - 2, 1, false); } else { //normal mode gui_dialog(gui_dialog_msg_line0); } disp.LoadFont(F_TEXT_M); uint8_t f_h = disp.GetTextHeight(); if ((gui_dialog_style & GUI_STYLE_MASK) == GUI_STYLE_STATS) { //if new flight has begin exit the stat screen if (fc.flight.state != FLIGHT_LAND) { gui_dialog_cb(1); } uint32_t diff = fc.flight.timer / 1000; uint8_t hour, min; hour = diff / 3600; diff %= 3600; min = diff / 60; diff %= 60; char tmp[32]; disp.GotoXY(GUI_DIALOG_LEFT, GUI_DIALOG_TOP + f_h * 0); if (hour > 0) fprintf_P(lcd_out, PSTR("%02d:%02d"), hour, min); else fprintf_P(lcd_out, PSTR("%02d.%02d"), min, diff); strcpy_P(tmp, PSTR("Alt")); gui_raligh_text(tmp, (GUI_DIALOG_WIDTH * 2) / 3 - 2, GUI_DIALOG_TOP + f_h * 0); strcpy_P(tmp, PSTR("Vario")); gui_raligh_text(tmp, GUI_DIALOG_RIGHT + 1, GUI_DIALOG_TOP + f_h * 0); sprintf_P(tmp, PSTR("%dm"), fc.flight.stats.max_alt); gui_raligh_text(tmp, (GUI_DIALOG_WIDTH * 2) / 3 - 2, GUI_DIALOG_TOP + f_h * 1); sprintf_P(tmp, PSTR("%dm"), fc.flight.stats.min_alt); gui_raligh_text(tmp, (GUI_DIALOG_WIDTH * 2) / 3 - 2, GUI_DIALOG_TOP + f_h * 2); sprintf_P(tmp, PSTR("%0.1fm"), (float)fc.flight.stats.max_climb / 100.0); gui_raligh_text(tmp, GUI_DIALOG_RIGHT + 1, GUI_DIALOG_TOP + f_h * 1); sprintf_P(tmp, PSTR("%0.1fm"), (float)fc.flight.stats.max_sink / 100.0); gui_raligh_text(tmp, GUI_DIALOG_RIGHT + 1, GUI_DIALOG_TOP + f_h * 2); disp.LoadFont(F_TEXT_S); disp.GotoXY(GUI_DIALOG_LEFT, GUI_DIALOG_TOP + f_h * 1 + 2); fprintf_P(lcd_out, PSTR("max")); disp.GotoXY(GUI_DIALOG_LEFT, GUI_DIALOG_TOP + f_h * 2 + 2); fprintf_P(lcd_out, PSTR("min")); } else { uint8_t top; if (gui_dialog_style & GUI_STYLE_NO_TITLE) { //no title mode (GUI_STYLE_NO_TITLE is set) top = 3; disp.GotoXY(GUI_DIALOG_LEFT, top + f_h * 0); fprintf_P(lcd_out, PSTR("%s"), gui_dialog_msg_line0); } else { //normal mode top = GUI_DIALOG_TOP - f_h; } disp.GotoXY(GUI_DIALOG_LEFT, top + f_h * 1); fprintf_P(lcd_out, PSTR("%s"), gui_dialog_msg_line1); disp.GotoXY(GUI_DIALOG_LEFT, top + f_h * 2); fprintf_P(lcd_out, PSTR("%s"), gui_dialog_msg_line2); disp.GotoXY(GUI_DIALOG_LEFT, top + f_h * 3); fprintf_P(lcd_out, PSTR("%s"), gui_dialog_msg_line3); } disp.LoadFont(F_TEXT_S); f_h = disp.GetAHeight(); switch (gui_dialog_style & GUI_STYLE_MASK) { case(GUI_STYLE_OK): case(GUI_STYLE_STATS): gui_caligh_text_P(PSTR("OK"), GUI_DIALOG_LEFT + GUI_DIALOG_WIDTH / 2, GUI_DIALOG_BOTTOM - f_h); break; case(GUI_STYLE_OKCANCEL): gui_caligh_text_P(PSTR("OK"), GUI_DIALOG_LEFT + GUI_DIALOG_WIDTH / 2, GUI_DIALOG_BOTTOM - f_h); gui_raligh_text_P(PSTR("Cancel"), GUI_DIALOG_RIGHT - 1, GUI_DIALOG_BOTTOM - f_h); break; case(GUI_STYLE_YESNO): gui_caligh_text_P(PSTR("Yes"), GUI_DIALOG_LEFT + GUI_DIALOG_WIDTH / 2, GUI_DIALOG_BOTTOM - f_h); gui_raligh_text_P(PSTR("No"), GUI_DIALOG_RIGHT - 1, GUI_DIALOG_BOTTOM - f_h); break; case(GUI_STYLE_TIMESET): gui_caligh_text_P(PSTR("GPS"), GUI_DIALOG_LEFT + GUI_DIALOG_WIDTH / 2, GUI_DIALOG_BOTTOM - f_h); gui_raligh_text_P(PSTR("Manual"), GUI_DIALOG_RIGHT - 1, GUI_DIALOG_BOTTOM - f_h); break; case(GUI_STYLE_FORMAT): gui_caligh_text_P(PSTR("No"), GUI_DIALOG_LEFT + GUI_DIALOG_WIDTH / 2, GUI_DIALOG_BOTTOM - f_h); gui_raligh_text_P(PSTR("Yes"), GUI_DIALOG_RIGHT - 1, GUI_DIALOG_BOTTOM - f_h); break; } }