161 lines
7.6 KiB
C++
161 lines
7.6 KiB
C++
#include <TinyGPS++.h>
|
|
#include <vector>
|
|
#include "custom_characters.h"
|
|
#include "station_utils.h"
|
|
#include "configuration.h"
|
|
#include "menu_utils.h"
|
|
#include "power_utils.h"
|
|
#include "msg_utils.h"
|
|
#include "display.h"
|
|
#include "utils.h"
|
|
|
|
|
|
extern int menuDisplay;
|
|
extern Beacon *currentBeacon;
|
|
extern Configuration Config;
|
|
extern TinyGPSPlus gps;
|
|
extern PowerManagement powerManagement;
|
|
extern std::vector<String> loadedAPRSMessages;
|
|
extern int messagesIterator;
|
|
extern uint32_t menuTime;
|
|
extern bool symbolAvailable;
|
|
|
|
namespace MENU_Utils {
|
|
|
|
void showOnScreen() {
|
|
uint32_t lastMenuTime = millis() - menuTime;
|
|
if (!(menuDisplay==0) && !(menuDisplay==20) && !(menuDisplay==21) && lastMenuTime > 30*1000) {
|
|
menuDisplay = 0;
|
|
}
|
|
switch (menuDisplay) { // Graphic Menu is in here!!!!
|
|
case 1:
|
|
show_display("__MENU_1__", "", "1P -> Read Msg (" + String(MSG_Utils::getNumAPRSMessages()) + ")", "LP -> Delete Msg", "2P -> Menu 2");
|
|
break;
|
|
case 2:
|
|
show_display("__MENU_2__", "", "1P -> Weather Report", "LP -> Listen Trackers", "2P -> Menu 3");
|
|
break;
|
|
case 3:
|
|
show_display("__MENU_3__", "", "1P -> NOTHING YET", "LP -> Display EcoMode", "2P -> (Back) Tracking");
|
|
break;
|
|
|
|
case 10: // Display Received/Saved APRS Messages
|
|
{
|
|
String msgSender = loadedAPRSMessages[messagesIterator].substring(0,loadedAPRSMessages[messagesIterator].indexOf(","));
|
|
String restOfMessage = loadedAPRSMessages[messagesIterator].substring(loadedAPRSMessages[messagesIterator].indexOf(",")+1);
|
|
String msgGate = restOfMessage.substring(0,restOfMessage.indexOf(","));
|
|
String msgText = restOfMessage.substring(restOfMessage.indexOf(",")+1);
|
|
show_display("MSG_APRS>", msgSender + "-->" + msgGate, msgText, "", "", " Next>");
|
|
}
|
|
break;
|
|
|
|
case 20: // Display Heared Tracker/Stations
|
|
show_display("LISTENING>", STATION_Utils::getFirstNearTracker(), STATION_Utils::getSecondNearTracker(), STATION_Utils::getThirdNearTracker(), STATION_Utils::getFourthNearTracker(), "<Back");
|
|
break;
|
|
case 21:
|
|
// waiting for Weather Report
|
|
break;
|
|
|
|
case 0: ///////////// MAIN MENU //////////////
|
|
String hdopState, firstRowMainMenu, secondRowMainMenu, thirdRowMainMenu, fourthRowMainMenu, fifthRowMainMenu, sixthRowMainMenu;
|
|
|
|
firstRowMainMenu = currentBeacon->callsign;
|
|
if (Config.showSymbolOnScreen) {
|
|
for (int j=firstRowMainMenu.length();j<9;j++) {
|
|
firstRowMainMenu += " ";
|
|
}
|
|
if (!symbolAvailable) {
|
|
firstRowMainMenu += currentBeacon->symbol;
|
|
}
|
|
}
|
|
|
|
const auto time_now = now();
|
|
secondRowMainMenu = utils::createDateString(time_now) + " " + utils::createTimeString(time_now);
|
|
|
|
if (time_now % 10 < 5) {
|
|
thirdRowMainMenu = String(gps.location.lat(), 4) + " " + String(gps.location.lng(), 4);
|
|
}
|
|
else {
|
|
thirdRowMainMenu = String(utils::getMaidenheadLocator(gps.location.lat(), gps.location.lng(), 8));
|
|
}
|
|
|
|
for(int i = thirdRowMainMenu.length(); i < 18; i++) {
|
|
thirdRowMainMenu += " ";
|
|
}
|
|
|
|
if (gps.hdop.hdop() > 5) {
|
|
hdopState = "X";
|
|
} else if (gps.hdop.hdop() > 2 && gps.hdop.hdop() < 5) {
|
|
hdopState = "-";
|
|
} else if (gps.hdop.hdop() <= 2) {
|
|
hdopState = "+";
|
|
}
|
|
|
|
if (gps.satellites.value() > 9) {
|
|
thirdRowMainMenu += String(gps.satellites.value()) + hdopState;
|
|
} else {
|
|
thirdRowMainMenu += " " + String(gps.satellites.value()) + hdopState;
|
|
}
|
|
|
|
String fourthRowAlt = String(gps.altitude.meters(),0);
|
|
fourthRowAlt.trim();
|
|
for (int a=fourthRowAlt.length();a<4;a++) {
|
|
fourthRowAlt = "0" + fourthRowAlt;
|
|
}
|
|
String fourthRowSpeed = String(gps.speed.kmph(),0);
|
|
fourthRowSpeed.trim();
|
|
for (int b=fourthRowSpeed.length(); b<3;b++) {
|
|
fourthRowSpeed = " " + fourthRowSpeed;
|
|
}
|
|
String fourthRowCourse = String(gps.course.deg(),0);
|
|
if (fourthRowSpeed == " 0") {
|
|
fourthRowCourse = "---";
|
|
} else {
|
|
fourthRowCourse.trim();
|
|
for(int c=fourthRowCourse.length();c<3;c++) {
|
|
fourthRowCourse = "0" + fourthRowCourse;
|
|
}
|
|
}
|
|
fourthRowMainMenu = "A=" + fourthRowAlt + "m " + fourthRowSpeed + "km/h " + fourthRowCourse;
|
|
if (MSG_Utils::getNumAPRSMessages() > 0){
|
|
fourthRowMainMenu = "*** MESSAGES: " + String(MSG_Utils::getNumAPRSMessages()) + " ***";
|
|
}
|
|
|
|
fifthRowMainMenu = "LAST Rx = " + MSG_Utils::getLastHeardTracker();
|
|
|
|
if (powerManagement.getBatteryInfoIsConnected()) {
|
|
String batteryVoltage = powerManagement.getBatteryInfoVoltage();
|
|
String batteryChargeCurrent = powerManagement.getBatteryInfoCurrent();
|
|
#if defined(TTGO_T_Beam_V1_0) || defined(TTGO_T_LORA_V2_1)
|
|
if (batteryChargeCurrent.toInt() == 0) {
|
|
sixthRowMainMenu = "Battery Charged " + batteryVoltage + "V";
|
|
} else if (batteryChargeCurrent.toInt() > 0) {
|
|
sixthRowMainMenu = "Bat: " + batteryVoltage + "V (charging)";
|
|
} else {
|
|
sixthRowMainMenu = "Battery " + batteryVoltage + "V " + batteryChargeCurrent + "mA";
|
|
}
|
|
#endif
|
|
#ifdef TTGO_T_Beam_V1_2
|
|
batteryVoltage = batteryVoltage.toFloat()/1000;
|
|
if (powerManagement.isChargeing() && batteryChargeCurrent!="100") {
|
|
sixthRowMainMenu = "Bat: " + String(batteryVoltage) + "V (charging)";
|
|
} else if (!powerManagement.isChargeing() && batteryChargeCurrent=="100") {
|
|
sixthRowMainMenu = "Battery Charged " + String(batteryVoltage) + "V";
|
|
} else {
|
|
sixthRowMainMenu = "Battery " + String(batteryVoltage) + "V " + batteryChargeCurrent + "%";
|
|
}
|
|
#endif
|
|
} else {
|
|
sixthRowMainMenu = "No Battery Connected" ;
|
|
}
|
|
show_display(String(firstRowMainMenu),
|
|
String(secondRowMainMenu),
|
|
String(thirdRowMainMenu),
|
|
String(fourthRowMainMenu),
|
|
String(fifthRowMainMenu),
|
|
String(sixthRowMainMenu));
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
} |