diff --git a/main/disp_oled.cpp b/main/disp_oled.cpp index a40e0fb..7704d69 100644 --- a/main/disp_oled.cpp +++ b/main/disp_oled.cpp @@ -227,7 +227,9 @@ void OLED_DrawPosition(u8g2_t *OLED, GPS_Position *GPS=0, uint8_t LineIdx=2) } void OLED_DrawGPS(u8g2_t *OLED, GPS_Position *GPS) // GPS time, position, altitude -{ // u8g2_SetFont(OLED, u8g2_font_ncenB14_tr); +{ bool isAltitudeUnitMeter = Parameters.AltitudeUnit == 0; // display altitude in meters + bool isAltitudeUnitFeet = Parameters.AltitudeUnit == 1; // display altitude in feet + // u8g2_SetFont(OLED, u8g2_font_ncenB14_tr); u8g2_SetFont(OLED, u8g2_font_7x13_tf); // 5 lines, 12 pixels/line uint8_t Len=0; /* @@ -276,14 +278,14 @@ void OLED_DrawGPS(u8g2_t *OLED, GPS_Position *GPS) // GPS time, position, altit if(GPS && GPS->isValid()) { int32_t Alt = GPS->Altitude; if(Alt>=0) Line[Len++]=' '; - if(GPS->Sec&4) // display altitude in meters - { Len+=Format_SignDec(Line+Len, Alt, 1, 1, 1); // [0.1m/s] + if(isAltitudeUnitMeter) // display altitude in meters + { Len+=Format_SignDec(Line+Len, Alt, 1, 1, 1); // [0.1m] Line[Len++]='m'; } - else // and alternate in feet - { Alt = (Alt*336+512)>>10; // [0.1m/s] => [feet] + else if(isAltitudeUnitFeet) // display altitude in feet + { Alt = (Alt*336+512)>>10; // [0.1m] => [feet] Len+=Format_SignDec(Line+Len, Alt, 1, 0, 1); // [feet] Line[Len++]='f'; Line[Len++]='t'; } - // for( ; Len<14; ) Line[Len++]=' '; // tail of spaces to cover older printouts + // for( ; Len<14; ) Line[Len++]=' '; // tail of spaces to cover older printouts } else Len+=Format_String(Line+Len, "-----.- "); Line[Len]=0; @@ -433,7 +435,13 @@ void OLED_DrawTrafWarn(u8g2_t *OLED, GPS_Position *GPS) #endif // WITH_LOOKOUT void OLED_DrawBaro(u8g2_t *OLED, GPS_Position *GPS) -{ u8g2_SetFont(OLED, u8g2_font_7x13_tf); // 5 lines, 12 pixels/line +{ bool isAltitudeUnitMeter = Parameters.AltitudeUnit == 0; // display altitude in meters + bool isAltitudeUnitFeet = Parameters.AltitudeUnit == 1; // display altitude in feet + + bool isVarioUnitMPS = Parameters.VarioUnit == 0; // display Vario in m/s + bool isVarioUnitFPM = Parameters.VarioUnit == 1; // display Vario in fpm + + u8g2_SetFont(OLED, u8g2_font_7x13_tf); // 5 lines, 12 pixels/line uint8_t Len=0; #ifdef WITH_BMP180 Len+=Format_String(Line+Len, "BMP180 "); @@ -458,11 +466,22 @@ void OLED_DrawBaro(u8g2_t *OLED, GPS_Position *GPS) u8g2_DrawStr(OLED, 0, 24, Line); Len=0; if(GPS && GPS->hasBaro) - { Len+=Format_SignDec(Line+Len, GPS->StdAltitude, 5, 1); - Len+=Format_String(Line+Len, "m "); - Len+=Format_SignDec(Line+Len, GPS->ClimbRate, 2, 1); - Len+=Format_String(Line+Len, "m/s "); } - else Len+=Format_String(Line+Len, "-----.-m --.-m/s "); + { if(isAltitudeUnitMeter) + { Len+=Format_SignDec(Line+Len, GPS->StdAltitude, 5, 1); + Len+=Format_String(Line+Len, "m "); } + else if(isAltitudeUnitFeet) + { Len+=Format_SignDec(Line+Len, (GPS->StdAltitude*336+512)>>10, 5, 0); + Len+=Format_String(Line+Len, "ft "); } + if(isVarioUnitMPS) + { Len+=Format_SignDec(Line+Len, GPS->ClimbRate, 2, 1); + Len+=Format_String(Line+Len, "m/s "); } + else if(isVarioUnitFPM) + { Len+=Format_SignDec(Line+Len, (GPS->ClimbRate*5039+128)>>8, 2, 0); + Len+=Format_String(Line+Len, "fpm "); } } + else + { if(isAltitudeUnitMeter) Len+=Format_String(Line+Len, "-----.-m"); + else if(isAltitudeUnitFeet) Len+=Format_String(Line+Len, "-----ft "); + Len+=Format_String(Line+Len, " --.-m/s "); } Line[Len]=0; u8g2_DrawStr(OLED, 0, 36, Line); Len=0; @@ -773,13 +792,21 @@ void OLED_DrawID(u8g2_t *OLED, GPS_Position *GPS) void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS) { uint8_t Len; - bool inFeet = GPS->Sec&4; // decide if display altitude in meters or in feet + bool isAltitudeUnitMeter = Parameters.AltitudeUnit == 0; // display altitude in meters + bool isAltitudeUnitFeet = Parameters.AltitudeUnit == 1; // display altitude in feet + + bool isSpeedUnitKMH = Parameters.SpeedUnit == 0; // display Speed in km/h + bool isSpeedUnitKnot = Parameters.SpeedUnit == 1; // display Speed in knot + + bool isVarioUnitMPS = Parameters.VarioUnit == 0; // display Vario in m/s + bool isVarioUnitFPM = Parameters.VarioUnit == 1; // display Vario in fpm + // Standard Pressure Altitude if(GPS && (GPS->hasBaro || GPS->isValid())) // if GPS has lock or just the pressure data { int32_t Alt = GPS->Altitude; // [0.1m/s] take GPS (geometrical) altitude if(GPS->hasBaro) Alt = GPS->StdAltitude; // but if pressure sensor is there then replace with pressure altitude - if(inFeet) Alt = (Alt*336+512)>>10; // [0.1m] => [feet] // convert to feet - else Alt = (Alt+5)/10; // [0.1m] => [m] // or to meters + if(isAltitudeUnitMeter) Alt = (Alt+5)/10; // [0.1m] => [m] // or to meters + else if(isAltitudeUnitFeet) Alt = (Alt*336+512)>>10; // [0.1m] => [feet] // convert to feet Len=Format_SignDec(Line, Alt, 1, 0, 1); } // print altitude into the string else Len=Format_String(Line, "----"); // if altitude not available then print place holders @@ -789,8 +816,8 @@ void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS) u8g2_DrawStr(OLED, 60-Altitude_width, 40, Line); // print the string u8g2_SetFont(OLED, u8g2_font_9x15_tr); // smaller font - if(inFeet) u8g2_DrawStr(OLED, 62, 40, "ft"); // print units - else u8g2_DrawStr(OLED, 64, 40, "m"); + if(isAltitudeUnitMeter) u8g2_DrawStr(OLED, 64, 40, "m"); + else if(isAltitudeUnitFeet) u8g2_DrawStr(OLED, 62, 40, "ft"); // print units u8g2_SetFont(OLED, u8g2_font_fub17_tr); if(GPS && GPS->isValid()) @@ -807,6 +834,7 @@ void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS) if(GPS && (GPS->hasBaro || GPS->isValid())) // if GPS has lock or just the pressure data { int16_t vario_value = GPS->ClimbRate; // [0.1m/s] climb rate + if(isVarioUnitFPM) vario_value = (vario_value*5039+128)>>8; // [0.1m/s] => [feet per meter] if(vario_value<0) { vario_value=(-vario_value); const int minus_width=10; @@ -826,7 +854,8 @@ void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; u8g2_DrawXBM(OLED, 0, 47, plus_width, plus_height, plus_bits); } - Len=Format_UnsDec(Line, vario_value, 2, 1); + if(isVarioUnitMPS) Len=Format_UnsDec(Line, vario_value, 2, 1); + if(isVarioUnitFPM) Len=Format_UnsDec(Line, vario_value, 2, 0); } else Len=Format_String(Line, "-.-"); @@ -835,16 +864,24 @@ void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS) uint8_t Vario_width = u8g2_GetStrWidth(OLED, Line); u8g2_DrawStr(OLED, 54-Vario_width, 64, Line); - const int ms_width=7; - const int ms_height=17; - static unsigned char ms_bits[] = - { 0x00, 0x00, 0x16, 0x2a, 0x2a, 0x2a, 0x2a, 0x00, 0x7f, 0x00, 0x1c, 0x22, - 0x02, 0x1c, 0x20, 0x22, 0x1c }; - u8g2_DrawXBM(OLED, 58, 47, ms_width, ms_height, ms_bits); + if(isVarioUnitMPS) + { const int ms_width=7; + const int ms_height=17; + static unsigned char ms_bits[] = + { 0x00, 0x00, 0x16, 0x2a, 0x2a, 0x2a, 0x2a, 0x00, 0x7f, 0x00, 0x1c, 0x22, + 0x02, 0x1c, 0x20, 0x22, 0x1c }; + u8g2_DrawXBM(OLED, 58, 47, ms_width, ms_height, ms_bits); } + else if(isVarioUnitFPM) + { const int ms_width=7; + const int ms_height=17; + static unsigned char ms_bits[] = + { 0x84, 0xa2, 0xf7, 0xa2, 0xa2, 0xa2, 0xc2, 0x80, 0xff, 0x80, 0x00, 0x16, 0x2a, 0x2a, 0x2a, 0x2a, 0x00 }; + u8g2_DrawXBM(OLED, 58, 47, ms_width, ms_height, ms_bits); } // Speed if(GPS && GPS->isValid()) { uint16_t speed = (GPS->Speed*9+12)/25; + if(isSpeedUnitKnot) speed = (GPS->Speed*199+512)>>10; Len=Format_UnsDec(Line, speed, 1, 0); } else Len=Format_String(Line, "--"); @@ -853,13 +890,22 @@ void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS) uint8_t Speed_width = u8g2_GetStrWidth(OLED, Line); u8g2_DrawStr(OLED, 114-Speed_width, 64, Line); - const int kmh_width=10; - const int kmh_height=17; - static unsigned char kmh_bits[] = - { 0x01, 0x00, 0x01, 0x00, 0x69, 0x01, 0xa5, 0x02, 0xa3, 0x02, 0xa5, 0x02, - 0xa9, 0x02, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, - 0x08, 0x00, 0x38, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00 }; - u8g2_DrawXBM(OLED, 118, 47, kmh_width, kmh_height, kmh_bits); + if(isSpeedUnitKMH) + { const int kmh_width=10; + const int kmh_height=17; + static unsigned char kmh_bits[] = + { 0x01, 0x00, 0x01, 0x00, 0x69, 0x01, 0xa5, 0x02, 0xa3, 0x02, 0xa5, 0x02, + 0xa9, 0x02, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x38, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00 }; + u8g2_DrawXBM(OLED, 118, 47, kmh_width, kmh_height, kmh_bits); } + else if(isSpeedUnitKnot) + { const int kmh_width=10; + const int kmh_height=17; + static unsigned char kmh_bits[] = + { 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x01, 0xfc, 0x01, 0xfc, + 0xe9, 0xfc, 0x25, 0xfd, 0x23, 0xfd, 0x25, 0xfd, 0x29, 0xfd, 0x00, 0xfc, + 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc}; + u8g2_DrawXBM(OLED, 118, 47, kmh_width, kmh_height, kmh_bits); } } void OLED_DrawFlight(u8g2_t *OLED, GPS_Position *GPS) // draw flight status page diff --git a/main/http.cpp b/main/http.cpp index 525f39a..7706f74 100644 --- a/main/http.cpp +++ b/main/http.cpp @@ -212,41 +212,25 @@ static void ParmForm_GPS(httpd_req_t *Req) // produce HTML form for GPS paramet httpd_resp_sendstr_chunk(Req, "
\n"); httpd_resp_sendstr_chunk(Req, "\n"); } -static void ParmForm_Other(httpd_req_t *Req) // produce HTML form for parameters not included in other forms +static void ParmForm_Page(httpd_req_t *Req) // produce HTML form for parameters not included in other forms { char Line[16]; int Len; - httpd_resp_sendstr_chunk(Req, "

Other

"); - httpd_resp_sendstr_chunk(Req, "
\n"); + httpd_resp_sendstr_chunk(Req, "

Pages

"); + httpd_resp_sendstr_chunk(Req, "\n"); - Begin_Control_Row(Req, "Freq. plan"); - const char *FreqPlanTable[6] = { "Auto", "Europe/Africa", "USA/Canada", "Australia/Chile", "New Zeeland", "Izrael" }; - SelectList(Req, "FreqPlan", FreqPlanTable, 6, Parameters.FreqPlan); + Begin_Control_Row(Req, "Altitude Unit"); + const char *AltitudeUnitTable[2] = { "meter", "feet" } ; + SelectList(Req, "AltitudeUnit", AltitudeUnitTable, 2, Parameters.AltitudeUnit); End_Control_Row(Req); - Begin_Control_Row(Req, "Tx power [dBm]"); - httpd_resp_sendstr_chunk(Req, ""); + Begin_Control_Row(Req, "Speed Unit"); + const char *SpeedUnitTable[2] = { "km/h", "knot" } ; + SelectList(Req, "SpeedUnit", SpeedUnitTable, 2, Parameters.SpeedUnit); End_Control_Row(Req); - Begin_Control_Row(Req, "Freq.corr. [ppm]"); - httpd_resp_sendstr_chunk(Req, ""); - End_Control_Row(Req); - - Begin_Control_Row(Req, "Console baud"); - httpd_resp_sendstr_chunk(Req, ""); - End_Control_Row(Req); - - Begin_Control_Row(Req, "Verbose"); - const char *VerboseTable[2] = { "0 (off)", "1 (on)" }; - SelectList(Req, "Verbose", VerboseTable, 2, Parameters.Verbose); + Begin_Control_Row(Req, "Vario Unit"); + const char *VarioUnitTable[2] = { "m/s", "fpm" } ; + SelectList(Req, "VarioUnit", VarioUnitTable, 2, Parameters.VarioUnit); End_Control_Row(Req); Begin_Control_Row(Req, "Pages"); @@ -299,6 +283,45 @@ function pageCheckbox(checkbox) {\n\ }\n\ \n"); + httpd_resp_sendstr_chunk(Req, "
\n"); + httpd_resp_sendstr_chunk(Req, "
\n"); } + +static void ParmForm_Other(httpd_req_t *Req) // produce HTML form for parameters not included in other forms +{ char Line[16]; int Len; + + httpd_resp_sendstr_chunk(Req, "

Other

"); + httpd_resp_sendstr_chunk(Req, "
\n"); + + Begin_Control_Row(Req, "Freq. plan"); + const char *FreqPlanTable[6] = { "Auto", "Europe/Africa", "USA/Canada", "Australia/Chile", "New Zeeland", "Izrael" }; + SelectList(Req, "FreqPlan", FreqPlanTable, 6, Parameters.FreqPlan); + End_Control_Row(Req); + + Begin_Control_Row(Req, "Tx power [dBm]"); + httpd_resp_sendstr_chunk(Req, ""); + End_Control_Row(Req); + + Begin_Control_Row(Req, "Freq.corr. [ppm]"); + httpd_resp_sendstr_chunk(Req, ""); + End_Control_Row(Req); + + Begin_Control_Row(Req, "Console baud"); + httpd_resp_sendstr_chunk(Req, ""); + End_Control_Row(Req); + + Begin_Control_Row(Req, "Verbose"); + const char *VerboseTable[2] = { "0 (off)", "1 (on)" }; + SelectList(Req, "Verbose", VerboseTable, 2, Parameters.Verbose); + End_Control_Row(Req); httpd_resp_sendstr_chunk(Req, "
\n"); httpd_resp_sendstr_chunk(Req, "
\n"); } @@ -397,7 +420,14 @@ static void ParmForm_AP(httpd_req_t *Req) // Wi-Fi access point parameters { cha httpd_resp_sendstr_chunk(Req, "\n"); } #endif - +static void ParmForm_Defaults(httpd_req_t *Req) +{ + httpd_resp_sendstr_chunk(Req, "\ +
\n\ +\n\ +\n\ +
\n"); +} static void ParmForm_Restart(httpd_req_t *Req) { @@ -410,6 +440,184 @@ static void ParmForm_Restart(httpd_req_t *Req) // ============================================================================================================ + + +static void Table_System(httpd_req_t *Req) +{ char Line[128]; int Len; + uint32_t Time=TimeSync_Time(); + uint32_t Sec = (Time-1)%60; + GPS_Position *GPS = GPS_getPosition(Sec); if(GPS==0) return; + + httpd_resp_sendstr_chunk(Req, "

System

"); + httpd_resp_sendstr_chunk(Req, "\n"); + + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + Len =Format_String(Line, "\n"); + httpd_resp_send_chunk(Req, Line, Len); + + + httpd_resp_sendstr_chunk(Req, "
Board"); +#ifdef WITH_FollowMe + Len+=Format_String(Line+Len, "FollowMe"); +#endif +#ifdef WITH_TTGO + Len+=Format_String(Line+Len, "TTGO"); +#endif +#if defined(WITH_HELTEC) || defined(WITH_HELTEC_V2) + Len+=Format_String(Line+Len, "HELTEC"); +#endif +#if defined(WITH_TBEAM) || defined(WITH_TBEAM_V10) + Len+=Format_String(Line+Len, "T-BEAM"); +#endif + Len+=Format_String(Line+Len, "
Display"); +#ifdef WITH_ILI9341 // 320x240 M5stack + Len+=Format_String(Line+Len, "ILI9341"); +#endif +#ifdef WITH_ST7789 // IPS 240x240 ST7789 + Len+=Format_String(Line+Len, "ST7789"); +#endif +#ifdef WITH_TFT_LCD // TFT LCD + Len+=Format_String(Line+Len, "TFT_LCD"); +#endif +#ifdef WITH_OLED // OLED display on the I2C: some TTGO modules are without OLED display + Len+=Format_String(Line+Len, "OLED"); +#endif +#ifdef WITH_OLED2 // 2nd OLED display, I2C address next higher + Len+=Format_String(Line+Len, "
OLED2"); +#endif +#ifdef WITH_U8G2_OLED // I2C OLED through the U8g2 library + Len+=Format_String(Line+Len, "U8G2_OLED"); +#endif + Len+=Format_String(Line+Len, "
GPS"); +#ifdef WITH_GPS_MTK + Len+=Format_String(Line+Len, "MTK GPS"); +#endif +#ifdef WITH_GPS_UBX + Len+=Format_String(Line+Len, "UBX GPS"); +#endif +#ifdef WITH_GPS_SRF + Len+=Format_String(Line+Len, "SRF GPS"); +#endif + Len+=Format_String(Line+Len, "
Radio"); +#ifdef WITH_RFM95 + Len+=Format_String(Line+Len, "RFM95"); +#endif +#ifdef WITH_RFM69 + Len+=Format_String(Line+Len, "RFM69"); +#endif + Len+=Format_String(Line+Len, "
Baro"); +#ifdef WITH_BMP180 + Len+=Format_String(Line+Len, "BMP180"); +#endif +#ifdef WITH_BMP280 + Len+=Format_String(Line+Len, "BMP280"); +#endif +#ifdef WITH_BME280 + Len+=Format_String(Line+Len, "BME280"); +#endif +#ifdef WITH_MS5607 + Len+=Format_String(Line+Len, "MS5607"); +#endif +#ifdef WITH_MS5611 + Len+=Format_String(Line+Len, "MS5611"); +#endif + Len+=Format_String(Line+Len, "
Bluetooth serial port"); +#ifdef WITH_BT_SPP + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
LoRaWAN"); +#ifdef WITH_LORAWAN + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
Digital Buzzer"); +#ifdef WITH_BEEPER + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
Analog Sound"); +#ifdef WITH_SOUND + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
SD Card"); +#ifdef WITH_SD + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
SPIFFS"); +#ifdef WITH_SPIFFS + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
WiFi"); +#ifdef WITH_WIFI + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
Access Point (wifi)"); +#ifdef WITH_AP + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
Encrypt"); +#ifdef WITH_ENCRYPT + Len+=Format_String(Line+Len, "Yes"); +#else + Len+=Format_String(Line+Len, "No"); +#endif + Len+=Format_String(Line+Len, "
\n"); } + static void Table_GPS(httpd_req_t *Req) { char Line[128]; int Len; uint32_t Time=TimeSync_Time(); @@ -771,6 +979,7 @@ static void Html_End(httpd_req_t *Req) static esp_err_t parm_post_handler(httpd_req_t *Req) { bool Restart=0; + bool Defaults=0; /* Destination buffer for content of HTTP POST request. * httpd_req_recv() accepts char* only, but content could * as well be any binary data (needs type casting). @@ -806,6 +1015,7 @@ static esp_err_t parm_post_handler(httpd_req_t *Req) #endif char *Line=URL; Restart = strstr(Line,"Restart=1"); + Defaults = strstr(Line,"Defaults=1"); for( ; ; ) { Parameters.ReadLine(Line); Line = strchr(Line, '&'); if(Line==0) break; @@ -813,6 +1023,9 @@ static esp_err_t parm_post_handler(httpd_req_t *Req) free(URL); Parameters.WriteToNVS(); + if(Defaults) + { Parameters.setDefault(); } + if(Restart) { #ifdef WITH_SPIFFS @@ -842,8 +1055,12 @@ static esp_err_t parm_get_handler(httpd_req_t *Req) #ifdef WITH_STRATUX ParmForm_Stratux(Req); #endif + ParmForm_Page(Req); + ParmForm_Other(Req); + ParmForm_Defaults(Req); + ParmForm_Restart(Req); Html_End(Req); @@ -860,6 +1077,7 @@ static esp_err_t top_get_handler(httpd_req_t *Req) httpd_resp_send_chunk(Req, Line, Len); httpd_resp_sendstr_chunk(Req, "
\n"); + Table_System(Req); Table_GPS(Req); Table_RF(Req); Table_Batt(Req); diff --git a/main/parameters.h b/main/parameters.h index 71f0672..1b0c8d3 100644 --- a/main/parameters.h +++ b/main/parameters.h @@ -128,8 +128,11 @@ class FlashParameters union { uint32_t Page; struct - { uint32_t PageMask:27; // enable/disable individual pages on the LCD or OLED screen + { uint32_t PageMask:21; // enable/disable individual pages on the LCD or OLED screen uint8_t InitialPage:5; // the first page to show after boot + uint8_t AltitudeUnit:2; // 0=meter, 1=feet + uint8_t SpeedUnit:2; // 0=km/h, 1=knot + uint8_t VarioUnit:2; // 0=m/s, 1=feet/minute } ; } ; @@ -269,6 +272,9 @@ uint16_t StratuxPort; PPSdelay = DEFAULT_PPSdelay; // [ms] PageMask = 0xFF; InitialPage = 0; + AltitudeUnit = 0; // meter + SpeedUnit = 0; // km/h + VarioUnit = 0; // m/s for(uint8_t Idx=0; Idx