display: set OLED contrast (config option); oled screen saver: also hide RSSI/stat

This commit is contained in:
Hansi, dl9rdz 2022-05-29 10:28:33 +00:00
parent 6dad96d44f
commit 8b59a0d1c9
9 changed files with 40 additions and 12 deletions

View File

@ -614,6 +614,7 @@ struct st_configitems config_list[] = {
{"screenfile", 0, &sonde.config.screenfile},
{"display", -6, sonde.config.display},
{"dispsaver", 0, &sonde.config.dispsaver},
{"dispcontrast", 0, &sonde.config.dispcontrast},
/* Spectrum display settings */
{"spectrum", 0, &sonde.config.spectrum},
{"startfreq", 0, &sonde.config.startfreq},
@ -811,6 +812,9 @@ const char *handleConfigPost(AsyncWebServerRequest * request) {
f.close();
Serial.printf("Re-reading file file\n");
setupConfigData();
// TODO: Check if this is better done elsewhere?
// Use new config (whereever this is feasible without a reboot)
disp.setContrast();
return "";
}

View File

@ -12,6 +12,7 @@ var cfgs = [
[ "screenfile", "Screen config (0=automatic; 1-5=predefined; other=custom)" ],
[ "display", "Display screens (scan, default, ...)" ],
[ "dispsaver", "Display saver (0=never/1=always/2=ifnorx [+10*n: after n sec.])" ],
[ "dispcontrast", "OLED contrast (-1=use default; 0..255=set contrast)" ],
[ "norx_timeout", "No-RX-timeout in seconds (-1=disabled)"],
[ "tft_orient", "TFT orientation (0/1/2/3), OLED flip: 3"],
[ "", "Spectrum display configuration", "https://github.com/dl9rdz/rdz_ttgo_sonde/wiki/Spectrum-configuration" ],

View File

@ -53,6 +53,8 @@ kisstnc.active = 1
display=0,1,2,3,4
# turn off display: 0=never, 1=always, 2=if no RX; (+n*10: after n seconds)
dispsaver=0
# set OLED contrast (0..255) or leave at factory default (-1)
dispcontrast=-1
# set to -1 to disable (used for "N" values in timers in screens.txt). Value in seconds
norx_timeout=20
#-------------------------------#

View File

@ -277,6 +277,7 @@ void U8x8Display::begin() {
}
u8x8->begin();
if(sonde.config.tft_orient==3) u8x8->setFlipMode(true);
if(sonde.config.dispcontrast>=0) u8x8->setContrast(sonde.config.dispcontrast);
fontlist = fl;
nfonts = sizeof(fl)/sizeof(uint8_t *);
@ -287,6 +288,10 @@ void U8x8Display::clear() {
u8x8->clear();
}
void U8x8Display::setContrast(uint8_t contrast) {
u8x8->setContrast(contrast);
}
// For u8x8 oled display: 0=small font, 1=large font 7x14
void U8x8Display::setFont(uint8_t fontindex) {
@ -526,6 +531,9 @@ void ILI9225Display::clear() {
SPI_MUTEX_UNLOCK();
}
void ILI9225Display::setContrast(uint8_t /*contrast*/) {
}
// for now, 0=small=FreeSans9pt7b, 1=large=FreeSans18pt7b
void ILI9225Display::setFont(uint8_t fontindex) {
//if(fontindex==1 || fontindex==2) { fontindex=3; }
@ -1728,30 +1736,35 @@ void Display::drawText(DispEntry *de) {
}
void Display::updateDisplayPos() {
if( dispstate == 0 ) return; // do not display anything
for(DispEntry *di=layout->de; di->func != NULL; di++) {
if(di->func != disp.drawLat && di->func != disp.drawLon) continue;
di->func(di);
}
}
void Display::updateDisplayPos2() {
if( dispstate == 0 ) return; // do not display anything
for(DispEntry *di=layout->de; di->func != NULL; di++) {
if(di->func != disp.drawAlt && di->func != disp.drawHS && di->func != disp.drawVS) continue;
di->func(di);
}
}
void Display::updateDisplayID() {
if( dispstate == 0 ) return; // do not display anything
for(DispEntry *di=layout->de; di->func != NULL; di++) {
if(di->func != disp.drawID) continue;
di->func(di);
}
}
void Display::updateDisplayRSSI() {
if( dispstate == 0 ) return; // do not display anything
for(DispEntry *di=layout->de; di->func != NULL; di++) {
if(di->func != disp.drawRSSI) continue;
di->func(di);
}
}
void Display::updateStat() {
if( dispstate == 0 ) return; // do not display anything
for(DispEntry *di=layout->de; di->func != NULL; di++) {
if(di->func != disp.drawQS) continue;
di->func(di);
@ -1759,7 +1772,8 @@ void Display::updateStat() {
}
void Display::updateDisplayRXConfig() {
for(DispEntry *di=layout->de; di->func != NULL; di++) {
if( dispstate == 0 ) return; // do not display anything
for(DispEntry *di=layout->de; di->func != NULL; di++) {
if(di->func != disp.drawQS && di->func != disp.drawAFC) continue;
di->func(di);
}
@ -1800,4 +1814,9 @@ void Display::dispsavectlOFF(int rxactive) {
}
}
void Display::setContrast() {
if(sonde.config.dispcontrast<0) return;
rdis->setContrast(sonde.config.dispcontrast);
}
Display disp = Display();

View File

@ -64,6 +64,7 @@ class RawDisplay {
public:
virtual void begin() = 0;
virtual void clear() = 0;
virtual void setContrast(uint8_t contrast) = 0;
virtual void setFont(uint8_t fontindex) = 0;
virtual void getDispSize(uint8_t *height, uint8_t *width, uint8_t *lineskip, uint8_t *colskip) = 0;
virtual void drawString(uint16_t x, uint16_t y, const char *s, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0 ) = 0;
@ -86,6 +87,7 @@ public:
U8x8Display(uint8_t type = 0) { _type = type; }
void begin();
void clear();
void setContrast(uint8_t contrast);
void setFont(uint8_t fontindex);
void getDispSize(uint8_t *height, uint8_t *width, uint8_t *lineskip, uint8_t *colskip);
void drawString(uint16_t x, uint16_t y, const char *s, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0);
@ -110,6 +112,7 @@ public:
ILI9225Display(int type = 1) { _type = type; }
void begin();
void clear();
void setContrast(uint8_t contrast);
void setFont(uint8_t fontindex);
void getDispSize(uint8_t *height, uint8_t *width, uint8_t *lineskip, uint8_t *colskip);
void drawString(uint16_t x, uint16_t y, const char *s, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0);
@ -197,6 +200,7 @@ public:
void dispsavectlON();
void dispsavectlOFF(int rxactive);
void setLayout(int layout);
void setContrast();
};
extern Display disp;

View File

@ -102,6 +102,7 @@ void Sonde::defaultConfig() {
config.sx1278_sck = SCK;
config.oled_rst = 16;
config.disptype = 0;
config.dispcontrast = -1;
config.tft_orient = 1;
config.button2_axp = 0;
config.norx_timeout = 20;
@ -332,14 +333,6 @@ void Sonde::setConfig(const char *cfg) {
if(i==N_CONFIG) {
Serial.printf("Invalid config option '%s'=%s \n", cfg, val);
}
#if 0
// currently not in config_list. Maybe add later.
} else if(strcmp(cfg,"axudp.symbol")==0) {
strncpy(config.udpfeed.symbol, val, 3);
} else if(strcmp(cfg,"tcp.symbol")==0) {
strncpy(config.tcpfeed.symbol, val, 3);
}
#endif
}
void Sonde::setIP(String ip, bool AP) {

View File

@ -265,6 +265,7 @@ typedef struct st_rdzconfig {
int8_t display[30]; // list of display mode (0:scanner, 1:default, 2,... additional modes)
int dispsaver; // Turn display on/off (0=always on, 10*n+1: off after n seconds,
// 10*n+2: scanner off after n seconds, RX always shown)
int dispcontrast; // For OLED: set contrast to 0..255 (-1: don't set/leave at factory default)
int startfreq; // spectrum display start freq (400, 401, ...)
int channelbw; // spectrum channel bandwidth (valid: 5, 10, 20, 25, 50, 100 kHz)
int spectrum; // show freq spectrum for n seconds -1=disable; 0=forever

View File

@ -8,6 +8,9 @@
TimerHandle_t mqttReconnectTimer;
extern const char *version_name;
extern const char *version_id;
void mqttCallback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
@ -52,7 +55,8 @@ void MQTT::publishUptime()
//snprintf(payload, 12, "%lu", millis());
//snprintf(payload, 124, "{\"uptime\": %lu," "\"user\": \"%s\"", millis(), username );
char payload[128];
snprintf(payload, 128, "{\"uptime\": %d, \"user\": \"%s\", \"rxlat\": %.5f, \"rxlon\": %.5f}", millis(), username, sonde.config.rxlat, sonde.config.rxlon );
snprintf(payload, 128, "{\"uptime\": %ld, \"user\": \"%s\", \"rxlat\": %.5f, \"rxlon\": %.5f, \"ver\": \"%s\", \"sub\": \"%s\"}",
millis(), username, sonde.config.rxlat, sonde.config.rxlon, version_name, version_id);
Serial.println(payload);
char topic[128];
snprintf(topic, 128, "%s%s", this->prefix, "uptime");
@ -152,7 +156,7 @@ void MQTT::publishPacket(SondeInfo *si)
strcat(payload, "}"); // terminate payload string
char topic[128];
snprintf(topic, 128, "%s%s", this->prefix, "data");
snprintf(topic, 128, "%s%s", this->prefix, "packet");
Serial.print(payload);
mqttClient.publish(topic, 1, 1, payload);
}

View File

@ -1,4 +1,4 @@
const char *version_name = "rdzTTGOsonde";
const char *version_id = "devel20220418";
const char *version_id = "devel20220422";
const int SPIFFS_MAJOR=2;
const int SPIFFS_MINOR=16;