Add GPS UI draft

This commit is contained in:
Niccolò Izzo 2021-02-11 09:44:41 +01:00
parent b570f3b690
commit 0cf86ce6ea
3 changed files with 116 additions and 29 deletions

View File

@ -319,35 +319,35 @@ static void gps_task(void *arg)
OSMutexPost(&state_mutex, OS_OPT_POST_NONE, &os_err); OSMutexPost(&state_mutex, OS_OPT_POST_NONE, &os_err);
// Debug prints // Debug prints
printf("Timestamp: %d:%d:%d %d/%d/%d\n\r", //printf("Timestamp: %d:%d:%d %d/%d/%d\n\r",
state.gps_data.timestamp.hour, // state.gps_data.timestamp.hour,
state.gps_data.timestamp.minute, // state.gps_data.timestamp.minute,
state.gps_data.timestamp.second, // state.gps_data.timestamp.second,
state.gps_data.timestamp.date, // state.gps_data.timestamp.date,
state.gps_data.timestamp.month, // state.gps_data.timestamp.month,
state.gps_data.timestamp.year); // state.gps_data.timestamp.year);
printf("Fix quality: %d - %d\n\r", //printf("Fix quality: %d - %d\n\r",
state.gps_data.fix_quality, // state.gps_data.fix_quality,
state.gps_data.fix_type); // state.gps_data.fix_type);
printf("Satellites tracked: %d/%d\n\r", //printf("Satellites tracked: %d/%d\n\r",
state.gps_data.satellites_tracked, // state.gps_data.satellites_tracked,
state.gps_data.satellites_in_view); // state.gps_data.satellites_in_view);
for(int i = 0; i < state.gps_data.satellites_in_view; i++) //for(int i = 0; i < state.gps_data.satellites_in_view; i++)
{ //{
printf("%d - elevation: %d azimuth: %d snr: %d\n\r", // printf("%d - elevation: %d azimuth: %d snr: %d\n\r",
state.gps_data.satellites[i].id, // state.gps_data.satellites[i].id,
state.gps_data.satellites[i].elevation, // state.gps_data.satellites[i].elevation,
state.gps_data.satellites[i].azimuth, // state.gps_data.satellites[i].azimuth,
state.gps_data.satellites[i].snr); // state.gps_data.satellites[i].snr);
} //}
printf("Coordinates: %f %f\n\r", //printf("Coordinates: %f %f\n\r",
state.gps_data.latitude, // state.gps_data.latitude,
state.gps_data.longitude); // state.gps_data.longitude);
printf("Speed: %f km/h TMGM: %f deg TMGT: %f deg\n\r", //printf("Speed: %f km/h TMGM: %f deg TMGT: %f deg\n\r",
state.gps_data.speed, // state.gps_data.speed,
state.gps_data.tmg_mag, // state.gps_data.tmg_mag,
state.gps_data.tmg_true); // state.gps_data.tmg_true);
printf("\n\r\n\r"); //printf("\n\r\n\r");
} }
} }
} }

View File

@ -812,6 +812,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
case 2: case 2:
state.ui_screen = MENU_CONTACTS; state.ui_screen = MENU_CONTACTS;
break; break;
case 4:
state.ui_screen = MENU_GPS;
break;
// TODO: Add missing submenu states // TODO: Add missing submenu states
case 5: case 5:
state.ui_screen = MENU_SETTINGS; state.ui_screen = MENU_SETTINGS;
@ -916,6 +919,16 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
ui_state.menu_selected = 0; ui_state.menu_selected = 0;
} }
break; break;
// GPS menu screen
case MENU_GPS:
if(msg.keys & KEY_ESC)
{
// Return to top menu
state.ui_screen = MENU_TOP;
// Reset menu selection
ui_state.menu_selected = 0;
}
break;
// Settings menu screen // Settings menu screen
case MENU_SETTINGS: case MENU_SETTINGS:
if(msg.keys & KEY_UP) if(msg.keys & KEY_UP)
@ -1129,6 +1142,10 @@ void ui_updateGUI()
case MENU_CONTACTS: case MENU_CONTACTS:
_ui_drawMenuContacts(&ui_state); _ui_drawMenuContacts(&ui_state);
break; break;
// GPS menu screen
case MENU_GPS:
_ui_drawMenuGPS(&ui_state);
break;
// Settings menu screen // Settings menu screen
case MENU_SETTINGS: case MENU_SETTINGS:
_ui_drawMenuSettings(&ui_state); _ui_drawMenuSettings(&ui_state);

View File

@ -230,6 +230,76 @@ void _ui_drawMenuContacts(ui_state_t* ui_state)
_ui_drawMenuList(layout.line1_pos, ui_state->menu_selected, _ui_getContactName); _ui_drawMenuList(layout.line1_pos, ui_state->menu_selected, _ui_getContactName);
} }
void _ui_drawMenuGPS(ui_state_t* ui_state)
{
char *fix_buf, *type_buf;
char lat_buf[12] = { 0 }, lon_buf[12] = { 0 };
char data_buf[18] = { 0 }, track_buf[8] = { 0 };
gfx_clearScreen();
// Print "GPS" on top bar
gfx_print(layout.top_pos, "GPS", layout.top_font,
TEXT_ALIGN_CENTER, color_white);
// Print GPS status
switch(last_state.gps_data.fix_quality)
{
case 0:
fix_buf = "No fix";
break;
case 1:
fix_buf = "SPS";
break;
case 2:
fix_buf = "DGPS";
break;
case 3:
fix_buf = "PPS";
break;
default:
fix_buf = "ERROR";
break;
}
switch(last_state.gps_data.fix_type)
{
case 1:
type_buf = "";
break;
case 2:
type_buf = "2D";
break;
case 3:
type_buf = "3D";
break;
default:
type_buf = "ERROR";
break;
}
gfx_print(layout.line1_pos, fix_buf, layout.top_font, TEXT_ALIGN_LEFT,
color_white);
gfx_print(layout.line1_pos, "N ", layout.top_font, TEXT_ALIGN_CENTER,
color_white);
snprintf(lat_buf, 12, "%8.6f", last_state.gps_data.latitude);
gfx_print(layout.line1_pos, lat_buf, layout.top_font, TEXT_ALIGN_RIGHT,
color_white);
gfx_print(layout.line2_pos, type_buf, layout.top_font, TEXT_ALIGN_LEFT,
color_white);
gfx_print(layout.line2_pos, "E ", layout.top_font, TEXT_ALIGN_CENTER,
color_white);
snprintf(lon_buf, 12, "%8.6f", last_state.gps_data.longitude);
gfx_print(layout.line2_pos, lon_buf, layout.top_font, TEXT_ALIGN_RIGHT,
color_white);
snprintf(data_buf, 18, "S %5.2fkm/h\nA %5.2fm",
last_state.gps_data.speed,
last_state.gps_data.altitude);
gfx_print(layout.line3_pos, data_buf, layout.top_font, TEXT_ALIGN_LEFT,
color_white);
snprintf(track_buf, 8, "%d/%d",
last_state.gps_data.satellites_tracked,
last_state.gps_data.satellites_in_view);
gfx_print(layout.line3_pos, track_buf, layout.line3_font, TEXT_ALIGN_RIGHT,
color_white);
}
void _ui_drawMenuSettings(ui_state_t* ui_state) void _ui_drawMenuSettings(ui_state_t* ui_state)
{ {
gfx_clearScreen(); gfx_clearScreen();