Add GPS menu

This commit is contained in:
Just Call Me Koko
2023-08-30 21:36:36 -04:00
parent ddfda9c9ed
commit eee1b5c8c2
7 changed files with 143 additions and 100 deletions

View File

@@ -7,55 +7,6 @@
PROGMEM static String espressif_macs[] = {
"fc:f5:c4"};
/* "f4:cf:a2",
"f0:08:d1",
"ec:fa:bc",
"e0:98:06",
"dc:4f:22",
"d8:f1:5b",
"d8:bf:c0",
"d8:a0:1d",
"cc:50:e3",
"c8:2b:96",
"c4:4f:33",
"bc:dd:c2",
"b8:f0:09",
"b4:e6:2d",
"ac:d0:74",
"ac:67:b2",
"a4:cf:12",
"a4:7b:9d",
"a0:20:a6",
"98:f4:ab",
"90:97:d5",
"8c:aa:b5",
"84:f3:eb",
"84:cc:a8",
"84:0d:8e",
"80:7d:3a",
"7c:df:a1",
"7c:9e:bd",
"70:03:9f",
"68:c6:3a",
"60:01:94",
"5c:cf:7f",
"54:5a:a6",
"50:02:91",
"4c:11:ae",
"48:3f:da",
"40:f5:20",
"3c:71:bf",
"30:ae:a4",
"2c:f4:32",
"2c:3a:e8",
"24:b2:de",
"24:6f:28",
"24:62:ab",
"24:0a:c4",
"18:fe:34",
"10:52:1c"
};*/
PROGMEM static const unsigned char menu_icons[][66] = {
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0x3A, // Attack: 0
@@ -202,75 +153,57 @@ PROGMEM static const unsigned char menu_icons[][66] = {
0xFE, 0xFF, 0x1F, 0x8E, 0x7F, 0x1C, 0x36, 0xBF, 0x19, 0x16, 0xBF, 0x18,
0x06, 0x3F, 0x18, 0x8E, 0x7F, 0x1C, 0xFD, 0xFF, 0x2F, 0xDB, 0xF3, 0x36,
0x3F, 0x0C, 0x3F, 0xFF, 0xFF, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xC7, 0x3F, 0x7F, 0x0E, 0x3F, // ESPRESSIF: 25
0x2F, 0x30, 0x3E, 0x37, 0x40, 0x3C, 0xF3, 0x83, 0x38, 0x0B, 0x04, 0x39,
0x03, 0x18, 0x32, 0x01, 0x20, 0x32, 0xF1, 0x21, 0x34, 0x01, 0x46, 0x34,
0x03, 0x84, 0x38, 0x7B, 0x88, 0x38, 0x93, 0x88, 0x38, 0x17, 0x89, 0x3C,
0x07, 0x89, 0x3F, 0xCF, 0x89, 0x3D, 0x9F, 0x49, 0x3C, 0x7F, 0x00, 0x3F,
0xFF, 0xE3, 0x3F, 0xFF, 0xFF, 0x3F},
{0xFF, 0xF3, 0x3F, 0xFF, 0xE1, 0x3F, 0xCF, 0xE1, 0x3C, 0x87, 0x61, 0x38, // SHUTDOWN: 26
{0xFF, 0xF3, 0x3F, 0xFF, 0xE1, 0x3F, 0xCF, 0xE1, 0x3C, 0x87, 0x61, 0x38, // SHUTDOWN: 25
0xC3, 0xE1, 0x30, 0xE1, 0xE1, 0x21, 0xF1, 0xE1, 0x23, 0xF1, 0xE1, 0x23,
0xF8, 0xE1, 0x07, 0xF8, 0xE1, 0x07, 0xF8, 0xE1, 0x07, 0xF8, 0xF3, 0x07,
0xF8, 0xFF, 0x07, 0xF9, 0xFF, 0x27, 0xF1, 0xFF, 0x23, 0xF1, 0xFF, 0x23,
0xE1, 0xFF, 0x21, 0xC3, 0xFF, 0x30, 0x07, 0x3F, 0x38, 0x0F, 0x00, 0x3C,
0x1F, 0x00, 0x3E, 0xFF, 0xC1, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xF3, 0x3F, 0xFF, 0xE1, 0x3F, // BEACON_LIST: 27
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xF3, 0x3F, 0xFF, 0xE1, 0x3F, // BEACON_LIST: 26
0xFF, 0xDE, 0x3F, 0x1F, 0x12, 0x3E, 0xEF, 0xF3, 0x3D, 0xE7, 0xF3, 0x39,
0x37, 0x1E, 0x3B, 0x37, 0x1E, 0x3B, 0xEF, 0xF3, 0x3D, 0xEF, 0xF3, 0x3D,
0x37, 0x1E, 0x3B, 0x37, 0x1E, 0x3B, 0xE7, 0xF3, 0x39, 0xEF, 0xF3, 0x3D,
0x1F, 0x12, 0x3E, 0xFF, 0xDE, 0x3F, 0xFF, 0xE1, 0x3F, 0xFF, 0xF3, 0x3F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
{0xFF, 0xFF, 0x3F, 0x77, 0x77, 0x37, 0x2B, 0xAB, 0x32, 0x6B, 0xAB, 0x36, // GENERATE: 28
{0xFF, 0xFF, 0x3F, 0x77, 0x77, 0x37, 0x2B, 0xAB, 0x32, 0x6B, 0xAB, 0x36, // GENERATE: 27
0x6B, 0xAB, 0x36, 0x6B, 0xAB, 0x36, 0x77, 0x77, 0x37, 0xFF, 0xFF, 0x3F,
0x77, 0x77, 0x37, 0xB3, 0x2A, 0x2B, 0xB7, 0x6A, 0x2B, 0xB7, 0x6A, 0x2B,
0xB7, 0x6A, 0x2B, 0x77, 0x77, 0x37, 0xFF, 0xFF, 0x3F, 0x77, 0x77, 0x37,
0x33, 0x2B, 0x33, 0x77, 0x6B, 0x37, 0x77, 0x6B, 0x37, 0x77, 0x6B, 0x37,
0x77, 0x77, 0x37, 0xFF, 0xFF, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0x3E, // CLEAR_ICO: 29
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0x3E, // CLEAR_ICO: 28
0xEF, 0xFF, 0x3D, 0xEF, 0xFF, 0x3D, 0x1F, 0x1E, 0x3E, 0xFF, 0xE1, 0x3F,
0x7F, 0x9E, 0x3F, 0xFF, 0xED, 0x3F, 0x07, 0x00, 0x38, 0x0B, 0x00, 0x34,
0xE3, 0xDE, 0x31, 0xEB, 0xDE, 0x35, 0xA5, 0x52, 0x29, 0x0D, 0x00, 0x2C,
0xFD, 0xFF, 0x2F, 0xF3, 0xFF, 0x33, 0x0F, 0x1E, 0x3C, 0xF3, 0xE1, 0x33,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3C, 0xFF, 0xFF, 0x3E, 0xFF, 0x7F, 0x3E, // KEYBOARD_ICO: 30
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3C, 0xFF, 0xFF, 0x3E, 0xFF, 0x7F, 0x3E, // KEYBOARD_ICO: 29
0xFF, 0x0F, 0x3F, 0xFF, 0xE7, 0x3F, 0xFF, 0xF3, 0x3F, 0x00, 0x00, 0x00,
0xFE, 0xFF, 0x1F, 0x92, 0x92, 0x12, 0x92, 0x92, 0x12, 0xFE, 0xFF, 0x1F,
0x22, 0x29, 0x11, 0x22, 0x29, 0x11, 0xFE, 0xFF, 0x1F, 0x92, 0x40, 0x12,
0x92, 0x40, 0x12, 0xFE, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0x3F, // JOIN_WIFI: 31
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0x3F, // JOIN_WIFI: 30
0x3F, 0x00, 0x3F, 0x1F, 0x00, 0x3E, 0x03, 0x00, 0x30, 0x01, 0xF0, 0x2F,
0x54, 0x12, 0x1A, 0x54, 0xD0, 0x1F, 0x7C, 0xD2, 0x1B, 0x7C, 0x12, 0x1B,
0x38, 0xD2, 0x1B, 0x28, 0xD0, 0x1B, 0x01, 0xF8, 0x2F, 0x03, 0x00, 0x30,
0x1F, 0x00, 0x3E, 0x3F, 0x00, 0x3F, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0x3F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0x3C, 0xDF, 0xFF, 0x3D, // ESP_UPDATE_ICO: 32
0x5F, 0x10, 0x3D, 0x5F, 0x55, 0x3D, 0x5F, 0x45, 0x3D, 0xDF, 0xFF, 0x3D,
0x7F, 0x00, 0x3F, 0x5F, 0x7F, 0x3D, 0x7F, 0x71, 0x3F, 0x5F, 0x77, 0x3D,
0x7F, 0x7F, 0x3F, 0x5F, 0x71, 0x3D, 0x7F, 0x75, 0x3F, 0x5F, 0x7F, 0x3D,
0x7F, 0x7F, 0x3F, 0x5F, 0x00, 0x3D, 0xFF, 0xFF, 0x3F, 0x5F, 0x55, 0x3D,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xF3, 0x3F, 0xFF, 0xF3, 0x3F, 0xFF, 0xF3, 0x3F, // BAD_USB_ICO: 33
0xFF, 0xF3, 0x3F, 0xFF, 0x13, 0x3F, 0x7F, 0x13, 0x3F, 0x3F, 0x92, 0x3F,
0x3F, 0xB2, 0x3F, 0x7F, 0x93, 0x3F, 0x7F, 0xD3, 0x3F, 0x7F, 0xE3, 0x3F,
0x7F, 0xF2, 0x3F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF1, 0x3F, 0xFF, 0xF3, 0x3F,
0xFF, 0xF3, 0x3F, 0xFF, 0xF3, 0x3F, 0xFF, 0xE1, 0x3F, 0xFF, 0xE1, 0x3F,
0xFF, 0xE1, 0x3F, 0xFF, 0xF3, 0x3F},
{0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, // TEST_BAD_USB_ICO: 34
0xFF, 0xFF, 0x3F, 0xFF, 0xC1, 0x33, 0xFF, 0xBE, 0x3B, 0x7F, 0xFF, 0x3D,
0xBF, 0xFF, 0x3C, 0xDF, 0x7F, 0x3C, 0xDF, 0x3F, 0x3D, 0xEF, 0x9F, 0x3D,
0x1F, 0xCE, 0x3D, 0xDF, 0xE4, 0x3D, 0xBF, 0xF1, 0x3E, 0x7F, 0x7F, 0x3F,
0xFF, 0xBE, 0x3F, 0xFF, 0xC1, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
{0x7F, 0xFE,0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xF8, 0xFF, 0x00, 0x00, 0xF8, // LANGUAGE: 35
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F},
{0x7F, 0xFE,0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xF8, 0xFF, 0x00, 0x00, 0xF8, // LANGUAGE: 31
0x00, 0x00, 0xF8, 0xCF, 0x3F, 0xFF, 0xCF, 0x3F ,0xFF, 0x9F, 0x9F, 0xFF,
0x9F, 0x8F, 0xFF, 0x3F, 0xC7, 0xFF, 0x3F, 0xE2, 0xFF, 0xFF, 0xF0, 0xFF,
0x7F, 0xF8, 0xFF, 0x1F, 0xF2, 0xFE, 0x87, 0x67, 0xFD, 0xE0, 0x4F, 0xFD,
0xF9, 0xBF, 0xFB, 0xFF, 0xBF, 0xFB, 0xFF, 0x3F, 0xF8, 0xFF, 0xDF, 0xF7,
0xFF, 0xDF, 0xF7, 0xFF, 0xDF, 0xF7},
{0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xF5, 0xEF, 0xEE, 0x57, 0xF7, 0x2F, 0xFA, // GPS: 36
{0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xF5, 0xEF, 0xEE, 0x57, 0xF7, 0x2F, 0xFA, // GPS: 32
0x1F, 0xFC, 0x0F, 0xDE, 0x17, 0xD5, 0xBB, 0xD6, 0xDD, 0xDB, 0xEB, 0xEC,
0xF7, 0xF7, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF}
0xF7, 0xF7, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0x3F, 0xFF, 0xBF, 0x3F, 0xFF, 0x5F, 0x3F, 0xFF, 0xEF, 0x3E, // GPS MENU: 33
0xFF, 0xF7, 0x3D, 0xBF, 0xFA, 0x3E, 0x5F, 0x7C, 0x3F, 0x3F, 0xB8, 0x3F,
0x1F, 0xD0, 0x3F, 0x3F, 0xE0, 0x3F, 0x5F, 0xF0, 0x3F, 0xEF, 0xE8, 0x3F,
0xF7, 0xE5, 0x3B, 0xFB, 0xDE, 0x3A, 0x7D, 0xFF, 0x3A, 0xBB, 0x7F, 0x3B,
0xD7, 0x9F, 0x3D, 0xEF, 0xFF, 0x3E, 0xFF, 0x0F, 0x3F, 0xFF, 0xFF, 0x3F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F}
};
#ifndef MARAUDER_MINI

View File

@@ -27,6 +27,51 @@ void GpsInterface::begin() {
}
}
// Thanks JosephHewitt
String GpsInterface::dt_string_from_gps(){
//Return a datetime String using GPS data only.
String datetime = "";
if (nmea.isValid() && nmea.getYear() > 0){
datetime += nmea.getYear();
datetime += "-";
datetime += nmea.getMonth();
datetime += "-";
datetime += nmea.getDay();
datetime += " ";
datetime += nmea.getHour();
datetime += ":";
datetime += nmea.getMinute();
datetime += ":";
datetime += nmea.getSecond();
}
return datetime;
}
void GpsInterface::setGPSInfo() {
this->good_fix = nmea.isValid();
this->num_sats = nmea.getNumSatellites();
this->gps_year = nmea.getYear();
this->gps_month = nmea.getMonth();
this->gps_day = nmea.getDay();
this->gps_hour = nmea.getHour();
this->gps_minute = nmea.getMinute();
this->gps_second = nmea.getSecond();
this->gps_hundredths = nmea.getHundredths();
this->datetime = this->dt_string_from_gps();
this->lat = String((float)nmea.getLatitude()/1000000, 7);
this->lon = String((float)nmea.getLongitude()/1000000, 7);
long alt = 0;
if (!nmea.getAltitude(alt)){
alt = 0;
}
this->altf = (float)alt / 1000;
//nmea.clear();
}
void GpsInterface::showGPSInfo() {
Serial.print("Valid fix: ");
Serial.println(nmea.isValid() ? "yes" : "no");
@@ -104,15 +149,17 @@ void GpsInterface::main() {
uint8_t num_sat = nmea.getNumSatellites();
if ((nmea.isValid()) && (num_sat > 0)) {
this->good_fix = true;
this->num_sats = nmea.getNumSatellites();
//this->good_fix = true;
//this->num_sats = nmea.getNumSatellites();
this->setGPSInfo();
//Serial.print("Got fix: ");
//Serial.println(num_sats);
//this->showGPSInfo();
}
else if ((!nmea.isValid()) && (num_sat <= 0)) {
this->good_fix = false;
this->num_sats = nmea.getNumSatellites();
//this->good_fix = false;
//this->num_sats = nmea.getNumSatellites();
this->setGPSInfo();
//Serial.println("No fix");
}
}

View File

@@ -15,12 +15,27 @@ class GpsInterface {
bool getGpsModuleStatus();
private:
// GPS Info
String lat = "";
String lon = "";
float altf = 0.0;
uint8_t gps_year = 0;
uint8_t gps_month = 0;
uint8_t gps_day = 0;
uint8_t gps_hour = 0;
uint8_t gps_minute = 0;
uint8_t gps_second = 0;
uint8_t gps_hundredths = 0;
String datetime = "";
bool gps_enabled = false;
bool good_fix = false;
uint8_t num_sats = 0;
//MicroNMEA nmea(nmeaBuffer, sizeof(nmeaBuffer));
String dt_string_from_gps();
void showGPSInfo();
void setGPSInfo();
};
#endif

View File

@@ -1516,6 +1516,12 @@ void MenuFunctions::RunSetup()
bluetoothMenu.list = new LinkedList<MenuNode>(); // Get list in third menu ready
generalMenu.list = new LinkedList<MenuNode>();
deviceMenu.list = new LinkedList<MenuNode>();
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
gpsMenu.list = new LinkedList<MenuNode>();
gpsInfoMenu.list = new LinkedList<MenuNode>();
}
#endif
// Device menu stuff
failedUpdateMenu.list = new LinkedList<MenuNode>();
@@ -1568,7 +1574,10 @@ void MenuFunctions::RunSetup()
clearSSIDsMenu.name = text_table1[28];
clearAPsMenu.name = text_table1[29];
wifiAPMenu.name = "Access Points";
#ifdef HAS_GPS
gpsMenu.name = "GPS";
gpsInfoMenu.name = "GPS Data";
#endif
// Build Main Menu
mainMenu.parentMenu = NULL;
@@ -1578,6 +1587,13 @@ void MenuFunctions::RunSetup()
addNodes(&mainMenu, text_table1[19], TFT_CYAN, NULL, BLUETOOTH, [this]() {
changeMenu(&bluetoothMenu);
});
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
addNodes(&mainMenu, "GPS", TFT_RED, NULL, GPS_MENU, [this]() {
changeMenu(&gpsMenu);
});
}
#endif
//if (a32u4_obj.supported) addNodes(&mainMenu, text_table1[8], TFT_RED, NULL, BAD_USB_ICO, [this]() {
// changeMenu(&badusbMenu);
//});
@@ -1591,6 +1607,25 @@ void MenuFunctions::RunSetup()
ESP.restart();
});
// GPS Menu
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
gpsMenu.parentMenu = &mainMenu;
addNodes(&gpsMenu, text09, TFT_LIGHTGREY, NULL, 0, [this]() {
changeMenu(gpsMenu.parentMenu);
});
addNodes(&gpsMenu, "GPS Data", TFT_CYAN, NULL, GPS_MENU, [this]() {
changeMenu(&gpsInfoMenu);
});
// GPS Info Menu
gpsInfoMenu.parentMenu = &gpsMenu;
addNodes(&gpsInfoMenu, text09, TFT_LIGHTGREY, NULL, 0, [this]() {
changeMenu(gpsInfoMenu.parentMenu);
});
}
#endif
// Build WiFi Menu
wifiMenu.parentMenu = &mainMenu; // Main Menu is second menu parent
addNodes(&wifiMenu, text09, TFT_LIGHTGREY, NULL, 0, [this]() {

View File

@@ -77,18 +77,15 @@ extern Settings settings_obj;
#define STATUS_BAT 22
#define STATUS_SD 23
#define PWNAGOTCHI 24
#define ESPRESSIF 25
#define SHUTDOWN 26
#define BEACON_LIST 27
#define GENERATE 28
#define CLEAR_ICO 29
#define KEYBOARD_ICO 30
#define JOIN_WIFI 31
#define ESP_UPDATE_ICO 32
#define BAD_USB_ICO 33
#define TEST_BAD_USB_ICO 34
#define LANGUAGE 35
#define STATUS_GPS 36
#define SHUTDOWN 25
#define BEACON_LIST 26
#define GENERATE 27
#define CLEAR_ICO 28
#define KEYBOARD_ICO 29
#define JOIN_WIFI 30
#define LANGUAGE 31
#define STATUS_GPS 32
#define GPS_MENU 33
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
@@ -179,6 +176,13 @@ class MenuFunctions
Menu shutdownBLEMenu;
Menu generateSSIDsMenu;
#ifdef HAS_GPS
Menu gpsMenu;
// GPS Menu
Menu gpsInfoMenu;
#endif
static void lv_tick_handler();
// Menu icons

BIN
pictures/icons/gps_22.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

9
pictures/xbm/gps_22.xbm Normal file
View File

@@ -0,0 +1,9 @@
#define 824c3668a0844210c964e12f83c144e4dy8xmxKsVnnbTEOb_width 22
#define 824c3668a0844210c964e12f83c144e4dy8xmxKsVnnbTEOb_height 22
static char 824c3668a0844210c964e12f83c144e4dy8xmxKsVnnbTEOb_bits[] = {
0xFF, 0xFF, 0x3F, 0xFF, 0xBF, 0x3F, 0xFF, 0x5F, 0x3F, 0xFF, 0xEF, 0x3E,
0xFF, 0xF7, 0x3D, 0xBF, 0xFA, 0x3E, 0x5F, 0x7C, 0x3F, 0x3F, 0xB8, 0x3F,
0x1F, 0xD0, 0x3F, 0x3F, 0xE0, 0x3F, 0x5F, 0xF0, 0x3F, 0xEF, 0xE8, 0x3F,
0xF7, 0xE5, 0x3B, 0xFB, 0xDE, 0x3A, 0x7D, 0xFF, 0x3A, 0xBB, 0x7F, 0x3B,
0xD7, 0x9F, 0x3D, 0xEF, 0xFF, 0x3E, 0xFF, 0x0F, 0x3F, 0xFF, 0xFF, 0x3F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, };