diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index d33f846..8d2c059 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -545,7 +545,7 @@ struct st_configitems config_list[] = { {"wifi", "Wifi mode (0/1/2/3)", 0, &sonde.config.wifi}, {"debug", "Debug mode (0/1)", 0, &sonde.config.debug}, {"maxsonde", "Maxsonde", 0, &sonde.config.maxsonde}, - {"screenfile", "Screen config (0=old, 1=OLED, 2=TFT, 3=TFT[port])", 0, &sonde.config.screenfile}, + {"screenfile", "Screen config (0=old, 1=OLED, 2/3=ILI9251 l/p, 4/5=ILI9341 l/p", 0, &sonde.config.screenfile}, {"display", "Display screens (scan,default,...)", -6, sonde.config.display}, /* Spectrum display settings */ {"spectrum", "Show spectrum (-1=no, 0=forever, >0=seconds)", 0, &sonde.config.spectrum}, @@ -601,7 +601,7 @@ struct st_configitems config_list[] = { /* Hardware dependeing settings */ {"", "Hardware configuration (requires reboot)", -5, NULL}, - {"disptype", "Display type (0=OLED/SSD1306, 1=TFT/ILI9225, 2=OLED/SH1106)", 0, &sonde.config.disptype}, + {"disptype", "Display type (0=OLED/SSD1306, 1=ILI9225, 2=OLED/SH1106, 3=ILI9341)", 0, &sonde.config.disptype}, {"norx_timeout", "No-RX-Timeout in seconds (-1=disabled)", 0, &sonde.config.norx_timeout}, {"oled_sda", "OLED SDA/TFT SDA", 0, &sonde.config.oled_sda}, {"oled_scl", "OLED SCL/TFT CLK", 0, &sonde.config.oled_scl}, diff --git a/RX_FSK/data/screens4.txt b/RX_FSK/data/screens4.txt new file mode 100644 index 0000000..8730685 --- /dev/null +++ b/RX_FSK/data/screens4.txt @@ -0,0 +1,574 @@ +## screens2.txt: TFT display (landscape) +# Definition of display content and action behaviour +# +# Timer: (view timer, rx timer, norx timer) +# - value -1: timer is disabled; value>=0: timer fires after (value) seconds +# - view timer: time since current view (display mode and sonde) was started +# - rx timer: time since when sonde data has been received continuously (trigger immediatly after RX) +# - norx timer: time since when no sonde data has been received continuously +# (rx and norx timer is started after tuning a new frequency and receiving a signal or not receiving +# anything for a 1s period) +# +# Actions: +# - W: activate WiFi scan +# - F: activate frequency spectrum display +# - 0: activate "Scan:" display (this is basically just display mode 0) +# - x: (1..N): activate display mode x [deprecated] +# - >: activate next display mode +# - D: activate default receiver display (display mode specified in config) +# - +: advance to next active sonde from QRG config +# - #: no action +# +# Display content (lower/upper case: small/large font) +# line,column=content +# for ILI9225 its also possible to indicate +# line,column,width=content for text within a box of width 'width' +# line,column,-width=content for right-justified text +# +# XText : Text +# F(suffix): frequency (with suffix, e.g., " MHz") +# L latitade +# O lOngitute +# A altitude +# Hm(suffix) hor. speed m/s (suffix: e.g. "m/s"; no suffix=>m/s as 16x8 bitmap for SSD1306 display only) +# Hk(suffix) hor. speed km/h (suffix: e.g. "km/h"; no suffix=>km/h as 16x8 bitmap for SSD1306 display only) +# V(suffix) vert. speef (suffix: e.g. "m/s"; no suffix=>m/s as 16x8 bitmap for SSD1306 display only) +# Ix sonde ID (default/d: dxlaprs; s: short id, n: real serial number) +# RS41,RS92: all identical R1234567 +# DFMx: ID M12345678; short ID and serial 12345678 +# M10: ID ME95231F0; short ID: M95231F0; serial 9062104592 +# Q signal quality statistics bar +# T type string (RS41/DFM9/DFM6/RS92) +# C afC value +# N ip address (only tiny font) +# S scan list entry info: l/empty: launch site name, #=entry nr, t=total entries, a=active entries, /: #/t +# K RS41 kill timer values: Kl launch timer, Kb burst timer, Kc kill countdown +# format: K_4: h:mm k_6: h:mm:ss k_s: sssss, nothing shown for other sonde +# Mx telemetry value x (t temp p preassure h hyg) [not yet implemented, maybe some day in future] +# Gx GPS-related data +# raw data from GPS: GA, GO, GH, GC: LAtitude, lOngitude, Altutide(Height), Course over ground +# relative to sonde: GD, GI, GB: Distance, dIrection (absolute), relative Bearing +# G0 GPS circle diagram e.g. 3,5=g0NCS,50,ff0000,000033,5,ffff00,4,ffffff +# "N" (what is on top: N=north C=course) +# "C" (where does the arrow point to: C=course, S=sonde) +# "S" (what is shown by the bullet: C=course, S=sonde) +# 50: circle radius, followed by fg and bg color +# 5: bullet radius, followed by fg color +# 4: arrow width, followed by fg color +# R RSSI +# B battery(T-Beam 1.0) S=status V=Batt.Volt C=charge current D=discharge current +# U=USB volt I=USB current T=IC temp +# +# fonts=x,y can be used to select font (x=small, y=large) for all items below +# for SSD1306, x and y can be used to select one of those fonts: +# (y should be a 1x2 font (1,5,6,7), x a small font) +# u8x8_font_chroma48medium8_r, // 0 ** default small +# u8x8_font_7x14_1x2_f, // 1 ** default large +# u8x8_font_amstrad_cpc_extended_f, // 2 +# u8x8_font_5x7_f, // 3 +# u8x8_font_5x8_f, // 4 +# u8x8_font_8x13_1x2_f, // 5 +# u8x8_font_8x13B_1x2_f, // 6 +# u8x8_font_7x14B_1x2_f, // 7 +# u8x8_font_artossans8_r, // 8 +# u8x8_font_artosserif8_r, // 9 +# u8x8_font_torussansbold8_r, // 10 +# u8x8_font_victoriabold8_r, // 11 +# u8x8_font_victoriamedium8_r, // 12 +# u8x8_font_pressstart2p_f, // 13 +# u8x8_font_pcsenior_f, // 14 +# u8x8_font_pxplusibmcgathin_f, // 15 +# u8x8_font_pxplusibmcga_f, // 16 +# u8x8_font_pxplustandynewtv_f, // 17 +# +# for ILI9225, these fonts are available: +# Terminal6x8 // 0 +# Terminal11x16 // 1 +# Terminal12x16 // 2 +# FreeMono9pt7b, // 3 +# FreeMono12pt7b, // 4 +# FreeSans9pt7b, // 5 +# FreeSans12pt7b, // 6 +# Picopixel, // 7 +# +# color=rrggbb,rrggbb can be used to select color (foreground, background) +# see https://github.com/Nkawu/TFT_22_ILI9225/wiki#color-reference for example (use without "#"-sign) +# +# for TFT display, coordinates and width are multiplied by xscale,yscale and later used in pixels +# with scale=1,1 you can directly use pixel coordinates. (default: xscale=13,yscale=22 => 8 lines, 16 columns) +########### + +############ +# Scan display for large 2" TFT dispaly +@ScannerTFT +scale=30,18 +timer=-1,0,0 +key1action=D,#,F,W +key2action=D,#,#,# +timeaction=#,D,+ +fonts=5,6 +0,0=XScan +0,5,-3=S#: +0,9,5.5=T +3,0=F MHz +5,0,16=S +7,5=n + +############ +@MainTFT +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,0 +color=FFD700 +0,0,10.5=Is +color=0000FF +0,11,-5.5=f +1,0,4=t +1,10.5,-6=c +color=00ff00 +2,0,7=L +4,0,7=O +color=FFA500 +2,9.5,-7=A +3,9.5,-7=vm/s +color=AA5522 +4,9.5,-7=hkkm/h +color=FFFFFF +6,2=r +6.3,10=Q4 +7,0=xd= +7,2,6=gD +7,12=gI + +############ +@PeilungTFT +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +color=ffff00,000033 +color=bbbbbb,000000 +0,2=xN Top: +0,8=xCourse Top: +color=ffff00,000033 +1,0=g0NCS,48,ffff00,000044,6,33ff33,5,eeaa00 +1,8=g0CCS,48,ffff00,000044,6,55ff55,5,eeaa00 +color=ffffff,000000 +6,0=xDirection: +6,8,4=gI +7,0=xCOG: +7,4,4=gC +7,8=xturn: +7,12,4=gB + +############ +@GPSdataTFT +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +0,0=xOn-board GPS: +1,0,8=gA +2,0,8=gO +3,0,8=gH +4,0,8=gC +5,0=xGPS vs Sonde: +6,0,8=gD +7,0,8=gI +7,8,8=gB + +############ +@BatteryTFT +timer=-1,-1,-1 +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +0,0=xBattery status: +0,14=bS +1,0=xBatt: +1,5,5=bVV +2,0,16=bCmA(charging) +3,0,16=bDmA(discharging) +4.4,0=xUSB: +4.4,5,5=bUV +5.4,0,10=bImA +6.4,0=xTemp: +6.4,5,5=bT C + +### Alternative display layouts based on https://gist.github.com/bazjo +# Scan display for large 2" TFT dispaly +@Scan.TFT.Bazjo +timer=-1,0,0 +key1action=D,#,F,W +key2action=D,#,#,# +timeaction=#,D,+ +scale=11,10 +fonts=0,2 +color=e0e0e0 +#Row 1 +0.5,0=XScanning... +#Row 2 +3,0=xIndex +4,0,8=S/ +3,9=xSite +4,9=S +#Row 3 +6,0=xType +7,0,6=T +6,9=xFrequency +7,9=F +#Row 4 +9,0=xWeb UI IP +10,0=N +#Row 5 +#Footer +color=6C757D +15,0=xScan Mode +15,18=bVV + +############ +@Decode/General.TFT.Bazjo +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,0 +scale=11,10 +fonts=0,2 +#Row 1 +color=996A06 +0,0=xSerial +0,5=t +color=FFB10B +1,0=Is +color=996A06 +0,11=xFreq. +0,16=c +color=FFB10B +1,11=F +#Row 2 +color=3C5C99 +3,0=xLatitude +color=639AFF +4,0=L +color=3C5C99 +3,11=xLongitude +color=639AFF +4,11=O +#Row 3 +color=3C5C99 +6,0=xHoriz. Speed +color=639AFF +7,0=Hkkm/h +color=3C5C99 +6,11=xVert. Speed +color=639AFF +7,11=Vm/s +#Row 4 +color=99004A +9,0=xAltitude +color=FF007B +10,0=A +color=99004A +9,11=xBearing +color=FF007B +10,11=GB +#Row 5 +color=06998E +12,0=xRSSI +color=0AFFEF +13,0=R +color=06998E +12,11=xHistory +color=0AFFEF +13.5,11=Q4 +#Footer +color=6C757D +15,0=xDecode Mode / General View +15,18=bVV + +############ +@Decode/Battery.TFT.Bazjo +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +scale=11,10 +fonts=0,2 +#Row 1 +color=99001F +0,0=xBattery Status +0,11=xBattery Voltage +color=FF0035 +1,0=BS +1,11=BVV +#Row 2 +color=99001F +3,0=xCharge Current +3,11=xDischarge Current +color=FF0035 +4,0=BCmA +4,11=BDmA +#Row 3 +color=99001F +6,0=xUSB Voltage +6,11=xUSB Current +color=FF0035 +7,0=BUV +7,11=BImA +#Row 4 +color=99001F +9,0=xIC Temperature +#9,11=xKey +color=FF0035 +10,0=BTC +#10,11=XValue +#Row 5 +#12,0=xKey +#12,11=xKey +#13,0=XValue +#13,11=XValue +#Footer +color=99001F +15,0=xDecode Mode/Battery View +15,18=bVV + +# based on https://github.com/puspis/rdz_ttgo_sonde +########## +@Scanner.Puspis +timer=-1,0,4 +key1action=D,#,F,W +key2action=D,#,#,# +timeaction=#,D,+ +scale=13,10 +fonts=0,1 +#Row 1 +color=90EE90 +0.5,3=XFREQUENCY SCAN +#Row 2 +color=00FF00 +3,0=xMEMORY +3,9=xLAUNCH SITE +color=639AFF +4,0,9=S/ +4,9=S +#Row 3 +color=00FF00 +6,0=xTYPE +6,9=xFREQUENCY +color=639AFF +7,0,9=T +7,9=F MHz +#Row 4 +fonts=0,5 +color=285454 +11.5,0=xIP ADDRESS: +10.9,7,-15=N +#Footer +color=FF0000 +12.7,18=bVV + +############ +@Main.Puspis +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,0 +scale=11,10 +fonts=0,2 +#Row 1 +color=00FF00 +0,0=xSONDE ID +0,11=xFREQUENCY +color=90EE90 +0,7.4=t +1,0=Is +1,11=F +#Row 2 +fonts=0,1 +color=00FF00 +3,0=xLATITUDE +3,11=xLONGITUDE +color=FF007B +4,0=L +4,11=O +#Row 3 +color=00FF00 +6,0=xWIND SPEED +6,11=xCLIMB RATE +color=639AFF +7,0=Hkkm/h +7,11=Vm/s +#Row 4 +color=00FF00 +9,0=xRX ALTITUDE +9,11=xSONDE ALTITUDE +color=639AFF +10,0=GH +10,11=A +#Row 5 +color=00FF00 +12,0=xDISTANCE +12,11=xFRAMES +color=FFFFFF +13,0=GD +13.5,11=Q4 +#Footer +color=FF0000 +15,0.2=xIP: +15,2.5=n +15,18=bVV + +############ +@JotaEme.Puspis +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,0 +scale=11,10 +fonts=0,1 +#Row 1 +color=90EE90 +0,0=Is +0.7,10.5=t +0,14=F +#Row 2 +color=00FF00 +2,1.2=xWIND SPEED +2,14=xCLIMB RATE +color=639AFF +3,1=Hkkm/h +3,13=Vm/s +#Row 3 +color=00FF00 +5,1=xRX ALTITUDE +5,12.5=xSONDE ALTITUDE +color=639AFF +6,2=GH +6,14=A +#Row 4 +color=00FF00 +8,0=xSONDE POSITION +color=FF007B +9,2=l +10,2=o +#Row 5 +color=00FF00 +11.4,2=xDISTANCE +color=FFFFFF +12.4,1.5=GD +#Circle +color=EEAA00,000033 +8,13.8=g0CCS,28,FFFF00,000033,5,9ACD32,5,EEAA00 +#Footer +color=FF0000 +15,0=n +color=FFFFFF,000000 +15,8.7=Q4 +color=FF0000 +15,18.4=bVV + +############ +@CompassTFT.Puspis +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +scale=13,10 +fonts=0,1 +#Row 1 +color=90EE90 +0.5,1.5=XCOMPASS +#Row 2 +color=00FF00 +4,2=xRX HEADING +color=639AFF +5,3.8=GC +#Row 3 +color=00FF00 +9.5,3=xDISTANCE +9.5,13.5=xBEARING +color=639AFF +10.5,3.4=GD +10.5,14.3=GI +#Circle +color=EEAA00,000033 +0.2,10=g0CCS,52,FFFF00,000033,10,9ACD32,6,EEAA00 +#Footer +color=FF0000,000000 +12.7,1=Q4 +12.7,18=bVV + +############ +@GPSdataTFT.Puspis +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +scale=13,10 +fonts=0,1 +#Row 1 +color=90EE90 +0.5,0.5=XGPS RECEIVER STATION +#Row 2 +color=00FF00 +3,0=xRX LATITUDE +3,12=xRX LONGITUDE +color=639AFF +4,0=GA +4,12=GO +#Row 3 +color=00FF00 +6,0=xRX ALTITUDE +6,12=xRX HEADING +color=639AFF +7,0=GH +7,12=GC +#Row 4 +color=00FF00 +9,0=xDISTANCE +9,12=xBEARING +color=639AFF +10,0=GD +10,12=GB +#Footer +color=FF0000,000000 +12.7,0.4=Q4 +12.7,18=bVV + +############ +@BatteryTFT.Puspis +timer=-1,-1,-1 +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +scale=13,10 +fonts=0,1 +#Row 1 +color=90EE90 +0.5,4=XBATTERY STATUS +#Row 2 +color=00FF00 +3,0=x(C)HARGE/(B)ATT +3,11.5=xBATTERY VOLTAGE +color=639AFF +4,4=BS +4,11.5=BVV +#Row 3 +color=00FF00 +6,0=xCHARGE CURRENT +6,11.5=xDISCHG. CURRENT +color=639AFF +7,0=BCmA +7,11.5=BDmA +#Row 3 +color=00FF00 +9,0=xIC TEMPERATURE +9,11.5=xFREQ. OFFSET +color=639AFF +10,0=BTC +10,10=C +#Footer +color=FF0000,000000 +12.7,0.4=Q4 +12.7,18=bVV diff --git a/RX_FSK/data/screens5.txt b/RX_FSK/data/screens5.txt new file mode 100644 index 0000000..b2ec5e7 --- /dev/null +++ b/RX_FSK/data/screens5.txt @@ -0,0 +1,217 @@ +## screens3.txt: TFT display (portrait) +## based on http://www.p1337.synology.me/dokuwiki/doku.php?id=public:wettersonden +# Definition of display content and action behaviour +# +# Timer: (view timer, rx timer, norx timer) +# - value -1: timer is disabled; value>=0: timer fires after (value) seconds +# - view timer: time since current view (display mode and sonde) was started +# - rx timer: time since when sonde data has been received continuously (trigger immediatly after RX) +# - norx timer: time since when no sonde data has been received continuously +# (rx and norx timer is started after tuning a new frequency and receiving a signal or not receiving +# anything for a 1s period) +# +# Actions: +# - W: activate WiFi scan +# - F: activate frequency spectrum display +# - 0: activate "Scan:" display (this is basically just display mode 0) +# - x: (1..N): activate display mode x [deprecated] +# - >: activate next display mode +# - D: activate default receiver display (display mode specified in config) +# - +: advance to next active sonde from QRG config +# - #: no action +# +# Display content (lower/upper case: small/large font) +# line,column=content +# for ILI9225 its also possible to indicate +# line,column,width=content for text within a box of width 'width' +# line,column,-width=content for right-justified text +# +# XText : Text +# F(suffix): frequency (with suffix, e.g., " MHz") +# L latitade +# O lOngitute +# A altitude +# Hm(suffix) hor. speed m/s (suffix: e.g. "m/s"; no suffix=>m/s as 16x8 bitmap for SSD1306 display only) +# Hk(suffix) hor. speed km/h (suffix: e.g. "km/h"; no suffix=>km/h as 16x8 bitmap for SSD1306 display only) +# V(suffix) vert. speef (suffix: e.g. "m/s"; no suffix=>m/s as 16x8 bitmap for SSD1306 display only) +# Ix sonde ID (default/d: dxlaprs; s: short id, n: real serial number) +# RS41,RS92: all identical R1234567 +# DFMx: ID M12345678; short ID and serial 12345678 +# M10: ID ME95231F0; short ID: M95231F0; serial 9062104592 +# Q signal quality statistics bar +# T type string (RS41/DFM9/DFM6/RS92) +# C afC value +# N ip address (only tiny font) +# S scan list entry info: l/empty: launch site name, #=entry nr, t=total entries, a=active entries, /: #/t +# K RS41 kill timer values: Kl launch timer, Kb burst timer, Kc kill countdown +# format: K_4: h:mm k_6: h:mm:ss k_s: sssss, nothing shown for other sonde +# Mx telemetry value x (t temp p preassure h hyg) [not yet implemented, maybe some day in future] +# Gx GPS-related data +# raw data from GPS: GA, GO, GH, GC: LAtitude, lOngitude, Altutide(Height), Course over ground +# relative to sonde: GD, GI, GB: Distance, dIrection (absolute), relative Bearing +# G0 GPS circle diagram e.g. 3,5=g0NCS,50,ff0000,000033,5,ffff00,4,ffffff +# "N" (what is on top: N=north C=course) +# "C" (where does the arrow point to: C=course, S=sonde) +# "S" (what is shown by the bullet: C=course, S=sonde) +# 50: circle radius, followed by fg and bg color +# 5: bullet radius, followed by fg color +# 4: arrow width, followed by fg color +# R RSSI +# B battery(T-Beam 1.0) S=status V=Batt.Volt C=charge current D=discharge current +# U=USB volt I=USB current T=IC temp +# +# fonts=x,y can be used to select font (x=small, y=large) for all items below +# for SSD1306, x and y can be used to select one of those fonts: +# (y should be a 1x2 font (1,5,6,7), x a small font) +# u8x8_font_chroma48medium8_r, // 0 ** default small +# u8x8_font_7x14_1x2_f, // 1 ** default large +# u8x8_font_amstrad_cpc_extended_f, // 2 +# u8x8_font_5x7_f, // 3 +# u8x8_font_5x8_f, // 4 +# u8x8_font_8x13_1x2_f, // 5 +# u8x8_font_8x13B_1x2_f, // 6 +# u8x8_font_7x14B_1x2_f, // 7 +# u8x8_font_artossans8_r, // 8 +# u8x8_font_artosserif8_r, // 9 +# u8x8_font_torussansbold8_r, // 10 +# u8x8_font_victoriabold8_r, // 11 +# u8x8_font_victoriamedium8_r, // 12 +# u8x8_font_pressstart2p_f, // 13 +# u8x8_font_pcsenior_f, // 14 +# u8x8_font_pxplusibmcgathin_f, // 15 +# u8x8_font_pxplusibmcga_f, // 16 +# u8x8_font_pxplustandynewtv_f, // 17 +# +# for ILI9225, these fonts are available: +# Terminal6x8 // 0 +# Terminal11x16 // 1 +# Terminal12x16 // 2 +# FreeMono9pt7b, // 3 +# FreeMono12pt7b, // 4 +# FreeSans9pt7b, // 5 +# FreeSans12pt7b, // 6 +# Picopixel, // 7 +# +# color=rrggbb,rrggbb can be used to select color (foreground, background) +# see https://github.com/Nkawu/TFT_22_ILI9225/wiki#color-reference for example (use without "#"-sign) +# +# for TFT display, coordinates and width are multiplied by xscale,yscale and later used in pixels +# with scale=1,1 you can directly use pixel coordinates. (default: xscale=13,yscale=22 => 8 lines, 16 columns) + +########### +# +# Default configuration for "Scanner" display: +# - view timer disabled; rx timer=0; norx timer = 0 +# => after 1 second immediately an action is triggered +# (norx: go to next sonde; rx: go to default receiver display) +# - key1 actions: D,0,F,W +# => Button press activates default receiver view, double press does nothing +# Mid press activates Spectrum display, long press activates Wifi scan +# - key2 has no function +@ScannerPortrait +timer=-1,0,0 +key1action=D,#,F,W +key2action=>,#,#,# +timeaction=#,D,+ +0,0=XScan +0,5=S#: +0,9,4.5=T +6,0=XHoehe +6,5=GH +color=ffff00 +2,0=F MHz +4,0=S +color=00ff00,444444 +7,5=n +7,0=bV + +############ +# Default configuration for "Legacy" display: +# - view timer=-1, rx timer=-1 (disabled); norx timer=20 (or -1 for "old" behaviour) +# => norx timer fires after not receiving a singla for 20 seconds +# - key1 actions: +,0,F,W +# => Button1 press: next sonde; double press => @Scanner display +# => Mid press activates Spectrum display, long press activates Wifi scan +# - key2 actions: 2,#,#,# +# => BUtton2 activates display 2 (@Field) +# - timer actions: #,#,0 +# (norx timer: if no signal for >20 seconds: go back to scanner mode) +# +@LegacyPortrait +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,0 +9,10=f +9,0=r +9,4=Q +5,0=g0NCS,35,ffff00,000044,6,33ff33,5,eeaa00 +5,7=g0CCS,35,ffff00,000044,6,55ff55,5,eeaa00 +0,0=s +0,9=is +2,0=L +3,0=O +color=FFFF00 +1,6=Hk km/h +color=FF0000 +1,0=GD +color=FFFFFF +4,9=GH +3,9=V +4,0=A + +############ +@PeilungTFTPortrait +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +color=ffff00,000033 +color=bbbbbb,000000 +0,2=xN Top: +0,8=xCourse Top: +color=ffff00,000033 +1,0=g0NCS,35,ffff00,000044,6,33ff33,5,eeaa00 +1,7=g0CCS,35,ffff00,000044,6,55ff55,5,eeaa00 +color=ffffff,000000 +6,0=xDirection: +6,8,4=gI +7,0=xCOG: +7,4,4=gC +7,8=xturn: +7,12,4=gB + +############ +@GPSdataTFTPortrait +timer=-1,-1,N +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +0,0=xOn-board GPS: +1,0,8=gA +2,0,8=gO +3,0,8=gH +4,0,8=gC +5,0=xGPS vs Sonde: +6,0,8=gD +7,0,8=gI +7,8,8=gB + +############ +@BatteryTFTPortrait +timer=-1,-1,-1 +key1action=+,0,F,W +key2action=>,#,#,# +timeaction=#,#,# +0,0=xBattery status: +0,14=bS +1,0=xBatt: +1,5,5=bVV +2,0,16=bCmA(charging) +3,0,16=bDmA(discharging) +4.4,0=xUSB: +4.4,5,5=bUV +5.4,0,10=bImA +6.4,0=xTemp: +6.4,5,5=bT C + diff --git a/libraries/SondeLib/Display.cpp b/libraries/SondeLib/Display.cpp index f139495..9d68133 100644 --- a/libraries/SondeLib/Display.cpp +++ b/libraries/SondeLib/Display.cpp @@ -312,14 +312,8 @@ void U8x8Display::drawQS(uint8_t x, uint8_t y, uint8_t len, uint8_t /*size*/, ui const GFXfont *gfl[] = { -#ifdef ALT9225 &Terminal11x16Font, // 3 (replacement for 1 or 2 with old library) &Terminal11x16Font, // 4 (replacement for 1 or 2 with old library) -#else - // nobody was using them, so removed with new library - &FreeMono9pt7b, // 3 - &FreeMono12pt7b, // 4 -#endif &FreeSans9pt7b, // 5 &FreeSans12pt7b, // 6 &Picopixel, // 7 @@ -331,13 +325,8 @@ struct gfxoffset_t { // first value: offset: max offset from font glyphs (last column * (-1)) (check /, \, `, $)` // yclear:max height: max of (height in 3rd column) + (yofs + 6th column) (check j) const struct gfxoffset_t gfxoffsets[]={ -#ifdef ALT9225 { 16, 18}, { 16, 18}, -#else - { 11, 15 }, // 13+11-9 "j" - { 15, 20 }, // 19+15-14 -#endif { 13, 18 }, // 17+13-12 "j" { 17, 23 }, // 23+17-17 { 4, 6}, // 6+4-4 @@ -348,55 +337,36 @@ static int ngfx = sizeof(gfl)/sizeof(GFXfont *); #define TFT_LED 0 // 0 if wired to +5V directly #define TFT_BRIGHTNESS 100 // Initial brightness of TFT backlight (optional) -#ifdef ALT9225 Arduino_DataBus *bus; -#endif void ILI9225Display::begin() { -#ifdef ALT9225 Serial.println("ILI9225 init (alt driver)"); bus = new Arduino_ESP32SPI( sonde.config.tft_rs, sonde.config.tft_cs, sonde.config.oled_scl, sonde.config.oled_sda, -1, HSPI); - tft = new Arduino_ILI9225(bus, sonde.config.oled_rst); + if(_type == 3) + tft = new Arduino_ILI9341(bus, sonde.config.oled_rst); + else + tft = new Arduino_ILI9225(bus, sonde.config.oled_rst); Serial.println("ILI9225 init (alt driver): done"); tft->begin(); + tft->fillScreen(BLACK); tft->setRotation(sonde.config.tft_orient); tft->setTextWrap(false); -#else - tft = new MY_ILI9225(sonde.config.oled_rst, sonde.config.tft_rs, sonde.config.tft_cs, - sonde.config.oled_sda, sonde.config.oled_scl, TFT_LED, TFT_BRIGHTNESS); - tft->setModeFlip(sonde.config.tft_modeflip); - tft->begin(spiDisp); - tft->setOrientation(sonde.config.tft_orient); -#endif } void ILI9225Display::clear() { -#ifdef ALT9225 - tft->fillScreen(0); -#else - tft->clear(); -#endif + tft->fillScreen(BLACK); } // for now, 0=small=FreeSans9pt7b, 1=large=FreeSans18pt7b void ILI9225Display::setFont(uint8_t fontindex) { -#ifdef ALT9225 if(fontindex==1 || fontindex==2) { fontindex=3; } -#endif findex = fontindex; switch(fontindex) { -#ifdef ALT9225 case 0: tft->setFont(NULL); tft->setTextSize(1); break; case 1: tft->setFont(NULL); tft->setTextSize(2); break; case 2: tft->setFont(NULL); tft->setTextSize(2); break; default: tft->setFont(gfl[fontindex-3]); -#else - case 0: tft->setFont(Terminal6x8); break; - case 1: tft->setFont(Terminal11x16); break; - case 2: tft->setFont(Terminal12x16); break; - default: tft->setGFXFont(gfl[fontindex-3]); -#endif } } @@ -418,7 +388,6 @@ void ILI9225Display::getDispSize(uint8_t *height, uint8_t *width, uint8_t *lines break; default: // get size from GFX Font { -#ifdef ALT9225 int16_t x, y; uint16_t w, h; tft->getTextBounds("|", 0, 0, &x, &y, &w, &h); @@ -426,13 +395,6 @@ void ILI9225Display::getDispSize(uint8_t *height, uint8_t *width, uint8_t *lines tft->getTextBounds("A", 0, 0, &x, &y, &w, &h); if(colskip) *colskip = w+2; if(lineskip&&colskip) { Serial.printf("skip size from bounds: %d, %d\n", *lineskip, *colskip); } -#else - int16_t w,h,a; - tft->getGFXCharExtent('|',&w,&h,&a); - if(lineskip) *lineskip = h+2; - tft->getGFXCharExtent('A',&w,&h,&a); - if(colskip) *colskip = w+2; // just an approximation -#endif } } } @@ -449,15 +411,10 @@ void ILI9225Display::drawString(uint8_t x, uint8_t y, const char *s, int16_t wid // Standard font if(findex<3) { DebugPrintf(DEBUG_DISPLAY, "Simple Text %s at %d,%d [%d]\n", s, x, y, width); -#ifdef ALT9225 // for gpx fonts and new library, cursor is at baseline!! int h = 6; if(findex>1) h=12; -#else - tft->setBackgroundColor(bg); - int h = tft->getFont().height; -#endif if( alignright ) { -#ifdef ALT9225 +#if 1 //w = tft->getTextWidth(s); /// TODO if( width==WIDTH_AUTO ) { width = w; } @@ -476,7 +433,6 @@ void ILI9225Display::drawString(uint8_t x, uint8_t y, const char *s, int16_t wid tft->drawText(x + width - w, y, s, fg); #endif } else { -#ifdef ALT9225 tft->setCursor(x, y); tft->setTextColor(fg, bg); tft->print(s); @@ -486,25 +442,14 @@ void ILI9225Display::drawString(uint8_t x, uint8_t y, const char *s, int16_t wid //if(curx < x + width) { // tft->fillRectangle(curx, y, x + width - 1, y + h - 1, bg); //} -#else - int curx = tft->drawText(x, y, s, fg); - if( width==WIDTH_AUTO ) { return; } - if(curx < x + width) { - tft->fillRectangle(curx, y, x + width - 1, y + h - 1, bg); - } -#endif } return; } // GFX font int16_t x1, y1; if(1||width==WIDTH_AUTO || alignright) { -#ifdef ALT9225 tft->getTextBounds(s, x, y + gfxoffsets[findex-3].yofs, &x1, &y1, (uint16_t *)&w, (uint16_t *)&h); w += x1 - x + 1; -#else - tft->getGFXTextExtent(s, x, y + gfxoffsets[findex-3].yofs, &w, &h); -#endif if(width==WIDTH_AUTO) { width=w; } if(alignright) { if(w > width) { @@ -530,7 +475,7 @@ void ILI9225Display::drawString(uint8_t x, uint8_t y, const char *s, int16_t wid } #else // Text by drawing bitmap.... => less "flicker" -#ifdef ALT9225 +#if 1 //TODO tft->setCursor( alignright? x+width-w : x, y + gfxoffsets[findex-3].yofs); tft->setTextColor( fg, bg ); @@ -571,7 +516,6 @@ void ILI9225Display::drawString(uint8_t x, uint8_t y, const char *s, int16_t wid } void ILI9225Display::drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { -#ifdef ALT9225 int i,j; tft->startWrite(); for(i=0; iendWrite(); -#else - tft->drawTile(x, y, cnt, tile_ptr); -#endif #if 0 int i,j; tft->startWrite(); @@ -609,19 +550,11 @@ void ILI9225Display::drawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_ } void ILI9225Display::drawBitmap(uint16_t x1, uint16_t y1, const uint16_t* bitmap, int16_t w, int16_t h) { -#ifdef ALT9225 tft->draw16bitRGBBitmap(x1, y1, bitmap, w, h); -#else - tft->drawBitmap(x1, y1, bitmap, w, h); -#endif } void ILI9225Display::welcome() { -#ifdef ALT9225 tft->fillScreen(0); -#else - tft->clear(); -#endif setFont(6); drawString(0, 0*22, version_name, WIDTH_AUTO, 0xff00); setFont(5); @@ -669,8 +602,9 @@ void ILI9225Display::drawQS(uint8_t x, uint8_t y, uint8_t len, uint8_t size, uin #define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr)) -#ifdef ALT9225 +#if 1 #else +// TO BE REMOVED void MY_ILI9225::drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { int i,j; startWrite(); @@ -731,8 +665,8 @@ RawDisplay *Display::rdis = NULL; //TODO: maybe merge with initFromFile later? void Display::init() { Serial.printf("disptype is %d\n",sonde.config.disptype); - if(sonde.config.disptype==1) { - rdis = new ILI9225Display(); + if(sonde.config.disptype==1 || sonde.config.disptype==3) { + rdis = new ILI9225Display(sonde.config.disptype); } else { rdis = new U8x8Display(sonde.config.disptype); } @@ -741,6 +675,8 @@ void Display::init() { delay(100); Serial.println("Display initialized"); rdis->clear(); + delay(3000); + Serial.println("Cleared"); } @@ -1086,7 +1022,7 @@ void Display::initFromFile(int index) { char text[61]; n=sscanf(s, "%f,%f,%f", &y, &x, &w); sscanf(ptr+1, "%60[^\r\n]", text); - if(sonde.config.disptype==1) { x*=xscale; y*=yscale; w*=xscale; } + if(sonde.config.disptype==1 || sonde.config.disptype==3) { x*=xscale; y*=yscale; w*=xscale; } newlayouts[idx].de[what].x = x; newlayouts[idx].de[what].y = y; newlayouts[idx].de[what].width = n>2 ? w : WIDTH_AUTO; @@ -1538,7 +1474,8 @@ void Display::drawGPS(DispEntry *de) { } Serial.printf("GPS0: %c%c%c N=%d, A=%d, B=%d\n", circinfo->top, circinfo->arr, circinfo->bul, angN, angA, angB); // "N" in direction angN -#ifdef ALT9225 +#if 1 + // TODO #else static_cast(rdis)->tft->drawGFXcharBM(x0 + circinfo->radius*sin(angN*PI/180)-6, y0 - circinfo->radius*cos(angN*PI/180)+7, 'N', 0xffff, bitmap, size, size); #endif diff --git a/libraries/SondeLib/Display.h b/libraries/SondeLib/Display.h index e35815f..5db50c6 100644 --- a/libraries/SondeLib/Display.h +++ b/libraries/SondeLib/Display.h @@ -1,5 +1,3 @@ -#define ALT9225 - #ifndef Display_h #define Display_h @@ -7,11 +5,7 @@ #define FONT_SMALL 0 #include -#ifdef ALT9225 #include -#else -#include -#endif #include #include @@ -81,12 +75,12 @@ public: class U8x8Display : public RawDisplay { private: U8X8 *u8x8 = NULL; // initialize later after reading config file - int _type; + uint8_t _type; const uint8_t **fontlist; int nfonts; public: - U8x8Display(int type = 0) { _type = type; } + U8x8Display(uint8_t type = 0) { _type = type; } void begin(); void clear(); void setFont(uint8_t fontindex); @@ -100,24 +94,17 @@ public: void drawQS(uint8_t x, uint8_t y, uint8_t len, uint8_t size, uint8_t *stat, uint16_t fg=0xffff, uint16_t bg=0); }; -#ifdef ALT9225 - typedef Arduino_GFX MY_ILI9225; -#else -class MY_ILI9225 : public TFT22_ILI9225 { - using TFT22_ILI9225::TFT22_ILI9225; -public: - uint16_t drawGFXChar(int16_t x, int16_t y, unsigned char c, uint16_t color); - void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr); -}; -#endif +typedef Arduino_GFX MY_ILI9225; class ILI9225Display : public RawDisplay { private: uint8_t yofs=0; uint8_t findex=0; + uint8_t _type; public: MY_ILI9225 *tft = NULL; // initialize later after reading config file + ILI9225Display(int type = 1) { _type = type; } void begin(); void clear(); void setFont(uint8_t fontindex);