diff --git a/T-Beam_V10_OLED_SH1106_STRATUX_BT b/T-Beam_V10_OLED_SH1106_STRATUX_BT new file mode 100644 index 0000000..098abf4 --- /dev/null +++ b/T-Beam_V10_OLED_SH1106_STRATUX_BT @@ -0,0 +1,87 @@ +#define DEFAULT_AcftType 8 // [0..15] default aircraft-type: Powered Aircraft +#define DEFAULT_GeoidSepar 40 // [m] +#define DEFAULT_CONbaud 115200 +#define DEFAULT_PPSdelay 100 +#define DEFAULT_FreqPlan 0 +#define DEFAULT_DispPage 3 // Fab501 Page to Display After Boot or Reset + + +// #define WITH_HELTEC // HELTEC module: PCB LED on GPI025 +// #define WITH_HELTEC_V2 // HELTEC module v2 +// #define WITH_TTGO // TTGO module: PCB LED on GPIO2, GPIO25 free to use as DAC2 output +// #define WITH_TBEAM // T-Beam module +#define WITH_TBEAM_V10 // T-Beam module +// #define WITH_M5_JACEK // JACEK M5 ESP32 OGN-Tracker +// #define WITH_FollowMe // by Avionix + +// #define WITH_ILI9341 // 320x240 M5stack +// #define WITH_ST7789 // IPS 240x240 ST7789 +// #define WITH_TFT_LCD // TFT LCD +// #define WITH_OLED // OLED display on the I2C: some TTGO modules are without OLED display +// #define WITH_OLED2 // 2nd OLED display, I2C address next higher +#define WITH_U8G2_OLED // I2C OLED through the U8g2 library +#define WITH_U8G2_SH1106 // correct controller for the bigger OLED +// #define WITH_U8G2_FLIP // flip the OLED screen (rotate by 180deg) + +#define WITH_RFM95 // RF chip selection: both HELTEC and TTGO use sx1276 which is same as RFM95 + +// #define WITH_SLEEP // with software sleep mode controlled by the long-press on the button + +#define WITH_AXP // with AXP192 power controller (T-BEAM V1.0) +// #define WITH_BQ // with BQ24295 power controller (FollowMe) + +// #define WITH_LED_RX +// #define WITH_LED_TX + +// #define WITH_GPS_ENABLE // use GPS_ENABLE control line to turn the GPS ON/OFF +#define WITH_GPS_PPS // use the PPS signal from GPS for precise time-sync. +#define WITH_GPS_CONFIG // attempt to configure higher GPS baud rate and airborne mode + +#define WITH_GPS_UBX // GPS understands UBX +// #define WITH_GPS_MTK // GPS understands MTK +// #define WITH_GPS_SRF +// #define WITH_MAVLINK + +#define WITH_GPS_UBX_PASS // to pass directly UBX packets to/from GPS +#define WITH_GPS_NMEA_PASS // to pass directly NMEA to/from GPS + +// #define WITH_BMP180 // BMP180 pressure sensor +// #define WITH_BMP280 // BMP280 pressure sensor +#define WITH_BME280 // BMP280 with humidity (but still works with BMP280) +// #define WITH_MS5607 // MS5607 pressure sensor +// #define WITH_MS5611 // MS5611 pressure sensor + +// #define WITH_BMX055 // BMX055 magnetic and IMU sensor + +// #define WITH_LORAWAN // LoRaWAN connectivity +// #define WITH_FANET // FANET transmission and reception +#define WITH_PAW // Add PAW transmission + +#define WITH_PFLAA // PFLAU and PFLAA for compatibility with XCsoar and LK8000 +// #define WITH_POGNT +// #define WITH_GDL90 +// #define WITH_PGAV5 +#define WITH_LOOKOUT + +#define WITH_CONFIG // interpret the console input: $POGNS to change parameters + +#define WITH_BEEPER // with digital buzzer +// #define WITH_SOUND // with analog sound produced by DAC on pin 25 + +// #define WITH_KNOB +// #define WITH_VARIO + +// #define WITH_SD // use the SD card in SPI mode and FAT file system +#define WITH_SPIFFS // use SPIFFS file system in Flash +// #define WITH_SPIFFS_FAT +#define WITH_LOG // log own positions and other received to SPIFFS +// #define WITH_SDLOG // log own position and other data to uSD card + +#define WITH_STRATUX +#define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link +#define WITH_WIFI // attempt to connect to the wifi router for uploading the log files +// #define WITH_AP // Open Access Point MOde +#define WITH_HTTP // Open Web Interface + +// #define WITH_ENCRYPT // Encrypt (optionally) the position + diff --git a/main/config.h b/main/config.h index 72419cf..beba1ff 100644 --- a/main/config.h +++ b/main/config.h @@ -1,17 +1,29 @@ -#define DEFAULT_AcftType 1 // [0..15] default aircraft-type: glider +#define DEFAULT_AcftType 8 // [0..15] default aircraft-type: Powered Aircraft #define DEFAULT_GeoidSepar 40 // [m] #define DEFAULT_CONbaud 115200 #define DEFAULT_PPSdelay 100 #define DEFAULT_FreqPlan 0 - +#define DEFAULT_DispPage 3 // Fab501 Page to Display After Boot or Reset +#define WIFI_ADDRESS_IP1 192 // 192.168.1.1 for IP Address +#define WIFI_ADDRESS_IP2 168 +#define WIFI_ADDRESS_IP3 1 +#define WIFI_ADDRESS_IP4 1 +#define WIFI_ADDRESS_GW1 0 // 0.0.0.0 for Gateway +#define WIFI_ADDRESS_GW2 0 +#define WIFI_ADDRESS_GW3 0 +#define WIFI_ADDRESS_GW4 0 +#define WIFI_ADDRESS_MK1 255 // 255.255.255.0 for Mask +#define WIFI_ADDRESS_MK2 255 +#define WIFI_ADDRESS_MK3 255 +#define WIFI_ADDRESS_MK4 0 // #define WITH_HELTEC // HELTEC module: PCB LED on GPI025 // #define WITH_HELTEC_V2 // HELTEC module v2 // #define WITH_TTGO // TTGO module: PCB LED on GPIO2, GPIO25 free to use as DAC2 output // #define WITH_TBEAM // T-Beam module -// #define WITH_TBEAM_V10 // T-Beam module +#define WITH_TBEAM_V10 // T-Beam module // #define WITH_M5_JACEK // JACEK M5 ESP32 OGN-Tracker -#define WITH_FollowMe // by Avionix +// #define WITH_FollowMe // by Avionix // #define WITH_ILI9341 // 320x240 M5stack // #define WITH_ST7789 // IPS 240x240 ST7789 @@ -20,29 +32,30 @@ // #define WITH_OLED2 // 2nd OLED display, I2C address next higher #define WITH_U8G2_OLED // I2C OLED through the U8g2 library #define WITH_U8G2_SH1106 // correct controller for the bigger OLED -#define WITH_U8G2_FLIP // flip the OLED screen (rotate by 180deg) +// #define WITH_U8G2_FLIP // flip the OLED screen (rotate by 180deg) #define WITH_RFM95 // RF chip selection: both HELTEC and TTGO use sx1276 which is same as RFM95 +//#define WITH_SX1262 // SX1262 Support // #define WITH_SLEEP // with software sleep mode controlled by the long-press on the button -// #define WITH_AXP // with AXP192 power controller (T-BEAM V1.0) +#define WITH_AXP // with AXP192 power controller (T-BEAM V1.0) // #define WITH_BQ // with BQ24295 power controller (FollowMe) // #define WITH_LED_RX // #define WITH_LED_TX -#define WITH_GPS_ENABLE // use GPS_ENABLE control line to turn the GPS ON/OFF +// #define WITH_GPS_ENABLE // use GPS_ENABLE control line to turn the GPS ON/OFF #define WITH_GPS_PPS // use the PPS signal from GPS for precise time-sync. #define WITH_GPS_CONFIG // attempt to configure higher GPS baud rate and airborne mode -// #define WITH_GPS_UBX // GPS understands UBX -#define WITH_GPS_MTK // GPS understands MTK +#define WITH_GPS_UBX // GPS understands UBX +// #define WITH_GPS_MTK // GPS understands MTK // #define WITH_GPS_SRF // #define WITH_MAVLINK -// #define WITH_GPS_UBX_PASS // to pass directly UBX packets to/from GPS -// #define WITH_GPS_NMEA_PASS // to pass directly NMEA to/from GPS +#define WITH_GPS_UBX_PASS // to pass directly UBX packets to/from GPS +#define WITH_GPS_NMEA_PASS // to pass directly NMEA to/from GPS // #define WITH_BMP180 // BMP180 pressure sensor // #define WITH_BMP280 // BMP280 pressure sensor @@ -54,6 +67,7 @@ #define WITH_LORAWAN // LoRaWAN connectivity #define WITH_FANET // FANET transmission and reception +#define WITH_PAW // Add PAW transmission #define WITH_PFLAA // PFLAU and PFLAA for compatibility with XCsoar and LK8000 // #define WITH_POGNT @@ -61,23 +75,27 @@ // #define WITH_PGAV5 #define WITH_LOOKOUT +#define WITH_SKYDEMON //Adapt NMEA Output for SKYDEMON + #define WITH_CONFIG // interpret the console input: $POGNS to change parameters -// #define WITH_BEEPER // with digital buzzer +#define WITH_BEEPER // with digital buzzer // #define WITH_SOUND // with analog sound produced by DAC on pin 25 // #define WITH_KNOB // #define WITH_VARIO -#define WITH_SD // use the SD card in SPI mode and FAT file system +// #define WITH_SD // use the SD card in SPI mode and FAT file system #define WITH_SPIFFS // use SPIFFS file system in Flash -#define WITH_SPIFFS_FAT +// #define WITH_SPIFFS_FAT #define WITH_LOG // log own positions and other received to SPIFFS -#define WITH_SDLOG // log own position and other data to uSD card +// #define WITH_SDLOG // log own position and other data to uSD card -// #define WITH_STRATUX +//#define WITH_STRATUX #define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link -// #define WITH_WIFI // attempt to connect to the wifi router for uploading the log files +#define WITH_WIFI // attempt to connect to the wifi router for uploading the log files +#define WITH_AP // Open Access Point MOde +#define WITH_HTTP // Open Web Interface // #define WITH_ENCRYPT // Encrypt (optionally) the position diff --git a/main/disp.cpp b/main/disp.cpp index 091fb5f..9bf3686 100644 --- a/main/disp.cpp +++ b/main/disp.cpp @@ -26,11 +26,11 @@ #ifdef WITH_U8G2_OLED const uint8_t DISP_Pages = 12; -static uint8_t DISP_Page = 0; +static uint8_t DISP_Page = DEFAULT_DispPage ; //Fab501 before 0 #endif #if defined(WITH_ST7789) || defined(WITH_ILI9341) const uint8_t DISP_Pages = 9; -static uint8_t DISP_Page = 0; +static uint8_t DISP_Page = DEFAULT_DispPage ; //Fab501 before 0 #endif 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, "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, " |