From df727c8d04c803e12be5c8569400fb6ef1ab5ad6 Mon Sep 17 00:00:00 2001 From: nathan Date: Mon, 9 Sep 2019 01:17:40 -0500 Subject: [PATCH] new signal markings, new timing numbers for LatLon reception (doesn't seem to be working on dump1090 end though), basic plane velocity animation Former-commit-id: 0fead3636422b4fcc2bc0dee8a30a137de50d69b Former-commit-id: b6345e37645d23a82edbb99859c51c1ff207a5c9 --- draw.c | 78 ++++++++++++++++++++++++++++---------- draw.o.REMOVED.git-id | 2 +- font.o | Bin 36272 -> 36416 bytes init.o | Bin 45856 -> 45984 bytes input.o.REMOVED.git-id | 2 +- list.o | Bin 46784 -> 46920 bytes monokai.o | Bin 26272 -> 26416 bytes planeObj.c | 25 +++++++++--- planeObj.o | Bin 41424 -> 42880 bytes status.o.REMOVED.git-id | 2 +- structs.h | 3 ++ view1090.REMOVED.git-id | 2 +- view1090.o.REMOVED.git-id | 2 +- 13 files changed, 85 insertions(+), 31 deletions(-) diff --git a/draw.c b/draw.c index 564296b..889f381 100644 --- a/draw.c +++ b/draw.c @@ -250,7 +250,7 @@ void drawTrail(double *oldDx, double *oldDy, double *oldHeading, time_t * oldSee uint8_t colorVal = (uint8_t)floor(255.0 * age); - thickLineRGBA(appData.renderer, prevX, prevY, currentX, currentY, 4 * appData.screen_uiscale, colorVal, colorVal, colorVal, 127); + //thickLineRGBA(appData.renderer, prevX, prevY, currentX, currentY, 4 * appData.screen_uiscale, colorVal, colorVal, colorVal, 127); //tick marks @@ -268,7 +268,7 @@ void drawTrail(double *oldDx, double *oldDy, double *oldHeading, time_t * oldSee int x1, y1, x2, y2; - int cross_size = 8 * appData.screen_uiscale; + int cross_size = 5 * appData.screen_uiscale; //forward cross x1 = currentX + round(-cross_size*vec[0]); @@ -351,6 +351,7 @@ void drawGeography() { } void drawPlaneText(struct planeObj *p, int x, int y) { + drawStringBG(p->flight, x + 5, y + appData.mapFontHeight, appData.mapBoldFont, white, black); char alt[10] = " "; @@ -370,39 +371,59 @@ void drawPlaneText(struct planeObj *p, int x, int y) { drawStringBG(speed, x + 5, y + 3*appData.mapFontHeight, appData.mapFont, grey, black); } +void drawSignalMarks(struct planeObj *p, int x, int y) { + unsigned char * pSig = p->signalLevel; + unsigned int signalAverage = (pSig[0] + pSig[1] + pSig[2] + pSig[3] + + pSig[4] + pSig[5] + pSig[6] + pSig[7] + 3) >> 3; + + SDL_Color barColor = signalToColor(signalAverage); + + Uint8 seenFade = (Uint8) (255.0 - (mstime() - p->msSeen) / 4.0); + + circleRGBA(appData.renderer, x + 5 * appData.screen_uiscale, y + 10 * appData.screen_uiscale, 2 * appData.screen_uiscale, barColor.r, barColor.g, barColor.b, seenFade); + + seenFade = (Uint8) (255.0 - (mstime() - p->msSeenLatLon) / 4.0); + + hlineRGBA(appData.renderer, x + 10 * appData.screen_uiscale, x + 14 * appData.screen_uiscale, y + 10 * appData.screen_uiscale, barColor.r, barColor.g, barColor.b, seenFade); + vlineRGBA(appData.renderer, x + 12 * appData.screen_uiscale, y + 8 * appData.screen_uiscale, y + 12 * appData.screen_uiscale, barColor.r, barColor.g, barColor.b, seenFade); +} + void drawMap() { struct planeObj *p = planes; time_t now = time(NULL); - + SDL_Color planeColor; drawGeography(); drawGrid(); + //draw all trails first so they don't cover up planes and text + + while(p) { + if ((now - p->seen) < Modes.interactive_display_ttl) { + drawTrail(p->oldLon, p->oldLat, p->oldHeading, p->oldSeen, p->oldIdx); + } + p = p->next; + } + + p = planes; + while(p) { if ((now - p->seen) < Modes.interactive_display_ttl) { if (p->lon && p->lat) { - unsigned char * pSig = p->signalLevel; - unsigned int signalAverage = (pSig[0] + pSig[1] + pSig[2] + pSig[3] + - pSig[4] + pSig[5] + pSig[6] + pSig[7] + 3) >> 3; - drawTrail(p->oldLon, p->oldLat, p->oldHeading, p->oldSeen, p->oldIdx); - - int colorIdx; - if((int)(now - p->seen) > DISPLAY_ACTIVE) { - colorIdx = -1; - } else { - colorIdx = signalAverage; - } - - SDL_Color planeColor = signalToColor(colorIdx); int x, y; - //screenCoords(&x, &y, p->dx, p->dy); double dx, dy; pxFromLonLat(&dx, &dy, p->lon, p->lat); screenCoords(&x, &y, dx, dy); + if((int)(now - p->seen) > DISPLAY_ACTIVE) { + planeColor = grey; + } else { + planeColor = white; + } + if(outOfBounds(x,y)) { int outx, outy; drawPlaneOffMap(x, y, &outx, &outy, planeColor); @@ -419,11 +440,28 @@ void drawMap() { circleRGBA(appData.renderer, x, y, 500 - age_ms, 255,255, 255, (uint8_t)(255.0 * age_ms / 500.0)); } else { if(MODES_ACFLAGS_HEADING_VALID) { - drawPlaneHeading(x, y,p->track, planeColor); + int usex = x; + int usey = y; - drawPlaneText(p, x, y); + if(p->seenLatLon > p->oldSeen[p->oldIdx]) { + int oldx, oldy; + int idx = (p->oldIdx - 1) % TRAIL_LENGTH; - lineRGBA(appData.renderer, x, y, x, y + 4*appData.mapFontHeight, grey.r, grey.g, grey.b, SDL_ALPHA_OPAQUE); + pxFromLonLat(&dx, &dy, p->oldLon[idx], p->oldLat[idx]); + screenCoords(&oldx, &oldy, dx, dy); + + double velx = (x - oldx) / (1000.0 * (p->seenLatLon - p->oldSeen[idx])); + double vely = (y - oldy) / (1000.0 * (p->seenLatLon - p->oldSeen[idx])); + + usex = x + (mstime() - p->msSeenLatLon) * velx; + usey = y + (mstime() - p->msSeenLatLon) * vely; + } + + drawPlaneHeading(usex, usey, p->track, planeColor); + drawSignalMarks(p, usex, usey); + drawPlaneText(p, usex, usey); + lineRGBA(appData.renderer, usex, usey, usex, usey + 4*appData.mapFontHeight, grey.r, grey.g, grey.b, SDL_ALPHA_OPAQUE); + } else { drawPlane(x, y, planeColor); } diff --git a/draw.o.REMOVED.git-id b/draw.o.REMOVED.git-id index 001c031..d84e7d7 100644 --- a/draw.o.REMOVED.git-id +++ b/draw.o.REMOVED.git-id @@ -1 +1 @@ -fda1ba88522832395454de10738083bda8677b29 \ No newline at end of file +3329d96b9e8da09d38ac06e8cfcb2c9227d0593e \ No newline at end of file diff --git a/font.o b/font.o index 55e9ba8b912fbb37c021566ad47101eb298885e9..eb8e2e3577f2bdd21a00b071d8a63bc37253c0de 100644 GIT binary patch delta 9630 zcmZ{p3wTt;702)05J-?1HVK(rG+?xZAZ@qni-$m1DBw~wSxDp&6t)Nn0gP+HBOokW zo+boX{~szM#rSB8wuL1kwrVw?qKM)a->9%yKc)Bzv>??!&fR+kw^XAsv%J-8To8e=r^7M<7m3{X8C7qnY2)l5si&Gdm zg$fT`;1qtoo|>AT=@dpiOob{gjJ6B6WnO$!vbiyKX%VCA=8?9X3uCLPxwV-_w?C6O znC>$M(hZf1>7U(ivfRb!W;<F%LqKI0+76vc+Lqg6Iq!pTs6plD zm-H}<-nPSL_Pd#m^VXJ&i!R9PT1$81f_39+ZbjknC%ZX_1z&&F z@{i#MJGl&_<=Igu(yV;T@sy$`DbX$ zEeH@DM-gIQrOv~$oZ}ga7!*?TjlHs&-PFM~` zi0B-qsXV)S23pWeG?}%jx?9jo5hpsBa*%!H3pxYe zdW83JiJ&_Wov2)?-SOzepIR<9nlFqNqm7y<;0_{!Qkt4X-LvaWg3d*N=*yIR?d!LK z&O(G}J#Xz6L7NdHx{Oohvw~iV1koPc?<<0ygL|^F-b-`({aDal@DV+&9NH%6j}anT znD5Yk3px$WlRe(ftY&gh>1AHYTP|1V>tRk&)_UGTQw3cE?-Y;uID%yJd-i#wu*pJ{ z=o(HYI|Z#n>y&9`9ttWbKzRfIN7xKPfM`7@v^?H!+Vh(bA^H^et~aBmFC#{DD7QFH z)ZK(cg~yx*_f(G=fN!d@_OZo%!ZHgXvZ+He*=*#klEq0w_q7r6smk=@#MEilNbYf- zu<4E9P0HHLEvypsbwr77<3nM)pjl`o8s}uRUr;~VZW?2C=XCRppt%U#tgHvP-!42` z+Vi1^5FJO)FZPu!Xa!pkfYnk>J^d7jUDeE^(2MD?wKBCVv9VzHxgoqwz zS|Vs0nu!{`Ln{Q$M4adcJXe*1UJG-&vc_`VT0tknOSFnlJ(*0ir1!wfjZg_YfgEj_V#4^pA)U z&EaF=sG$3iAbKJ1-;;tKg8P?rcyLxZD`*5hqDwgzQ#h`*&zlkYrSdQ2+>$A1XU?BJ zgnk{b=|w`%K%DxTYd20;UqQcsIfEWMxbBsLZijb<$Gi(cvU!mE{e`gEg(%UzOeYHZ zSF{p6&UA*Lr_e^!#gCmef@Y!M7G>?`b83m8XAmHo&WGq4L02F`^j_Ze5cD0yhz{lX z*Lg+H|7s*|QT{@XipNAu8V zp})^(*%6^XjX3pH!mWKG=pLA}l=Wx!|Fob9c!_?@GxlFW&mu@Phv(!1jwU^0FC#ij zg$FZLg1R`8^QF$CxJ>9dtoIXo1-Ii7`V!|k2YoBu*8M#8YlTe#0+q@N@;)3R=rf2^ zD*s51vOA5Ud|rB z6*hG+XDjPfKC@Z`Jqs_<6P)p$74&xq5}m@4|B9eBh!P#dQTMi>|3E9zV;mVD3EF}- zqJ8*O`clvg6jUo~1E2oi2zoaH)ymw3+0|pr4-g~ECH&0Oo7dc~V7rxp1krxHj{OB4 z1@|0fJ<97cK+tF4BlZDI!?Z-ubdIZXp^xPe>DbhM_CuWd8p5?IMXk?Z z&Q;ba&Iz@GJ_+w!<^PDkmW2iF!XB;?`hA>58-;#7qSV)u9B=msx)iNMyYiYoB~rJaAah2N5Is2G8D6L0?3I=wOba zlmAEEw<_x^j*zp0&W4ZZ63#F>zv@+MLWt-#rkT7CG>xH|=suACSKCFHsXfe#&DI4=Q$J2s-1uxNyIG36{D>@z; z5hOZ`&;3k6-$az?Y5fX7&~0eFU3vR4?JsBw>sJW<0MctcRtfLNF@o+ypjKI%I6ssN z`V&NIJ!XHz$mR=vY7Ge+dV5ZE46k5V&8FK!|8pj_U1# zo*x>e9p z6x1tgCdcz`L9ao8=s$UM#{>-`Qm@Rt*j(?izT|k$;C-VI#^RknRM;$r zZ?UrUOSp1D{Rk0#kk6WVf}TM0Vim6A-d71ak3HWm^y8dub_;z2&+}fPM>%c}3H>Xl z95&t;V7fhix=slFZ9d4)2z>^JW(tSBp1x~%%XJrenA^`!>J(qPLJBt&LS%{ZFXd|X zJN7$l(&WcKCjYop{Ma! zIFn-G9d7HausOyP^lvoZq5L`g%}US4Mvk~%?R0h`IT8JZ-pF%AFOQc}o^40%h7NFa zjDeS^{uxR4wVFM-5kaCAqV95@$(e`}trj$m%k)Nasq)tgTF241R_MKW-tKCr+oRjX z^R@*A%arwmpr0~*3V~%RHEvV1t;sfzBeG2SP0m$z#Mp+f^3OAt(ErBz5TSp@dKnVb z_gq2s&pGvQhn3aDRL|f;JimaC=%a$_wR{{QqOI*{a?G4XUqds|!|iDMmHPm3qQ?c* zD@WfLmMg1GP`x(az`I<94gT(>eb#G}DRjLyRy*DHQ@^3UlyyDN`8;n!h5d_snvZaF z>|gFqon+r9*K9W0$YcHfQ@8aoVf%Uj1rd6d7Cm+1o{k_8QQ^~qYCrV5P2J{ju5}@w zGJ5^5ekg&L!y;;&u zw`YAA=lkXDbUQ9|K5uBJ+xA=8enUIGeH?9e^sHpswJW^E6&^(VSIT;(T{WAYV@ki! zu29xHOzo-S)ulT+E8tzB!fBj5^+d9(C-%dhrDL@b)at(`ZznZ=z55ByZ`e`puwY}LIscb zj~(c{h5iVa|I~s0+;@7f*ZCC`9T0)^v#@a@< zB2)-}x2n|>)ERIaBBDnHH7bguFy?q<700R|iwe=>ab=wE<$aG+zp?im(s%#A@2=my z-@VD>^@knX9&&8#@7T5`a(TT&-@JW`qtk^+%hHsmGq$B?_2}%>w9cs-C3R&6K1`q1 zkiEdaSX0-$&`HzAWiP0{jh~Awqx?QpVA{or0;A05?9NukYi161u`;8tq|5`|tju+H zQ&rQ_tjzU~Q>KzL1yxkfJkE^0p2{ptYtXvCOlk&YdJLzBG_89+{V{7#oUie87RyuqV7GK)o-AKxSewOLBD)-Mu*)^ zT1F-O$Wgs=&ED3L_j`Gm>;clUkPYuoiuba$J|(etoRU8JwTDV0Z) znUU@JU7roR&)we0?6A+tcT-Q>GVw^Z(bsI@yaQS&Lo=y+G;M%ck>h65;hlPK|2TVY z+V=7NyJn+e)QhMdkhOh;_x;Y>Q^uS~(X$XQR7Q~36}6g3UFows{d*Oz8^#(3$cbjU z+WMo}v?qc$DB~V-l$m_ipYyZ;5uyjPEqSV-m!gemZ)M5z1w8|2k)jF8D{}h^&E_a= zvi_W}|Hq3gp;hP~^tOa8LO+ghkuvlymi&&OQxPk2>vuyhR)&LoX{H~nKj&Lq01weu z5*vlKvu>=@!i>$!#kK?lH9N-Lc82%|$WM z9Tcj~v`Elu1WVoeUPMZjFWAGfc~IE=+}YBf5PChg_?*y}!Z}6hFCcGh!K67w|zJ6g*_)e=u?$(QQ|b9vqaD#@DTNIyO#-C2|v+t z_NH6VB7}%u%{$m9=uSkZs$Q+!?kqw7n}%?+i0lY-N<#zug=!XapeTw^h zTF|c$Cfb*S^ACb{L2SCxr{Uyuw_&?IEy-GDwu9^8DO1LpZkAdk=oIa&W+;6$M$8ziry@8* z8EJe->FgQ1CoPB&9mceWpap0nI+>{<=qxxZl(C3uUqOTL65YtuBj}?D5Pg>EwSw+K zn5cP4GLuixBZyTf-zlc0g8sz%jY3c1u;mx}et0UCaV66#L9c_K=p?3fg8C66x{&EA zK^qVydN$zJDBbebTfi}<$ITDRM1~}cf2F? z54k6Mg-&aL+WH6Y$3uelfODoYUgwx|Owcay65V6(WkF{nKy)Twz0V0+i!jkme1xZR zM6}oKLd1yv#yd1qP%rdZ%1Gwj=Mr=dJVd|b2slvCf$+~#`exM4avSUTid`UV9zv9A zc#3JUpsyfK^gX6G33>#s*~)jC>3l(dVZB=D-S~K0BJ}$ZoK5FcjE*cYMY=}z(aH!`~7P{x5H2LFw>s|{RAPRXL-Cyd`j5stp}n+pG$FN6^o?)MY~dp7lJTPe$=vx(qQLDrh}|M0;_>_X2ol}G5i%<1azu#U z$9KEEf-1BTeTdK5LxS#r^ENs+`JR7F&>`>=eT{cYT+ovU5FO8RbxzQ7go)n9G?m-8 zS6w4wL^m#; zCpF)12MhWpifi2ZI0VUNE64moVN;7pjnez!-5R&ihrM}=u=x_s#mbn)H;rY2j)Iry zWL_t$1$_(wqD#5vdjuVZFwt`M=4L@VAx88x-xBOQg*|TcSe*aY1-^=mgxX{;Fvw{1UVMDX8-;sEYESA@5(2b-Qu}ibgdnu zuSan${j$RDaSNl~2-doFKO*#*jW+t+59d-heX;Z|r9*-PL0FWcpCO1U4q7h>T8S{x zWDYReHrzZzfS1fzCEPf@DTlhC%_PN1pGuV;Xv;Zv>KshZv6G&64+z~}UXKfXCdZ73&_Ciy-zoGI z9?Kp}N0)l15fe61zI_~kr(XHK5p*q|6hF4pxf6+rNaCvog(%T}g3jfhT!A>zp@P=&Oy=pSo z+h1(ym>P5@4K|+>KD!RVApO3?W$e0+5jGRu?TNMu+L>G0fwrKc*D$W2@*fs9quAyI z>$Zo+v4_5q_Ev*h65o_;dwa*EA#kS}n!(iW=Xfr4xhS=VeVO>h5_)sbh6%!AD)*zb zoo>$VNDk9w?R3-sdpJtYZl{~}t!zKPo!)-E)L43Y;*F%(>#DNztbBu%?5?P1Ddv(8<^CA zUMBQ^@&IOZpwAI{Pjg97``Y|J0;De#`T=&;;tupWp%<77iIV-w(sre-uOxf3{qruE z%p-0R71{a*p+CZTbf7;d^tZS}b~)-$a^hEXUD}HpZaoN ztK?z$*Iz|%z+2YmJ6 diff --git a/init.o b/init.o index 8b08a1a50ece11a6a64b176ec9b019b278a7ffab..824f2eb848152d6b3e8862e6e1e96a35924a4be3 100644 GIT binary patch delta 9671 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 delta 9632 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 diff --git a/input.o.REMOVED.git-id b/input.o.REMOVED.git-id index b448a08..a79dc82 100644 --- a/input.o.REMOVED.git-id +++ b/input.o.REMOVED.git-id @@ -1 +1 @@ -ec05e242afe12d9af07fceff41a9689f66237a76 \ No newline at end of file +2c4ed2ab46ef6a542479d8c3c9ea7de7298325c1 \ No newline at end of file diff --git a/list.o b/list.o index a96d73cee3e59dce1065cdfa056bd61feb7cb2c3..e3a4518ca6cacd90b14d5e2af7ebc9d790e8097d 100644 GIT binary patch delta 10207 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 BH@^S? delta 10165 zcma)?3v?7!wubA(ARs8Tf`=m@Y2Fc~XkZXTi48~_K!+X#!JyFGs{{=~D29p_%TK899C&`~tZpm0a!?n>=)itQTL)LK-k_V@37 z_IcK+Y7U*udF88|m0guplRqq1ZK|D-d!1=8vsv3vf9!2Lr@U23Y`WF<`fDu9y17-! z)cg5*#6@JV+7|S`!m`G+slUF_xo(x~-h`c-_Zzx51BcPgx+d<;pg%VtmuBwGVCzE5 zn!qsy`cMy~zWPO;71>k-a%3->zeXa=@&Z+`PpBg@L;Vn&vpS4>mK z>6DjId3|0vuJlUv;T5%O+67h4xjY=mo2XWzb#PeGxjf6dAX!!3og6LIxmnP;eU@*# zxO6k$c6D!elwVaZzQMV54%avA(w!_G*beF7)v6s%2JQYfh4mk*=r3(8D>RDDp`qSI z0blg=)DtnLeOF~8(Z1!lHdp?lkJaO6#f(_+%PziRPPNZ3@cZ}W4AiwJ{_PldbjbgC zReKL__ls%!a(Jo3zsMo9_ur1uxnt)yBX?i;xGHeT*@xtfUo?o_DmKwjsTYFurf&PQ}@n*krSSylAK z=5LCcs0&edk5>KAc+z;&hkC?0u6O^`&!lE_-3WamTzHqz09n#phO?7w zbrAW*wrNMr;~cBqKR-o_BVMd?zHNp_i@Te5Io$7rXeBbm+WgSUHGeE~AxROUNRy@uYsL!A)2Ji5idxk<9u%}Sg7<25 z4E^qnsF6tAtIhWIt}-o@tx!Ws3x`SB41xQ!DWh5H9L;jvzh2H22os&pG+)rgh!b7L zbdaE%kh(8oKDgYCm=N?6s1j{jUgpwDLBB$%#8y)fE765j+SQyEnjbH9?EzkVy`1l& zwb?n^2zv$6CHjg>xWt}1^`GMQ2x1ful9*CI!+?#g_dMjcNXj9SIjW|Ql{YVl$!x>fz8bqJl|~I|c5@5Q6PhftMBlpDjk`wB;|NT* z)eQ(w*T(RQ_?plhM4adYd2WP{1Ra7D(L1?zrv)924AB@*`-^E0;~ZWOj)$6|O(X7? zPJ&*7&+vK@k&Qf)eOwpR=K7P1uQRRqek8Oi;X6q(BhTp1g}r4*H|KAKeG1gfhcM-G<38L3rzd>cWZKm)V z-k7yseLEscngcjXnohhKV*hWE;i)eTAku(iEW`)4_svM;*}{n2r#1ID(6{DPlTK(0dUj zI*Vzspi7V-x|Zp5LARlX=suP5XEV0#AWJ%M37vDz~ zI)Wp7BWNX3L^pJBm+bEatwCmmrUCl-3fqJ@ehcnxFT)~)Rz}QRek5Ei=wnE()TSTr zSo;b(3TdKorh^4tj=Gh$dJ(~-EyTVL#0elKX|-{XA<~(}lgY zQ%%dl{$#*(cdxAlLK8+dsm*OnmkBxvfmPbfX1Y$$

kq&+i9Y1f^Z=DqD?0iZr8n zk$ORBnjy1F)1LkFRS|UrA=v6t#GuWyJh#6T`cfo`j^>^|BWM z?m!*Uemq*53;G&@t8H~1qIA9iiPhT7p5`CF{hYOlPV2w7# zJl@6#x)|X#wi<>woj*ltjU772E&q^EzRUI{!u}%E;}O$=w@1~2-iX-a+T6}->@$LX zf+W!q?0ev6G);6e(^m!Ui#no*xozJO^mYW-YIBMofFBAv8BwC|@C-d6=+j87)wG^h zu8q)EDNEN!adxe3T5(yec=UO_T!!#Et=_}fbrD5tI9-p$^XqKWmPf@cLcbTP(pC>4 zRH;=96jnymd?YKi3G#?tEc9<9T^TV=@@PQOkrMQJ1lMcRlUsPVpmm56UCP!M1zm^4 zdYyCbN~~Ys-IVeWKO#i6$Wn-YyyZSF=r9B}IFHHv4YnD|JLmwvpm+_`4{_2gLIr7F zTdDH22~24H4Rphc?o;UEYI?7Rud-5iQQEZw>1nK_?@*(N?t6q4P1+(Rmqy zPdKl!Q9Az>2|C}7nkRH&A8zhOTr)4*zw>Pc;W#jjC&1RabJ(Jj1$9TIdHVnk=K^{Ajx zB#BjZrO z*=ije!eeWXpo4g#zK2jso1=oR=2ra*v6L?VKS59O!q<>D3|`L1xSlP9{TluR85H)u z+&R>Wdi{ zF@NC4>pY*H_e}L(4wjhf8;IofA;q8(y=5dzzE{yjeGc%5ahxUkbVpRJco z;o(~!VX;uG;>KIyvpeN|$>pu~*`1OW^5ClS*&TgX@)^<5~JQVPC`Bh8(ZgD5jI!E!;d!T|3^` z9w-b5%@6!zL7uSB<*{uGdo@p&ehBW+W`LmI^16F-J-tOx?+1muk=UUNr~0VV&L??^ zobIzbwOGsj=>00|jl!-M5TxS~WGRysJ};-*)9RUJRUz;c{W9#MPFat#?;eDo(uMn& zIvrh~1ZVPr&+b&L0muBpXLqCrc!V@Sipsi#mvk@Bvs{)&hG>wfSJo&lD`VT6bd6%noq#sm9w}m(#vzPG20Qf6kGM=x?>Tm{%~beRgtLmm@*6HB+yBEN;Dls395^v^mof zWQooYk%#kWoR7dW^odCL_F>}+?H!P!vTn|+udwCO z15BqNLo_L<_l(&AwUb@}1s&&xvS{B#)Z3eSk+U4R2Vy&QY;@2SJ8kRCouN$sL)iE8 zN-{~<-{(;=Mc6(4T-5D!{v!&VLyrhenD>24|Al=OqPw(uy#D+I5_FxSbAgK2rgx3c zQR`}hHE*b#Z9#;)wZyq+gN>Km<5p$~@@ubES0GkfpavmD=jO=LIS0YL1v%BbFmdky z)f1_`1!^F&WO`>8+V2~1(Wc(6f3|ad$nt$b`k^SbuR!famd^CE^m7F{C&>M|0jd>J Q&lRXK$kN$DaDSKo2beq#d;kCd diff --git a/monokai.o b/monokai.o index 529c7467ceb7fa30c5cb7945c8b135b2754143f3..2a29f3289fa641189a9ace4d3629e95d05886adb 100644 GIT binary patch delta 7180 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 D;`$UI delta 7095 zcmZA5dvp}l9S884fRI2!SQ5Dmq9!~PQ9G)*j$UVG$IO9tqKcNAVEF7b>zI^vJ1Vg0`SlN=~D#NNs<+^IgpO?H}2l-{*Jl z+_|rr$(|$j)(`FV1Jkz7iw+uZk8X&p$hv4nc8-4~&Sdq>TG`FAI%Zh%$r(})U$@HI z-ZkN6R?f&+2g{n!yJpE^{+{L~6>XFPm6s$76eoW7>gXK=5(l4k_7288F9#dCdIvYI zl&UJTy@Rpq=%k<`okT{=kW$+M(-%j%S#sMI^-^ka=jvS01gxV~qvo@gF)G2Xpq zTjSl=cDkr>)pa{NI3rA=fMxl-FRP1uCn`LSK!LG`psK)irVy`IIYSXEFwT$E5lY`i zT=eIjUbsZ*5ZJ?vGwEV4T&46l{KJgB0>NQ!@S)`OS=MTm^OfTTo>1`Dt;PG za>n{jUU;9u^CO6l(q5&ct|r<;_{Lu`bxXW^9*uH&%h zkEonYunUb-!TL`t&49nqU~pl&FOBC&wb~#oGFPOJk}-%D8haa_FLa$px_T{}sB#vf zRnD5u*)~t<2ISvhoKc(&&no>RLZbg-zrU_D7j>dtIZK+Ao)^$n;u1Sm`?mh<=;vX^GM;h={IEE<4Mbtuz<0k**y@Tyi$E{s&dge%Pao zbBOhCRvLqUl(9cTaFlDG!OBst^D<}E36(hpO;S$<&+@I(N6;#IKF7O?AC<00{%GS2 zPVN|%mDbVAO7+h@2#KEKHFi__DC$I4a_o95Ek%RqD6Z8ZNr~R66aCYzf|cQv`E?AZ25gkAA)a;ah~G-_=wW&2#7XP|Df~@L`37% ztxB5_8)Jh1r0!Pw3*&oLJd5*rzl!&PeWP)%rXEsS2)}5MdQ@p8!lH5RHlHh9gQzH2 z_O#M%XcBFpwkbV`R?&~B7I&l6xST-#SmS(8%~bjqghb!sy|$Oqov0H%MeVQj1R6v; zvJVF<{T?l%F}8K2(xLE;GtP6Yd4kgS5fJ@1_uMk2*@%oY!S}ho<|_R;wW3wLFK2U& zirHd%Ua~&iOS;`@%0;#xY&5bP&R#n|TL$TImi%MT=Q>r_v>88t>X$ z(JDE6cy~LfatlM7wi`{90)q8cIy?N$yc+m7YyL;#$^^ zDt>_Z=T&?hd=re*nPZ*KCxq1etVclfb(YCh`U4`O&D;<3lzxSnsLMXQM(G;FMNjj2 zWw_GWu!F`~%%{4sO0R=o^iy8xG^K3_iw0SCmeMy74Z8OCXp)>VUiC7SQ;k;92dJx* zzKQ&avL8|(S9&EvqUU>i`|k#&-B2g`0B7uWrOVME`WRcjN9i`Sh@NEhHKn`Yn`E3T zILhxT%|$?TKp(GF$CMTzBHDv(ZdN)KG0}e1@07lT_@s6A=Lk=h=U1-cKAaJ$S@ad6 zlZ|~G&rf!p+c}qpsGK{|DmDC-TCDUod*{xN@fmR2XL|-$eedaw-rJ zE$5iFDIJZN=y68V*vE;(#H9{Jyu#S6_@=^jnz(OVrgHkhUum4_sac_PIl`htsf9}4 zK~%JrZ7Wy$8#Gm#;Jw^M!%F|b`|=_cFW`Frt%_fZ{3>~uw34q8O}v*vQ8 zGvS+U>@RWEY}fgcb8NNBS%!$@j6}WUOkh2GRnADnXPaOfd+e~%bBuqg;{A9>JE`J# zz<-OWeTplt2d_JIz4N&TUZ&zZxWinn;;T5HhpYIXxu1+v@u;^Fud_-OtmX2aqvCtG zbZZcpW1NFZiPi^*%rUiJD1DVf{f&xuV3+)$;#0k6Y0GBgQ=RfN9}Tlq{6j7t$BPfT z@C>z!eSd{2(3Kz30a*?{q?)SA>PY?sdmzhwSQmA{zxoJH;Oxs;Om zOTGAv3(Y;l{^x*F zEK2)N7!wzcwu@1}u&7HW>pXoaK3-Um*5*f->d|R=@)AA2C+1cUlrr_zMRq#gt1imu NKF_Oj9isCu|3BmK{>lIV diff --git a/planeObj.c b/planeObj.c index c8f518c..6380a15 100644 --- a/planeObj.c +++ b/planeObj.c @@ -1,6 +1,16 @@ #include "structs.h" #include "dump1090.h" +static uint64_t mstime(void) { + struct timeval tv; + uint64_t mst; + + gettimeofday(&tv, NULL); + mst = ((uint64_t)tv.tv_sec)*1000; + mst += tv.tv_usec/1000; + return mst; +} + struct planeObj *findPlaneObj(uint32_t addr) { struct planeObj *p = planes; @@ -57,12 +67,12 @@ void updatePlanes() { } p->seen = a->seen; + p->msSeen = mstime(); if((p->seen - p->prev_seen) > 0) { p->messageRate = 1.0 / (double)(p->seen - p->prev_seen); } - memcpy(p->flight, a->flight, sizeof(p->flight)); memcpy(p->signalLevel, a->signalLevel, sizeof(p->signalLevel)); @@ -70,11 +80,12 @@ void updatePlanes() { p->speed = a->speed; p->track = a->track; p->vert_rate = a->vert_rate; - p->lon = a->lon; - p->lat = a->lat; - - if(time(NULL) - p->oldSeen[p->oldIdx] > TRAIL_TTL_STEP) { + p->lon = a->lon; + p->lat = a->lat; + if(p->seenLatLon < a->seenLatLon) { + p->msSeenLatLon = mstime(); + p->oldIdx = (p->oldIdx+1) % 32; p->oldLon[p->oldIdx] = p->lon; @@ -82,8 +93,10 @@ void updatePlanes() { p->oldHeading[p->oldIdx] = p->track; - p->oldSeen[p->oldIdx] = p->seen; + p->oldSeen[p->oldIdx] = p->seenLatLon; } + + p->seenLatLon = a->seenLatLon; a = a->next; } diff --git a/planeObj.o b/planeObj.o index 0b63cf4d9b575fe3b63c2e79bb71cd34645ccbc2..56be23f6d059cd68c3936608cad125ba67305ca7 100644 GIT binary patch literal 42880 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±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 Q%YTU5|8gRyO33{G3zF>jg#Z8m diff --git a/status.o.REMOVED.git-id b/status.o.REMOVED.git-id index f8fd904..ca6393a 100644 --- a/status.o.REMOVED.git-id +++ b/status.o.REMOVED.git-id @@ -1 +1 @@ -7626e2885663816ca0afea4b99f4464dbaa595f7 \ No newline at end of file +e28b70359d329c69b61d0da196a74552ba4f6f8f \ No newline at end of file diff --git a/structs.h b/structs.h index 2f3be7f..93da617 100644 --- a/structs.h +++ b/structs.h @@ -56,6 +56,7 @@ struct planeObj { int track; // Angle of flight int vert_rate; // Vertical rate. time_t seen; // Time at which the last packet was received + time_t seenLatLon; // Time at which the last packet was received time_t prev_seen; double lat, lon; // Coordinated obtained from CPR encoded data @@ -66,6 +67,8 @@ struct planeObj { time_t oldSeen[TRAIL_LENGTH]; uint8_t oldIdx; uint64_t created; + uint64_t msSeen; + uint64_t msSeenLatLon; int live; struct planeObj *next; // Next aircraft in our linked list diff --git a/view1090.REMOVED.git-id b/view1090.REMOVED.git-id index f0478ea..d5f630d 100644 --- a/view1090.REMOVED.git-id +++ b/view1090.REMOVED.git-id @@ -1 +1 @@ -68fb7031fcec17eff186d2abd88b6bf9f0726707 \ No newline at end of file +ae65e041076e061971bc7b3d686bee6c5f471abd \ No newline at end of file diff --git a/view1090.o.REMOVED.git-id b/view1090.o.REMOVED.git-id index 66035d0..75ee653 100644 --- a/view1090.o.REMOVED.git-id +++ b/view1090.o.REMOVED.git-id @@ -1 +1 @@ -56d4666551743e2bb5da41ccce658ff2be58cdf2 \ No newline at end of file +566004a350fc256a0bc6ab112a14b09c91e6cc18 \ No newline at end of file