From 200ad04660f29e553abdc71d41a47485849df4dd Mon Sep 17 00:00:00 2001 From: "romoloman@github.com" <> Date: Tue, 24 Dec 2013 12:58:45 +0100 Subject: [PATCH 1/4] KML support for logs (almost finished) --- companion/src/companion9x.qrc | 1 + companion/src/images/maps.png | Bin 0 -> 13924 bytes companion/src/logsdialog.cpp | 86 +++- companion/src/logsdialog.h | 1 + companion/src/logsdialog.ui | 113 ++++-- companion/src/preferencesdialog.cpp | 26 +- companion/src/preferencesdialog.h | 1 + companion/src/preferencesdialog.ui | 601 +++++++++++++++------------- 8 files changed, 499 insertions(+), 330 deletions(-) create mode 100644 companion/src/images/maps.png diff --git a/companion/src/companion9x.qrc b/companion/src/companion9x.qrc index 103a05dee..2000e4e15 100644 --- a/companion/src/companion9x.qrc +++ b/companion/src/companion9x.qrc @@ -64,6 +64,7 @@ images/duplicate.png images/fuses.png images/list.png + images/maps.png images/play.png images/stop.png images/read_eeprom_file.png diff --git a/companion/src/images/maps.png b/companion/src/images/maps.png new file mode 100644 index 0000000000000000000000000000000000000000..852742cb87bb21b459e2cbf71d14487184e120dc GIT binary patch literal 13924 zcmV-qHk-+bP)%$S(a?+Nl(&y@4h?zhI7u|d#(OspL->PO&~V+)vb5$8_qrF z?7i3euJ8A|mUOeZnJUFakN}p!6cI3k(=P$es$KVa>GbC+JutMB=0 z-ukuQz?XmdOIgfXKK|5-$Dc?%@UcTuzeP^4*&KteNoip0SLD=FQo=NWCPWM`0V{@C z=IG!GJ6kg{0+ZAJ7P2E z+?j3edST(EublJD6A$yAU;Z^d^#1qq)Tci}SzX1I0i?l1aP;+=ai9Ndl;?f}$jKi@ zaDa{kO8sL_emnh;KXO4iz0&7-W3FDtn?nI>7F@jJb-eW(-p;pu%b(}A7v90qMtJhc zV;+8d%|o9ArKR6whScL+L359eJ*(vrW|=gs8OI(|MRmkECAfyItzDMuC26_G>hK1a zo_8A|b{sD^fTx}BP^Qhhy|c~GCrVNJevLSXNJMzL z5`EyQE1zN<2NsKt%#QUH>29;@-|0jO@v1?$!bJx**<^oUOe10eOv;KDh0+7Kq>|A^WZ~Urn z;k&=@J9*{ZFJbSQfe-w_0oR`%c;u6ZTzP7Z1V^`MnRgL2MG(*>WmwU#pJuiYHXFxs zof!HRY3!l&TsYGp;%V9~pdo9EH4zzwpnv^2i6E z93s@~Qxnz~AU6Kt4_DJFU?Ng)_VfCX&pfFjAc|Me>H2PV3wPc7P5kKJ|0}%ui|^*C zr{NQqpXMVUzsBWHujyAx6Sq(`wiX?2>+nulZ`KUMiebG*$0vBn%Od;xp6gdVhpUmk zzlOJw-K~~ay!`n*`q)**94YGP`yTH+h$py+bB?{e>n!FS!#JX*poVjSIGZu+wlL?= zVpys7UBoCTs1SSvaX9ZNS`Y;917;B843QQWXT-%W7Pgts&T#u}9j|_Q;KKG*{^ig9 z9Pj;wpXGS}5%2>Pna+g$p?CO&S&J{=0*C3+_MBUcAc}b5-1G0|>)!qYyz_5;BYofS zk^5GB;*p+@{=s#|lG$!&Xi>Vx5hKI~QrfUQIHK>DjKfHbnU}siaqY={4i0xYI@~af zM_jyl&doR9%)$PO)p7udzwy2g z^7H@0&v5zU@1bn2g4lE}!gHc+eomx)r%Ty5*ysIZ9gvfHaWNT}ikT=;I_5XMkZ=0#AL4u8 z`JG(7?s?B|7e4jaiskAGN@mt>abaghG*8kM*Y~c{ua8m7NP$_~5w-=VGc>R9ZpGn# z&))un+;r0`C~1S`o>Gk1ZLt~(E<`+3q^;#NOvM;kZ#K;5b5!Br@CYpwn0#2R{IIH05KNpi=p~GqDGLLPWj*NnM}aGyWX6-1SC& z=v_azv1kzK z8Tw;1Cu}U-*uTu)^+&jP?!}ZT1mhaSbre;+H%t}LjFx(m+hzs`!_d=p9Y=>p?Ck8K z8FCpw6S*Y3XsuAiaHdEx)H2a~$~fRf8S_9c^;G4QQ7f1}n?0QmOJ4f|zT&N4!IM{et~_}eE2}BZ$>*JmMdVMr!0wO!&=!&l%jqfh(^nHpGsErN&e#5>zsZmPbz zj{~Nl9I;pw^5`&iheS@k}%19}>Mjla^*gdO-U&cVnl$H zMl_C$%NY+}_PpVZxAK}V`yxK{d!J@=@FYgPj~YS$bX3%zG6$aoi&Duii8NP3aph?53gh}Jl9zNbaq-ekxR_b54zQB(&d90f@Nf^)%+~e}A$Wop zN*Y;jR;1LEi()E>4|o?)Q;Hf*+fgi$b0%vhjXm32a~7TB;(5>U(G_MpJ=9*JjcfeoISfs$^&T_0HfqgDTC3~&6r7V<)0*OahvEpK1&pCzv+5Ij2Mx!| zj?nhFFfy*1$~d{YHQVSpIKF}Rp2cF$rr%&%uPK0OA&;9{GNn|xT>&S;I1Yf|ox@3u z0F{TTESZYOO(cjF#o=*2V&bQW;R&WtMnng!R0T{+hT<5@9xi5%4rg4xEZqC*JGu7_ zuj0cW`WWl|t3a9#ng0`?;s3}2%V!{GCvK|JgfPE@zxa-Szz_fZzskRPPvYS}=oyb5 zBX15V=?Ld~y!Y(xUZM$^VYwpfnzn(qjpVTqop5-t$8xz(pK5tw6iONip&_^yl>#C- zgx~`qG&mo?c~rm&wA~En1H({gV#9oEhxIy=(l$qjOPu$J_h>0(tD)2T79U&I>zFdt{rsEv20nVd7W z98PKuHZz(StEwwhMJo8u5L>*jic#MW%;qy@i;k2Btc;Xg^KUnsgM=zsI*+N`541AyybHInyL|?8g)#LE{fJ}a%-JU}M)t35=+^@!)iS|U z$X<{p;KdPLpdsMQ;iIGNI@&feo6YIkmTuOuy;#t7Ex`*SMot6k&59xQ^!cc241J9GA~U&p&hDVbT@f*8X%P_*D=G6HD9`^scFtI0{to+S|+lw1%Ou<7KA z_$jqi)NNK+uU8aJ#Kx0`)w9xqtKqz;5xjtAq7zgzDGjJ5##Bzoc8 z`SUDxwlQ1bOQEd6mBfV$`^;u5_HJx(Jk;HpO{ee|XiY$sc2;w1Gi!-$!>sdkvj*pd zZq`sVu{=KD=-@i*$wFwk)0q6Zxw!zkXjyR8rJAI*MrRH-pJc3ed-*MQ`5B(Gs z3L!S+Vy9^@=MAETt_@hpsAh8M$zt?F$5YF|H+}WXc;?W!{NP6^`M8GqDHwk)=Ie7T zu>FyLCIrskaSwm@r+%8j-NLWFZ(zB9owB}4NgKKbZoc_>EEe1NE+MfxNZN(6^StZ$ zvrDcWzkt0VGkT#kfp&L>TSU6EJ8*8!Y8{TA!D!lrqWPUWhSNl?P$7UgIXQBE$%IQc9?%DKEMz7EG#G*Tfp4C$_;mhn7s& zHWY)Dlw7L4N41_{)lyM3t}4AH*Nr0JC4iHu&=IdBH#Lr_wdn=KhCws9|9RCKhEcp8UMsorDw5oD}U*4{a3u~i{HdAy|1u;ZAChM zhI2dne9@g(IWxP?^Uf;X9;9=7b)lL^nQ=d7y3At_v^;Tn4|1kII7Ct+ua7C4W7hlo z%tv8U5_a<$hV8&+y=FEPz~g;G)3!MAXx2$>IxS^Cn)=X?>#1QHG6)^^4Y)}(44LB$C{f3e=hE`{X<{A)Poal!7wQ^D>)!I3R zSj(hhI9J&=o3@Q}Rir=y6r1ut;3_*-#)9*a?X4X)!++j_Q zzi}VOH=cM775dpwldlW>ISGwP1hjUWFa5e7eu?Ug5RN&z{!xa(apU-AEjEtfJzn8b zX6xJz<029QjQxs6M_Qk8^oS&Ows+W?wd{0}tx0U9pK9{@96HkopWAg45C)1{@Pb#ql^=T75Ai$q1s;7oVYbhO9nT#XcR-#d&UWzb z9EVpO^KHoa8PE}rBW1&a(#?0!GLSb1q}35dBBve`<9P4Wv`vGl(RCeJGy9*~P$+09 zu+?D#*B*KZSsmeQq-|z&^DSaGXWnhm`HnFaiVHa4%!OMB&76XAaBu@3V0Ggvi*}m} z=N6Q3mM5?Er!NG7lzV(==(+`czd;0Y&ZmepC#9RU^qUQ{g~Lmrlo}?ztD=Ya=O#KK zcu&E|X~dgUV#E81|E>#O>d~+65lxUcESLM7Id>B>I{I-#Y4%z74Q~H7-uIruH@)pk zc*EPihxh*ce}|@h>Q*SHKiU3c7Ou+0D!Uh7$&dZa|4w-RYxwQoO6)zo&-q2*+@hsl zJ<59ZG~PvK-Feol>l__?lIP#lVMS@$hA|6IUsn!}Rvg^eqhDSlk88$pU9q1goOkq_ z^|K+&l$@0iJkAU4{4DIAXX}=m7!Qv~SFe+EVzW7fv_^+xVl)&Xh8c|yj0#C2B1(`z zKdjkW>@o|Hd%pAqJn+d4$Lj@1CWxYGKuwt~=ESg|-}H=Wm>8)l76fOE<3RA9w(A&j zsvt|1oD>%V;%oR0K2Emd8YP@%tSBO`T6`u##K(3bbv#lMPL$ZpQ3;r9IDh75HiJi- zNSyD`w70W+?uESW9_8+rZ+O@DzLU%M{|e@oI6V<IXB{=#?g zqSxNbzkA=B2R6qy z7|VvXYw$7FKvD|cI~H5JRrZS!36;obV!-+lA7_*yvi#H@sTG=AZ^h-2?eP+REDXoT zlWeI_1}u+sz9G6exeNpIUB|pRhhyOCUZL;jhy>IMITwO+q+z6A9g|`OYSl0RAyh;T zj;?JP#|`6HX~lB zFvEvASfGh5hTxkyp)?3AraG|-0i~kkJR-i{yIGYJwJ6Rxw2X*A2m!1{ zo04<2DVf7LN2$dxrdn~dKrzL1I?g^~&f%!)SQ7(n3={>^jE)1{tV5&$-vY3;-7pS1 z@!ARJA~{8_E?fS>n=bI=wPPOpgZt33I$c=#j56sD<1cYEi`#g|kNhLOU*WqG@oYN@=O|q&(oo)-}#)ztt%ZLDNGppfQ6{HIPs#-<=lN>v3iZqTmUpZ&9sy%DT z1YgTIajr^(&f`Ov5V$9e133-g{Au*8NZa9Ji1lB%^;ld5bEgEhOkcZ>yI%hm-ulgN;@93gGGyh<3|t-{Gf8f1`pJ`Q zR=^d;+*43ACvsZRkH@TsCBv{HDoC!{t(cHYq2R#H!EHmCtTI#GITR&{U?PY)f{U0I z#=Ihz6^Kob;^+v-jSZ_uuAtWrxc4Qmz;Cz6t!HR%y+n2i%}TaH4vvH6K4TfH7HkUk zte7yL?J)1Q2(Cd0r^Y*n;6j5rk4UIScuf;))go4KWkZmJqw?6!ds42(d1qBMs?3;7 z*Qj=01H5E#g8D!%1*FIF5#A*%IUW#H(zLiDa}=(-tW z9$7Ds7*juSu9=jptD!PH1)HQZyfEeh&Y@C&a0u*3OS!Piu38A_SzWN?HKaXw7s29xW9DT;x! z8YRRB6o0B+r<`yxVx=Gvy3(=n9c%S``!~Og_x;9096$XKFrK(6r)piKiq?S1j61*h zExhIpZ{#BnXAW+x$(wz0I$(KpjpgzNY9lc?G>zok)5KT}vngX{tXE5hp=TJ!>9i-b z6x`%KG=-9lrfDiE;XEPw8df#cJeWr`ZO}5}JQ#(P$4ViV8X&!!s5%2mbzj7`AvBRj zp&Jdq8OVR|Y4l@{uyt-ue!+P*+a2RPkjB2+b{vcW2CI6o_=fq`HlYa!N*WX1MY^^@ zq@KQtf&;N_$!e(gFcBb5YFTCCD_9l7I|oy!J^{4Oxk}i?N{o1a((wl|cuFpeIiVtK z(gsLqT4CDLh+(#-EN}4Oqssnj!FPV=+lkv3r^d9(W4h-Walp}@zmsoy$2&OKG(7&q zNICvAk3aq}4?pk$9{t2ep{(eFVrgJ?e1m>-i1!8OjB)63B6ac2PSd&r#3~Ws&4?JY z;PFM#zTgY!(Bm}IMNb~qXdY?2oHlBC?<>$TMVuoznGk6u21-#RcwAFYTR#>?S1SZ* z1e3(^<;$eUuQJcVNKgBM3p6*M!8MU+o<=;SWO5!bQx=PDig`ku;X_kFQP+WQ2NtZOXr0l z7kuohA4*)cpXQ8H!~1}uIH}a5*wo)69`A)x5^3ENV#_EB-ta{*3uG_M5WF>P4mUL3 zF&;het*UK`ZMITSAh`&SZ2Li zv3LC%$43Wvuaq(n+ZH3RT5lNBz%cZ+v=CRpVac^25208sM+~W`(7;O-CQd{FakX7j zmAad)8rRk8iPXt`amvw5|KEpz^N#F%MX$Nw?4(_`<}bAh%s9#2s-&YOr61V6aDlOl ztYdXEHa00H!BELC^c)=@vDlg;O~nFf7$>dVAyTcmG70|Tq#F37KGR8~Zp9hhDIwuZ z8Ha=mVQOvgBsIi)%>3yg!9ZNZ`%qn<5>fM%0In=Z&5S?)hMRfMdw-wx-lGTwCzA_6 zUCT>eaWAiV-QE2D{XNV5BT_l8;m0PA zXgKlf=p@4#`P9ImnhB{f5yCNa5Numyy*9U2PBv zWUcvDaX24vK1{~GilptN)zpj_{AoFct5)1nGB`&m1ud146CbNUapDV8ou0Ld9#$$t zR&+@jmu$u*k3F8rmH;+dKrYklbOvpKK-%C~TBz2Mr@iDA7$^M)~PD5Zjt zS=Tb3H>5OFAF?J&N%Wf)X{>D^C65H>Fbb-Pl1B`s>zYcW<8jhZR3^6}_~FqKR(K?svEzcz`blqS;O<9tJK z9rI=jmp$Hh#N$Ha<(>op02TO2L_t)!cEr~C^Rzdgr&ncpa7>6Tvvy84rPmRq;C(ZJ zrie-)i+i@NrA8>Mp2EKGYc!Kegm~`>G2ooiM2GYB8Bg-GYC^0qjO!{r=7eb`mw^}^ z4{!Lcw|_O~Z@s&|>uTg`*uCk6-1Fz&%p+GE$2STk4VaD;O=#)S zoH#zb!Sd(;D+SeZy8F`5SL;m~F|FkWRwn0R!21?0LMhcDnXTq0aaKJ{YM2isaj0*g z>BtgDxLT%8^qcp-b|-jO-4>yC_n8<@m6B2o|I^DH$B__XReXG`-BWoar;!i>xhN{0 z`PMF5TW81#+Bl=#zR33OB`$R5Sgai}d;GaGY`yda_zP#idxq5-8#CT&?)7rQxB)Ie zh@_lqF13P)P!!r(M;;TF3vCk-cVeO|q%ze1!wF5QI5QvN}I|#YmcTQ z#^H$jABM9xpXKg1ycr4GwFO*5%PU^>7rFiAxACb@!)CdpltXeJYL8ACpk#8&lw6)e zSXWedcyOIG4lIujSRNlT^lQ+9nbEc#rk-LRTthJ>pyaWKk|u{@73-aA2%)Vlns`d7 z&D!E1c!x8EJmNi7S;0JQ(>~kL zFme9QIieSu=;>l$d%nPhz%V3As$sZR1-0ZfXQ&xj%QXDK&{Aq!jcOeYG4(v<;gJ2S z8}55ZdGp);9AW2NeOAA7iLd$QujlH)$n~pA=~t9;43?+RsElKeM<#Pa9YavlLp_E4 zu%cMT`HA$W;Jnec6=la*{lb=O`1RCW>#U%vcq{0*!Q~OJnTQgtIv7PjbE?f=XzgNf z%_#y`v#E(26i;Z{X|{?HgCmBBj}1+Xr!=GYp04TeK9Cj6HMpijT|i30@<1sA{qg|K zE5t^e6?TpX@&k`yDWlKZMlbH5Rr0SJ7CqfWs?TxAh*X3;wVlS`>AIE}Be@hpn4#(> z0pmG>qqxcRFCdN+tGzf!$@OHPM%%Q)mK*MSF!Q39y^IUbe;E!RxbXZ}aPL>#$pa5I z44Wld4yPB9YX58zd=n8DDytx+(sT$~1S>EM$3VuiAZlpZAi3vY?N`?Dt%}YkPuLFL=n6g-7J!{;Jjd#FqEcgYgv*9 zS`V?E5xY5vk(PVp;gGFG3sNf9FlEe%k_N`HXS3OWk4Tsyz9Efk(v;in;F$E(9@=kc zZ`q+cyG<5{xiAq823m;DSBtOrh>H|4OcaN*+&^Ggukd13`ErIzgEL1X2}My?PqE>s z-hogT+Jq2BwDe#BbcHJed9%lr8$z-R-1V9_6C88C_?~<5Zi^?Ltoc-RnCQjYKrNHY zP^Q^EYA3;>sxFG-Xn90ertW@Ch$&+Nk;s^OoEOw8rD&R}O;sW1O7b&-jht&p0S z#(5A&&J!T>5%EG1PiUn!gqbJhhNjygmlZxZ(pXQsI7cp-aTo|qhYyh`^`)hu=V0#& zyPApZ7MelFfy2#6(+0GRc!81%E0{Yy+eAxF(RTFy;{})EOeWnlMGenUWH?SR2ckLVM*y3<=acY)adB%1~;r zv)|C`F|#A%>Y?NAdtXavXE*buU-5b#eyp%Q63CgH>cdP|tYkPRI_I=IO%Tzk;adp4 znVPJW=#;Fb5)P@L=E&nn(<~^tlKgI}4MS+2<14Q7E(Aek3Tu;@ylp3?CugFI1oM#8Xo^Nd5D8ni3OGjernnj;%H35cIn+S801dslI84@$y0!CYW zA<%2J*5GT1%nH6~(2@wtM1S-Q&Gr^@X_qu4`fCU5h8AZ+&xo}%7=+#J9S&A2h@pC+ z6_RRw%Wln(N1AXBlR~y<9g`=W6mD{aZ8ih9p5J11b*NpCvcl%Oj0YPYeWK$_UiUKG z*^9UHl9%4a1D7K@8YK^CT4Q;bW;>N<aHe9}vxODz`gbTOd$!u$zXAUyMdc;ys z4Z3BTUs3RGA`_+wc(pcB)bez~>hziF0fv4vV&*Ah#u4zY!EB(IB9lkyM50tNeA^I; zV!2vjEoWS;3*x<>x(xH_=pr>3i{b-h6zGWFW7gxQ++IpzHk-3qCje5(rz7J0#Az3q z%;!^Mn2#-~WW*BY0^NMKa>C+pY9Mu^j1si(C?vUeyvs}AwgcrQxRrIMPZxVgVm~JR}tcbOYwIAoyYI5T0uf4IB zYmL{0w%SojMZM|-C$54c+(f@kXG8OI&|#g_qNaGOwVy-qPSBDn(T=OvoKl1XqHoxi z%q_PW*cGBg=552K%z5OBo4i!U(a`~m*$%^Gobyvtn4Avxt0CEyx>-}6G+cFf7Z6va zxu)Bq-wc?f8s0@K2apnN*PuQi>hJ~38KYIS>g;XHZ9LTcZLuC z_J3g1!sv{%+kqeZ(XZzpyz8HmvOrWE4bDwvsg|k3roP*8Jf@Y7?H#FfvEKoKtV+oT z^s9l7f1)A0vRx)E6 zn<%dSz>^tH?=L*-$M5L_hZahgF@5I-z@>8nq8YdcPDP!%b%ekJO(vx$dX(~7>r4B|p2`j_xsU;BE#{FN`_?Cv)2{>=}w zGUe>JgE*765b~}i%xlW!qa9tl_n<*iqM8o&1WYT8$Wq-txTZ7VL8`nHZI^pMAfPhU>bGg zd^ok5c3n$KX`(s(6fLF_O{+YJGn^N^cdYw0^X&y-wBE5h=3RSA0=MidC@WLts>;h)tx!b0*749heq_V>X-BUgx3| zbs!DmGo~ZMW`|#W_XFJbu_t){?|+QFf-B;ffBdRt49!+Z-+{LlPu{#i?J$CIUt#=b+Wn<_|eA zWg30py{Aluv?^d%Suo|XdbCO+29Jni98%R+Cx)k}l5?dQV{9qvh;f0buSANSV1Np` zPTGZXuBju&hU?d^Q*tJ!fhIbJVIa7OI9F?Lc(#qi3Ndc8Z5Uvvxq(j(Zp@7?lZVyh53!j#7sib}l(78&0-cyPaq}HTG z3vJtx#<6;fQ$o!M!PjsDq%qOOb_%&}QWlJ+Z70$rO-)^O`fKohs(V3m#<`j@x^97L zA$r)Pfi6S}zUslD8u`@}A0uPVv~5Q}R1=&ttECZOB@ukAN|{=naoI+)PK3Y7X=6wl zMx2A_>i0zr9|Ae)1m>n+lVj9O@NTSzIyWaf<;iD`_~n215O4i+xAQCi{*%1-BmWCu z_J;HPwRgOnPki7*i0iTJP64VXRJ$&QgxhgpMbQzb4dzbXk&(0~_X&4nU&-0(%&0I@ ztj>+_&Q;>v>I52dwR7&Ii|)ksSxTvtnpBC-FmyVOZPPO5k*u|+M>P|?n?jn@FznpP zPzZ7v*bFN|5ON-BZlCJe+OJbP1y4qgh0s_oO_swY5`69XW@Dy6MCTSuJ z#yHi@4mF2rgV!0+9O@GHec~Z5z2IiVme_vbH~-&9`Kf>UVY)9e&OWc;!-lR2;H0F+`P;`>Ge0D$0~$z&*Y)+@LUKk_q0zl#@D;1}~L^PHCJPs%mSAceM;~ z!PW8z10AuFaUtNF1*z1b+U5i;;CzP>s!!RfDc*TcBGsGEO6yy4o?eDlSyIFiV?!|` zS(VZ3JV_T z0zLAGr9_T?aWz9ZHTtY`5xMX|406MNX_tjv}ktwOAYn%fvI+ z8=^umaIWL=2M_t5|N95I@Pdxle|1anPjK709d3QzHtI5#0?`sFD@CECC9Q{>w>yTS zpaaEv+`&W()934ww!mJB*6P*jc^t;Tb2hU9`5N8=+p zR1cRkhZbmpkT(OO5wU`IiFr3e3V0K|I)VlQj-X>T9_0M&d@d(+ZO2%0^-0sw#zp1N zyQXT)!&vczQAHW&F`i?v!-yeN0Y&)#i#nGbNv220BqR6js;JG5aJnl0fP_%akCII0!x5cFyN5}_qa{F-BaCNm6_)jEaG(Y z2Bpf(I1%yx|99@pcE%XOY|amU{1fbApX@V*2}C&i;F|Y-8+iBE1K;`nTbw*TrIyH) zuXyrkMJ{Vj4l1jD!?K_F!eQwsEK)Pxh_Wvvv3qZyYSrIF)o9DSpJ~Y-JSBO=3|J@BVwo?&*+PzL zI_PJPahgc7AWr%2A^X-CYP3|()Rs^orHC^Y?;N?JE=#Afq_s4@mMF7B1n(T4;&q!^3dRH^25KzklcNeDAwo=chk=hd00aCC*=* z@!IQ;IsfRI!{d8AJBxgDnecHEwO`gz)sdo?J8u?;Bi1+8dct)beX> zV>p@CggG^&Nr&|okAswPuEi{k3JdnmItne{UMw}j`th*FR>$G-E>#LKW@3!2Ry~*7HCb%+U)wBS5FFm?%qpN{pDK68110xGjjp&x$TQlPfT5-hwt_Qryy;ji z46i&~AxzxdJmBYV|B;h}R|yX+Ztt9f`<7q+>d(A#^oaM~{TGj(1iVRn-XZ_|_a)Cy z2XKL6BGWk0bpeARc)iO3D_AMy90@@kA5$r9XCClQuM}( z*qX0KjTb{DX%}9MrW?$tVo05sj(YA9H>6fUmsq8t*^-9eba8 zozoYY$Pzo7b>d{5}DG(I24@Qq1Z~Tx@R_4?jWC?3;Jc>!in30#oX%0D0%J{-0i$4 z#Z1?NT+XYl7785`4~~{lw)DN?`M28*i&f9O-(|hN!P-pU&&jnAtLKxe%K8S1ahP(0 z5tTDb5u8(XN@}9y0b_)iGPAJ6*p5`v-Pdbqiz1Qs+cgy6Ov^Mm+X8OoF5zG>Sm~%T zg3Zd8#%p%UI;<&(cq$ojo=|)CpLkyV;+ntxK^QLgd318b)yqO;fptr4sD#B6yl2FV z#oGn0Go)OIzEA{WObo@TV_!NX3)bj)6~*YRCr(ZKxB23#@k-Sugj_(X1qYdHbtV|0 z7NyV_YY>Tdwj0`bV_Q&5h)h}MXmwwDa?Zp&Xt_tvkS`X3`iLXKJoBq z#r>lL#&HW}%j1(hLg@JG(=#rwCahhOMaMU95;EyH5@vI%S0yLs32&9niNMTvI%AuP zIKAn`IbF&)>suq4+wR~t-cfa(SW9z$YLlh+NR3JfC>3iH2KAB`qBfgGk0f%z_{znL yz&{4ZTi>w!=@)ZK3heASiV=)VI9r&?1^)x571Qw}w8nk_0000 +#else +#include +#endif logsDialog::logsDialog(QWidget *parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), @@ -33,6 +38,11 @@ logsDialog::logsDialog(QWidget *parent) : ui->customPlot->legend->setSelectedFont(legendFont); ui->customPlot->legend->setSelectable(QCPLegend::spItems); // legend box shall not be selectable, only legend items ui->customPlot->legend->setVisible(false); + QSettings settings("companion9x", "companion9x"); + QString Path=settings.value("gePath", "").toString(); + if (Path.isEmpty() || !QFile(Path).exists()) { + ui->mapsButton->hide(); + } // connect slot that ties some axis selections together (especially opposite axes): connect(ui->customPlot, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged())); @@ -165,6 +175,79 @@ void logsDialog::selectionChanged() } } +void logsDialog::on_mapsButton_clicked() { + int n = csvlog.count(); // number of points in graph + if (n==0) return; + int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0; + int itemSelected=0.; + bool rangeSelected=false; + QSettings settings("companion9x", "companion9x"); + QString gePath=settings.value("gePath", "").toString(); + if (gePath.isEmpty() || !QFile(gePath).exists()) { + return; + } + for (int i=1; ilogTable->item(i-1,1)->isSelected()) { + rangeSelected=true; + itemSelected++; + } + } + if (itemSelected==0) { + itemSelected=n-1; + } + QString geFilename = QDir::tempPath() + "/flight.kml"; + if (QFile::exists(geFilename)) { + unlink(geFilename.toAscii()); + } + QFile geFile(geFilename); + if (!geFile.open(QIODevice::WriteOnly | QIODevice::Text)) { + QMessageBox::warning(this, tr("Error"), + tr("Cannot write file %1:\n%2.") + .arg(geFilename) + .arg(geFile.errorString())); + return; + } + + QTextStream outputStream(&geFile); + outputStream << "\n\n"; + outputStream << "\n\tflight.kml\n\tMy Flight\n\t\t\n"; + outputStream << "\t\t\t1\n\t\t\trelativeToGround\n\t\t\t\n\t\t\t\t"; + for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + outputStream << csvlog.at(i).at(longcol) << "," << csvlog.at(i).at(latcol) << "," << csvlog.at(i).at(altcol) << " " ; + } + } + outputStream << "\n\t\t\t\n\t\t\n\t\n\n\n"; + geFile.close(); + + QStringList parameters; + parameters << geFilename; + QProcess *process = new QProcess(this); + process->startDetached(gePath, parameters); +} + + void logsDialog::mousePress() { // if an axis is selected, only allow the direction of that axis to be dragged @@ -293,8 +376,7 @@ void logsDialog::plotValue(int index, int plot, int numplots) } } } - for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { double tmp; QString tstamp=csvlog.at(i).at(0)+QString(" ")+csvlog.at(i).at(1); diff --git a/companion/src/logsdialog.h b/companion/src/logsdialog.h index 54142fdab..9901228a7 100644 --- a/companion/src/logsdialog.h +++ b/companion/src/logsdialog.h @@ -34,6 +34,7 @@ private slots: // void graphClicked(QCPAbstractPlottable *plottable); void on_fileOpen_BT_clicked(); void on_sessions_CB_currentIndexChanged(int index); + void on_mapsButton_clicked(); private: QList csvlog; diff --git a/companion/src/logsdialog.ui b/companion/src/logsdialog.ui index c8e417d16..deee92d6b 100644 --- a/companion/src/logsdialog.ui +++ b/companion/src/logsdialog.ui @@ -20,7 +20,7 @@ true - + @@ -46,43 +46,6 @@ - - - - - 0 - 0 - - - - - 120 - 16777215 - - - - 0 - - - QAbstractItemView::NoEditTriggers - - - false - - - false - - - 0 - - - true - - - false - - - @@ -195,7 +158,7 @@ - + @@ -238,6 +201,78 @@ + + + + + 0 + 0 + + + + + 120 + 16777215 + + + + 0 + + + QAbstractItemView::NoEditTriggers + + + false + + + false + + + 0 + + + true + + + false + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 120 + 57 + + + + + + + + :/images/maps.png:/images/maps.png + + + + 120 + 57 + + + + diff --git a/companion/src/preferencesdialog.cpp b/companion/src/preferencesdialog.cpp index 8ad749686..6afa8ee9a 100644 --- a/companion/src/preferencesdialog.cpp +++ b/companion/src/preferencesdialog.cpp @@ -76,6 +76,9 @@ void preferencesDialog::baseFirmwareChanged() ui->voice_dnld->setEnabled(true); ui->sdPathButton->setEnabled(true); ui->sdPath->setEnabled(true); + ui->ge_label->show(); + ui->ge_lineedit->show(); + ui->ge_pathButton->show(); } else { ui->voiceLabel->hide(); ui->voiceCombo->hide(); @@ -83,6 +86,9 @@ void preferencesDialog::baseFirmwareChanged() ui->sdPathButton->hide(); ui->sdPath->hide(); ui->sdPathLabel->hide(); + ui->ge_label->hide(); + ui->ge_lineedit->hide(); + ui->ge_pathButton->hide(); } populateFirmwareOptions(firmware); int width=firmware->eepromInterface->getCapability(LCDWidth); @@ -268,6 +274,7 @@ void preferencesDialog::writeValues() settings.setValue("backLight", ui->backLightColor->currentIndex()); settings.setValue("libraryPath", ui->libraryPath->text()); settings.setValue("sdPath", ui->sdPath->text()); + settings.setValue("gePath", ui->ge_lineedit->text()); settings.setValue("embedded_splashes", ui->splashincludeCB->currentIndex()); if (!ui->SplashFileName->text().isEmpty()) { QImage Image = ui->imageLabel->pixmap()->toImage(); @@ -342,6 +349,9 @@ void preferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware) ui->sdPathButton->show(); ui->sdPath->show(); ui->sdPathLabel->show(); + ui->ge_label->show(); + ui->ge_lineedit->show(); + ui->ge_pathButton->show(); if (current_firmware_variant.id.contains(opt.name) ||firmware->voice) { ui->voiceLabel->setEnabled(true); ui->voiceCombo->setEnabled(true); @@ -408,6 +418,10 @@ void preferencesDialog::initSettings() if (QDir(Path).exists()) { ui->sdPath->setText(Path); } + Path=settings.value("gePath", "").toString(); + if (QFile(Path).exists()) { + ui->ge_lineedit->setText(Path); + } Path=settings.value("backupPath", "").toString(); if (!Path.isEmpty()) { if (QDir(Path).exists()) { @@ -519,7 +533,7 @@ void preferencesDialog::on_fw_dnld_clicked() void preferencesDialog::on_voice_dnld_clicked() { ui->ProfSave_PB->setEnabled(true); - QString url="http://93.51.182.154/voices/"; + QString url="http://fw.opentx.it/voices/"; FirmwareVariant variant = getFirmwareVariant(); url.append(QString("%1/%2/").arg(variant.firmware->id).arg(ui->voiceCombo->currentText())); QDesktopServices::openUrl(url); @@ -574,6 +588,15 @@ void preferencesDialog::on_backupPathButton_clicked() ui->backupEnable->setEnabled(true); } +void preferencesDialog::on_ge_pathButton_clicked() +{ + QSettings settings("companion9x", "companion9x"); + QString fileName = QFileDialog::getOpenFileName(this, tr("Select Google Earth executable"),ui->ge_lineedit->text()); + if (!fileName.isEmpty()) { + ui->ge_lineedit->setText(fileName); + } +} + void preferencesDialog::on_splashLibraryButton_clicked() { QString fileName; @@ -655,6 +678,7 @@ void preferencesDialog::on_ProfSave_PB_clicked() settings.setValue("rename_firmware_files", ui->renameFirmware->isChecked()); settings.setValue("sdPath", ui->sdPath->text()); settings.setValue("SplashFileName", ui->SplashFileName->text()); + settings.setValue("gePath", ui->ge_lineedit->text()); if (ui->imageLabel->pixmap()) { QImage Image = ui->imageLabel->pixmap()->toImage(); settings.setValue("SplashImage", image2qstring(Image)); diff --git a/companion/src/preferencesdialog.h b/companion/src/preferencesdialog.h index 101b610ed..9a31ea8fd 100644 --- a/companion/src/preferencesdialog.h +++ b/companion/src/preferencesdialog.h @@ -48,6 +48,7 @@ private slots: void on_snapshotPathButton_clicked(); void on_snapshotClipboardCKB_clicked(); void on_backupPathButton_clicked(); + void on_ge_pathButton_clicked(); void on_sdPathButton_clicked(); void on_splashLibraryButton_clicked(); void on_checkFWUpdates_clicked(); diff --git a/companion/src/preferencesdialog.ui b/companion/src/preferencesdialog.ui index f3e5bf005..b52060211 100644 --- a/companion/src/preferencesdialog.ui +++ b/companion/src/preferencesdialog.ui @@ -39,6 +39,19 @@ 4 + + + + + 0 + 0 + + + + Show Splash Screen + + + @@ -261,253 +274,7 @@ - - - - - 0 - 0 - - - - Show Splash Screen - - - - - - - - 0 - 0 - - - - Custom TX splash screen - - - - - - - - - Enable - - - - - - - - 0 - 0 - - - - - - - - Calibrate - - - - - - - - - 1 - - - - - Open Folder - - - - - - - true - - - true - - - - - - - - - - - - 0 - 0 - - - - FwInfo - - - - - - - Check for updates - - - - - - - - - - 0 - 0 - - - - Personal splash library - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 0 - 0 - - - - Ask for flashing after Download - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - - - - - Export Profile - - - - - - - Save Profile - - - - - - - 1 - - - 10 - - - - - - - Import Profile - - - - - - - - - - Profile Name - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - 0 - 0 - - - - Language (requires restart) - - - - + @@ -651,7 +418,271 @@ This is used by the templated to determine which channel goes to what number out - + + + + + 0 + 0 + + + + Custom TX splash screen + + + + + + + + + Enable + + + + + + + + 0 + 0 + + + + + + + + Calibrate + + + + + + + + + 1 + + + + + Open Folder + + + + + + + true + + + true + + + + + + + + + + + + 0 + 0 + + + + FwInfo + + + + + + + Check for updates + + + + + + + + + + 0 + 0 + + + + Personal splash library + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + Ask for flashing after Download + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + + + Export Profile + + + + + + + Save Profile + + + + + + + 1 + + + 10 + + + + + + + Import Profile + + + + + + + + + + Profile Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + 0 + 0 + + + + Language (requires restart) + + + + + + + 1 + + + + + Open Folder + + + + + + + true + + + true + + + + + + + Use clipboard only + + + + + + @@ -664,7 +695,7 @@ This is used by the templated to determine which channel goes to what number out - + @@ -680,7 +711,7 @@ This is used by the templated to determine which channel goes to what number out - + Mode selection: @@ -728,7 +759,7 @@ Mode 4: - + @@ -777,7 +808,7 @@ Mode 4: - + Profile slot @@ -816,7 +847,7 @@ Mode 4: - + Qt::Vertical @@ -832,7 +863,7 @@ Mode 4: - + @@ -859,7 +890,7 @@ Mode 4: - + QLayout::SetMaximumSize @@ -950,7 +981,7 @@ May be different from firmware language - + @@ -997,37 +1028,6 @@ May be different from firmware language - - - - 1 - - - - - Open Folder - - - - - - - true - - - true - - - - - - - Use clipboard only - - - - - @@ -1048,7 +1048,7 @@ May be different from firmware language - + QLayout::SetMaximumSize @@ -1601,6 +1601,31 @@ May be different from firmware language + + + + + + true + + + + + + + Find Executable + + + + + + + + + Google Earth Executable + + + From f31e14153aba02edf2d57f268b8ad81f27ccd44d Mon Sep 17 00:00:00 2001 From: "romoloman@github.com" <> Date: Sun, 29 Dec 2013 12:12:55 +0100 Subject: [PATCH 2/4] KML support for logs --- companion/src/companion9x.qrc | 2 + companion/src/images/track.png | Bin 0 -> 747 bytes companion/src/images/track0.png | Bin 0 -> 2363 bytes companion/src/logsdialog.cpp | 78 ++++++++++++++++++++++++++------ 4 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 companion/src/images/track.png create mode 100644 companion/src/images/track0.png diff --git a/companion/src/companion9x.qrc b/companion/src/companion9x.qrc index 2000e4e15..8a8409172 100644 --- a/companion/src/companion9x.qrc +++ b/companion/src/companion9x.qrc @@ -65,6 +65,8 @@ images/fuses.png images/list.png images/maps.png + images/track.png + images/track0.png images/play.png images/stop.png images/read_eeprom_file.png diff --git a/companion/src/images/track.png b/companion/src/images/track.png new file mode 100644 index 0000000000000000000000000000000000000000..32414b49aa2b544b8f3469e13e36f342d4d8e738 GIT binary patch literal 747 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 literal 0 HcmV?d00001 diff --git a/companion/src/logsdialog.cpp b/companion/src/logsdialog.cpp index 5ad0327dd..12213536b 100644 --- a/companion/src/logsdialog.cpp +++ b/companion/src/logsdialog.cpp @@ -1,11 +1,6 @@ #include "logsdialog.h" #include "ui_logsdialog.h" #include "qcustomplot.h" -#if defined WIN32 || !defined __GNUC__ -#include -#else -#include -#endif logsDialog::logsDialog(QWidget *parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), @@ -178,7 +173,7 @@ void logsDialog::selectionChanged() void logsDialog::on_mapsButton_clicked() { int n = csvlog.count(); // number of points in graph if (n==0) return; - int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0; + int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0, rssicol=0; int itemSelected=0.; bool rangeSelected=false; QSettings settings("companion9x", "companion9x"); @@ -203,6 +198,9 @@ void logsDialog::on_mapsButton_clicked() { if (csvlog.at(0).at(i).contains("Course")) { coursecol=i; } + if (csvlog.at(0).at(i).contains("RSSI")) { + rssicol=i; + } } if (longcol==0 || latcol==0 || altcol==0) { return; @@ -216,9 +214,16 @@ void logsDialog::on_mapsButton_clicked() { if (itemSelected==0) { itemSelected=n-1; } - QString geFilename = QDir::tempPath() + "/flight.kml"; + + QString geFilename = QDir::tempPath() + "/track0.png"; if (QFile::exists(geFilename)) { - unlink(geFilename.toAscii()); + QFile::remove(geFilename); + } + QFile::copy(":/images/track0.png", geFilename); + + geFilename = QDir::tempPath() + "/flight.kml"; + if (QFile::exists(geFilename)) { + QFile::remove(geFilename); } QFile geFile(geFilename); if (!geFile.open(QIODevice::WriteOnly | QIODevice::Text)) { @@ -228,17 +233,62 @@ void logsDialog::on_mapsButton_clicked() { .arg(geFile.errorString())); return; } - + QString latitude,longitude; + double flatitude, flongitude,temp; QTextStream outputStream(&geFile); - outputStream << "\n\n"; - outputStream << "\n\tflight.kml\n\tMy Flight\n\t\t\n"; - outputStream << "\t\t\t1\n\t\t\trelativeToGround\n\t\t\t\n\t\t\t\t"; + outputStream << "\n\n"; + outputStream << "\t\n\t\tMy Flight\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n\t\t\t\n\t\t\t\tnormal\n\t\t\t\t#multiTrack_n\n\t\t\t\n\t\t\t\n\t\t\t\thighlight\n\t\t\t\t#multiTrack_h\n\t\t\t\n\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\t\n\t\t\t\tGPS Speed\n\t\t\t\n"; + outputStream << "\t\t\t\n\t\t\t\tRSSI\n\t\t\t\n"; + outputStream << "\t\t\n"; + outputStream << "\t\t\n\t\t\tFlight\n\t\t\t\n\t\t\t\tMy Flight\n\t\t\t\t#multiTrack\n\t\t\t\t\n"; for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { - outputStream << csvlog.at(i).at(longcol) << "," << csvlog.at(i).at(latcol) << "," << csvlog.at(i).at(altcol) << " " ; + QString tstamp=csvlog.at(i).at(0)+QString("T")+csvlog.at(i).at(1); + outputStream << "\t\t\t\t\t"<< tstamp <<"\n"; } } - outputStream << "\n\t\t\t\n\t\t\n\t\n\n\n"; + + for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + latitude=csvlog.at(i).at(latcol).trimmed(); + longitude=csvlog.at(i).at(longcol).trimmed(); + temp=int(latitude.left(latitude.length()-1).toDouble()/100); + flatitude=temp+(latitude.left(latitude.length()-1).toDouble()-temp*100)/60.0; + temp=int(longitude.left(longitude.length()-1).toDouble()/100); + flongitude=temp+(longitude.left(longitude.length()-1).toDouble()-temp*100)/60.0; + if (latitude.right(1)!="N") { + flatitude*=-1; + } + if (longitude.right(1)!="E") { + flongitude*=-1; + } + latitude.sprintf("%3.8f", flatitude); + longitude.sprintf("%3.8f", flongitude); + outputStream << "\t\t\t\t\t" << longitude << " " << latitude << " " << csvlog.at(i).at(altcol) << "\n" ; + } + } + outputStream << "\t\t\t\t\t\n\t\t\t\t\t\t\n"; + outputStream << "\t\t\t\t\t\t\t\n"; + for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(speedcol) <<"\n"; + } + } + outputStream << "\t\t\t\t\t\t\t\n"; + outputStream << "\t\t\t\t\t\t\t\n"; + for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(rssicol) <<"\n"; + } + } + outputStream << "\t\t\t\t\t\t\t\n"; + outputStream << "\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n"; geFile.close(); QStringList parameters; From 447ee71698ea593781a88b88ca242dbd603feafc Mon Sep 17 00:00:00 2001 From: "romoloman@github.com" <> Date: Sun, 29 Dec 2013 13:15:13 +0100 Subject: [PATCH 3/4] FrSky S/PORT GPS support --- radio/src/telemetry/frsky_sport.cpp | 167 ++++++++++++++++++++++------ radio/src/telemetry/frsky_sport.h | 12 +- 2 files changed, 139 insertions(+), 40 deletions(-) diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index 8d299348d..a9552e150 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -78,37 +78,45 @@ #define FRSKY_LAST_ID 0x3F // FrSky new DATA IDs (2 bytes) -#define RSSI_ID 0xf101 -#define ADC1_ID 0xf102 -#define ADC2_ID 0xf103 -#define BATT_ID 0xf104 -#define SWR_ID 0xf105 -#define T1_FIRST_ID 0x0400 -#define T1_LAST_ID 0x040f -#define T2_FIRST_ID 0x0410 -#define T2_LAST_ID 0x041f -#define RPM_FIRST_ID 0x0500 -#define RPM_LAST_ID 0x050f -#define FUEL_FIRST_ID 0x0600 -#define FUEL_LAST_ID 0x060f -#define ALT_FIRST_ID 0x0100 -#define ALT_LAST_ID 0x010f -#define VARIO_FIRST_ID 0x0110 -#define VARIO_LAST_ID 0x011f -#define ACCX_FIRST_ID 0x0700 -#define ACCX_LAST_ID 0x070f -#define ACCY_FIRST_ID 0x0710 -#define ACCY_LAST_ID 0x071f -#define ACCZ_FIRST_ID 0x0720 -#define ACCZ_LAST_ID 0x072f -#define CURR_FIRST_ID 0x0200 -#define CURR_LAST_ID 0x020f -#define VFAS_FIRST_ID 0x0210 -#define VFAS_LAST_ID 0x021f -#define GPS_SPEED_FIRST_ID 0x0830 -#define GPS_SPEED_LAST_ID 0x083f -#define CELLS_FIRST_ID 0x0300 -#define CELLS_LAST_ID 0x030f +#define RSSI_ID 0xf101 +#define ADC1_ID 0xf102 +#define ADC2_ID 0xf103 +#define BATT_ID 0xf104 +#define SWR_ID 0xf105 +#define T1_FIRST_ID 0x0400 +#define T1_LAST_ID 0x040f +#define T2_FIRST_ID 0x0410 +#define T2_LAST_ID 0x041f +#define RPM_FIRST_ID 0x0500 +#define RPM_LAST_ID 0x050f +#define FUEL_FIRST_ID 0x0600 +#define FUEL_LAST_ID 0x060f +#define ALT_FIRST_ID 0x0100 +#define ALT_LAST_ID 0x010f +#define VARIO_FIRST_ID 0x0110 +#define VARIO_LAST_ID 0x011f +#define ACCX_FIRST_ID 0x0700 +#define ACCX_LAST_ID 0x070f +#define ACCY_FIRST_ID 0x0710 +#define ACCY_LAST_ID 0x071f +#define ACCZ_FIRST_ID 0x0720 +#define ACCZ_LAST_ID 0x072f +#define CURR_FIRST_ID 0x0200 +#define CURR_LAST_ID 0x020f +#define VFAS_FIRST_ID 0x0210 +#define VFAS_LAST_ID 0x021f +#define CELLS_FIRST_ID 0x0300 +#define CELLS_LAST_ID 0x030f +#define GPS_LONG_LATI_FIRST_ID 0x0800 +#define GPS_LONG_LATI_LAST_ID 0x080f +#define GPS_ALT_FIRST_ID 0x0820 +#define GPS_ALT_LAST_ID 0x082f +#define GPS_SPEED_FIRST_ID 0x0830 +#define GPS_SPEED_LAST_ID 0x083f +#define GPS_COURS_FIRST_ID 0x0840 +#define GPS_COURS_LAST_ID 0x084f +#define GPS_TIME_DATE_FIRST_ID 0x0850 +#define GPS_TIME_DATE_LAST_ID 0x085f // FrSky wrong IDs ? #define BETA_VARIO_ID 0x8030 @@ -179,7 +187,8 @@ void processHubPacket(uint8_t id, uint16_t value) if (frskyData.hub.rpm > frskyData.hub.maxRpm) frskyData.hub.maxRpm = frskyData.hub.rpm; break; - +//case GPS_COURS_BP_ID: + //frskyData.hub.gpsCourse_bp = value; case TEMP1_ID: if (frskyData.hub.temperature1 > frskyData.hub.maxTemperature1) frskyData.hub.maxTemperature1 = frskyData.hub.temperature1; @@ -214,14 +223,15 @@ void processHubPacket(uint8_t id, uint16_t value) break; case GPS_ALT_AP_ID: + frskyData.hub.gpsAltitude_bp = frskyData.hub.gpsAltitude_bp*100; if (!frskyData.hub.gpsAltitudeOffset) frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp; frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset; if (!frskyData.hub.baroAltitudeOffset) { - if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude) - frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp; - if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude) - frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp; + if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude*100) + frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp/100; + if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude*100) + frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp/100; } if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) { @@ -235,6 +245,7 @@ void processHubPacket(uint8_t id, uint16_t value) case GPS_SPEED_BP_ID: // Speed => Max speed + frskyData.hub.gpsSpeed_bp = (frskyData.hub.gpsSpeed_bp * 46) / 25; if (frskyData.hub.gpsSpeed_bp > frskyData.hub.maxGpsSpeed) frskyData.hub.maxGpsSpeed = frskyData.hub.gpsSpeed_bp; break; @@ -294,6 +305,7 @@ void processSportPacket(uint8_t *packet) /* uint8_t dataId = packet[0]; */ uint8_t prim = packet[1]; uint16_t appId = *((uint16_t *)(packet+2)); + static uint8_t t_coor; if (!checkSportPacket(packet)) return; @@ -378,9 +390,92 @@ void processSportPacket(uint8_t *packet) } else if (appId >= GPS_SPEED_FIRST_ID && appId <= GPS_SPEED_LAST_ID) { frskyData.hub.gpsSpeed_bp = SPORT_DATA_U32(packet); + frskyData.hub.gpsSpeed_bp = (frskyData.hub.gpsSpeed_bp * 46) / 25/1000; if (frskyData.hub.gpsSpeed_bp > frskyData.hub.maxGpsSpeed) frskyData.hub.maxGpsSpeed = frskyData.hub.gpsSpeed_bp; } + else if(appId>=GPS_TIME_DATE_FIRST_ID && appId<=GPS_TIME_DATE_LAST_ID) { + uint32_t gps_time_date = SPORT_DATA_U32(packet); + if(gps_time_date & 0x000000ff) { + frskyData.hub.year = (uint16_t)((gps_time_date & 0xff000000)>>24); + frskyData.hub.month =(uint8_t)((gps_time_date & 0x00ff0000)>>16); + frskyData.hub.day = (uint8_t)((gps_time_date & 0x0000ff00)>>8); + } + else { + frskyData.hub.hour =(uint8_t) ((gps_time_date & 0xff000000)>>24); + frskyData.hub.min = (uint8_t)((gps_time_date & 0x00ff0000)>>16); + frskyData.hub.sec =(uint16_t) ((gps_time_date & 0x0000ff00)>>8); + frskyData.hub.hour = ((uint8_t)(frskyData.hub.hour + g_eeGeneral.timezone + 24)) % 24; + } + } + else if(appId>=GPS_COURS_FIRST_ID && appId<=GPS_COURS_LAST_ID) { + uint32_t course = SPORT_DATA_U32(packet); + frskyData.hub.gpsCourse_bp = course/100; + frskyData.hub.gpsCourse_ap = course%100; + } + else if (appId>=GPS_ALT_FIRST_ID && appId<=GPS_ALT_LAST_ID) { + int32_t gps_altitude; + gps_altitude = SPORT_DATA_S32(packet); + frskyData.hub.gpsAltitude_bp = gps_altitude; + + if (!frskyData.hub.gpsAltitudeOffset) + frskyData.hub.gpsAltitudeOffset = -frskyData.hub.gpsAltitude_bp; + + frskyData.hub.gpsAltitude_bp += frskyData.hub.gpsAltitudeOffset; + + if (!frskyData.hub.baroAltitudeOffset) { + if (frskyData.hub.gpsAltitude_bp > frskyData.hub.maxAltitude*100) + frskyData.hub.maxAltitude = frskyData.hub.gpsAltitude_bp/100; + + if (frskyData.hub.gpsAltitude_bp < frskyData.hub.minAltitude*100) + frskyData.hub.minAltitude = frskyData.hub.gpsAltitude_bp/100; + } + + if (!frskyData.hub.pilotLatitude && !frskyData.hub.pilotLongitude) { + // First received GPS position => Pilot GPS position + if(t_coor) + getGpsPilotPosition(); + } + else if (frskyData.hub.gpsDistNeeded || g_menuStack[g_menuStackPtr] == menuTelemetryFrsky) { + getGpsDistance(); + } + } + else if(appId>=GPS_LONG_LATI_FIRST_ID && appId<=GPS_LONG_LATI_LAST_ID) { + uint32_t gps_long_lati_data = SPORT_DATA_U32(packet); + if (gps_long_lati_data) + { + frskyData.hub.gpsFix = 1; + t_coor = 1; + } + + uint32_t gps_long_lati_b1w,gps_long_lati_a1w; + gps_long_lati_b1w = (gps_long_lati_data&0x3fffffff)/10000; + gps_long_lati_a1w = (gps_long_lati_data&0x3fffffff)%10000; + switch ((gps_long_lati_data & 0xc0000000)>>30) { + case 0: { + frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w/60*100)+(gps_long_lati_b1w%60); + frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLatitudeNS = 'N'; + }break; + case 1: { + frskyData.hub.gpsLatitude_bp = (gps_long_lati_b1w/60*100) + (gps_long_lati_b1w%60); + frskyData.hub.gpsLatitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLatitudeNS = 'S'; }break; + case 2: { + frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w/60*100) +(gps_long_lati_b1w%60); + frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLongitudeEW = 'E'; }break; + case 3: { + frskyData.hub.gpsLongitude_bp = (gps_long_lati_b1w/60*100) +(gps_long_lati_b1w%60); + frskyData.hub.gpsLongitude_ap = gps_long_lati_a1w; + frskyData.hub.gpsLongitudeEW = 'W';}break; + } + if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLatitude_bp > 1) + frskyData.hub.gpsFix = 0; + if (frskyData.hub.gpsFix > 0 && frskyData.hub.gpsLongitude_bp > 1) + frskyData.hub.gpsFix = 0; + } + else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) { uint32_t cells = SPORT_DATA_U32(packet); uint8_t battnumber = cells & 0xF; diff --git a/radio/src/telemetry/frsky_sport.h b/radio/src/telemetry/frsky_sport.h index fdbaae2fb..ac1dd94d9 100644 --- a/radio/src/telemetry/frsky_sport.h +++ b/radio/src/telemetry/frsky_sport.h @@ -173,12 +173,16 @@ bool FRSKY_alarmRaised(uint8_t idx); void resetTelemetry(); +#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp +#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap +#define TELEMETRY_GPS_SPEED_LOG frskyData.hub.gpsSpeed_bp<0?'-':' ',abs(frskyData.hub.gpsSpeed_bp/1000),abs(frskyData.hub.gpsSpeed_bp%1000) + +#define TELEMETRY_GPS_ALT_AP (frskyData.hub.gpsAltitude_bp%100) +#define TELEMETRY_GPS_ALT_BP (frskyData.hub.gpsAltitude_bp/100) +#define TELEMETRY_GPS_ALT_LOG frskyData.hub.gpsAltitude_bp < 0 ? '-':' ',abs(frskyData.hub.gpsAltitude_bp/100),abs(frskyData.hub.gpsAltitude_bp%100) + #define TELEMETRY_ALT_BP (frskyData.hub.baroAltitude / 100) #define TELEMETRY_ALT_AP (frskyData.hub.baroAltitude % 100) -#define TELEMETRY_GPS_SPEED_BP frskyData.hub.gpsSpeed_bp -#define TELEMETRY_GPS_SPEED_AP frskyData.hub.gpsSpeed_ap -#define TELEMETRY_GPS_ALT_AP frskyData.hub.gpsAltitude_ap -#define TELEMETRY_GPS_ALT_BP frskyData.hub.gpsAltitude_bp #define TELEMETRY_ALT frskyData.hub.baroAltitude < 0 ? '-' : ' ', abs(frskyData.hub.baroAltitude / 100), abs(frskyData.hub.baroAltitude % 100) #define TELEMETRY_ALT_FORMAT "%c%d.%02d," #define TELEMETRY_CELLS frskyData.hub.cellsSum / 10, frskyData.hub.cellsSum % 10, frskyData.hub.cellVolts[0]*2/100, frskyData.hub.cellVolts[0]*2%100, frskyData.hub.cellVolts[1]*2/100, frskyData.hub.cellVolts[1]*2%100, frskyData.hub.cellVolts[2]*2/100, frskyData.hub.cellVolts[2]*2%100, frskyData.hub.cellVolts[3]*2/100, frskyData.hub.cellVolts[3]*2%100, frskyData.hub.cellVolts[4]*2/100, frskyData.hub.cellVolts[4]*2%100, frskyData.hub.cellVolts[5]*2/100, frskyData.hub.cellVolts[5]*2%100 From 53f48dc487c5bd20ff1fc4f65a0083d5ce0aa3fb Mon Sep 17 00:00:00 2001 From: "romoloman@github.com" <> Date: Sun, 29 Dec 2013 18:19:14 +0100 Subject: [PATCH 4/4] Allow selection of fields for GE export --- companion/src/logsdialog.cpp | 84 +++++++++++++++++++++++++++++------- companion/src/logsdialog.h | 1 + 2 files changed, 69 insertions(+), 16 deletions(-) diff --git a/companion/src/logsdialog.cpp b/companion/src/logsdialog.cpp index 12213536b..bba3ba2bc 100644 --- a/companion/src/logsdialog.cpp +++ b/companion/src/logsdialog.cpp @@ -173,12 +173,35 @@ void logsDialog::selectionChanged() void logsDialog::on_mapsButton_clicked() { int n = csvlog.count(); // number of points in graph if (n==0) return; - int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0, rssicol=0; + int latcol=0, longcol=0, altcol=0, speedcol=0; int itemSelected=0.; bool rangeSelected=false; + enum fieldtype { + T_F, + I_F, + F_F, + G_F + }; + ui->FieldsTW->setDisabled(true); + ui->logTable->setDisabled(true); + QString fields[]={"SWR","RSSI","A1","A2","GPS Date"\ + ,"GPS Time","Long","Lat","Course","GPS Speed","GPS Alt","Baro Alt"\ + ,"Vertical Speed","Temp1","Temp2","RPM","Fuel","Cell volts","Cell 1"\ + ,"Cell 2","Cell 3","Cell 4","Cell 5","Cell 6","Current","Consumption"\ + ,"Vfas","AccelX","AccelY","AccelZ","Rud","Ele","Thr","Ail"\ + ,"S1","S2","LS","RS","SA","SB","SC","SD","SE","SF","SG","SH"}; + int fieldstype[]={I_F,I_F,F_F,F_F,T_F\ + ,T_F,G_F,G_F,F_F,G_F,G_F,F_F\ + ,F_F,F_F,F_F,I_F,I_F,F_F,F_F\ + ,F_F,F_F,F_F,F_F,F_F,F_F,F_F\ + ,F_F,F_F,F_F,F_F,I_F,I_F,I_F,I_F\ + ,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F,I_F}; + QSettings settings("companion9x", "companion9x"); QString gePath=settings.value("gePath", "").toString(); if (gePath.isEmpty() || !QFile(gePath).exists()) { + ui->FieldsTW->setDisabled(false); + ui->logTable->setDisabled(false); return; } for (int i=1; iFieldsTW->setDisabled(false); + ui->logTable->setDisabled(false); return; } QString latitude,longitude; double flatitude, flongitude,temp; QTextStream outputStream(&geFile); outputStream << "\n\n"; - outputStream << "\t\n\t\tMy Flight\n"; + outputStream << "\t\n\t\t" << logFilename << "\n"; outputStream << "\t\t\n"; outputStream << "\t\t\n"; outputStream << "\t\t\n\t\t\t\n\t\t\t\tnormal\n\t\t\t\t#multiTrack_n\n\t\t\t\n\t\t\t\n\t\t\t\thighlight\n\t\t\t\t#multiTrack_h\n\t\t\t\n\t\t\n"; outputStream << "\t\t\n"; outputStream << "\t\t\n"; outputStream << "\t\t\t\n\t\t\t\tGPS Speed\n\t\t\t\n"; - outputStream << "\t\t\t\n\t\t\t\tRSSI\n\t\t\t\n"; + for (int i=0; iFieldsTW->item(0,i)->isSelected() && fieldstype[i]!=G_F ) { + outputStream << "\t\t\t\n\t\t\t\t" << fields[i] << "\n\t\t\t\n"; + } + } outputStream << "\t\t\n"; - outputStream << "\t\t\n\t\t\tFlight\n\t\t\t\n\t\t\t\tMy Flight\n\t\t\t\t#multiTrack\n\t\t\t\t\n"; + + QString planeName; + if (logFilename.indexOf("-")>0) { + planeName=logFilename.left(logFilename.indexOf("-")); + } else { + planeName=logFilename; + } + outputStream << "\t\t\n\t\t\tLog Data\n\t\t\t\n\t\t\t\t" << planeName << "\n\t\t\t\t#multiTrack\n\t\t\t\t\n"; for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { QString tstamp=csvlog.at(i).at(0)+QString("T")+csvlog.at(i).at(1); @@ -281,20 +325,26 @@ void logsDialog::on_mapsButton_clicked() { } } outputStream << "\t\t\t\t\t\t\t\n"; - outputStream << "\t\t\t\t\t\t\t\n"; - for (int i=1; ilogTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { - outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(i).at(rssicol) <<"\n"; + for (int i=0; iFieldsTW->item(0,i)->isSelected() && fieldstype[i]!= G_F ) { + outputStream << "\t\t\t\t\t\t\t\n"; + for (int j=1; jlogTable->item(j-1,1)->isSelected() &&rangeSelected) || !rangeSelected) { + outputStream << "\t\t\t\t\t\t\t\t"<< csvlog.at(j).at(i+2) <<"\n"; + } + } + outputStream << "\t\t\t\t\t\t\t\n"; } } - outputStream << "\t\t\t\t\t\t\t\n"; outputStream << "\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n"; geFile.close(); QStringList parameters; parameters << geFilename; QProcess *process = new QProcess(this); - process->startDetached(gePath, parameters); + process->start(gePath, parameters); + ui->FieldsTW->setDisabled(false); + ui->logTable->setDisabled(false); } @@ -578,6 +628,7 @@ bool logsDialog::cvsFileParse() } else { ui->sessions_CB->clear(); csvlog.clear(); + logFilename.clear(); QTextStream inputStream(&file); QRegExp rx2("(?:\"([^\"]*)\";?)|(?:([^,]*),?)"); QStringList list; @@ -626,6 +677,7 @@ bool logsDialog::cvsFileParse() } lines++; } + logFilename=QFileInfo(file.fileName()).baseName(); } file.close(); diff --git a/companion/src/logsdialog.h b/companion/src/logsdialog.h index 9901228a7..e78fa6c51 100644 --- a/companion/src/logsdialog.h +++ b/companion/src/logsdialog.h @@ -43,6 +43,7 @@ private: double GetScale(QString channel); QList palette; bool plotLock; + QString logFilename; }; #endif // LOGSDIALOG_H