From 09b45b462014f2369ea20e54f5881bc3c4be877c Mon Sep 17 00:00:00 2001 From: Apostolof Date: Tue, 26 Jun 2018 14:17:33 +0300 Subject: [PATCH] Init --- .classpath | 6 + .project | 17 + bin/gr/auth/ee/computer_networks/Main$1.class | Bin 0 -> 805 bytes bin/gr/auth/ee/computer_networks/Main.class | Bin 0 -> 38893 bytes .../AudioIsAdaptivelyQuantisedListener.class | Bin 0 -> 1119 bytes .../actionListeners/AudioListener.class | Bin 0 -> 3746 bytes .../AudioRequestSpecificSampleListener.class | Bin 0 -> 1675 bytes .../actionListeners/CopterListener.class | Bin 0 -> 2415 bytes .../CopterSliderListener.class | Bin 0 -> 1156 bytes .../actionListeners/EchoListener.class | Bin 0 -> 2018 bytes .../GlobalSettingsListener.class | Bin 0 -> 1691 bytes .../actionListeners/ImageListener.class | Bin 0 -> 2746 bytes .../actionListeners/VehicleListener.class | Bin 0 -> 3239 bytes .../VehicleUseUDPListener.class | Bin 0 -> 1027 bytes .../computer_networks/helpers/MiniPID.class | Bin 0 -> 4805 bytes .../computer_networks/helpers/TCPBundle.class | Bin 0 -> 2186 bytes .../computer_networks/helpers/UDPBundle.class | Bin 0 -> 2375 bytes .../networkTests/Audio$AudioStreamer.class | Bin 0 -> 9158 bytes .../networkTests/Audio.class | Bin 0 -> 6808 bytes .../networkTests/Copter.class | Bin 0 -> 8035 bytes .../computer_networks/networkTests/Echo.class | Bin 0 -> 7062 bytes .../networkTests/Image.class | Bin 0 -> 8730 bytes .../networkTests/Vehicle.class | Bin 0 -> 11967 bytes .../wb/swing/FocusTraversalOnArray.class | Bin 0 -> 1988 bytes output/audioDiff_A5723.csv | 1 + output/audioDiff_A5723_1.csv | 1 + output/audioDiff_A5723_2.csv | 1 + output/audioDiff_A5723_3.csv | 1 + output/audioDiff_A5723_4.csv | 1 + output/audioParams_A5723.csv | 2 + output/audio_A5723.csv | 1 + output/audio_A5723_1.csv | 1 + output/audio_A5723_2.csv | 0 output/audio_A5723_3.csv | 1 + output/audio_A5723_4.csv | 0 output/echo_E7945.csv | 1 + output/echo_E7945_1.csv | 1 + "output/image_M6847FLOW=ONUDP=512\r_0.jpg" | Bin 0 -> 53248 bytes "output/image_M6847FLOW=ONUDP=512\r_1.jpg" | Bin 0 -> 53248 bytes "output/image_M6847UDP=1024\r_0.jpg" | Bin 0 -> 53248 bytes "output/image_M6847UDP=1024\r_1.jpg" | Bin 0 -> 54272 bytes "output/image_M6847UDP=1024\r_2.jpg" | Bin 0 -> 54272 bytes "output/image_M6847UDP=1024\r_3.jpg" | Bin 0 -> 52224 bytes output/vehicle_TCP.csv | 0 output/vehicle_TCP_1.csv | 0 output/vehicle_TCP_2.csv | 0 output/vehicle_TCP_3.csv | 0 output/vehicle_TCP_4.csv | 0 output/vehicle_TCP_5.csv | 6 + output/vehicle_V0820.csv | 0 output/vehicle_V0820_1.csv | 6 + src/gr/auth/ee/computer_networks/Main.java | 1559 +++++++++++++++++ .../AudioIsAdaptivelyQuantisedListener.java | 26 + .../actionListeners/AudioListener.java | 79 + .../AudioRequestSpecificSampleListener.java | 37 + .../actionListeners/CopterListener.java | 65 + .../actionListeners/CopterSliderListener.java | 26 + .../actionListeners/EchoListener.java | 51 + .../GlobalSettingsListener.java | 41 + .../actionListeners/ImageListener.java | 58 + .../actionListeners/VehicleListener.java | 83 + .../VehicleUseUDPListener.java | 26 + .../ee/computer_networks/helpers/MiniPID.java | 572 ++++++ .../computer_networks/helpers/TCPBundle.java | 64 + .../computer_networks/helpers/UDPBundle.java | 78 + .../computer_networks/networkTests/Audio.java | 380 ++++ .../networkTests/Copter.java | 199 +++ .../computer_networks/networkTests/Echo.java | 226 +++ .../computer_networks/networkTests/Image.java | 265 +++ .../networkTests/Vehicle.java | 393 +++++ .../wb/swing/FocusTraversalOnArray.java | 105 ++ 71 files changed, 4380 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 bin/gr/auth/ee/computer_networks/Main$1.class create mode 100644 bin/gr/auth/ee/computer_networks/Main.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/AudioIsAdaptivelyQuantisedListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/AudioListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/AudioRequestSpecificSampleListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/CopterListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/CopterSliderListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/EchoListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/GlobalSettingsListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/ImageListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/VehicleListener.class create mode 100644 bin/gr/auth/ee/computer_networks/actionListeners/VehicleUseUDPListener.class create mode 100644 bin/gr/auth/ee/computer_networks/helpers/MiniPID.class create mode 100644 bin/gr/auth/ee/computer_networks/helpers/TCPBundle.class create mode 100644 bin/gr/auth/ee/computer_networks/helpers/UDPBundle.class create mode 100644 bin/gr/auth/ee/computer_networks/networkTests/Audio$AudioStreamer.class create mode 100644 bin/gr/auth/ee/computer_networks/networkTests/Audio.class create mode 100644 bin/gr/auth/ee/computer_networks/networkTests/Copter.class create mode 100644 bin/gr/auth/ee/computer_networks/networkTests/Echo.class create mode 100644 bin/gr/auth/ee/computer_networks/networkTests/Image.class create mode 100644 bin/gr/auth/ee/computer_networks/networkTests/Vehicle.class create mode 100644 bin/org/eclipse/wb/swing/FocusTraversalOnArray.class create mode 100644 output/audioDiff_A5723.csv create mode 100644 output/audioDiff_A5723_1.csv create mode 100644 output/audioDiff_A5723_2.csv create mode 100644 output/audioDiff_A5723_3.csv create mode 100644 output/audioDiff_A5723_4.csv create mode 100644 output/audioParams_A5723.csv create mode 100644 output/audio_A5723.csv create mode 100644 output/audio_A5723_1.csv create mode 100644 output/audio_A5723_2.csv create mode 100644 output/audio_A5723_3.csv create mode 100644 output/audio_A5723_4.csv create mode 100644 output/echo_E7945.csv create mode 100644 output/echo_E7945_1.csv create mode 100644 "output/image_M6847FLOW=ONUDP=512\r_0.jpg" create mode 100644 "output/image_M6847FLOW=ONUDP=512\r_1.jpg" create mode 100644 "output/image_M6847UDP=1024\r_0.jpg" create mode 100644 "output/image_M6847UDP=1024\r_1.jpg" create mode 100644 "output/image_M6847UDP=1024\r_2.jpg" create mode 100644 "output/image_M6847UDP=1024\r_3.jpg" create mode 100644 output/vehicle_TCP.csv create mode 100644 output/vehicle_TCP_1.csv create mode 100644 output/vehicle_TCP_2.csv create mode 100644 output/vehicle_TCP_3.csv create mode 100644 output/vehicle_TCP_4.csv create mode 100644 output/vehicle_TCP_5.csv create mode 100644 output/vehicle_V0820.csv create mode 100644 output/vehicle_V0820_1.csv create mode 100644 src/gr/auth/ee/computer_networks/Main.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/AudioIsAdaptivelyQuantisedListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/AudioListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/AudioRequestSpecificSampleListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/CopterListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/CopterSliderListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/EchoListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/GlobalSettingsListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/ImageListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/VehicleListener.java create mode 100644 src/gr/auth/ee/computer_networks/actionListeners/VehicleUseUDPListener.java create mode 100644 src/gr/auth/ee/computer_networks/helpers/MiniPID.java create mode 100644 src/gr/auth/ee/computer_networks/helpers/TCPBundle.java create mode 100644 src/gr/auth/ee/computer_networks/helpers/UDPBundle.java create mode 100644 src/gr/auth/ee/computer_networks/networkTests/Audio.java create mode 100644 src/gr/auth/ee/computer_networks/networkTests/Copter.java create mode 100644 src/gr/auth/ee/computer_networks/networkTests/Echo.java create mode 100644 src/gr/auth/ee/computer_networks/networkTests/Image.java create mode 100644 src/gr/auth/ee/computer_networks/networkTests/Vehicle.java create mode 100644 src/org/eclipse/wb/swing/FocusTraversalOnArray.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..0cbf9cd --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..0f546bd --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + ComputerNetworksII + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/bin/gr/auth/ee/computer_networks/Main$1.class b/bin/gr/auth/ee/computer_networks/Main$1.class new file mode 100644 index 0000000000000000000000000000000000000000..4d171193be237dc058707425c00672e7d952b7a4 GIT binary patch literal 805 zcma)4O>Yx15PeR!*<`z+BqiaSv^0gJ1r`LiATCuafi@J8DhCik&c;gICf>;FrTs^o zdub6!`~ZFwV!R10oWPPl#(wi==8b>+{Q4chGdy&WV^|;RfTv~@2oXf_WSSbGKPq94 zVttqd9WGVli3^9}@&W(EgE3dbV6T55BI6>@P`S8$n<~ZoW5JMrE|oMd7#5nX9)q(T z4}^yWEctLzU|0^N60g%qU+DdrM0B+Z8>c!FyV7=`XdCy)h9tFjR5Xqgs-+{$C?5FO#1?gBLJ(W-`#%D7 z4W%+{+phU9l@fY;%#%bUSOp18bCJGIjwbbytRkJB(#~jK+&qJKl0EyhdKv5k9C|E~ z?ax5Cgk`emJDn56gtU~kZz!K(dT>cTO_D65;EVfMu>_N%WCNM9c%~ yqCgeHEJ|(0G>=lI=<8?@!v^`$cYoue?hwsAGIO|(ChZOpwD5pV9szA7G=2f9JFd|H literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/Main.class b/bin/gr/auth/ee/computer_networks/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..19f1764d6fd538e34b46d635fe4c2643d5275653 GIT binary patch literal 38893 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 literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/actionListeners/AudioListener.class b/bin/gr/auth/ee/computer_networks/actionListeners/AudioListener.class new file mode 100644 index 0000000000000000000000000000000000000000..82bb1e2a15c24fc3356f723c68ff74cd1b66442b GIT binary patch literal 3746 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 literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/actionListeners/CopterListener.class b/bin/gr/auth/ee/computer_networks/actionListeners/CopterListener.class new file mode 100644 index 0000000000000000000000000000000000000000..70f9db13673daef1f55d8c11b0a4e5ce6640fd7f GIT binary patch literal 2415 zcmd5;+j1L45ItkbmaS}X;=3H*pc%dlOO!v-gcb}f_Iji6Q{^d6SAK=Rn`UDbn zS2tSfOqWuxIgRs{lJ1Eu)rI4J)6|WcG95c_HkGuc+tf48IqhFPhY%FF^TK#(=$2vE z^~355SyLel2+Vq`#)Z=5OKB@T)#XTFvT2#8()IoATW0-C<>^gJU_8&JmwNNUB$v-h z-g^mwX{&1aua{-xT)Kv8x$>~32(iFew^81xN{ehJJ2pjEHk&sLu6I(FGF9ue<7%p7 zlb6rcfukJvDoUiYb;N+X_QpDUxrR~ic$+_WojS)(8|`E}UW?9!bSbZH=*8>zDS?Hz z%&#N2?QfSe#f)Rybn;Xxf$e!$8KhAE+7R9M!$|#2C+*(%Ce~z+?H+AC6CABLlh>d z;W3`jg(#I%<>S&xK3B+|q%!5)Vd3QHxKPLyo)X)52jaoaIF{ok7+_jM2A>Mt<;aSN zp~=lumY2i~EA0e5f+{JO;w9en5vzo-PdBG$hHXw{;8#2t#%FjILQY`x9h{}%bL0gE z>rzz=t3@46*DDuB76ranhXQ{@d$;l1cQx1D5C88DBW*5tm)L@?U@)rs?2W06=SK%*aFq7ot}`lgLAHF=VV$&*A&o+MK8 zBvFzliI6-=bmU1QBTo_)kqn@ZiI2Qb($lx}BuMV8|BR`1@e`(bn&D}Vrv;vtcv|LZ zm8U3A>pX3KPo{l{)BHZMBybNw%o5N!;>UU7z6DHCGP78s-+ioM8Jk$a1FTYGuR$jZ z%@2=lS_SFj|5@c+Veg+pAV04iX!;1_uzQ_;*jD+8T zFh&Ts2w|KM>V$9`5sExdQCIK~8}!%V0Ulw8@a@se2+w^KZG?o!D+nK2(kn@yr*TmN zp2lSfdKwp|-_y7>1D?jk33(cqhYOqJuLXHxjY|}!{2vky{}jHX6XFQzz-v4jN&JAl z*GT<}>{shQVw1-7D?BAJLt~D{0*xga%QRMLL}}3Z9lS#Ex>ieG+ytTACGUHbeUdVL ej0EXPk|{j#GN14xcQQ|-gfih0I3`4WsQd%?$!<6R literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/actionListeners/CopterSliderListener.class b/bin/gr/auth/ee/computer_networks/actionListeners/CopterSliderListener.class new file mode 100644 index 0000000000000000000000000000000000000000..c4310dd1acbe70ed9a7beaffe860043b4c338590 GIT binary patch literal 1156 zcmbu8+iuf95QhIvLfshCLz*@%v@|INa)6pcIW-j$1R}Mv;38F|ULhx0k}a+s*_*bn zg#@Vt65^VNLd@DJb!hLnu-7v?^X=?E<6pnO{Q$6us)hu^tFCX_1KBeBg*QA9KJVl| zhQj3?rQB9pM-IzMjunRa=$xo85rNP;R#DK9XIP1ge4z>hYq-Ub?sD1i27a3~%oa=G z72}IOnTAgzZH${sN*r7XxOBtkChdUk%6a58!g~+kDo{eMm4RDb?$-`)LcE% zpf1!bEnW5_Y^bwPpdn1sbA_Iannn8Al1QleB+pf{w#j0&>g7`yW%dXelrUqq^0LYgH~hBD?t(n1tHB2ivgA1Q!&ER2}@ zl%be~@)t~fM{Yl}bc!35A#VP}`Ve=9C=anQ#G~_~^)MlaJQice6#gDlz%x82Ji`kD HC$RMg=wcMy literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/actionListeners/EchoListener.class b/bin/gr/auth/ee/computer_networks/actionListeners/EchoListener.class new file mode 100644 index 0000000000000000000000000000000000000000..f4bddf2de176750fbbc093bbdf9f30ebe224e813 GIT binary patch literal 2018 zcmbtU?M@p<6g`6t3+|=_C!s)q5D3I3!AsIKEpd{@n2$Jh48_J(`GXcSF&pe%x;quUZ|wM=}NWl`MZH-*OcSAMJG_wm409?)^@z(m4Udx_4oD%+iKWu-CEgtFKfy` zm%xbLwfB`JKS)o;A(Vm2d)rcApvcz_tYF_EcW)|mX33F_?JU6@ zUswozn<>%hKI+>-vvyH&fkYu9BU&|lk;wcUB|U|Fh)Z0lguC z^FvoTO}P>(lHk%w=CW$Ll25KLtmZw}rC2qO*;f;VBHo2@|;J&|?WL?W_AOnd^9zuqx%4WF`g*F-O_3-lHp zS4NUl?5zd`oh*7ayHT}$hu5vmxY}_@scd`l?b1(i{G2+k=V`|N-~LHnF1yi5XixgG z;w*A+6w9jg-+6vhZj*Kqd+TDEE^^6c)71o~@zB5n(zb1e-`b9AVg?yXTOd_A+-f>% zK2*wcgGHA$C$M;GBVFyrED@ldS;t>ntmu@UjH}1%9S*SZ%wQrNs`C|S)(RPC1Lw@s)ymzl$>pr zQ56#LvKRU_x#aLu?mOFmGaN7O(%X;GzY|?Za?_yRp5&IHXKEOFrgoucY8HB?RzY(N z9o%r}_6=G&v=TH=On=19Y4JPyc^Kefh=*YwMtKL_;{l+nh2|8y+u5k~Ow4z8b)q?$rJQ=h%rC}d1>_di~Vc5Yq;|_K*@L<;!$YX>& zLCE(Ad6JN)h{Ju{L5fysjr=A7E2Y^7K_!XEtac`_}(YK zkyt;{dA^y89U+~xe#N6BeDNpdzMuXLWAyJoM3$xjnvReoYv{xpKEyI@jDE!1L#$qu qa)!V&M8To}X7Ln{@QmyiG{3@Q9Z-J+d=gL&WmJfkz&a7?K=oh4o&7BU literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/actionListeners/GlobalSettingsListener.class b/bin/gr/auth/ee/computer_networks/actionListeners/GlobalSettingsListener.class new file mode 100644 index 0000000000000000000000000000000000000000..5b104657d9a242d766c2716d3ea826305af10b52 GIT binary patch literal 1691 zcmb7E+foxj5IvJb7vf^LigFQ9&?G2}cN9e-1dYZ(RRUJ=LT!>UtS+@4^({)Cny z<%1vKM_KmlMu|v)K4f;L(|x*6PoMezPCjb^{59&NudsZMn8+Sj*KnyrvACW*82w z_O7z{4j0Or{{xU=@U>?#QbhDPnq!EkGiwZqoLA>b z#L;QOL`ORqx=k2p)4N_1?a}U>i6qW2q>7HF9IQm{6OJ z&yYX9ynnk6syRrX*twG({bC|&lk z`Ci(NFmVZ&8Tx&$%0YF@Q44`mp78TRcaoAN((4*=0#^-Oq1-1-kBKxg3`T=1J$`h3 z=}g#`XpGBB(%8)=F^TI2t}%2SjCesP-r&;26fB0eZCm=BYz%!(zM&AB2$@0>H*m|q zO@^ssS^hPDCJFTpgGrRbv5BTSkuGG`HRe4NGq}&tpVNYu8Ya09d5!n6Yd4Vb& zAnZZH9tyFuQG64dkU~yjy&N2hC_BuIdX)0s|($$8y<_FnsO*5=Q@fBhZ6E!1M@vT(l=q?}N% zrIbpQ{MtsSRj}$Qz3B(*^^{Z6uJ2{sx>lYF>Zx?isi@XAhNy*OFPxW7s_J-^)I#xv zD(M)yEex7dXH%!tOXca*RGS_P!_WPo=4e&Ut1Uh6s%qJ2UQ*wMs;+1JvZ72zlx(Hy zn=X|uwel)@?clYhD6jSA+=}PuFd+D`eaf3sljgV)uC%9BMFkTNc(p$WJ?++1 zPCL535Nf93fF%jlqT{JO;>M|#_=$Ft8KwGR<4l zp;xYox$a5VbM*rYkwmg!Au9QaBZ9LwPT_PfES$FyLyxR3*ofmDSzWYYXjIn{y_xUz2^M)jIow=mh+ zjgEy&mtH5@qjgAiwF~T)$G+oM`rD7+s%|%#?e`i<>+IUW3`tV{`i~ttyi(iI{{LQ{ zYOjdzH(FKE*GTxH3WO0<*}_mGAgTQ%G$({Kku1b<6SrfyMWX5WAf7m`XX7K>;e)Iz zoePUKS5Jpp`(Ay{lftC2XksN<=)pZ!ah?QrkX zy*VAw-o$<#$wCY>7E&EOY_h!oZ!&xwb9flTJfrv)4z}?b(iUPBr5mVDB$5pfdtt@# z7*Arz(2+OoqRD?YvRJUtv*84F#WM>h4{to6u!?95mg*~pP3r;m8Q%<8SOi4zoC;si*J{ZjOO4=OmcE*leB85JUij6g#W}eiR zDzU}0Vx6FJgT(!&V)l0G#v@@gbAA|<)VyoxxUKt-OBOIp0*~-_g#6zxJ%ImO^b6aY znVrDQ>;sf}m+LO{@jH8fIcEnjGx?u$gkRZDD0zmvfIEwGV)PXTMy+3PPKH4lhGZC) z;j#=PGF<(UvRz1Wyh8iHSwwN3t3lemKs!U!dXc+fT;ktVT*fG+?1l|o!x(oK?O&&s z2GVhZ<2Co<&6vS)O>m3}j_ZPBASyrxjtG*0ZhKA6#g1k7S=H$LCqQoAfhZFEAf^HVqgJXToz;(63vASOA8~z49?CfFL}#L zs!|nS^OVOtCzYs`ROJWcF@GmjseGqrxvUb5d9YGj-F^D>_Br3V^f~kUU%&hY;3B*@ z>J)}og0x);SJPUjOaA&sCDg&9r^82nuvSjnrO@%coKp_9r-O2OL9aR`S8p-mh$%GR zw;$SR*Y;M@GfVe%DU72*q0MmZM`2n&)Lxh#t&ybAb`2?dr7;Le0=BHs1p?R`o`9Uj-8X@ zYT$>Vt7rYPBigq9lHB=ARp;#V*4fdWv%-ef%Uk?YJN%6AGYFw5)ik3LY=hmUd)6+k z>9Ab%L)+bL&!J*wHsgC9!)NS2pW8PtR<%ndbGztq6RFqMAUf;Z${L+7Fuysq+GOc4967?=a>Qc%KDNHiuRJr#B9m=CEH!F z14s5%W-MHF$_gX<`|c%gYDlS@J+;}jN7~o^VLP{L*)P2prETq{*T{Rt6x-jeTPeAd zPm)51BX7^@K;FDwR%nl$n|{7DO-Pv) z3CAj7=zHY}PqKo_Vm)_L3ysJSNRdUYBdB;DE7`!nKoiwWSeV2Og%gG1XmP%`Z=fZa$yS=6Tp`!eiiOeAf?#1Yp*}6mBUT5zQeVds#A6N~uD3)j(5`3t>Qg zL(j_)Gp8{VN1pYwro?Wgl7(5^R!BJIf_7OI#2UWJyKxj02KV($wR?!c+Z`i;d3+cL zBhp@@?!^?f@Dc7P#8)&+nb_0XlZxQ)HYkCQ@o5~N&;_Q^n6s=G>J=SW_za5*jT?4Q z*5uK|JzSE?CNKwED$A0>A3d*{T`ywF8rF8RdW{dM#-)*7iSQhjEoda^O}(j0Z0*8Z z5tCQ{y~#T@{(o;WADkVmoL4v*LEZa}vsLlUl-8#0jcVae6#Pn1(vyyq_SWY^o*<*D))5j#=4p%*uXaR(2b% z^{A76M{Os#`;I%sb+q>>-tJXDqfMrEnL1_alBrv!vofV*>XYf5Olg@0WxDVKh1B5^ z=c{avz&nVcgC=xxcZ$ugi%L(U4c*+G!CC(L(St#xa2dTALLaMLKWWef1`w{`J?<3m zy&r*99n>HuO&PF#0=8eko)fUin4nD_5V*+(!JCW=;AEp9PBsbTWI`|}4+`j{wFl|} zqP{@X7m4~3QD3H`uArSrx{0EXwha>N6%4aXUPA^W$l|&|{bhu#ikcWr7{!t)6UaJ4 zNhs?LCBcjtO2T=-P!iAvLrF;EhLWI4_^0Gkf|7)iz)EUN$)^NAPlS@-is!Bpp9!sM z=3cZuu78H%ma!i({tP#Je?t2c)2r5wE0^| z5F{3eH9rb5*Ga)uDzRYU$Bbt_pE+}X{`&SEz)L(gkP_JIg|;(PeVfR3gTaTPqVUuw zbs2=`k?puj27XIMihK$qyG?!RdUPDo@&4PZw1JGk!kKg7*q-C}>^Ge=a+QHOfeoD< z+0musJYA5l?0TPT=&Dy>`+X1&97WwD8mWdPuRHz8JNh`JNY#Tb32e5Kq-G=TNjB94 z=60no)hmH?soWOG=uQ)9+_jK}nT5c-1p~MF*^)lJ9u7Jb9yuM4`T17hI$qlerH-e` zjOxosV88YM93q4t#Am6EdX}J-%R7#cM{*%)wrolK~o1?{59ZQ~5$`V5O{$ zuUmZO_44`Xr;*YJf-`qG+T}>_)2w`jRS{p1`@~TS3w+OUEnp$TZ&}P^F^=MDrY&*A zc4B!-YH(MIa}!ea2GSyvmf{Xgx;LqwlDIF{#};6PzfIINr_6liGji22?*BkxjN%yE ee^r_>XO-2h#R@0f{2y)}WmK3aQ02d-@a#7g`1lwA literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/helpers/MiniPID.class b/bin/gr/auth/ee/computer_networks/helpers/MiniPID.class new file mode 100644 index 0000000000000000000000000000000000000000..d7498759c36e91155bbdfb77f4238531053687f4 GIT binary patch literal 4805 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 v8d9+q1;jQHY!nh~Qj}7~CAk9&VK=kcR6D-- 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 LxbP$ODZu{%&d0U+ literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/networkTests/Audio.class b/bin/gr/auth/ee/computer_networks/networkTests/Audio.class new file mode 100644 index 0000000000000000000000000000000000000000..9beea70c24fc5053ea0ced9de753515df4dbd0c6 GIT binary patch literal 6808 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 literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/networkTests/Copter.class b/bin/gr/auth/ee/computer_networks/networkTests/Copter.class new file mode 100644 index 0000000000000000000000000000000000000000..b0c1c046f3d62d2a7daa50a84bf9a8625cb67d45 GIT binary patch literal 8035 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 literal 0 HcmV?d00001 diff --git a/bin/gr/auth/ee/computer_networks/networkTests/Vehicle.class b/bin/gr/auth/ee/computer_networks/networkTests/Vehicle.class new file mode 100644 index 0000000000000000000000000000000000000000..e327e281bbb59db48b5ff8126010bda00f53ec0f GIT binary patch literal 11967 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 literal 0 HcmV?d00001 diff --git a/bin/org/eclipse/wb/swing/FocusTraversalOnArray.class b/bin/org/eclipse/wb/swing/FocusTraversalOnArray.class new file mode 100644 index 0000000000000000000000000000000000000000..56592ff97d154ffde575c4a9039b8a584c2da618 GIT binary patch literal 1988 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 literal 0 HcmV?d00001 diff --git "a/output/image_M6847UDP=1024\r_0.jpg" "b/output/image_M6847UDP=1024\r_0.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..8cc3b93a9d53f270d7c4f758443f557d6afad7bb GIT binary patch literal 53248 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 G&?O@Gw?LD$-n|Xz4`)YRf{0 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 literal 0 HcmV?d00001 diff --git "a/output/image_M6847UDP=1024\r_1.jpg" "b/output/image_M6847UDP=1024\r_1.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..66a4df23b20c649fa8f4418caa2a57525be5db8e GIT binary patch literal 54272 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 z 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 z

k#*J{l_CUSVGp8`6%8EZYd${{r4 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 axJReI2f@=MZ%#t~`TT>xKM4FkA@E<-sQB9e literal 0 HcmV?d00001 diff --git "a/output/image_M6847UDP=1024\r_3.jpg" "b/output/image_M6847UDP=1024\r_3.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..1112e9e1606acf2340e59e5534b55023ccc07ebc GIT binary patch literal 52224 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 z%0A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%0AL>ld&j%35-X^x_9eCDi6EALPg0HWZ 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 comboBoxImagePacketLength = new JComboBox(); + comboBoxImagePacketLength.setModel(new DefaultComboBoxModel(new Integer[] { 128, 256, 512, 1024 })); + GridBagConstraints gbc_comboBoxImagePacketLength = new GridBagConstraints(); + gbc_comboBoxImagePacketLength.insets = new Insets(0, 0, 5, 0); + gbc_comboBoxImagePacketLength.fill = GridBagConstraints.HORIZONTAL; + gbc_comboBoxImagePacketLength.gridx = 1; + gbc_comboBoxImagePacketLength.gridy = 2; + imageTabMainContentPanel.add(comboBoxImagePacketLength, gbc_comboBoxImagePacketLength); + + JLabel lblImageDuration = new JLabel("Duration:"); + lblImageDuration.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblImageDuration.setForeground(Color.WHITE); + GridBagConstraints gbc_lblImageDuration = new GridBagConstraints(); + gbc_lblImageDuration.insets = new Insets(0, 0, 5, 5); + gbc_lblImageDuration.anchor = GridBagConstraints.WEST; + gbc_lblImageDuration.gridx = 0; + gbc_lblImageDuration.gridy = 3; + gbc_lblImageDuration.weightx = 1.0; + imageTabMainContentPanel.add(lblImageDuration, gbc_lblImageDuration); + + JFormattedTextField formatedTextFieldImageDuration = new JFormattedTextField(new MaskFormatter("####")); + formatedTextFieldImageDuration.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + formatedTextFieldImageDuration.setText("0010"); + GridBagConstraints gbc_formatedTextFieldImageDuration = new GridBagConstraints(); + gbc_formatedTextFieldImageDuration.insets = new Insets(0, 0, 5, 0); + gbc_formatedTextFieldImageDuration.anchor = GridBagConstraints.EAST; + gbc_formatedTextFieldImageDuration.fill = GridBagConstraints.HORIZONTAL; + gbc_formatedTextFieldImageDuration.gridx = 1; + gbc_formatedTextFieldImageDuration.gridy = 3; + imageTabMainContentPanel.add(formatedTextFieldImageDuration, gbc_formatedTextFieldImageDuration); + formatedTextFieldImageDuration.setColumns(10); + + btnImageSubmit = new JButton("Submit"); + btnImageSubmit.setFont(new Font("CMU Sans Serif", Font.BOLD, 18)); + btnImageSubmit.setEnabled(true); + GridBagConstraints gbc_btnImageSubmit = new GridBagConstraints(); + gbc_btnImageSubmit.anchor = GridBagConstraints.NORTHEAST; + gbc_btnImageSubmit.gridx = 1; + gbc_btnImageSubmit.gridy = 4; + imageTabMainContentPanel.add(btnImageSubmit, gbc_btnImageSubmit); + + JPanel imageRuntimeOutputPanel = new JPanel(); + imageRuntimeOutputPanel.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_imageRuntimeOutputPanel = new GridBagConstraints(); + gbc_imageRuntimeOutputPanel.weighty = 1.0; + gbc_imageRuntimeOutputPanel.gridheight = 2; + gbc_imageRuntimeOutputPanel.gridwidth = 2; + gbc_imageRuntimeOutputPanel.insets = new Insets(0, 0, 0, 5); + gbc_imageRuntimeOutputPanel.fill = GridBagConstraints.BOTH; + gbc_imageRuntimeOutputPanel.gridx = 0; + gbc_imageRuntimeOutputPanel.gridy = 5; + imageTabMainContentPanel.add(imageRuntimeOutputPanel, gbc_imageRuntimeOutputPanel); + GridBagLayout gbl_imageRuntimeOutputPanel = new GridBagLayout(); + gbl_imageRuntimeOutputPanel.columnWidths = new int[] { 0, 0, 0 }; + gbl_imageRuntimeOutputPanel.rowHeights = new int[] { 0, 0, 0, 0 }; + gbl_imageRuntimeOutputPanel.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; + gbl_imageRuntimeOutputPanel.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE }; + imageRuntimeOutputPanel.setLayout(gbl_imageRuntimeOutputPanel); + + JTextPane textPaneImageStatsOutput = new JTextPane(); + textPaneImageStatsOutput.setEditable(false); + textPaneImageStatsOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + textPaneImageStatsOutput.setForeground(Color.GREEN); + textPaneImageStatsOutput.putClientProperty("Nimbus.Overrides", uiDefaults); + textPaneImageStatsOutput.putClientProperty("Nimbus.Overrides.InheritDefaults", true); + textPaneImageStatsOutput.setBackground(Color.DARK_GRAY); + textPaneImageStatsOutput.setText("Current Image" + "\t" + "\t" + "Average" + "\n" + "Time elapsed = 0 ms" + "\t" + + "Average image time = 0 ms" + "\n" + "Number of packets = 0" + "\t" + "Average number of packets = 0" + + "\n" + "Image size = 0 KB" + "\t\t" + "Average image size = 0 KB" + "\n" + "\n" + "FPS = 0"); + GridBagConstraints gbc_textPaneImageStatsOutput = new GridBagConstraints(); + gbc_textPaneImageStatsOutput.insets = new Insets(0, 0, 5, 0); + gbc_textPaneImageStatsOutput.anchor = GridBagConstraints.NORTHWEST; + gbc_textPaneImageStatsOutput.fill = GridBagConstraints.NONE; + gbc_textPaneImageStatsOutput.gridx = 0; + gbc_textPaneImageStatsOutput.gridy = 0; + gbc_textPaneImageStatsOutput.weighty = 1.0; + imageRuntimeOutputPanel.add(textPaneImageStatsOutput, gbc_textPaneImageStatsOutput); + + JLabel lblImageRuntimeOutput = new JLabel(""); + lblImageRuntimeOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblImageRuntimeOutput = new GridBagConstraints(); + gbc_lblImageRuntimeOutput.insets = new Insets(0, 0, 0, 5); + gbc_lblImageRuntimeOutput.anchor = GridBagConstraints.CENTER; + gbc_lblImageRuntimeOutput.fill = GridBagConstraints.NONE; + gbc_lblImageRuntimeOutput.gridx = 0; + gbc_lblImageRuntimeOutput.gridy = 2; + gbc_lblImageRuntimeOutput.weightx = 1.0; + gbc_lblImageRuntimeOutput.weighty = 1.0; + imageRuntimeOutputPanel.add(lblImageRuntimeOutput, gbc_lblImageRuntimeOutput); + + // ==============================AUDIO STREAMING TEST + // TAB============================== + JPanel audioPanel = new JPanel(); + audioPanel.setBorder(new EmptyBorder(2, 2, 2, 2)); + audioPanel.setBackground(Color.DARK_GRAY); + audioPanel.setForeground(Color.WHITE); + mainFrameTabbedPane.addTab("Audio Streaming", null, audioPanel, null); + GridBagLayout gbl_audioPanel = new GridBagLayout(); + gbl_audioPanel.columnWidths = new int[] { 176, 0 }; + gbl_audioPanel.rowHeights = new int[] { 15, 0, 0 }; + gbl_audioPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; + gbl_audioPanel.rowWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; + audioPanel.setLayout(gbl_audioPanel); + + JLabel lblAudioStreamTitle = new JLabel("Test Audio Streaming"); + lblAudioStreamTitle.setFont(new Font("CMU Sans Serif", Font.BOLD, 25)); + lblAudioStreamTitle.setForeground(Color.WHITE); + GridBagConstraints gbc_lblAudioStreamTitle = new GridBagConstraints(); + gbc_lblAudioStreamTitle.insets = new Insets(0, 0, 5, 0); + gbc_lblAudioStreamTitle.anchor = GridBagConstraints.NORTH; + gbc_lblAudioStreamTitle.gridx = 0; + gbc_lblAudioStreamTitle.gridy = 0; + audioPanel.add(lblAudioStreamTitle, gbc_lblAudioStreamTitle); + + JPanel audioTabMainContentPanel = new JPanel(); + audioTabMainContentPanel.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_audioTabMainContentPanel = new GridBagConstraints(); + gbc_audioTabMainContentPanel.gridheight = 3; + gbc_audioTabMainContentPanel.insets = new Insets(0, 0, 5, 0); + gbc_audioTabMainContentPanel.fill = GridBagConstraints.BOTH; + gbc_audioTabMainContentPanel.gridx = 0; + gbc_audioTabMainContentPanel.gridy = 1; + audioPanel.add(audioTabMainContentPanel, gbc_audioTabMainContentPanel); + GridBagLayout gbl_audioTabMainContentPanel = new GridBagLayout(); + gbl_audioTabMainContentPanel.columnWidths = new int[] { 0, 0, 0 }; + gbl_audioTabMainContentPanel.rowHeights = new int[] { 0, 0, 0, 0, 0 }; + gbl_audioTabMainContentPanel.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; + gbl_audioTabMainContentPanel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; + audioTabMainContentPanel.setLayout(gbl_audioTabMainContentPanel); + + JLabel lblAudioRequestCode = new JLabel("Audio stream request code:"); + lblAudioRequestCode.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblAudioRequestCode.setForeground(Color.WHITE); + GridBagConstraints gbc_lblAudioRequestCode = new GridBagConstraints(); + gbc_lblAudioRequestCode.insets = new Insets(0, 0, 5, 5); + gbc_lblAudioRequestCode.anchor = GridBagConstraints.WEST; + gbc_lblAudioRequestCode.gridx = 0; + gbc_lblAudioRequestCode.gridy = 0; + gbc_lblAudioRequestCode.weightx = 1.0; + gbc_lblAudioRequestCode.gridwidth = 2; + audioTabMainContentPanel.add(lblAudioRequestCode, gbc_lblAudioRequestCode); + + JFormattedTextField formatedTextFieldAudioRequestCode = new JFormattedTextField(new MaskFormatter("'A####")); + formatedTextFieldAudioRequestCode.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + formatedTextFieldAudioRequestCode.setText("A0000"); + GridBagConstraints gbc_formatedTextFieldAudioRequestCode = new GridBagConstraints(); + gbc_formatedTextFieldAudioRequestCode.insets = new Insets(0, 0, 5, 0); + gbc_formatedTextFieldAudioRequestCode.anchor = GridBagConstraints.EAST; + gbc_formatedTextFieldAudioRequestCode.fill = GridBagConstraints.HORIZONTAL; + gbc_formatedTextFieldAudioRequestCode.gridx = 2; + gbc_formatedTextFieldAudioRequestCode.gridy = 0; + audioTabMainContentPanel.add(formatedTextFieldAudioRequestCode, gbc_formatedTextFieldAudioRequestCode); + formatedTextFieldAudioRequestCode.setColumns(10); + + JLabel lblAudioRequestSpecificSample = new JLabel("Request specific sample:"); + lblAudioRequestSpecificSample.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblAudioRequestSpecificSample.setForeground(Color.WHITE); + GridBagConstraints gbc_lblAudioRequestSpecificImage = new GridBagConstraints(); + gbc_lblAudioRequestSpecificImage.insets = new Insets(0, 0, 5, 5); + gbc_lblAudioRequestSpecificImage.anchor = GridBagConstraints.WEST; + gbc_lblAudioRequestSpecificImage.gridx = 0; + gbc_lblAudioRequestSpecificImage.gridy = 1; + gbc_lblAudioRequestSpecificImage.weightx = 1.0; + gbc_lblAudioRequestSpecificImage.gridwidth = 2; + audioTabMainContentPanel.add(lblAudioRequestSpecificSample, gbc_lblAudioRequestSpecificImage); + + JCheckBox checkBoxAudioRequestSpecificSample = new JCheckBox(""); + checkBoxAudioRequestSpecificSample.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_checkBoxAudioRequestSpecificImageSample = new GridBagConstraints(); + gbc_checkBoxAudioRequestSpecificImageSample.insets = new Insets(0, 0, 5, 0); + gbc_checkBoxAudioRequestSpecificImageSample.anchor = GridBagConstraints.EAST; + gbc_checkBoxAudioRequestSpecificImageSample.gridx = 1; + gbc_checkBoxAudioRequestSpecificImageSample.gridy = 1; + audioTabMainContentPanel.add(checkBoxAudioRequestSpecificSample, gbc_checkBoxAudioRequestSpecificImageSample); + + JFormattedTextField formatedTextFieldAudioRequestSpecificSample = new JFormattedTextField( + new MaskFormatter("'L##")); + formatedTextFieldAudioRequestSpecificSample.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + formatedTextFieldAudioRequestSpecificSample.setText("L00"); + formatedTextFieldAudioRequestSpecificSample.setEnabled(false); + GridBagConstraints gbc_formatedTextFieldAudioRequestSpecificImage = new GridBagConstraints(); + gbc_formatedTextFieldAudioRequestSpecificImage.insets = new Insets(0, 0, 5, 0); + gbc_formatedTextFieldAudioRequestSpecificImage.anchor = GridBagConstraints.EAST; + gbc_formatedTextFieldAudioRequestSpecificImage.fill = GridBagConstraints.HORIZONTAL; + gbc_formatedTextFieldAudioRequestSpecificImage.gridx = 2; + gbc_formatedTextFieldAudioRequestSpecificImage.gridy = 1; + audioTabMainContentPanel.add(formatedTextFieldAudioRequestSpecificSample, + gbc_formatedTextFieldAudioRequestSpecificImage); + formatedTextFieldAudioRequestSpecificSample.setColumns(10); + + JLabel lblAudioPoolAndNumberOfPackets = new JLabel("Audio pool and number of packets:"); + lblAudioPoolAndNumberOfPackets.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblAudioPoolAndNumberOfPackets.setForeground(Color.WHITE); + GridBagConstraints gbc_lblAudioPoolAndNumberOfPackets = new GridBagConstraints(); + gbc_lblAudioPoolAndNumberOfPackets.insets = new Insets(0, 0, 5, 5); + gbc_lblAudioPoolAndNumberOfPackets.anchor = GridBagConstraints.WEST; + gbc_lblAudioPoolAndNumberOfPackets.gridx = 0; + gbc_lblAudioPoolAndNumberOfPackets.gridy = 2; + gbc_lblAudioPoolAndNumberOfPackets.weightx = 2.0; + audioTabMainContentPanel.add(lblAudioPoolAndNumberOfPackets, gbc_lblAudioPoolAndNumberOfPackets); + + JComboBox comboBoxAudioPoolSelect = new JComboBox(); + comboBoxAudioPoolSelect.setModel(new DefaultComboBoxModel(new String[] { "T", "F" })); + GridBagConstraints gbc_comboBoxAudioPoolSelect = new GridBagConstraints(); + gbc_comboBoxAudioPoolSelect.insets = new Insets(0, 0, 5, 0); + gbc_comboBoxAudioPoolSelect.fill = GridBagConstraints.NONE; + gbc_comboBoxAudioPoolSelect.anchor = GridBagConstraints.EAST; + gbc_comboBoxAudioPoolSelect.gridx = 1; + gbc_comboBoxAudioPoolSelect.gridy = 2; + audioTabMainContentPanel.add(comboBoxAudioPoolSelect, gbc_comboBoxAudioPoolSelect); + + JFormattedTextField formatedTextFieldAudioNumberOfPackets = new JFormattedTextField(new MaskFormatter("###")); + formatedTextFieldAudioNumberOfPackets.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + formatedTextFieldAudioNumberOfPackets.setText("320"); + GridBagConstraints gbc_formatedTextFieldAudioNumberOfPackets = new GridBagConstraints(); + gbc_formatedTextFieldAudioNumberOfPackets.insets = new Insets(0, 0, 5, 0); + gbc_formatedTextFieldAudioNumberOfPackets.anchor = GridBagConstraints.EAST; + gbc_formatedTextFieldAudioNumberOfPackets.fill = GridBagConstraints.HORIZONTAL; + gbc_formatedTextFieldAudioNumberOfPackets.gridx = 2; + gbc_formatedTextFieldAudioNumberOfPackets.gridy = 2; + gbc_formatedTextFieldAudioNumberOfPackets.weightx = 1.0; + audioTabMainContentPanel.add(formatedTextFieldAudioNumberOfPackets, gbc_formatedTextFieldAudioNumberOfPackets); + formatedTextFieldAudioNumberOfPackets.setColumns(10); + + JLabel lblAudioAdaptiveQuantiser = new JLabel("Adaptive quantiser:"); + lblAudioAdaptiveQuantiser.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblAudioAdaptiveQuantiser.setForeground(Color.WHITE); + GridBagConstraints gbc_lblAudioAdaptiveQuantiser = new GridBagConstraints(); + gbc_lblAudioAdaptiveQuantiser.insets = new Insets(0, 0, 5, 5); + gbc_lblAudioAdaptiveQuantiser.anchor = GridBagConstraints.WEST; + gbc_lblAudioAdaptiveQuantiser.gridx = 0; + gbc_lblAudioAdaptiveQuantiser.gridy = 3; + gbc_lblAudioAdaptiveQuantiser.weightx = 1.0; + gbc_lblAudioAdaptiveQuantiser.gridwidth = 2; + audioTabMainContentPanel.add(lblAudioAdaptiveQuantiser, gbc_lblAudioAdaptiveQuantiser); + + JCheckBox checkBoxAudioAdaptiveQuantiser = new JCheckBox(""); + checkBoxAudioAdaptiveQuantiser.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_checkBoxAudioAdaptiveQuantiser = new GridBagConstraints(); + gbc_checkBoxAudioAdaptiveQuantiser.insets = new Insets(0, 0, 5, 0); + gbc_checkBoxAudioAdaptiveQuantiser.anchor = GridBagConstraints.WEST; + gbc_checkBoxAudioAdaptiveQuantiser.gridx = 2; + gbc_checkBoxAudioAdaptiveQuantiser.gridy = 3; + audioTabMainContentPanel.add(checkBoxAudioAdaptiveQuantiser, gbc_checkBoxAudioAdaptiveQuantiser); + + JLabel lblAudioBetaParameter = new JLabel("Quantiser beta parameter:"); + lblAudioBetaParameter.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblAudioBetaParameter.setForeground(Color.WHITE); + GridBagConstraints gbc_lblAudioBetaParameter = new GridBagConstraints(); + gbc_lblAudioBetaParameter.insets = new Insets(0, 0, 5, 5); + gbc_lblAudioBetaParameter.anchor = GridBagConstraints.WEST; + gbc_lblAudioBetaParameter.gridx = 0; + gbc_lblAudioBetaParameter.gridy = 4; + gbc_lblAudioBetaParameter.weightx = 1.0; + gbc_lblAudioBetaParameter.gridwidth = 2; + audioTabMainContentPanel.add(lblAudioBetaParameter, gbc_lblAudioBetaParameter); + + JFormattedTextField formatedTextFieldAudioBetaParameter = new JFormattedTextField(new MaskFormatter("#")); + formatedTextFieldAudioBetaParameter.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + formatedTextFieldAudioBetaParameter.setText("1"); + GridBagConstraints gbc_formatedTextFieldAudioBetaParameter = new GridBagConstraints(); + gbc_formatedTextFieldAudioBetaParameter.insets = new Insets(0, 0, 5, 0); + gbc_formatedTextFieldAudioBetaParameter.anchor = GridBagConstraints.EAST; + gbc_formatedTextFieldAudioBetaParameter.fill = GridBagConstraints.HORIZONTAL; + gbc_formatedTextFieldAudioBetaParameter.gridx = 2; + gbc_formatedTextFieldAudioBetaParameter.gridy = 4; + gbc_formatedTextFieldAudioBetaParameter.weightx = 1.0; + audioTabMainContentPanel.add(formatedTextFieldAudioBetaParameter, gbc_formatedTextFieldAudioBetaParameter); + formatedTextFieldAudioBetaParameter.setColumns(10); + + JLabel lblAudioQParameter = new JLabel("Player's number of bits:"); + lblAudioQParameter.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblAudioQParameter.setForeground(Color.WHITE); + GridBagConstraints gbc_lblAudioQParameter = new GridBagConstraints(); + gbc_lblAudioQParameter.insets = new Insets(0, 0, 5, 5); + gbc_lblAudioQParameter.fill = GridBagConstraints.NONE; + gbc_lblAudioQParameter.anchor = GridBagConstraints.NORTHWEST; + gbc_lblAudioQParameter.gridx = 0; + gbc_lblAudioQParameter.gridy = 5; + gbc_lblAudioQParameter.weightx = 1.0; + gbc_lblAudioQParameter.gridwidth = 2; + audioTabMainContentPanel.add(lblAudioQParameter, gbc_lblAudioQParameter); + + JComboBox comboBoxAudioQParameter = new JComboBox(); + comboBoxAudioQParameter.setModel(new DefaultComboBoxModel(new Integer[] { 8, 16 })); + GridBagConstraints gbc_comboBoxAudioQParameter = new GridBagConstraints(); + gbc_comboBoxAudioQParameter.insets = new Insets(0, 0, 5, 0); + gbc_comboBoxAudioQParameter.fill = GridBagConstraints.NONE; + gbc_comboBoxAudioQParameter.anchor = GridBagConstraints.NORTHWEST; + gbc_comboBoxAudioQParameter.gridx = 2; + gbc_comboBoxAudioQParameter.gridy = 5; + audioTabMainContentPanel.add(comboBoxAudioQParameter, gbc_comboBoxAudioQParameter); + + btnAudioSubmit = new JButton("Submit"); + btnAudioSubmit.setFont(new Font("CMU Sans Serif", Font.BOLD, 18)); + btnAudioSubmit.setEnabled(true); + GridBagConstraints gbc_btnAudioSubmit = new GridBagConstraints(); + gbc_btnAudioSubmit.fill = GridBagConstraints.NONE; + gbc_btnAudioSubmit.anchor = GridBagConstraints.EAST; + gbc_btnAudioSubmit.gridx = 2; + gbc_btnAudioSubmit.gridy = 6; + audioTabMainContentPanel.add(btnAudioSubmit, gbc_btnAudioSubmit); + + JLabel lblAudioStatsOutput = new JLabel("Streaming speed = "); + lblAudioStatsOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblAudioStatsOutput.setForeground(Color.GREEN); + lblAudioStatsOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblAudioStatsOutput = new GridBagConstraints(); + gbc_lblAudioStatsOutput.insets = new Insets(0, 0, 5, -2); + gbc_lblAudioStatsOutput.fill = GridBagConstraints.NONE; + gbc_lblAudioStatsOutput.anchor = GridBagConstraints.ABOVE_BASELINE_TRAILING; + gbc_lblAudioStatsOutput.gridx = 0; + gbc_lblAudioStatsOutput.gridy = 7; + audioTabMainContentPanel.add(lblAudioStatsOutput, gbc_lblAudioStatsOutput); + + JTextPane textPaneAudioStatsOutput = new JTextPane(); + textPaneAudioStatsOutput.setEditable(false); + textPaneAudioStatsOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + textPaneAudioStatsOutput.setForeground(Color.GREEN); + textPaneAudioStatsOutput.putClientProperty("Nimbus.Overrides", uiDefaults); + textPaneAudioStatsOutput.putClientProperty("Nimbus.Overrides.InheritDefaults", true); + textPaneAudioStatsOutput.setBackground(Color.DARK_GRAY); + textPaneAudioStatsOutput.setText("0 KB/s"); + GridBagConstraints gbc_textPaneAudioStatsOutput = new GridBagConstraints(); + gbc_textPaneAudioStatsOutput.insets = new Insets(0, 0, 5, 0); + gbc_textPaneAudioStatsOutput.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; + gbc_textPaneAudioStatsOutput.fill = GridBagConstraints.NONE; + gbc_textPaneAudioStatsOutput.gridx = 1; + gbc_textPaneAudioStatsOutput.gridy = 7; + gbc_textPaneAudioStatsOutput.gridwidth = 2; + audioTabMainContentPanel.add(textPaneAudioStatsOutput, gbc_textPaneAudioStatsOutput); + + JProgressBar progressBarAudioStreamer = new JProgressBar(); + progressBarAudioStreamer.setMaximum(100); + progressBarAudioStreamer.setMinimum(0); + if (!UIManager.getLookAndFeel().getName().equals("Nimbus")) { + progressBarAudioStreamer.setForeground(STATUS_LINE_ACTION_RUNNING); + } + progressBarAudioStreamer.setStringPainted(true); + progressBarAudioStreamer.setFont(new Font("Courier new", Font.PLAIN, 14)); + progressBarAudioStreamer.setString("Download progress"); + GridBagConstraints gbc_progressBarAudioStreamer = new GridBagConstraints(); + gbc_progressBarAudioStreamer.insets = new Insets(0, 0, 5, 0); + gbc_progressBarAudioStreamer.anchor = GridBagConstraints.CENTER; + gbc_progressBarAudioStreamer.fill = GridBagConstraints.HORIZONTAL; + gbc_progressBarAudioStreamer.gridx = 0; + gbc_progressBarAudioStreamer.gridy = 8; + gbc_progressBarAudioStreamer.gridwidth = 3; + audioTabMainContentPanel.add(progressBarAudioStreamer, gbc_progressBarAudioStreamer); + + JProgressBar progressBarAudioPlayer = new JProgressBar(); + progressBarAudioPlayer.setMaximum(1000); + progressBarAudioPlayer.setMinimum(0); + if (!UIManager.getLookAndFeel().getName().equals("Nimbus")) { + progressBarAudioPlayer.setForeground(STATUS_LINE_ACTION_DONE); + } + progressBarAudioPlayer.setStringPainted(true); + progressBarAudioPlayer.setFont(new Font("Courier new", Font.PLAIN, 14)); + progressBarAudioPlayer.setString("Playback progress"); + GridBagConstraints gbc_progressBarAudioPlayer = new GridBagConstraints(); + gbc_progressBarAudioPlayer.insets = new Insets(0, 0, 5, 0); + gbc_progressBarAudioPlayer.anchor = GridBagConstraints.NORTH; + gbc_progressBarAudioPlayer.fill = GridBagConstraints.HORIZONTAL; + gbc_progressBarAudioPlayer.gridx = 0; + gbc_progressBarAudioPlayer.gridy = 9; + gbc_progressBarAudioPlayer.weighty = 1.0; + gbc_progressBarAudioPlayer.gridwidth = 3; + audioTabMainContentPanel.add(progressBarAudioPlayer, gbc_progressBarAudioPlayer); + + // ==============================COPTER REMOTE HANDLING TEST + // TAB============================== + JPanel ithakiCopterPanel = new JPanel(); + ithakiCopterPanel.setBorder(new EmptyBorder(2, 2, 2, 2)); + ithakiCopterPanel.setBackground(Color.DARK_GRAY); + ithakiCopterPanel.setForeground(Color.WHITE); + mainFrameTabbedPane.addTab("Copter Remote Handling", null, ithakiCopterPanel, null); + GridBagLayout gbl_ithakiCopterPanel = new GridBagLayout(); + gbl_ithakiCopterPanel.columnWidths = new int[] { 0, 0 }; + gbl_ithakiCopterPanel.rowHeights = new int[] { 0, 0 }; + gbl_ithakiCopterPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; + gbl_ithakiCopterPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; + ithakiCopterPanel.setLayout(gbl_ithakiCopterPanel); + + JLabel lblCopterTestTitle = new JLabel("Test Audio Streaming"); + lblCopterTestTitle.setFont(new Font("CMU Sans Serif", Font.BOLD, 25)); + lblCopterTestTitle.setForeground(Color.WHITE); + GridBagConstraints gbc_lblCopterTestTitle = new GridBagConstraints(); + gbc_lblCopterTestTitle.insets = new Insets(0, 0, 5, 0); + gbc_lblCopterTestTitle.anchor = GridBagConstraints.NORTH; + gbc_lblCopterTestTitle.gridx = 0; + gbc_lblCopterTestTitle.gridy = 0; + ithakiCopterPanel.add(lblCopterTestTitle, gbc_lblCopterTestTitle); + + JPanel copterTabMainContentPanel = new JPanel(); + copterTabMainContentPanel.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_copterTabMainContentPanel = new GridBagConstraints(); + gbc_copterTabMainContentPanel.gridheight = 3; + gbc_copterTabMainContentPanel.insets = new Insets(0, 0, 5, 0); + gbc_copterTabMainContentPanel.fill = GridBagConstraints.BOTH; + gbc_copterTabMainContentPanel.gridx = 0; + gbc_copterTabMainContentPanel.gridy = 1; + ithakiCopterPanel.add(copterTabMainContentPanel, gbc_copterTabMainContentPanel); + GridBagLayout gbl_copterTabMainContentPanel = new GridBagLayout(); + gbl_copterTabMainContentPanel.columnWidths = new int[] { 0, 0, 0 }; + gbl_copterTabMainContentPanel.rowHeights = new int[] { 0, 0, 0, 0, 0 }; + gbl_copterTabMainContentPanel.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; + gbl_copterTabMainContentPanel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; + copterTabMainContentPanel.setLayout(gbl_copterTabMainContentPanel); + + /* + * JLabel lblCopterRequestCode = new JLabel("Ithakicopter request code:"); + * lblCopterRequestCode.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + * lblCopterRequestCode.setForeground(Color.WHITE); GridBagConstraints + * gbc_lblCopterRequestCode = new GridBagConstraints(); + * gbc_lblCopterRequestCode.insets = new Insets(0, 0, 5, 5); + * gbc_lblCopterRequestCode.anchor = GridBagConstraints.WEST; + * gbc_lblCopterRequestCode.gridx = 0; gbc_lblCopterRequestCode.gridy = 0; + * gbc_lblCopterRequestCode.weightx = 1.0; + * copterTabMainContentPanel.add(lblCopterRequestCode, + * gbc_lblCopterRequestCode); + * + * JFormattedTextField formatedTextFieldCopterRequestCode = new + * JFormattedTextField(new MaskFormatter("'Q####")); + * formatedTextFieldCopterRequestCode.setFont(new Font("CMU Sans Ser8f", + * Font.PLAIN, 12)); formatedTextFieldCopterRequestCode.setText("Q0000"); + * GridBagConstraints gbc_formatedTextFieldCopterRequestCode = new + * GridBagConstraints(); gbc_formatedTextFieldCopterRequestCode.insets = new + * Insets(0, 0, 5, 0); gbc_formatedTextFieldCopterRequestCode.anchor = + * GridBagConstraints.EAST; gbc_formatedTextFieldCopterRequestCode.fill = + * GridBagConstraints.HORIZONTAL; gbc_formatedTextFieldCopterRequestCode.gridx = + * 1; gbc_formatedTextFieldCopterRequestCode.gridy = 0; + * copterTabMainContentPanel.add(formatedTextFieldCopterRequestCode, + * gbc_formatedTextFieldCopterRequestCode); + * formatedTextFieldCopterRequestCode.setColumns(10); + */ + + JSlider sliderCopterFlightLevel = new JSlider(SwingConstants.HORIZONTAL, 54, 412, 54); + sliderCopterFlightLevel.setSnapToTicks(true); + sliderCopterFlightLevel.setMajorTickSpacing(1); + sliderCopterFlightLevel.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_sliderCopterFlightLevel = new GridBagConstraints(); + gbc_sliderCopterFlightLevel.insets = new Insets(0, 5, 5, 5); + gbc_sliderCopterFlightLevel.anchor = GridBagConstraints.EAST; + gbc_sliderCopterFlightLevel.fill = GridBagConstraints.HORIZONTAL; + gbc_sliderCopterFlightLevel.gridx = 0; + gbc_sliderCopterFlightLevel.gridy = 1; + gbc_sliderCopterFlightLevel.gridwidth = 2; + copterTabMainContentPanel.add(sliderCopterFlightLevel, gbc_sliderCopterFlightLevel); + + JLabel lblCopterFlightLevel = new JLabel("Desired flight level:\t54"); + lblCopterFlightLevel.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblCopterFlightLevel.setForeground(Color.ORANGE); + GridBagConstraints gbc_lblCopterFlightLevel = new GridBagConstraints(); + gbc_lblCopterFlightLevel.insets = new Insets(0, 0, 5, 5); + gbc_lblCopterFlightLevel.anchor = GridBagConstraints.CENTER; + gbc_lblCopterFlightLevel.gridx = 0; + gbc_lblCopterFlightLevel.gridy = 2; + gbc_lblCopterFlightLevel.gridwidth = 2; + copterTabMainContentPanel.add(lblCopterFlightLevel, gbc_lblCopterFlightLevel); + + btnCopterSubmit = new JButton("Submit"); + btnCopterSubmit.setFont(new Font("CMU Sans Serif", Font.BOLD, 18)); + btnCopterSubmit.setEnabled(true); + GridBagConstraints gbc_btnCopterSubmit = new GridBagConstraints(); + gbc_btnCopterSubmit.anchor = GridBagConstraints.NORTHEAST; + gbc_btnCopterSubmit.gridx = 1; + gbc_btnCopterSubmit.gridy = 3; + copterTabMainContentPanel.add(btnCopterSubmit, gbc_btnCopterSubmit); + + JPanel copterOutputContentPanel = new JPanel(); + copterOutputContentPanel.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_copterOutputContentPanel = new GridBagConstraints(); + gbc_copterOutputContentPanel.gridheight = 3; + gbc_copterOutputContentPanel.gridwidth = 2; + gbc_copterOutputContentPanel.insets = new Insets(5, 0, 5, 0); + gbc_copterOutputContentPanel.fill = GridBagConstraints.BOTH; + gbc_copterOutputContentPanel.gridx = 0; + gbc_copterOutputContentPanel.gridy = 4; + copterTabMainContentPanel.add(copterOutputContentPanel, gbc_copterOutputContentPanel); + GridBagLayout gbl_copterOutputContentPanel = new GridBagLayout(); + gbl_copterOutputContentPanel.columnWidths = new int[] { 0, 0, 0 }; + gbl_copterOutputContentPanel.rowHeights = new int[] { 0, 0, 0, 0, 0 }; + gbl_copterOutputContentPanel.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; + gbl_copterOutputContentPanel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; + copterOutputContentPanel.setLayout(gbl_copterOutputContentPanel); + + JLabel lblCopterTemperature = new JLabel("Temperature in the room = "); + lblCopterTemperature.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterTemperature.setForeground(Color.GREEN); + lblCopterTemperature.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterTemperature = new GridBagConstraints(); + gbc_lblCopterTemperature.insets = new Insets(0, 0, 5, -2); + gbc_lblCopterTemperature.fill = GridBagConstraints.NONE; + gbc_lblCopterTemperature.anchor = GridBagConstraints.ABOVE_BASELINE_TRAILING; + gbc_lblCopterTemperature.gridx = 0; + gbc_lblCopterTemperature.gridy = 0; + copterOutputContentPanel.add(lblCopterTemperature, gbc_lblCopterTemperature); + + JLabel lblCopterTemperatureOutput = new JLabel("NaN °C"); + lblCopterTemperatureOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterTemperatureOutput.setForeground(Color.GREEN); + lblCopterTemperatureOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterTemperatureOutput = new GridBagConstraints(); + gbc_lblCopterTemperatureOutput.insets = new Insets(0, 0, 5, 0); + gbc_lblCopterTemperatureOutput.fill = GridBagConstraints.NONE; + gbc_lblCopterTemperatureOutput.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; + gbc_lblCopterTemperatureOutput.gridx = 1; + gbc_lblCopterTemperatureOutput.gridy = 0; + copterOutputContentPanel.add(lblCopterTemperatureOutput, gbc_lblCopterTemperatureOutput); + + JLabel lblCopterPressure = new JLabel("Atmospheric pressure in the room = "); + lblCopterPressure.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterPressure.setForeground(Color.GREEN); + lblCopterPressure.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterPressure = new GridBagConstraints(); + gbc_lblCopterPressure.insets = new Insets(0, 0, 5, -2); + gbc_lblCopterPressure.fill = GridBagConstraints.NONE; + gbc_lblCopterPressure.anchor = GridBagConstraints.ABOVE_BASELINE_TRAILING; + gbc_lblCopterPressure.gridx = 0; + gbc_lblCopterPressure.gridy = 1; + copterOutputContentPanel.add(lblCopterPressure, gbc_lblCopterPressure); + + JLabel lblCopterPressureOutput = new JLabel("NaN mBar"); + lblCopterPressureOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterPressureOutput.setForeground(Color.GREEN); + lblCopterPressureOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterPressureOutput = new GridBagConstraints(); + gbc_lblCopterPressureOutput.insets = new Insets(0, 0, 5, 0); + gbc_lblCopterPressureOutput.fill = GridBagConstraints.NONE; + gbc_lblCopterPressureOutput.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; + gbc_lblCopterPressureOutput.gridx = 1; + gbc_lblCopterPressureOutput.gridy = 1; + copterOutputContentPanel.add(lblCopterPressureOutput, gbc_lblCopterPressureOutput); + + JLabel lblCopterAltitude = new JLabel("Copter's flight altitude = "); + lblCopterAltitude.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterAltitude.setForeground(Color.GREEN); + lblCopterAltitude.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterAltitude = new GridBagConstraints(); + gbc_lblCopterAltitude.insets = new Insets(0, 0, 5, -2); + gbc_lblCopterAltitude.fill = GridBagConstraints.NONE; + gbc_lblCopterAltitude.anchor = GridBagConstraints.ABOVE_BASELINE_TRAILING; + gbc_lblCopterAltitude.gridx = 0; + gbc_lblCopterAltitude.gridy = 2; + copterOutputContentPanel.add(lblCopterAltitude, gbc_lblCopterAltitude); + + JLabel lblCopterAltitudeOutput = new JLabel("NaN px above GND"); + lblCopterAltitudeOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterAltitudeOutput.setForeground(Color.GREEN); + lblCopterAltitudeOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterAltitudeOutput = new GridBagConstraints(); + gbc_lblCopterAltitudeOutput.insets = new Insets(0, 0, 5, 0); + gbc_lblCopterAltitudeOutput.fill = GridBagConstraints.NONE; + gbc_lblCopterAltitudeOutput.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; + gbc_lblCopterAltitudeOutput.gridx = 1; + gbc_lblCopterAltitudeOutput.gridy = 2; + copterOutputContentPanel.add(lblCopterAltitudeOutput, gbc_lblCopterAltitudeOutput); + + JLabel lblCopterLeftMotor = new JLabel("Copter's left motor power = "); + lblCopterLeftMotor.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterLeftMotor.setForeground(Color.GREEN); + lblCopterLeftMotor.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterLeftMotor = new GridBagConstraints(); + gbc_lblCopterLeftMotor.insets = new Insets(0, 0, 5, -2); + gbc_lblCopterLeftMotor.fill = GridBagConstraints.NONE; + gbc_lblCopterLeftMotor.anchor = GridBagConstraints.ABOVE_BASELINE_TRAILING; + gbc_lblCopterLeftMotor.gridx = 0; + gbc_lblCopterLeftMotor.gridy = 3; + copterOutputContentPanel.add(lblCopterLeftMotor, gbc_lblCopterLeftMotor); + + JLabel lblCopterLeftMotorOutput = new JLabel("NaN %"); + lblCopterLeftMotorOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterLeftMotorOutput.setForeground(Color.GREEN); + lblCopterLeftMotorOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterLeftMotorOutput = new GridBagConstraints(); + gbc_lblCopterLeftMotorOutput.insets = new Insets(0, 0, 5, 0); + gbc_lblCopterLeftMotorOutput.fill = GridBagConstraints.NONE; + gbc_lblCopterLeftMotorOutput.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; + gbc_lblCopterLeftMotorOutput.gridx = 1; + gbc_lblCopterLeftMotorOutput.gridy = 3; + copterOutputContentPanel.add(lblCopterLeftMotorOutput, gbc_lblCopterLeftMotorOutput); + + JLabel lblCopterRightMotor = new JLabel("Copter's right motor power = "); + lblCopterRightMotor.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterRightMotor.setForeground(Color.GREEN); + lblCopterRightMotor.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterRightMotor = new GridBagConstraints(); + gbc_lblCopterRightMotor.insets = new Insets(0, 0, 5, -2); + gbc_lblCopterRightMotor.fill = GridBagConstraints.NONE; + gbc_lblCopterRightMotor.anchor = GridBagConstraints.ABOVE_BASELINE_TRAILING; + gbc_lblCopterRightMotor.gridx = 0; + gbc_lblCopterRightMotor.gridy = 4; + copterOutputContentPanel.add(lblCopterRightMotor, gbc_lblCopterRightMotor); + + JLabel lblCopterRightMotorOutput = new JLabel("NaN %"); + lblCopterRightMotorOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblCopterRightMotorOutput.setForeground(Color.GREEN); + lblCopterRightMotorOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterRightMotorOutput = new GridBagConstraints(); + gbc_lblCopterRightMotorOutput.insets = new Insets(0, 0, 5, 0); + gbc_lblCopterRightMotorOutput.fill = GridBagConstraints.NONE; + gbc_lblCopterRightMotorOutput.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; + gbc_lblCopterRightMotorOutput.gridx = 1; + gbc_lblCopterRightMotorOutput.gridy = 4; + copterOutputContentPanel.add(lblCopterRightMotorOutput, gbc_lblCopterRightMotorOutput); + + JLabel lblCopterImageOutput = new JLabel(""); + try { + URL copterImageOutputUrl = new URL(Copter.IMAGE_OUTPUT_URL); + BufferedImage copterImageOutput = ImageIO.read(copterImageOutputUrl); + copterImageOutput = copterImageOutput.getSubimage(Copter.IMAGE_OUTPUT_CROP_START_X, + Copter.IMAGE_OUTPUT_CROP_START_Y, Copter.IMAGE_OUTPUT_CROP_WIDTH, Copter.IMAGE_OUTPUT_CROP_HEIGHT); + lblCopterImageOutput.setIcon(new ImageIcon(copterImageOutput)); + } catch (MalformedURLException exception) { + exception.printStackTrace(); + } catch (IOException exception) { + exception.printStackTrace(); + } + lblCopterImageOutput.setForeground(Color.GREEN); + lblCopterImageOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblCopterImageOutput = new GridBagConstraints(); + gbc_lblCopterImageOutput.insets = new Insets(0, 0, 5, 0); + gbc_lblCopterImageOutput.fill = GridBagConstraints.NONE; + gbc_lblCopterImageOutput.anchor = GridBagConstraints.CENTER; + gbc_lblCopterImageOutput.gridx = 0; + gbc_lblCopterImageOutput.gridy = 5; + gbc_lblCopterImageOutput.weighty = 1.0; + gbc_lblCopterImageOutput.gridwidth = 2; + copterOutputContentPanel.add(lblCopterImageOutput, gbc_lblCopterImageOutput); + + JProgressBar progressBarCopterLeftMotorPower = new JProgressBar(SwingConstants.VERTICAL); + progressBarCopterLeftMotorPower.setStringPainted(true); + progressBarCopterLeftMotorPower.setFont(new Font("Courier new", Font.PLAIN, 14)); + progressBarCopterLeftMotorPower.setString("Left motor power"); + progressBarCopterLeftMotorPower.setMaximum(100); + progressBarCopterLeftMotorPower.setMinimum(0); + GridBagConstraints gbc_progressBarCopterLeftMotorPower = new GridBagConstraints(); + gbc_progressBarCopterLeftMotorPower.insets = new Insets(0, 0, 5, 8); + gbc_progressBarCopterLeftMotorPower.anchor = GridBagConstraints.NORTH; + gbc_progressBarCopterLeftMotorPower.fill = GridBagConstraints.BOTH; + gbc_progressBarCopterLeftMotorPower.gridx = 3; + gbc_progressBarCopterLeftMotorPower.gridy = 0; + gbc_progressBarCopterLeftMotorPower.gridheight = 6; + gbc_progressBarCopterLeftMotorPower.weightx = 1.0; + gbc_progressBarCopterLeftMotorPower.weighty = 1.0; + copterOutputContentPanel.add(progressBarCopterLeftMotorPower, gbc_progressBarCopterLeftMotorPower); + + JProgressBar progressBarCopterRightMotorPower = new JProgressBar(SwingConstants.VERTICAL); + progressBarCopterRightMotorPower.setStringPainted(true); + progressBarCopterRightMotorPower.setFont(new Font("Courier new", Font.PLAIN, 14)); + progressBarCopterRightMotorPower.setString("Right motor power"); + progressBarCopterRightMotorPower.setMaximum(100); + progressBarCopterRightMotorPower.setMinimum(0); + GridBagConstraints gbc_progressBarCopterRightMotorPower = new GridBagConstraints(); + gbc_progressBarCopterRightMotorPower.insets = new Insets(0, 0, 5, 0); + gbc_progressBarCopterRightMotorPower.anchor = GridBagConstraints.NORTH; + gbc_progressBarCopterRightMotorPower.fill = GridBagConstraints.BOTH; + gbc_progressBarCopterRightMotorPower.gridx = 4; + gbc_progressBarCopterRightMotorPower.gridy = 0; + gbc_progressBarCopterRightMotorPower.gridheight = 6; + gbc_progressBarCopterRightMotorPower.weightx = 1.0; + gbc_progressBarCopterRightMotorPower.weighty = 1.0; + copterOutputContentPanel.add(progressBarCopterRightMotorPower, gbc_progressBarCopterRightMotorPower); + + // ==============================VEHICLE TEST TAB============================== + JPanel vehiclePanel = new JPanel(); + vehiclePanel.setBorder(new EmptyBorder(2, 2, 2, 2)); + vehiclePanel.setBackground(Color.DARK_GRAY); + vehiclePanel.setForeground(Color.WHITE); + mainFrameTabbedPane.addTab("Vehicle", null, vehiclePanel, null); + GridBagLayout gbl_vehiclePanel = new GridBagLayout(); + gbl_vehiclePanel.columnWidths = new int[] { 0, 0 }; + gbl_vehiclePanel.rowHeights = new int[] { 0, 0 }; + gbl_vehiclePanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; + gbl_vehiclePanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; + vehiclePanel.setLayout(gbl_vehiclePanel); + + JLabel lblVehicleTestTitle = new JLabel("Test Audio Streaming"); + lblVehicleTestTitle.setFont(new Font("CMU Sans Serif", Font.BOLD, 25)); + lblVehicleTestTitle.setForeground(Color.WHITE); + GridBagConstraints gbc_lblVehicleTestTitle = new GridBagConstraints(); + gbc_lblVehicleTestTitle.insets = new Insets(0, 0, 5, 0); + gbc_lblVehicleTestTitle.anchor = GridBagConstraints.NORTH; + gbc_lblVehicleTestTitle.gridx = 0; + gbc_lblVehicleTestTitle.gridy = 0; + vehiclePanel.add(lblVehicleTestTitle, gbc_lblVehicleTestTitle); + + JPanel vehicleTabMainContentPanel = new JPanel(); + vehicleTabMainContentPanel.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_vehicleTabMainContentPanel = new GridBagConstraints(); + gbc_vehicleTabMainContentPanel.gridheight = 3; + gbc_vehicleTabMainContentPanel.insets = new Insets(0, 0, 5, 0); + gbc_vehicleTabMainContentPanel.fill = GridBagConstraints.BOTH; + gbc_vehicleTabMainContentPanel.gridx = 0; + gbc_vehicleTabMainContentPanel.gridy = 1; + vehiclePanel.add(vehicleTabMainContentPanel, gbc_vehicleTabMainContentPanel); + GridBagLayout gbl_vehicleTabMainContentPanel = new GridBagLayout(); + gbl_vehicleTabMainContentPanel.columnWidths = new int[] { 0, 0, 0 }; + gbl_vehicleTabMainContentPanel.rowHeights = new int[] { 0, 0, 0, 0, 0 }; + gbl_vehicleTabMainContentPanel.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; + gbl_vehicleTabMainContentPanel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; + vehicleTabMainContentPanel.setLayout(gbl_vehicleTabMainContentPanel); + + JLabel lblVehicleUseUDP = new JLabel("Use a UDP connection to make the requests:"); + lblVehicleUseUDP.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblVehicleUseUDP.setForeground(Color.WHITE); + GridBagConstraints gbc_lblVehicleUseUDP = new GridBagConstraints(); + gbc_lblVehicleUseUDP.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleUseUDP.anchor = GridBagConstraints.WEST; + gbc_lblVehicleUseUDP.gridx = 0; + gbc_lblVehicleUseUDP.gridy = 0; + gbc_lblVehicleUseUDP.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleUseUDP, gbc_lblVehicleUseUDP); + + JCheckBox checkBoxVehicleUseUDP = new JCheckBox(""); + checkBoxVehicleUseUDP.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_checkBoxVehicleUseUDP = new GridBagConstraints(); + gbc_checkBoxVehicleUseUDP.insets = new Insets(0, 0, 5, 0); + gbc_checkBoxVehicleUseUDP.anchor = GridBagConstraints.WEST; + gbc_checkBoxVehicleUseUDP.gridx = 1; + gbc_checkBoxVehicleUseUDP.gridy = 0; + vehicleTabMainContentPanel.add(checkBoxVehicleUseUDP, gbc_checkBoxVehicleUseUDP); + + JLabel lblVehicleRequestCode = new JLabel("Vehicle OBD-II request code:"); + lblVehicleRequestCode.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblVehicleRequestCode.setForeground(Color.WHITE); + GridBagConstraints gbc_lblVehicleRequestCode = new GridBagConstraints(); + gbc_lblVehicleRequestCode.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleRequestCode.anchor = GridBagConstraints.WEST; + gbc_lblVehicleRequestCode.gridx = 0; + gbc_lblVehicleRequestCode.gridy = 1; + gbc_lblVehicleRequestCode.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleRequestCode, gbc_lblVehicleRequestCode); + + JFormattedTextField formatedTextFieldVehicleRequestCode = new JFormattedTextField(new MaskFormatter("'V####")); + formatedTextFieldVehicleRequestCode.setEnabled(false); + formatedTextFieldVehicleRequestCode.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + formatedTextFieldVehicleRequestCode.setText("V0000"); + GridBagConstraints gbc_formatedTextFieldVehicleRequestCode = new GridBagConstraints(); + gbc_formatedTextFieldVehicleRequestCode.insets = new Insets(0, 0, 5, 0); + gbc_formatedTextFieldVehicleRequestCode.anchor = GridBagConstraints.EAST; + gbc_formatedTextFieldVehicleRequestCode.fill = GridBagConstraints.HORIZONTAL; + gbc_formatedTextFieldVehicleRequestCode.gridx = 1; + gbc_formatedTextFieldVehicleRequestCode.gridy = 1; + vehicleTabMainContentPanel.add(formatedTextFieldVehicleRequestCode, gbc_formatedTextFieldVehicleRequestCode); + formatedTextFieldVehicleRequestCode.setColumns(10); + + JLabel lblVehicleDuration = new JLabel("Duration:"); + lblVehicleDuration.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + lblVehicleDuration.setForeground(Color.WHITE); + GridBagConstraints gbc_lblVehicleDuration = new GridBagConstraints(); + gbc_lblVehicleDuration.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleDuration.anchor = GridBagConstraints.WEST; + gbc_lblVehicleDuration.gridx = 0; + gbc_lblVehicleDuration.gridy = 2; + gbc_lblVehicleDuration.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleDuration, gbc_lblVehicleDuration); + + JFormattedTextField formatedTextFieldVehicleDuration = new JFormattedTextField(new MaskFormatter("####")); + formatedTextFieldVehicleDuration.setFont(new Font("CMU Sans Serif", Font.PLAIN, 18)); + formatedTextFieldVehicleDuration.setText("0010"); + GridBagConstraints gbc_formatedTextFieldVehicleDuration = new GridBagConstraints(); + gbc_formatedTextFieldVehicleDuration.insets = new Insets(0, 0, 5, 0); + gbc_formatedTextFieldVehicleDuration.anchor = GridBagConstraints.EAST; + gbc_formatedTextFieldVehicleDuration.fill = GridBagConstraints.HORIZONTAL; + gbc_formatedTextFieldVehicleDuration.gridx = 1; + gbc_formatedTextFieldVehicleDuration.gridy = 2; + vehicleTabMainContentPanel.add(formatedTextFieldVehicleDuration, gbc_formatedTextFieldVehicleDuration); + formatedTextFieldVehicleDuration.setColumns(10); + + btnVehicleSubmit = new JButton("Submit"); + btnVehicleSubmit.setFont(new Font("CMU Sans Serif", Font.BOLD, 18)); + btnVehicleSubmit.setEnabled(true); + GridBagConstraints gbc_btnVehicleSubmit = new GridBagConstraints(); + gbc_btnVehicleSubmit.anchor = GridBagConstraints.NORTHEAST; + gbc_btnVehicleSubmit.gridx = 1; + gbc_btnVehicleSubmit.gridy = 3; + vehicleTabMainContentPanel.add(btnVehicleSubmit, gbc_btnVehicleSubmit); + + JLabel lblVehicleEngineRunTime = new JLabel("Engine run time = "); + lblVehicleEngineRunTime.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleEngineRunTime.setForeground(Color.GREEN); + lblVehicleEngineRunTime.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleEngineRunTime = new GridBagConstraints(); + gbc_lblVehicleEngineRunTime.insets = new Insets(0, 0, 5, 0); + gbc_lblVehicleEngineRunTime.anchor = GridBagConstraints.EAST; + gbc_lblVehicleEngineRunTime.gridx = 0; + gbc_lblVehicleEngineRunTime.gridy = 4; + vehicleTabMainContentPanel.add(lblVehicleEngineRunTime, gbc_lblVehicleEngineRunTime); + + JLabel lblVehicleEngineRunTimeOutput = new JLabel("NaN s"); + lblVehicleEngineRunTimeOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleEngineRunTimeOutput.setForeground(Color.GREEN); + lblVehicleEngineRunTimeOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleEngineRunTimeOutput = new GridBagConstraints(); + gbc_lblVehicleEngineRunTimeOutput.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleEngineRunTimeOutput.anchor = GridBagConstraints.WEST; + gbc_lblVehicleEngineRunTimeOutput.gridx = 1; + gbc_lblVehicleEngineRunTimeOutput.gridy = 4; + gbc_lblVehicleEngineRunTimeOutput.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleEngineRunTimeOutput, gbc_lblVehicleEngineRunTimeOutput); + + JLabel lblVehicleAirTemp = new JLabel("Intake air temperature = "); + lblVehicleAirTemp.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleAirTemp.setForeground(Color.GREEN); + lblVehicleAirTemp.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleAirTemp = new GridBagConstraints(); + gbc_lblVehicleAirTemp.insets = new Insets(0, 0, 5, 0); + gbc_lblVehicleAirTemp.anchor = GridBagConstraints.EAST; + gbc_lblVehicleAirTemp.gridx = 0; + gbc_lblVehicleAirTemp.gridy = 5; + vehicleTabMainContentPanel.add(lblVehicleAirTemp, gbc_lblVehicleAirTemp); + + JLabel lblVehicleAirTempOutput = new JLabel("NaN °C"); + lblVehicleAirTempOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleAirTempOutput.setForeground(Color.GREEN); + lblVehicleAirTempOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleAirTempOutput = new GridBagConstraints(); + gbc_lblVehicleAirTempOutput.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleAirTempOutput.anchor = GridBagConstraints.WEST; + gbc_lblVehicleAirTempOutput.gridx = 1; + gbc_lblVehicleAirTempOutput.gridy = 5; + gbc_lblVehicleAirTempOutput.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleAirTempOutput, gbc_lblVehicleAirTempOutput); + + JLabel lblVehicleThrottlePosition = new JLabel("Throttle position = "); + lblVehicleThrottlePosition.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleThrottlePosition.setForeground(Color.GREEN); + lblVehicleThrottlePosition.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleThrottlePosition = new GridBagConstraints(); + gbc_lblVehicleThrottlePosition.insets = new Insets(0, 0, 5, 0); + gbc_lblVehicleThrottlePosition.anchor = GridBagConstraints.EAST; + gbc_lblVehicleThrottlePosition.gridx = 0; + gbc_lblVehicleThrottlePosition.gridy = 6; + vehicleTabMainContentPanel.add(lblVehicleThrottlePosition, gbc_lblVehicleThrottlePosition); + + JLabel lblVehicleThrottlePositionOutput = new JLabel("NaN %"); + lblVehicleThrottlePositionOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleThrottlePositionOutput.setForeground(Color.GREEN); + lblVehicleThrottlePositionOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleThrottlePositionOutput = new GridBagConstraints(); + gbc_lblVehicleThrottlePositionOutput.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleThrottlePositionOutput.anchor = GridBagConstraints.WEST; + gbc_lblVehicleThrottlePositionOutput.gridx = 1; + gbc_lblVehicleThrottlePositionOutput.gridy = 6; + gbc_lblVehicleThrottlePositionOutput.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleThrottlePositionOutput, gbc_lblVehicleThrottlePositionOutput); + + JLabel lblVehicleEngineRPM = new JLabel("Engine RPM = "); + lblVehicleEngineRPM.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleEngineRPM.setForeground(Color.GREEN); + lblVehicleEngineRPM.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleEngineRPM = new GridBagConstraints(); + gbc_lblVehicleEngineRPM.insets = new Insets(0, 0, 5, 0); + gbc_lblVehicleEngineRPM.anchor = GridBagConstraints.EAST; + gbc_lblVehicleEngineRPM.gridx = 0; + gbc_lblVehicleEngineRPM.gridy = 7; + vehicleTabMainContentPanel.add(lblVehicleEngineRPM, gbc_lblVehicleEngineRPM); + + JLabel lblVehicleEngineRPMOutput = new JLabel("NaN RPM"); + lblVehicleEngineRPMOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleEngineRPMOutput.setForeground(Color.GREEN); + lblVehicleEngineRPMOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleEngineRPMOutput = new GridBagConstraints(); + gbc_lblVehicleEngineRPMOutput.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleEngineRPMOutput.anchor = GridBagConstraints.WEST; + gbc_lblVehicleEngineRPMOutput.gridx = 1; + gbc_lblVehicleEngineRPMOutput.gridy = 7; + gbc_lblVehicleEngineRPMOutput.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleEngineRPMOutput, gbc_lblVehicleEngineRPMOutput); + + JLabel lblVehicleSpeed = new JLabel("Vehicle speed = "); + lblVehicleSpeed.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleSpeed.setForeground(Color.GREEN); + lblVehicleSpeed.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleSpeed = new GridBagConstraints(); + gbc_lblVehicleSpeed.insets = new Insets(0, 0, 5, 0); + gbc_lblVehicleSpeed.anchor = GridBagConstraints.EAST; + gbc_lblVehicleSpeed.gridx = 0; + gbc_lblVehicleSpeed.gridy = 8; + vehicleTabMainContentPanel.add(lblVehicleSpeed, gbc_lblVehicleSpeed); + + JLabel lblVehicleSpeedOutput = new JLabel("NaN Km/h"); + lblVehicleSpeedOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleSpeedOutput.setForeground(Color.GREEN); + lblVehicleSpeedOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleSpeedOutput = new GridBagConstraints(); + gbc_lblVehicleSpeedOutput.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleSpeedOutput.anchor = GridBagConstraints.WEST; + gbc_lblVehicleSpeedOutput.gridx = 1; + gbc_lblVehicleSpeedOutput.gridy = 8; + gbc_lblVehicleSpeedOutput.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleSpeedOutput, gbc_lblVehicleSpeedOutput); + + JLabel lblVehicleCoolantTemperature = new JLabel("Coolant temperature = "); + lblVehicleCoolantTemperature.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleCoolantTemperature.setForeground(Color.GREEN); + lblVehicleCoolantTemperature.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleCoolantTemperature = new GridBagConstraints(); + gbc_lblVehicleCoolantTemperature.insets = new Insets(0, 0, 5, 0); + gbc_lblVehicleCoolantTemperature.anchor = GridBagConstraints.EAST; + gbc_lblVehicleCoolantTemperature.gridx = 0; + gbc_lblVehicleCoolantTemperature.gridy = 9; + vehicleTabMainContentPanel.add(lblVehicleCoolantTemperature, gbc_lblVehicleCoolantTemperature); + + JLabel lblVehicleCoolantTemperatureOutput = new JLabel("NaN °C"); + lblVehicleCoolantTemperatureOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehicleCoolantTemperatureOutput.setForeground(Color.GREEN); + lblVehicleCoolantTemperatureOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehicleCoolantTemperatureOutput = new GridBagConstraints(); + gbc_lblVehicleCoolantTemperatureOutput.insets = new Insets(0, 0, 5, 5); + gbc_lblVehicleCoolantTemperatureOutput.anchor = GridBagConstraints.WEST; + gbc_lblVehicleCoolantTemperatureOutput.gridx = 1; + gbc_lblVehicleCoolantTemperatureOutput.gridy = 9; + gbc_lblVehicleCoolantTemperatureOutput.weightx = 1.0; + vehicleTabMainContentPanel.add(lblVehicleCoolantTemperatureOutput, gbc_lblVehicleCoolantTemperatureOutput); + + JLabel lblVehiclePacketsTotalTime = new JLabel("Total time needed to get the information = "); + lblVehiclePacketsTotalTime.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehiclePacketsTotalTime.setForeground(Color.GREEN); + lblVehiclePacketsTotalTime.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehiclePacketsTotalTime = new GridBagConstraints(); + gbc_lblVehiclePacketsTotalTime.insets = new Insets(0, 0, 5, 0); + gbc_lblVehiclePacketsTotalTime.anchor = GridBagConstraints.NORTHEAST; + gbc_lblVehiclePacketsTotalTime.gridx = 0; + gbc_lblVehiclePacketsTotalTime.gridy = 10; + gbc_lblVehiclePacketsTotalTime.weighty = 1.0; + vehicleTabMainContentPanel.add(lblVehiclePacketsTotalTime, gbc_lblVehiclePacketsTotalTime); + + JLabel lblVehiclePacketsTotalTimeOutput = new JLabel("NaN ms"); + lblVehiclePacketsTotalTimeOutput.setFont(new Font("Courier new", Font.PLAIN, 14)); + lblVehiclePacketsTotalTimeOutput.setForeground(Color.GREEN); + lblVehiclePacketsTotalTimeOutput.setBackground(Color.DARK_GRAY); + GridBagConstraints gbc_lblVehiclePacketsTotalTimeOutput = new GridBagConstraints(); + gbc_lblVehiclePacketsTotalTimeOutput.insets = new Insets(0, 0, 5, 5); + gbc_lblVehiclePacketsTotalTimeOutput.anchor = GridBagConstraints.NORTHWEST; + gbc_lblVehiclePacketsTotalTimeOutput.gridx = 1; + gbc_lblVehiclePacketsTotalTimeOutput.gridy = 10; + gbc_lblVehiclePacketsTotalTimeOutput.weightx = 1.0; + gbc_lblVehiclePacketsTotalTimeOutput.weighty = 1.0; + vehicleTabMainContentPanel.add(lblVehiclePacketsTotalTimeOutput, gbc_lblVehiclePacketsTotalTimeOutput); + + // ==============================STATUS LINE============================== + mainFrameStatusLine = new JLabel("Ready."); + mainFrameStatusLine.setFont(new Font("CMU Sans Serif", Font.BOLD, 18)); + mainFrameStatusLine.setBackground(SystemColor.window); + mainFrameStatusLine.setForeground(Color.DARK_GRAY); + mainFrameStatusLine.setBorder(new EmptyBorder(0, 9, 3, 8)); + GridBagConstraints gbc_mainFrameStatusLine = new GridBagConstraints(); + gbc_mainFrameStatusLine.fill = GridBagConstraints.BOTH; + gbc_mainFrameStatusLine.anchor = GridBagConstraints.SOUTH; + gbc_mainFrameStatusLine.gridx = 0; + gbc_mainFrameStatusLine.gridy = 1; + gbc_mainFrameStatusLine.weightx = 1.0; + mainFrame.getContentPane().add(mainFrameStatusLine, gbc_mainFrameStatusLine); + + // ==============================FRAME SETTINGS============================== + mainFrame.setTitle("Δίκτυα Υπολογιστών ΙΙ"); + mainFrame.setBounds(WINDOW_INIT_X, WINDOW_INIT_Y, WINDOW_INIT_WIDTH, WINDOW_INIT_HEIGHT); + mainFrame.setResizable(false); + mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + // ==============================ACTION LISTENERS============================== + btnGlobalSettingsSubmit.addActionListener( + new GlobalSettingsListener(formatedTextFieldServerPort, formatedTextFieldClientPort, UDPConnection)); + + btnEchoSubmit + .addActionListener(new EchoListener(formatedTextFieldEchoRequestCode, formatedTextFieldEchoDuration, + formatedTextFieldEchoNumberOfPackets, checkBoxGetTemperature, textPaneEcho, UDPConnection)); + + btnImageSubmit.addActionListener(new ImageListener(formatedTextFieldImageRequestCode, checkBoxImageControlFlow, + comboBoxImagePacketLength, formatedTextFieldImageDuration, textPaneImageStatsOutput, + lblImageRuntimeOutput, UDPConnection)); + + btnAudioSubmit.addActionListener(new AudioListener(formatedTextFieldAudioRequestCode, + checkBoxAudioRequestSpecificSample, formatedTextFieldAudioRequestSpecificSample, + comboBoxAudioPoolSelect, formatedTextFieldAudioNumberOfPackets, checkBoxAudioAdaptiveQuantiser, + formatedTextFieldAudioBetaParameter, comboBoxAudioQParameter, textPaneAudioStatsOutput, + progressBarAudioStreamer, progressBarAudioPlayer, UDPConnection)); + + checkBoxAudioRequestSpecificSample.addChangeListener(new AudioRequestSpecificSampleListener( + formatedTextFieldAudioRequestSpecificSample, comboBoxAudioPoolSelect)); + + checkBoxAudioAdaptiveQuantiser + .addChangeListener(new AudioIsAdaptivelyQuantisedListener(formatedTextFieldAudioBetaParameter)); + + sliderCopterFlightLevel.addChangeListener(new CopterSliderListener(lblCopterFlightLevel)); + + btnCopterSubmit.addActionListener(new CopterListener(sliderCopterFlightLevel, lblCopterTemperatureOutput, + lblCopterPressureOutput, lblCopterAltitudeOutput, lblCopterLeftMotorOutput, lblCopterRightMotorOutput, + lblCopterImageOutput, progressBarCopterLeftMotorPower, progressBarCopterRightMotorPower, + TCPConnectionCopter)); + + checkBoxVehicleUseUDP.addChangeListener(new VehicleUseUDPListener(formatedTextFieldVehicleRequestCode)); + + btnVehicleSubmit.addActionListener(new VehicleListener(formatedTextFieldVehicleRequestCode, + checkBoxVehicleUseUDP, formatedTextFieldVehicleDuration, lblVehicleEngineRunTimeOutput, + lblVehicleAirTempOutput, lblVehicleThrottlePositionOutput, lblVehicleEngineRPMOutput, + lblVehicleSpeedOutput, lblVehicleCoolantTemperatureOutput, lblVehiclePacketsTotalTimeOutput, + TCPConnectionVehicle, UDPConnection)); + } +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/AudioIsAdaptivelyQuantisedListener.java b/src/gr/auth/ee/computer_networks/actionListeners/AudioIsAdaptivelyQuantisedListener.java new file mode 100644 index 0000000..b4dd0dd --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/AudioIsAdaptivelyQuantisedListener.java @@ -0,0 +1,26 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import javax.swing.JCheckBox; +import javax.swing.JFormattedTextField; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +public class AudioIsAdaptivelyQuantisedListener implements ChangeListener { + private final JFormattedTextField formatedTextFieldAudioBetaParameter; + + @SuppressWarnings("unused") + private AudioIsAdaptivelyQuantisedListener() { + // Disable default constructor + formatedTextFieldAudioBetaParameter = null; + } + + public AudioIsAdaptivelyQuantisedListener(JFormattedTextField formatedTextFieldAudioBetaParameter) { + this.formatedTextFieldAudioBetaParameter = formatedTextFieldAudioBetaParameter; + } + + @Override + public void stateChanged(ChangeEvent e) { + this.formatedTextFieldAudioBetaParameter.setEnabled(!((JCheckBox) e.getSource()).isSelected()); + } + +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/AudioListener.java b/src/gr/auth/ee/computer_networks/actionListeners/AudioListener.java new file mode 100644 index 0000000..400f1c9 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/AudioListener.java @@ -0,0 +1,79 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFormattedTextField; +import javax.swing.JProgressBar; +import javax.swing.JTextPane; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.UDPBundle; +import gr.auth.ee.computer_networks.networkTests.Audio; + +public class AudioListener implements ActionListener { + + private final JFormattedTextField formatedTextFieldAudioRequestCode, formatedTextFieldAudioRequestSpecificSample, + formatedTextFieldAudioNumberOfPackets, formatedTextFieldAudioBetaParameter; + private final JComboBox comboBoxAudioPoolSelect; + private final JCheckBox checkBoxAudioRequestSpecificSample, checkBoxAudioAdaptiveQuantiser; + private final JComboBox comboBoxAudioQParameter; + private final JTextPane textPaneAudioStatsOutput; + private final JProgressBar progressBarAudioStreamer, progressBarAudioPlayer; + private final UDPBundle UDPConnection; + + @SuppressWarnings("unused") + private AudioListener() { + // Disable default constructor + this.formatedTextFieldAudioRequestCode = null; + this.checkBoxAudioRequestSpecificSample = null; + this.formatedTextFieldAudioRequestSpecificSample = null; + this.comboBoxAudioPoolSelect = null; + this.formatedTextFieldAudioNumberOfPackets = null; + this.checkBoxAudioAdaptiveQuantiser = null; + this.formatedTextFieldAudioBetaParameter = null; + this.comboBoxAudioQParameter = null; + this.textPaneAudioStatsOutput = null; + this.progressBarAudioStreamer = null; + this.progressBarAudioPlayer = null; + this.UDPConnection = null; + } + + public AudioListener(JFormattedTextField formatedTextFieldAudioRequestCode, + JCheckBox checkBoxAudioRequestSpecificSample, + JFormattedTextField formatedTextFieldAudioRequestSpecificSample, JComboBox comboBoxAudioPoolSelect, + JFormattedTextField formatedTextFieldAudioNumberOfPackets, JCheckBox checkBoxAudioAdaptiveQuantiser, + JFormattedTextField formatedTextFieldAudioBetaParameter, JComboBox comboBoxAudioQParameter, + JTextPane textPaneAudioStatsOutput, JProgressBar progressBarAudioStreamer, + JProgressBar progressBarAudioPlayer, UDPBundle UDPConnection) { + this.formatedTextFieldAudioRequestCode = formatedTextFieldAudioRequestCode; + this.checkBoxAudioRequestSpecificSample = checkBoxAudioRequestSpecificSample; + this.formatedTextFieldAudioRequestSpecificSample = formatedTextFieldAudioRequestSpecificSample; + this.comboBoxAudioPoolSelect = comboBoxAudioPoolSelect; + this.formatedTextFieldAudioNumberOfPackets = formatedTextFieldAudioNumberOfPackets; + this.checkBoxAudioAdaptiveQuantiser = checkBoxAudioAdaptiveQuantiser; + this.formatedTextFieldAudioBetaParameter = formatedTextFieldAudioBetaParameter; + this.comboBoxAudioQParameter = comboBoxAudioQParameter; + this.textPaneAudioStatsOutput = textPaneAudioStatsOutput; + this.progressBarAudioStreamer = progressBarAudioStreamer; + this.progressBarAudioPlayer = progressBarAudioPlayer; + this.UDPConnection = UDPConnection; + } + + @Override + public void actionPerformed(ActionEvent arg0) { + Main.setSubmitButtonsEnabled(false); + Main.setStatusLineText("Test running...", Main.STATUS_LINE_ACTION_RUNNING); + (new Audio(UDPConnection, formatedTextFieldAudioRequestCode.getText(), + checkBoxAudioRequestSpecificSample.isSelected(), + Integer.parseInt(formatedTextFieldAudioRequestSpecificSample.getText().substring(1)), + comboBoxAudioPoolSelect.getItemAt(comboBoxAudioPoolSelect.getSelectedIndex()), + Integer.parseInt(formatedTextFieldAudioNumberOfPackets.getText()), + checkBoxAudioAdaptiveQuantiser.isSelected(), + Integer.parseInt(formatedTextFieldAudioBetaParameter.getText()), + comboBoxAudioQParameter.getItemAt(comboBoxAudioQParameter.getSelectedIndex()), textPaneAudioStatsOutput, + progressBarAudioStreamer, progressBarAudioPlayer)).execute(); + } +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/AudioRequestSpecificSampleListener.java b/src/gr/auth/ee/computer_networks/actionListeners/AudioRequestSpecificSampleListener.java new file mode 100644 index 0000000..e22e872 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/AudioRequestSpecificSampleListener.java @@ -0,0 +1,37 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFormattedTextField; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +public class AudioRequestSpecificSampleListener implements ChangeListener { + private final JFormattedTextField formatedTextFieldAudioRequestSpecificSample; + private final JComboBox comboBoxAudioPoolSelect; + + @SuppressWarnings("unused") + private AudioRequestSpecificSampleListener() { + // Disable default constructor + formatedTextFieldAudioRequestSpecificSample = null; + comboBoxAudioPoolSelect = null; + } + + public AudioRequestSpecificSampleListener(JFormattedTextField formatedTextFieldAudioRequestSpecificSample, + JComboBox comboBoxAudioPoolSelect) { + this.formatedTextFieldAudioRequestSpecificSample = formatedTextFieldAudioRequestSpecificSample; + this.comboBoxAudioPoolSelect = comboBoxAudioPoolSelect; + } + + @Override + public void stateChanged(ChangeEvent e) { + boolean isSpecificSampleRequestSelected = ((JCheckBox) e.getSource()).isSelected(); + + if (isSpecificSampleRequestSelected) { + this.comboBoxAudioPoolSelect.setSelectedItem(comboBoxAudioPoolSelect.getItemAt(1)); + } + + this.formatedTextFieldAudioRequestSpecificSample.setEnabled(isSpecificSampleRequestSelected); + this.comboBoxAudioPoolSelect.setEnabled(!isSpecificSampleRequestSelected); + } +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/CopterListener.java b/src/gr/auth/ee/computer_networks/actionListeners/CopterListener.java new file mode 100644 index 0000000..008817d --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/CopterListener.java @@ -0,0 +1,65 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JLabel; +import javax.swing.JProgressBar; +import javax.swing.JSlider; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.TCPBundle; +import gr.auth.ee.computer_networks.networkTests.Copter; + +public class CopterListener implements ActionListener { + private final JSlider sliderCopterFlightLevel; + private final JLabel lblCopterTemperatureOutput; + private final JLabel lblCopterPressureOutput; + private final JLabel lblCopterAltitudeOutput; + private final JLabel lblCopterLeftMotorOutput; + private final JLabel lblCopterRightMotorOutput; + private final JLabel lblCopterImageOutput; + private final JProgressBar progressBarCopterLeftMotorPower; + private final JProgressBar progressBarCopterRightMotorPower; + private final TCPBundle TCPConnection; + + @SuppressWarnings("unused") + private CopterListener() { + // Disable default constructor + this.sliderCopterFlightLevel = null; + this.lblCopterTemperatureOutput = null; + this.lblCopterPressureOutput = null; + this.lblCopterAltitudeOutput = null; + this.lblCopterLeftMotorOutput = null; + this.lblCopterRightMotorOutput = null; + this.lblCopterImageOutput = null; + this.progressBarCopterLeftMotorPower = null; + this.progressBarCopterRightMotorPower = null; + this.TCPConnection = null; + } + + public CopterListener(JSlider sliderCopterFlightLevel, JLabel lblCopterTemperatureOutput, + JLabel lblCopterPressureOutput, JLabel lblCopterAltitudeOutput, JLabel lblCopterLeftMotorOutput, + JLabel lblCopterRightMotorOutput, JLabel lblCopterImageOutput, JProgressBar progressBarCopterLeftMotorPower, + JProgressBar progressBarCopterRightMotorPower, TCPBundle TCPConnection) { + this.sliderCopterFlightLevel = sliderCopterFlightLevel; + this.lblCopterTemperatureOutput = lblCopterTemperatureOutput; + this.lblCopterPressureOutput = lblCopterPressureOutput; + this.lblCopterAltitudeOutput = lblCopterAltitudeOutput; + this.lblCopterLeftMotorOutput = lblCopterLeftMotorOutput; + this.lblCopterRightMotorOutput = lblCopterRightMotorOutput; + this.lblCopterImageOutput = lblCopterImageOutput; + this.progressBarCopterLeftMotorPower = progressBarCopterLeftMotorPower; + this.progressBarCopterRightMotorPower = progressBarCopterRightMotorPower; + this.TCPConnection = TCPConnection; + } + + @Override + public void actionPerformed(ActionEvent e) { + Main.setSubmitButtonsEnabled(false); + Main.setStatusLineText("Test running...", Main.STATUS_LINE_ACTION_RUNNING); + (new Copter(TCPConnection, sliderCopterFlightLevel.getValue(), lblCopterTemperatureOutput, + lblCopterPressureOutput, lblCopterAltitudeOutput, lblCopterLeftMotorOutput, lblCopterRightMotorOutput, + lblCopterImageOutput, progressBarCopterLeftMotorPower, progressBarCopterRightMotorPower)).execute(); + } +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/CopterSliderListener.java b/src/gr/auth/ee/computer_networks/actionListeners/CopterSliderListener.java new file mode 100644 index 0000000..7d90460 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/CopterSliderListener.java @@ -0,0 +1,26 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import javax.swing.JLabel; +import javax.swing.JSlider; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +public class CopterSliderListener implements ChangeListener { + private final JLabel lblCopterFlightLevel; + + @SuppressWarnings("unused") + private CopterSliderListener() { + // Disable default constructor + lblCopterFlightLevel = null; + } + + public CopterSliderListener(JLabel lblCopterFlightLevel) { + this.lblCopterFlightLevel = lblCopterFlightLevel; + } + + @Override + public void stateChanged(ChangeEvent e) { + lblCopterFlightLevel.setText("Desired flight level:\t" + ((JSlider) e.getSource()).getValue()); + } + +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/EchoListener.java b/src/gr/auth/ee/computer_networks/actionListeners/EchoListener.java new file mode 100644 index 0000000..3efd5e8 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/EchoListener.java @@ -0,0 +1,51 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JCheckBox; +import javax.swing.JTextField; +import javax.swing.JTextPane; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.UDPBundle; +import gr.auth.ee.computer_networks.networkTests.Echo; + +public class EchoListener implements ActionListener { + + private final JTextField textEchoRequestCode, textEchoDuration, textEchoNumberOfPackages; + private final JCheckBox checkBoxGetTemperature; + private final JTextPane runtimeOutput; + private final UDPBundle UDPConnection; + + @SuppressWarnings("unused") + private EchoListener() { + // Disable default constructor + this.textEchoRequestCode = null; + this.textEchoDuration = null; + this.textEchoNumberOfPackages = null; + this.checkBoxGetTemperature = null; + this.runtimeOutput = null; + this.UDPConnection = null; + } + + public EchoListener(JTextField textEchoRequestCode, JTextField textEchoDuration, + JTextField textEchoNumberOfPackages, JCheckBox checkBoxGetTemperature, JTextPane runtimeOutput, + UDPBundle UDPConnection) { + this.textEchoRequestCode = textEchoRequestCode; + this.textEchoDuration = textEchoDuration; + this.textEchoNumberOfPackages = textEchoNumberOfPackages; + this.checkBoxGetTemperature = checkBoxGetTemperature; + this.runtimeOutput = runtimeOutput; + this.UDPConnection = UDPConnection; + } + + @Override + public void actionPerformed(ActionEvent arg0) { + Main.setSubmitButtonsEnabled(false); + Main.setStatusLineText("Test running...", Main.STATUS_LINE_ACTION_RUNNING); + (new Echo(UDPConnection, textEchoRequestCode.getText(), Integer.parseInt(textEchoDuration.getText()), + Integer.parseInt(textEchoNumberOfPackages.getText()), checkBoxGetTemperature.isSelected(), + runtimeOutput)).execute(); + } +} \ No newline at end of file diff --git a/src/gr/auth/ee/computer_networks/actionListeners/GlobalSettingsListener.java b/src/gr/auth/ee/computer_networks/actionListeners/GlobalSettingsListener.java new file mode 100644 index 0000000..64c6ea8 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/GlobalSettingsListener.java @@ -0,0 +1,41 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JFormattedTextField; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.UDPBundle; + +public class GlobalSettingsListener implements ActionListener { + private final JFormattedTextField formatedTextFieldServerPort, formatedTextFieldClientPort; + private final UDPBundle UDPConnection; + + @SuppressWarnings("unused") + private GlobalSettingsListener() { + // Disable default constructor + this.formatedTextFieldServerPort = null; + this.formatedTextFieldClientPort = null; + UDPConnection = null; + } + + public GlobalSettingsListener(JFormattedTextField formatedTextFieldServerPort, + JFormattedTextField formatedTextFieldClientPort, UDPBundle UDPConnection) { + this.formatedTextFieldServerPort = formatedTextFieldServerPort; + this.formatedTextFieldClientPort = formatedTextFieldClientPort; + this.UDPConnection = UDPConnection; + } + + @Override + public void actionPerformed(ActionEvent arg0) { + Main.setSubmitButtonsEnabled(false); + int newLocalPort = Integer.parseInt(formatedTextFieldClientPort.getText()); + int newServerPort = Integer.parseInt(formatedTextFieldServerPort.getText()); + + UDPConnection.setLocalPort(newLocalPort); + UDPConnection.setServerPort(newServerPort); + Main.setStatusLineText("Ports set.", Main.STATUS_LINE_ACTION_DONE); + Main.setSubmitButtonsEnabled(true); + } +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/ImageListener.java b/src/gr/auth/ee/computer_networks/actionListeners/ImageListener.java new file mode 100644 index 0000000..a478a4b --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/ImageListener.java @@ -0,0 +1,58 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFormattedTextField; +import javax.swing.JLabel; +import javax.swing.JTextPane; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.UDPBundle; +import gr.auth.ee.computer_networks.networkTests.Image; + +public class ImageListener implements ActionListener { + + private final JFormattedTextField formatedTextFieldImageRequestCode, formatedTextFieldImageDuration; + private final JCheckBox checkBoxImageControlFlow; + private final JComboBox comboBoxImagePackageLength; + private final JTextPane runtimeStatsOutput; + private final JLabel runtimeImageOutput; + private final UDPBundle UDPConnection; + + @SuppressWarnings("unused") + private ImageListener() { + // Disable default constructor + this.formatedTextFieldImageRequestCode = null; + this.checkBoxImageControlFlow = null; + this.comboBoxImagePackageLength = null; + this.formatedTextFieldImageDuration = null; + this.runtimeStatsOutput = null; + this.runtimeImageOutput = null; + this.UDPConnection = null; + } + + public ImageListener(JFormattedTextField formatedTextFieldImageRequestCode, JCheckBox checkBoxImageControlFlow, + JComboBox comboBoxImagePackageLength, JFormattedTextField formatedTextFieldImageDuration, + JTextPane runtimeStatsOutput, JLabel runtimeImageOutput, UDPBundle UDPConnection) { + this.formatedTextFieldImageRequestCode = formatedTextFieldImageRequestCode; + this.checkBoxImageControlFlow = checkBoxImageControlFlow; + this.comboBoxImagePackageLength = comboBoxImagePackageLength; + this.formatedTextFieldImageDuration = formatedTextFieldImageDuration; + this.runtimeStatsOutput = runtimeStatsOutput; + this.runtimeImageOutput = runtimeImageOutput; + this.UDPConnection = UDPConnection; + } + + @Override + public void actionPerformed(ActionEvent arg0) { + Main.setSubmitButtonsEnabled(false); + Main.setStatusLineText("Test running...", Main.STATUS_LINE_ACTION_RUNNING); + (new Image(UDPConnection, formatedTextFieldImageRequestCode.getText(), + Integer.parseInt(formatedTextFieldImageDuration.getText()), checkBoxImageControlFlow.isSelected(), + comboBoxImagePackageLength.getItemAt(comboBoxImagePackageLength.getSelectedIndex()), runtimeStatsOutput, + runtimeImageOutput)).execute(); + } +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/VehicleListener.java b/src/gr/auth/ee/computer_networks/actionListeners/VehicleListener.java new file mode 100644 index 0000000..67cc356 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/VehicleListener.java @@ -0,0 +1,83 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JCheckBox; +import javax.swing.JFormattedTextField; +import javax.swing.JLabel; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.TCPBundle; +import gr.auth.ee.computer_networks.helpers.UDPBundle; +import gr.auth.ee.computer_networks.networkTests.Vehicle; + +public class VehicleListener implements ActionListener { + private final JFormattedTextField formatedTextFieldVehicleRequestCode; + private final JCheckBox checkBoxVehicleUseUDP; + private final JFormattedTextField formatedTextFieldVehicleDuration; + private final JLabel lblVehicleEngineRunTimeOutput; + private final JLabel lblVehicleAirTempOutput; + private final JLabel lblVehicleThrottlePositionOutput; + private final JLabel lblVehicleEngineRPMOutput; + private final JLabel lblVehicleSpeedOutput; + private final JLabel lblVehicleCoolantTemperatureOutput; + private final JLabel lblVehiclePacketsTotalTimeOutput; + private final TCPBundle TCPConnection; + private final UDPBundle UDPConnection; + + @SuppressWarnings("unused") + private VehicleListener() { + // Disable default constructor + this.formatedTextFieldVehicleRequestCode = null; + this.checkBoxVehicleUseUDP = null; + this.formatedTextFieldVehicleDuration = null; + this.lblVehicleEngineRunTimeOutput = null; + this.lblVehicleAirTempOutput = null; + this.lblVehicleThrottlePositionOutput = null; + this.lblVehicleEngineRPMOutput = null; + this.lblVehicleSpeedOutput = null; + this.lblVehicleCoolantTemperatureOutput = null; + this.lblVehiclePacketsTotalTimeOutput = null; + this.TCPConnection = null; + this.UDPConnection = null; + } + + public VehicleListener(JFormattedTextField formatedTextFieldVehicleRequestCode, JCheckBox checkBoxVehicleUseUDP, + JFormattedTextField formatedTextFieldVehicleDuration, JLabel lblVehicleEngineRunTimeOutput, + JLabel lblVehicleAirTempOutput, JLabel lblVehicleThrottlePositionOutput, JLabel lblVehicleEngineRPMOutput, + JLabel lblVehicleSpeedOutput, JLabel lblVehicleCoolantTemperatureOutput, + JLabel lblVehiclePacketsTotalTimeOutput, TCPBundle TCPConnection, UDPBundle UDPConnection) { + this.formatedTextFieldVehicleRequestCode = formatedTextFieldVehicleRequestCode; + this.checkBoxVehicleUseUDP = checkBoxVehicleUseUDP; + this.formatedTextFieldVehicleDuration = formatedTextFieldVehicleDuration; + this.lblVehicleEngineRunTimeOutput = lblVehicleEngineRunTimeOutput; + this.lblVehicleAirTempOutput = lblVehicleAirTempOutput; + this.lblVehicleThrottlePositionOutput = lblVehicleThrottlePositionOutput; + this.lblVehicleEngineRPMOutput = lblVehicleEngineRPMOutput; + this.lblVehicleSpeedOutput = lblVehicleSpeedOutput; + this.lblVehicleCoolantTemperatureOutput = lblVehicleCoolantTemperatureOutput; + this.lblVehiclePacketsTotalTimeOutput = lblVehiclePacketsTotalTimeOutput; + this.TCPConnection = TCPConnection; + this.UDPConnection = UDPConnection; + } + + @Override + public void actionPerformed(ActionEvent arg0) { + Main.setSubmitButtonsEnabled(false); + Main.setStatusLineText("Test running...", Main.STATUS_LINE_ACTION_RUNNING); + if (checkBoxVehicleUseUDP.isSelected()) { + new Vehicle(UDPConnection, formatedTextFieldVehicleRequestCode.getText(), + Integer.parseInt(formatedTextFieldVehicleDuration.getText()), lblVehicleEngineRunTimeOutput, + lblVehicleAirTempOutput, lblVehicleThrottlePositionOutput, lblVehicleEngineRPMOutput, + lblVehicleSpeedOutput, lblVehicleCoolantTemperatureOutput, lblVehiclePacketsTotalTimeOutput) + .execute(); + } else { + new Vehicle(TCPConnection, formatedTextFieldVehicleRequestCode.getText(), + Integer.parseInt(formatedTextFieldVehicleDuration.getText()), lblVehicleEngineRunTimeOutput, + lblVehicleAirTempOutput, lblVehicleThrottlePositionOutput, lblVehicleEngineRPMOutput, + lblVehicleSpeedOutput, lblVehicleCoolantTemperatureOutput, lblVehiclePacketsTotalTimeOutput) + .execute(); + } + } +} diff --git a/src/gr/auth/ee/computer_networks/actionListeners/VehicleUseUDPListener.java b/src/gr/auth/ee/computer_networks/actionListeners/VehicleUseUDPListener.java new file mode 100644 index 0000000..7417e90 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/actionListeners/VehicleUseUDPListener.java @@ -0,0 +1,26 @@ +package gr.auth.ee.computer_networks.actionListeners; + +import javax.swing.JCheckBox; +import javax.swing.JFormattedTextField; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +public class VehicleUseUDPListener implements ChangeListener { + private final JFormattedTextField formatedTextFieldVehicleRequestCode; + + @SuppressWarnings("unused") + private VehicleUseUDPListener() { + // Disable default constructor + this.formatedTextFieldVehicleRequestCode = null; + } + + public VehicleUseUDPListener(JFormattedTextField formatedTextFieldVehicleRequestCode) { + // Disable default constructor + this.formatedTextFieldVehicleRequestCode = formatedTextFieldVehicleRequestCode; + } + + @Override + public void stateChanged(ChangeEvent e) { + this.formatedTextFieldVehicleRequestCode.setEnabled(((JCheckBox) e.getSource()).isSelected()); + } +} diff --git a/src/gr/auth/ee/computer_networks/helpers/MiniPID.java b/src/gr/auth/ee/computer_networks/helpers/MiniPID.java new file mode 100644 index 0000000..38d21c2 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/helpers/MiniPID.java @@ -0,0 +1,572 @@ +package gr.auth.ee.computer_networks.helpers; + +/** + * Small, easy to use PID implementation with advanced controller + * capability.
+ * Minimal usage:
+ * MiniPID pid = new MiniPID(p,i,d);
+ * ...looping code...{
+ * output= pid.getOutput(sensorvalue,target);
+ * } + * + * @see http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-direction/improving-the-beginners-pid-introduction + */ +public class MiniPID { + // ********************************** + // Class private variables + // ********************************** + + private double P = 0; + private double I = 0; + private double D = 0; + private double F = 0; + + private double maxIOutput = 0; + private double maxError = 0; + private double errorSum = 0; + + private double maxOutput = 0; + private double minOutput = 0; + + private double setpoint = 0; + + private double lastActual = 0; + + private boolean firstRun = true; + private boolean reversed = false; + + private double outputRampRate = 0; + private double lastOutput = 0; + + private double outputFilter = 0; + + private double setpointRange = 0; + + // ********************************** + // Constructor functions + // ********************************** + + /** + * Create a MiniPID class object. See setP, setI, setD methods for more detailed + * parameters. + * + * @param p + * Proportional gain. Large if large difference between setpoint and + * target. + * @param i + * Integral gain. Becomes large if setpoint cannot reach target + * quickly. + * @param d + * Derivative gain. Responds quickly to large changes in error. Small + * values prevents P and I terms from causing overshoot. + */ + public MiniPID(double p, double i, double d) { + P = p; + I = i; + D = d; + checkSigns(); + } + + /** + * Create a MiniPID class object. See setP, setI, setD, setF methods for more + * detailed parameters. + * + * @param p + * Proportional gain. Large if large difference between setpoint and + * target. + * @param i + * Integral gain. Becomes large if setpoint cannot reach target + * quickly. + * @param d + * Derivative gain. Responds quickly to large changes in error. Small + * values prevents P and I terms from causing overshoot. + * @param f + * Feed-forward gain. Open loop "best guess" for the output should + * be. Only useful if setpoint represents a rate. + */ + public MiniPID(double p, double i, double d, double f) { + P = p; + I = i; + D = d; + F = f; + checkSigns(); + } + + // ********************************** + // Configuration functions + // ********************************** + /** + * Configure the Proportional gain parameter.
+ * This responds quickly to changes in setpoint, and provides most of the + * initial driving force to make corrections.
+ * Some systems can be used with only a P gain, and many can be operated with + * only PI.
+ * For position based controllers, this is the first parameter to tune, with I + * second.
+ * For rate controlled systems, this is often the second after F. + * + * @param p + * Proportional gain. Affects output according to + * output+=P*(setpoint-current_value) + */ + public void setP(double p) { + P = p; + checkSigns(); + } + + /** + * Changes the I parameter
+ * This is used for overcoming disturbances, and ensuring that the controller + * always gets to the control mode. Typically tuned second for "Position" based + * modes, and third for "Rate" or continuous based modes.
+ * Affects output through output+=previous_errors*Igain + * ;previous_errors+=current_error + * + * @see {@link #setMaxIOutput(double) setMaxIOutput} for how to restrict + * + * @param i + * New gain value for the Integral term + */ + public void setI(double i) { + if (I != 0) { + errorSum = errorSum * I / i; + } + if (maxIOutput != 0) { + maxError = maxIOutput / i; + } + I = i; + checkSigns(); + // Implementation note: + // This Scales the accumulated error to avoid output errors. + // As an example doubling the I term cuts the accumulated error in half, which + // results in the + // output change due to the I term constant during the transition. + } + + /** + * Changes the D parameter
+ * This has two primary effects: + *

  • Adds a "startup kick" and speeds up system response during setpoint + * changes + *
  • Adds "drag" and slows the system when moving toward the target A + * small D value can be useful for both improving response times, and preventing + * overshoot. However, in many systems a large D value will cause significant + * instability, particularly for large setpoint changes.
    + * Affects output through output += -D*(current_input_value - + * last_input_value) + * + * @param d + * New gain value for the Derivative term + */ + public void setD(double d) { + D = d; + checkSigns(); + } + + /** + * Configure the FeedForward parameter.
    + * This is excellent for velocity, rate, and other continuous control modes + * where you can expect a rough output value based solely on the setpoint.
    + * Should not be used in "position" based control modes.
    + * Affects output according to output+=F*Setpoint. Note, that a F-only + * system is actually open loop. + * + * @param f + * Feed forward gain. + */ + public void setF(double f) { + F = f; + checkSigns(); + } + + /** + * Configure the PID object. See setP, setI, setD methods for more detailed + * parameters. + * + * @param p + * Proportional gain. Large if large difference between setpoint and + * target. + * @param i + * Integral gain. Becomes large if setpoint cannot reach target + * quickly. + * @param d + * Derivative gain. Responds quickly to large changes in error. Small + * values prevents P and I terms from causing overshoot. + */ + public void setPID(double p, double i, double d) { + P = p; + D = d; + // Note: the I term has additional calculations, so we need to use it's + // specific method for setting it. + setI(i); + checkSigns(); + } + + /** + * Configure the PID object. See setP, setI, setD, setF methods for more + * detailed parameters. + * + * @param p + * Proportional gain. Large if large difference between setpoint and + * target. + * @param i + * Integral gain. Becomes large if setpoint cannot reach target + * quickly. + * @param d + * Derivative gain. Responds quickly to large changes in error. Small + * values prevents P and I terms from causing overshoot. + * @param f + * Feed-forward gain. Open loop "best guess" for the output should + * be. Only useful if setpoint represents a rate. + */ + public void setPID(double p, double i, double d, double f) { + P = p; + D = d; + F = f; + // Note: the I term has additional calculations, so we need to use it's + // specific method for setting it. + setI(i); + checkSigns(); + } + + /** + * Set the maximum output value contributed by the I component of the system + * This can be used to prevent large windup issues and make tuning simpler + * + * @param maximum. + * Units are the same as the expected output value + */ + public void setMaxIOutput(double maximum) { + // Internally maxError and Izone are similar, but scaled for different purposes. + // The maxError is generated for simplifying math, since calculations against + // the max error are far more common than changing the I term or Izone. + maxIOutput = maximum; + if (I != 0) { + maxError = maxIOutput / I; + } + } + + /** + * Specify a maximum output range.
    + * When one input is specified, output range is configured to [-output, + * output] + * + * @param output + */ + public void setOutputLimits(double output) { + setOutputLimits(-output, output); + } + + /** + * Specify a maximum output. When two inputs specified, output range is + * configured to [minimum, maximum] + * + * @param minimum + * possible output value + * @param maximum + * possible output value + */ + public void setOutputLimits(double minimum, double maximum) { + if (maximum < minimum) + return; + maxOutput = maximum; + minOutput = minimum; + + // Ensure the bounds of the I term are within the bounds of the allowable output + // swing + if (maxIOutput == 0 || maxIOutput > (maximum - minimum)) { + setMaxIOutput(maximum - minimum); + } + } + + /** + * Set the operating direction of the PID controller + * + * @param reversed + * Set true to reverse PID output + */ + public void setDirection(boolean reversed) { + this.reversed = reversed; + } + + // ********************************** + // Primary operating functions + // ********************************** + + /** + * Configure setpoint for the PID calculations
    + * This represents the target for the PID system's, such as a position, + * velocity, or angle.
    + * + * @see MiniPID#getOutput(actual)
    + * @param setpoint + */ + public void setSetpoint(double setpoint) { + this.setpoint = setpoint; + } + + /** + * Calculate the output value for the current PID cycle.
    + * + * @param actual + * The monitored value, typically as a sensor input. + * @param setpoint + * The target value for the system + * @return calculated output value for driving the system + */ + public double getOutput(double actual, double setpoint) { + double output; + double Poutput; + double Ioutput; + double Doutput; + double Foutput; + + this.setpoint = setpoint; + + // Ramp the setpoint used for calculations if user has opted to do so + if (setpointRange != 0) { + setpoint = constrain(setpoint, actual - setpointRange, actual + setpointRange); + } + + // Do the simple parts of the calculations + double error = setpoint - actual; + + // Calculate F output. Notice, this depends only on the setpoint, and not the + // error. + Foutput = F * setpoint; + + // Calculate P term + Poutput = P * error; + + // If this is our first time running this, we don't actually _have_ a previous + // input or output. + // For sensor, sanely assume it was exactly where it is now. + // For last output, we can assume it's the current time-independent outputs. + if (firstRun) { + lastActual = actual; + lastOutput = Poutput + Foutput; + firstRun = false; + } + + // Calculate D Term + // Note, this is negative. This actually "slows" the system if it's doing + // the correct thing, and small values helps prevent output spikes and overshoot + Doutput = -D * (actual - lastActual); + lastActual = actual; + + // The Iterm is more complex. There's several things to factor in to make it + // easier to deal with. + // 1. maxIoutput restricts the amount of output contributed by the Iterm. + // 2. prevent windup by not increasing errorSum if we're already running against + // our max Ioutput + // 3. prevent windup by not increasing errorSum if output is output=maxOutput + Ioutput = I * errorSum; + if (maxIOutput != 0) { + Ioutput = constrain(Ioutput, -maxIOutput, maxIOutput); + } + + // And, finally, we can just add the terms up + output = Foutput + Poutput + Ioutput + Doutput; + + // Figure out what we're doing with the error. + if (minOutput != maxOutput && !bounded(output, minOutput, maxOutput)) { + errorSum = error; + // reset the error sum to a sane level + // Setting to current error ensures a smooth transition when the P term + // decreases enough for the I term to start acting upon the controller + // From that point the I term will build up as would be expected + } else if (outputRampRate != 0 && !bounded(output, lastOutput - outputRampRate, lastOutput + outputRampRate)) { + errorSum = error; + } else if (maxIOutput != 0) { + errorSum = constrain(errorSum + error, -maxError, maxError); + // In addition to output limiting directly, we also want to prevent I term + // buildup, so restrict the error directly + } else { + errorSum += error; + } + + // Restrict output to our specified output and ramp limits + if (outputRampRate != 0) { + output = constrain(output, lastOutput - outputRampRate, lastOutput + outputRampRate); + } + if (minOutput != maxOutput) { + output = constrain(output, minOutput, maxOutput); + } + if (outputFilter != 0) { + output = lastOutput * outputFilter + output * (1 - outputFilter); + } + + // Get a test printline with lots of details about the internal + // calculations. This can be useful for debugging. + // System.out.printf("Final output %5.2f [ %5.2f, %5.2f , %5.2f ], eSum + // %.2f\n",output,Poutput, Ioutput, Doutput,errorSum ); + // System.out.printf("%5.2f\t%5.2f\t%5.2f\t%5.2f\n",output,Poutput, Ioutput, + // Doutput ); + + lastOutput = output; + return output; + } + + /** + * Calculate the output value for the current PID cycle.
    + * In no-parameter mode, this uses the last sensor value, and last setpoint + * value.
    + * Not typically useful, and use of parameter modes is suggested.
    + * + * @return calculated output value for driving the system + */ + public double getOutput() { + return getOutput(lastActual, setpoint); + } + + /** + * Calculate the output value for the current PID cycle.
    + * In one parameter mode, the last configured setpoint will be used.
    + * + * @see MiniPID#setSetpoint() + * @param actual + * The monitored value, typically as a sensor input. + * @param setpoint + * The target value for the system + * @return calculated output value for driving the system + */ + public double getOutput(double actual) { + return getOutput(actual, setpoint); + } + + /** + * Resets the controller. This erases the I term buildup, and removes D gain on + * the next loop.
    + * This should be used any time the PID is disabled or inactive for extended + * duration, and the controlled portion of the system may have changed due to + * external forces. + */ + public void reset() { + firstRun = true; + errorSum = 0; + } + + /** + * Set the maximum rate the output can increase per cycle.
    + * This can prevent sharp jumps in output when changing setpoints or enabling a + * PID system, which might cause stress on physical or electrical systems.
    + * Can be very useful for fast-reacting control loops, such as ones with large P + * or D values and feed-forward systems. + * + * @param rate, + * with units being the same as the output + */ + public void setOutputRampRate(double rate) { + outputRampRate = rate; + } + + /** + * Set a limit on how far the setpoint can be from the current position
    + * Can simplify tuning by helping tuning over a small range applies to a much + * larger range.
    + * This limits the reactivity of P term, and restricts impact of large D term + * during large setpoint adjustments. Increases lag and I term if range is too + * small. + * + * @param range, + * with units being the same as the expected sensor range. + */ + public void setSetpointRange(double range) { + setpointRange = range; + } + + /** + * Set a filter on the output to reduce sharp oscillations.
    + * 0.1 is likely a sane starting value. Larger values use historical data more + * heavily, with low values weigh newer data. 0 will disable, filtering, and use + * only the most recent value.
    + * Increasing the filter strength will P and D oscillations, but force larger I + * values and increase I term overshoot.
    + * Uses an exponential wieghted rolling sum filter, according to a simple
    + * + *
    +	 * output*(1-strength)*sum(0..n){output*strength^n}
    +	 * 
    + * + * algorithm. + * + * @param output + * valid between [0..1), meaning [current output only.. historical + * output only) + */ + public void setOutputFilter(double strength) { + if (strength == 0 || bounded(strength, 0, 1)) { + outputFilter = strength; + } + } + + // ************************************** + // Helper functions + // ************************************** + + /** + * Forces a value into a specific range + * + * @param value + * input value + * @param min + * maximum returned value + * @param max + * minimum value in range + * @return Value if it's within provided range, min or max otherwise + */ + private double constrain(double value, double min, double max) { + if (value > max) { + return max; + } + if (value < min) { + return min; + } + return value; + } + + /** + * Test if the value is within the min and max, inclusive + * + * @param value + * to test + * @param min + * Minimum value of range + * @param max + * Maximum value of range + * @return true if value is within range, false otherwise + */ + private boolean bounded(double value, double min, double max) { + // Note, this is an inclusive range. This is so tests like + // `bounded(constrain(0,0,1),0,1)` will return false. + // This is more helpful for determining edge-case behaviour + // than <= is. + return (min < value) && (value < max); + } + + /** + * To operate correctly, all PID parameters require the same sign This should + * align with the {@literal}reversed value + */ + private void checkSigns() { + if (reversed) { // all values should be below zero + if (P > 0) + P *= -1; + if (I > 0) + I *= -1; + if (D > 0) + D *= -1; + if (F > 0) + F *= -1; + } else { // all values should be above zero + if (P < 0) + P *= -1; + if (I < 0) + I *= -1; + if (D < 0) + D *= -1; + if (F < 0) + F *= -1; + } + } +} \ No newline at end of file diff --git a/src/gr/auth/ee/computer_networks/helpers/TCPBundle.java b/src/gr/auth/ee/computer_networks/helpers/TCPBundle.java new file mode 100644 index 0000000..c9b3dd4 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/helpers/TCPBundle.java @@ -0,0 +1,64 @@ +package gr.auth.ee.computer_networks.helpers; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.Socket; + +public class TCPBundle { + private static final int CONNECTION_TIME_OUT = 2000; + + private String serverIp = ""; + private int serverPort = 0; + private Socket connection = null; + private InetAddress hostAddress = null; + private InputStream inputStream = null; + private OutputStream outputStream = null; + + @SuppressWarnings("unused") + private TCPBundle() { + // Disable default constructor + } + + public TCPBundle(String serverIp, int serverPort) { + this.serverIp = serverIp; + this.serverPort = serverPort; + + try { + String[] serverIPSplit = this.serverIp.split("\\."); + byte[] serverIPBytes = { (byte) Integer.parseInt(serverIPSplit[0]), + (byte) Integer.parseInt(serverIPSplit[1]), (byte) Integer.parseInt(serverIPSplit[2]), + (byte) Integer.parseInt(serverIPSplit[3]) }; + hostAddress = InetAddress.getByAddress(serverIPBytes); + + connection = new Socket(this.hostAddress, this.serverPort); + connection.setSoTimeout(CONNECTION_TIME_OUT); + + inputStream = connection.getInputStream(); + outputStream = connection.getOutputStream(); + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + public int getServerPort() { + return serverPort; + } + + public Socket getConnection() { + return connection; + } + + public InetAddress getHostAddress() { + return hostAddress; + } + + public InputStream getInputStream() { + return inputStream; + } + + public OutputStream getOutputStream() { + return outputStream; + } +} diff --git a/src/gr/auth/ee/computer_networks/helpers/UDPBundle.java b/src/gr/auth/ee/computer_networks/helpers/UDPBundle.java new file mode 100644 index 0000000..675bee7 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/helpers/UDPBundle.java @@ -0,0 +1,78 @@ +package gr.auth.ee.computer_networks.helpers; + +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.UnknownHostException; + +public class UDPBundle { + private static final int CONNECTION_TIME_OUT = 10000; + + private String serverIp = ""; + private int serverPort = 0, localPort = 0; + private DatagramSocket connection = null; + private static InetAddress hostAddress; + + @SuppressWarnings("unused") + private UDPBundle() { + // Disable default constructor + } + + public UDPBundle(String serverIp, int serverPort, int localPort) { + this.serverIp = serverIp; + this.serverPort = serverPort; + this.localPort = localPort; + try { + connection = new DatagramSocket(this.localPort); + connection.setSoTimeout(CONNECTION_TIME_OUT); + + String[] serverIPSplit = serverIp.split("\\."); + byte[] serverIPBytes = { (byte) Integer.parseInt(serverIPSplit[0]), + (byte) Integer.parseInt(serverIPSplit[1]), (byte) Integer.parseInt(serverIPSplit[2]), + (byte) Integer.parseInt(serverIPSplit[3]) }; + hostAddress = InetAddress.getByAddress(serverIPBytes); + } catch (SocketException exception) { + exception.printStackTrace(); + } catch (UnknownHostException exception) { + exception.printStackTrace(); + } + } + + public String getServerIp() { + return serverIp; + } + + public int getServerPort() { + return serverPort; + } + + public int getLocalPort() { + return localPort; + } + + public DatagramSocket getConnection() { + return connection; + } + + public static InetAddress getHostAddress() { + return hostAddress; + } + + public void setServerPort(int serverPort) { + this.serverPort = serverPort; + } + + public boolean setLocalPort(int localPort) { + if (this.localPort == localPort) { + return true; + } + try { + connection = new DatagramSocket(localPort); + this.localPort = localPort; + return true; + } catch (SocketException exception) { + exception.printStackTrace(); + return false; + } + } +} diff --git a/src/gr/auth/ee/computer_networks/networkTests/Audio.java b/src/gr/auth/ee/computer_networks/networkTests/Audio.java new file mode 100644 index 0000000..4675455 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/networkTests/Audio.java @@ -0,0 +1,380 @@ +package gr.auth.ee.computer_networks.networkTests; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.List; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.SourceDataLine; +import javax.swing.JProgressBar; +import javax.swing.JTextPane; +import javax.swing.SwingWorker; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.UDPBundle; + +public class Audio extends SwingWorker { + private static final int NON_ADAPTIVELY_QUANTISED_PACKET_LENGTH = 128; + private static final int ADAPTIVELY_QUANTISED_PACKET_LENGTH = 132; + private static final int SAMPLE_RATE = 8000; + private static final int NUMBER_OF_CHANNELS = 1; + private static final boolean IS_SIGNED = true; + private static final boolean IS_BIG_ENDIAN = false; + + private static UDPBundle UDPConnection; + private String requestCode, audioPool; + private int specificSampleIndex, numberOfPacketsToRequest, betaParameter, qParameter; + private boolean isAdaptivelyQuantised, shouldRequestSpecificSample; + private static JTextPane runtimeStatsOutput; + private JProgressBar progressBarAudioStreamer, progressBarAudioPlayer; + + private boolean testSuccess = false; + private String testStatusOutput = "undefined"; + private int numberOfBytesWritenToBuffer = 0; + private int bytesPerPacket; + private float streamingProgress = 0; + private float streamingSpeed = 0; + private long playingProgress = 0; + + @SuppressWarnings("unused") + private Audio() { + // Disable default constructor + } + + public Audio(UDPBundle UDPConnection, String requestCode, boolean shouldRequestSpecificSample, + int specificSampleIndex, String audioPool, int numberOfPacketsToRequest, boolean isAdaptivelyQuantised, + int betaParameter, int qParameter, JTextPane runtimeStatsOutput, JProgressBar progressBarAudioStreamer, + JProgressBar progressBarAudioPlayer) { + Audio.UDPConnection = UDPConnection; + this.requestCode = requestCode; + this.shouldRequestSpecificSample = shouldRequestSpecificSample; + this.specificSampleIndex = specificSampleIndex; + this.audioPool = audioPool; + this.numberOfPacketsToRequest = numberOfPacketsToRequest; + this.isAdaptivelyQuantised = isAdaptivelyQuantised; + this.betaParameter = betaParameter; + this.qParameter = qParameter; + Audio.runtimeStatsOutput = runtimeStatsOutput; + this.progressBarAudioStreamer = progressBarAudioStreamer; + this.progressBarAudioPlayer = progressBarAudioPlayer; + + if (!isAdaptivelyQuantised) { + bytesPerPacket = 128 * 2; + } else { + bytesPerPacket = 128 * 4; + } + } + + @Override + protected Void doInBackground() { + int numberOfBytesPassedToLineOut = 0; + byte[] decodedDPCMBuffer = new byte[numberOfPacketsToRequest * bytesPerPacket]; + AudioFormat linearPCM = new AudioFormat(SAMPLE_RATE, qParameter, NUMBER_OF_CHANNELS, IS_SIGNED, IS_BIG_ENDIAN); + AudioStreamer audioStreamer = new AudioStreamer(decodedDPCMBuffer); + Thread audioStreamerThread = new Thread(audioStreamer); + SourceDataLine lineOut; + + audioStreamerThread.start(); + while (numberOfBytesWritenToBuffer < ((8192 - 7500) * (numberOfPacketsToRequest / 32))) { + publish(); + // wait a bit + } + + playingProgress = 0; + try { + lineOut = AudioSystem.getSourceDataLine(linearPCM); + lineOut.open(linearPCM, 2560); + + lineOut.start(); + + while (audioStreamerThread.isAlive() && playingProgress < numberOfPacketsToRequest * bytesPerPacket) { + playingProgress = lineOut.getLongFramePosition(); + if (isAdaptivelyQuantised) { + playingProgress *= 2; + } + publish(); + + if (numberOfBytesPassedToLineOut != numberOfBytesWritenToBuffer) { + numberOfBytesPassedToLineOut += lineOut.write(decodedDPCMBuffer, numberOfBytesPassedToLineOut, + numberOfBytesWritenToBuffer - numberOfBytesPassedToLineOut); + } + } + + lineOut.stop(); + lineOut.close(); + } catch ( + + LineUnavailableException exception) { + exception.printStackTrace(); + } + streamingProgress = 100; + publish(); + + testSuccess = true; + testStatusOutput = "Test finished successfully."; + return null; + } + + @Override + protected void process(List notInUse) { + runtimeStatsOutput.setText("" + streamingSpeed + "KB/s"); + progressBarAudioStreamer.setValue((int) (streamingProgress + ((streamingProgress + 1) / 100))); + progressBarAudioPlayer + .setValue((int) (1000 * ((float) playingProgress / (numberOfPacketsToRequest * bytesPerPacket)))); + } + + @Override + protected void done() { + Main.setStatusLineText(testStatusOutput, + ((testSuccess) ? Main.STATUS_LINE_ACTION_DONE : Main.STATUS_LINE_ACTION_ERROR)); + Main.setSubmitButtonsEnabled(true); + } + + class AudioStreamer implements Runnable { + private byte[] decodedDPCMBuffer; + private int[] meansArray = null, betasArray = null; + + public AudioStreamer(byte[] decodedDPCMBuffer) { + this.decodedDPCMBuffer = decodedDPCMBuffer; + } + + private void decodeDPCMPacket(byte[] packetBytes, byte[] decodedPacket, int beta, int packetIndex) { + for (int i = 0; i < packetBytes.length; i++) { + // Some noob code golf stuff here :P + decodedPacket[packetIndex * bytesPerPacket + 2 * i] = (byte) ((((packetBytes[i] >> 4) & 0x0F) - 8) + + beta * ((packetIndex > 0) ? decodedPacket[packetIndex * bytesPerPacket + 2 * i - 1] : 0)); + decodedPacket[packetIndex * bytesPerPacket + 2 * i + 1] = (byte) (((packetBytes[i] & 0x0F) - 8) + + beta * decodedPacket[packetIndex * bytesPerPacket + 2 * i]); + } + } + + private int decodeAQDPCMPacket(byte[] packetBytes, byte[] decodedPacket, int packetIndex, int previousNibble) { + int nibble = previousNibble, mean = 0, beta = 1; + + { + byte[] tempByte = new byte[4]; + byte meanSign = (byte) ((packetBytes[1] & 0x80) != 0 ? 0xff : 0x00); + tempByte[3] = meanSign; + tempByte[2] = meanSign; + tempByte[1] = packetBytes[1]; + tempByte[0] = packetBytes[0]; + + mean = ByteBuffer.wrap(tempByte).order(ByteOrder.LITTLE_ENDIAN).getInt(); + + byte betaSign = (byte) ((packetBytes[3] & 0x80) != 0 ? 0xff : 0x00); + tempByte[3] = betaSign; + tempByte[2] = betaSign; + tempByte[1] = packetBytes[3]; + tempByte[0] = packetBytes[2]; + + beta = ByteBuffer.wrap(tempByte).order(ByteOrder.LITTLE_ENDIAN).getInt(); + + meansArray[packetIndex] = mean; + betasArray[packetIndex] = beta; + } + + for (int i = 4; i < 132; ++i) { + int upperDifference = (((packetBytes[i] >>> 4) & 0x0f) - 8) * beta, + lowerDifference = ((packetBytes[i] & 0x0f) - 8) * beta; + + int firstSamplePair = upperDifference + nibble + mean; + int secondSamplePair = lowerDifference + upperDifference + mean; + nibble = lowerDifference; + + decodedPacket[packetIndex * 512 + 4 * (i - 4)] = (byte) (firstSamplePair); + decodedPacket[packetIndex * 512 + 4 * (i - 4) + 1] = (byte) (firstSamplePair / 256 > 127 ? 127 + : firstSamplePair / 256 < -128 ? -128 : firstSamplePair / 256); + decodedPacket[packetIndex * 512 + 4 * (i - 4) + 2] = (byte) (secondSamplePair); + decodedPacket[packetIndex * 512 + 4 * (i - 4) + 3] = (byte) (secondSamplePair / 256 > 127 ? 127 + : secondSamplePair / 256 < -128 ? -128 : secondSamplePair / 256); + } + return nibble; + } + + @Override + public void run() { + int numberOfPackets = 0, prevNibble = 0, audioOutputFileCounter = 0; + byte[] responseBuffer = null; + DatagramPacket audioRequestPacket = null, audioResponsePacket = null; + FileOutputStream audioDiffStream = null, audioOutputStream = null, audioParametersStream = null; + File audioDiffFile = null, audioOutputFile = null, audioParametersFile = null; + + do { + audioDiffFile = new File("output/audioDiff_" + requestCode + + (audioOutputFileCounter == 0 ? "" : "_" + audioOutputFileCounter) + ".csv"); + audioOutputFile = new File("output/audio_" + requestCode + + (audioOutputFileCounter == 0 ? "" : "_" + audioOutputFileCounter) + ".csv"); + if (isAdaptivelyQuantised) { + audioParametersFile = new File("output/audioParams_" + requestCode + + (audioOutputFileCounter == 0 ? "" : "_" + audioOutputFileCounter) + ".csv"); + } + if (!audioDiffFile.isFile() && !audioOutputFile.isFile() + && (!isAdaptivelyQuantised || !audioParametersFile.isFile())) { + break; + } + ++audioOutputFileCounter; + } while (true); + + try { + audioDiffStream = new FileOutputStream(audioDiffFile, false); + audioOutputStream = new FileOutputStream(audioOutputFile, false); + if (isAdaptivelyQuantised) { + audioParametersStream = new FileOutputStream(audioParametersFile, false); + } + } catch (FileNotFoundException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "File open failure!"; + return; + } + + if (!isAdaptivelyQuantised) { + responseBuffer = new byte[NON_ADAPTIVELY_QUANTISED_PACKET_LENGTH]; + audioResponsePacket = new DatagramPacket(responseBuffer, NON_ADAPTIVELY_QUANTISED_PACKET_LENGTH); + } else { + meansArray = new int[numberOfPacketsToRequest]; + betasArray = new int[numberOfPacketsToRequest]; + responseBuffer = new byte[ADAPTIVELY_QUANTISED_PACKET_LENGTH]; + requestCode = requestCode + "AQ"; + audioResponsePacket = new DatagramPacket(responseBuffer, ADAPTIVELY_QUANTISED_PACKET_LENGTH); + } + + if (shouldRequestSpecificSample) { + requestCode = requestCode + "L" + + (specificSampleIndex < 10 ? "0" + specificSampleIndex : specificSampleIndex); + } + + requestCode = requestCode + audioPool + (numberOfPacketsToRequest < 100 + ? "0" + (numberOfPacketsToRequest < 10 ? "0" + numberOfPacketsToRequest : numberOfPacketsToRequest) + : numberOfPacketsToRequest); + + audioRequestPacket = new DatagramPacket(requestCode.getBytes(), requestCode.getBytes().length, + UDPBundle.getHostAddress(), UDPConnection.getServerPort()); + try { + UDPConnection.getConnection().send(audioRequestPacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + audioDiffStream.close(); + audioOutputStream.close(); + if (isAdaptivelyQuantised) { + audioParametersStream.close(); + } + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "File close failure, after request send failure!"; + return; + } + testSuccess = false; + testStatusOutput = "Request send failure!"; + return; + } + + while (true) { + long packetDownloadTime = 0, packetStartTime = System.currentTimeMillis(); + + try { + UDPConnection.getConnection().receive(audioResponsePacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + audioDiffStream.close(); + audioOutputStream.close(); + if (isAdaptivelyQuantised) { + audioParametersStream.close(); + } + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "File close failure, after response receive failure!"; + return; + } + testSuccess = false; + testStatusOutput = "Response receive failure!"; + return; + } + + packetDownloadTime = System.currentTimeMillis() - packetStartTime; + + for (byte audioSample : responseBuffer) { + try { + audioDiffStream.write((audioSample + "\t").getBytes(), 0, + (audioSample + "\t").getBytes().length); + } catch (IOException exception) { + exception.printStackTrace(); + try { + audioDiffStream.close(); + audioOutputStream.close(); + if (isAdaptivelyQuantised) { + audioParametersStream.close(); + } + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "File close failure, after buffer write failure!"; + return; + } + testSuccess = false; + testStatusOutput = "Diff buffer write failure!"; + return; + } + } + + if (!isAdaptivelyQuantised) { + decodeDPCMPacket(responseBuffer, decodedDPCMBuffer, betaParameter, numberOfPackets); + } else { + prevNibble = decodeAQDPCMPacket(responseBuffer, decodedDPCMBuffer, numberOfPackets, prevNibble); + } + ++numberOfPackets; + + streamingProgress = ((float) numberOfPackets / (float) numberOfPacketsToRequest) * 100; + streamingSpeed = (float) (2 * responseBuffer.length) / (float) (packetDownloadTime); + + numberOfBytesWritenToBuffer = numberOfPackets * bytesPerPacket; + + if (numberOfPackets == numberOfPacketsToRequest) { + break; + } + } + + try { + for (byte audioSample : decodedDPCMBuffer) { + audioOutputStream.write((audioSample + "\t").getBytes(), 0, (audioSample + "\t").getBytes().length); + } + + if (isAdaptivelyQuantised) { + for (int mean : meansArray) { + audioParametersStream.write((mean + "\t").getBytes(), 0, (mean + "\t").getBytes().length); + } + audioParametersStream.write(("\n").getBytes(), 0, ("\n").getBytes().length); + + for (int beta : betasArray) { + audioParametersStream.write((beta + "\t").getBytes(), 0, (beta + "\t").getBytes().length); + } + } + + audioDiffStream.flush(); + audioDiffStream.close(); + audioOutputStream.flush(); + audioOutputStream.close(); + if (isAdaptivelyQuantised) { + audioParametersStream.flush(); + audioParametersStream.close(); + } + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Audio buffer write failure!"; + return; + } + } + } +} diff --git a/src/gr/auth/ee/computer_networks/networkTests/Copter.java b/src/gr/auth/ee/computer_networks/networkTests/Copter.java new file mode 100644 index 0000000..e2c57d7 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/networkTests/Copter.java @@ -0,0 +1,199 @@ +package gr.auth.ee.computer_networks.networkTests; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.text.DecimalFormat; +import java.util.List; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JProgressBar; +import javax.swing.SwingWorker; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.MiniPID; +import gr.auth.ee.computer_networks.helpers.TCPBundle; + +public class Copter extends SwingWorker { + private final static int PREAMPLE_RESPONSE_LENGTH = 429; + private final static String PREAMPLE_RESPONSE_STRING = "HTTP/1.1 200 OK\r\n" + + "Server: Experimental Ithakicopter Java Server Version 0.4\r\n" + "Content-Type: text/html\r\n" + "\n" + + "\n" + "\n" + "Ithakicopter remote control.
    \r\n" + + "Ready to enter a request-response control session.
    \r\n" + "Request packet format :
    \r\n" + + "AUTO FLIGHTLEVEL=FFF LMOTOR=LLL RMOTOR=RRR PILOT
    \r\n" + "Response packet format :
    \r\n" + + "ITHAKICOPTER LMOTOR=LLL RMOTOR=RRR ALTITUDE=AAA TEMPERATURE=TT.TT PRESSURE=PPPP.PP TELEMETRY
    \r\n" + + "
    \r\n"; + private final static int MAX_RESPONSE_LENGTH = 128; + public final static String IMAGE_OUTPUT_URL = "http://ithaki.eng.auth.gr:38098/ithakicopter.msp&m=62&x=0&z=0&d=396&v=quad"; + public final static int IMAGE_OUTPUT_CROP_START_X = 4; + public final static int IMAGE_OUTPUT_CROP_START_Y = 2; + public final static int IMAGE_OUTPUT_CROP_WIDTH = 218; + public final static int IMAGE_OUTPUT_CROP_HEIGHT = 486; + + private final TCPBundle TCPConnection; + private final int desiredAltitude; + private final JLabel lblCopterTemperatureOutput; + private final JLabel lblCopterPressureOutput; + private final JLabel lblCopterAltitudeOutput; + private final JLabel lblCopterLeftMotorOutput; + private final JLabel lblCopterRightMotorOutput; + private final JLabel lblCopterImageOutput; + private final JProgressBar progressBarCopterLeftMotorPower; + private final JProgressBar progressBarCopterRightMotorPower; + + private boolean testSuccess = false; + private String testStatusOutput = "undefined"; + + private float copterOutputTemperature = 0, copterOutputPressure = 0; + private int copterOutputAltitude = 54; + private double copterOutputLeftMotor = 0, copterOutputRightMotor = 0; + private BufferedImage copterImageOutput = null; + + @SuppressWarnings("unused") + private Copter() { + // Disable default constructor + this.TCPConnection = null; + this.desiredAltitude = 0; + this.lblCopterTemperatureOutput = null; + this.lblCopterPressureOutput = null; + this.lblCopterAltitudeOutput = null; + this.lblCopterLeftMotorOutput = null; + this.lblCopterRightMotorOutput = null; + this.lblCopterImageOutput = null; + this.progressBarCopterLeftMotorPower = null; + this.progressBarCopterRightMotorPower = null; + } + + public Copter(TCPBundle TCPConnection, int desiredAltitude, JLabel lblCopterTemperatureOutput, + JLabel lblCopterPressureOutput, JLabel lblCopterAltitudeOutput, JLabel lblCopterLeftMotorOutput, + JLabel lblCopterRightMotorOutput, JLabel lblCopterImageOutput, JProgressBar progressBarCopterLeftMotorPower, + JProgressBar progressBarCopterRightMotorPower) { + this.TCPConnection = TCPConnection; + this.desiredAltitude = desiredAltitude; + this.lblCopterTemperatureOutput = lblCopterTemperatureOutput; + this.lblCopterPressureOutput = lblCopterPressureOutput; + this.lblCopterAltitudeOutput = lblCopterAltitudeOutput; + this.lblCopterLeftMotorOutput = lblCopterLeftMotorOutput; + this.lblCopterRightMotorOutput = lblCopterRightMotorOutput; + this.lblCopterImageOutput = lblCopterImageOutput; + this.progressBarCopterLeftMotorPower = progressBarCopterLeftMotorPower; + this.progressBarCopterRightMotorPower = progressBarCopterRightMotorPower; + } + + @Override + protected Void doInBackground() { + byte[] responseBuffer = new byte[PREAMPLE_RESPONSE_LENGTH]; + String requestCode = "GET /index.html HTTP/1.0\r\n\r\n", responseString = ""; + URL copterImageOutputUrl; + + try { + copterImageOutputUrl = new URL(IMAGE_OUTPUT_URL); + } catch (MalformedURLException exception) { + // This should never happen + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Malformed image URL error, this should never happen!"; + return null; + } + + MiniPID miniPID = new MiniPID(0.058, 0.012, 0.009); + miniPID.setOutputLimits(0, 105); + miniPID.setSetpoint(desiredAltitude); + + try { + TCPConnection.getOutputStream().write(requestCode.getBytes()); + TCPConnection.getInputStream().read(responseBuffer); + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Request send/response receive failure!"; + return null; + } + + for (byte responseByte : responseBuffer) { + responseString += (char) responseByte; + } + + if (!responseString.isEmpty() && responseString.equals(PREAMPLE_RESPONSE_STRING)) { + responseBuffer = new byte[MAX_RESPONSE_LENGTH]; + + while (true) { + int numberOfBytesRead, motorsLevel; + + responseString = ""; + motorsLevel = 150 + (int) Math.floor(miniPID.getOutput(copterOutputAltitude)); + requestCode = "AUTO FLIGHTLEVEL=" + desiredAltitude + " LMOTOR=" + motorsLevel + " RMOTOR=" + + motorsLevel + " PILOT \r\n"; + + try { + TCPConnection.getOutputStream().write(requestCode.getBytes()); + numberOfBytesRead = TCPConnection.getInputStream().read(responseBuffer); + + if (numberOfBytesRead == -1) { + testSuccess = false; + testStatusOutput = "Server closed the connection, try running the test again after restarting the app."; + return null; + } + } catch (SocketTimeoutException exception) { + testSuccess = false; + testStatusOutput = "Response timed out!"; + return null; + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Request send/response receive failure!"; + return null; + } + + for (byte responseByte : responseBuffer) { + responseString += (char) responseByte; + } + + copterOutputLeftMotor = Integer.parseInt(responseString.substring(20, 23)) / 2.55; + copterOutputRightMotor = Integer.parseInt(responseString.substring(31, 34)) / 2.55; + copterOutputAltitude = Integer.parseInt(responseString.substring(44, 47)); + copterOutputTemperature = Float.parseFloat(responseString.substring(61, 66)); + copterOutputPressure = Float.parseFloat(responseString.substring(76, 83)); + try { + copterImageOutput = ImageIO.read(copterImageOutputUrl); + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Image stream failure!"; + return null; + } + copterImageOutput = copterImageOutput.getSubimage(IMAGE_OUTPUT_CROP_START_X, IMAGE_OUTPUT_CROP_START_Y, + IMAGE_OUTPUT_CROP_WIDTH, IMAGE_OUTPUT_CROP_HEIGHT); + publish(); + } + } + testSuccess = true; + testStatusOutput = "Test finished successfully."; + return null; + } + + @Override + protected void process(List notInUse) { + lblCopterTemperatureOutput.setText(copterOutputTemperature + " °C"); + lblCopterPressureOutput.setText(copterOutputPressure + " mBar"); + lblCopterAltitudeOutput.setText(copterOutputAltitude + " px above GND"); + lblCopterLeftMotorOutput.setText((new DecimalFormat("#.###")).format(copterOutputLeftMotor) + " %"); + lblCopterRightMotorOutput.setText((new DecimalFormat("#.###")).format(copterOutputRightMotor) + " %"); + + progressBarCopterLeftMotorPower.setValue((int) Math.floor(copterOutputLeftMotor)); + progressBarCopterRightMotorPower.setValue((int) Math.floor(copterOutputRightMotor)); + + lblCopterImageOutput.setIcon(new ImageIcon(copterImageOutput)); + } + + @Override + protected void done() { + Main.setStatusLineText(testStatusOutput, + ((testSuccess) ? Main.STATUS_LINE_ACTION_DONE : Main.STATUS_LINE_ACTION_ERROR)); + Main.setSubmitButtonsEnabled(true); + } +} diff --git a/src/gr/auth/ee/computer_networks/networkTests/Echo.java b/src/gr/auth/ee/computer_networks/networkTests/Echo.java new file mode 100644 index 0000000..ffb4104 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/networkTests/Echo.java @@ -0,0 +1,226 @@ +package gr.auth.ee.computer_networks.networkTests; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.util.List; + +import javax.swing.JTextPane; +import javax.swing.SwingWorker; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.UDPBundle; + +public class Echo extends SwingWorker { + private static final int MAX_RESPONSE_LENGTH = 2048; + + private static UDPBundle UDPConnection; + private String requestCode; + private int duration, numberOfPackages; + private boolean getTemperature; + private static JTextPane runtimeOutput; + + private boolean testSuccess = false; + private String testStatusOutput = "undefined"; + + @SuppressWarnings("unused") + private Echo() { + // Disable default constructor + } + + public Echo(UDPBundle UDPConnection, String requestCode, int duration, int numberOfPackages, boolean getTemperature, + JTextPane runtimeOutput) { + Echo.UDPConnection = UDPConnection; + this.requestCode = requestCode; + this.duration = duration; + this.numberOfPackages = numberOfPackages; + this.getTemperature = getTemperature; + Echo.runtimeOutput = runtimeOutput; + } + + @Override + protected Void doInBackground() { + int currentPackageNumber = 0, echoOutputFileCounter = 0; + boolean monitorNumberOfPackages = !(numberOfPackages == 0), monitorDuration = !(duration == 0); + byte responseBuffer[] = new byte[MAX_RESPONSE_LENGTH]; + DatagramPacket echoRequestPacket = null, + echoResponsePacket = new DatagramPacket(responseBuffer, MAX_RESPONSE_LENGTH); + long startTime = System.currentTimeMillis(), packageStartTime = 0, packageEndTime, runningTime = 0; + String temperatureString = null; + FileOutputStream echoOutputStream = null; + File echoOutputFile = null; + do { + echoOutputFile = new File("output/echo_" + requestCode + + (echoOutputFileCounter == 0 ? "" : "_" + echoOutputFileCounter) + ".csv"); + if (!echoOutputFile.isFile()) { + break; + } + ++echoOutputFileCounter; + } while (true); + + try { + echoOutputStream = new FileOutputStream(echoOutputFile, false); + } catch (FileNotFoundException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file open failure!"; + return null; + } + + if (getTemperature) { + requestCode = requestCode + "T00"; + } + + requestCode = requestCode + "\r"; + + echoRequestPacket = new DatagramPacket(requestCode.getBytes(), requestCode.getBytes().length, + UDPBundle.getHostAddress(), UDPConnection.getServerPort()); + + while (true) { + currentPackageNumber++; + try { + UDPConnection.getConnection().send(echoRequestPacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + echoOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file close failure, after request send failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Request send failure!"; + return null; + } + + try { + packageStartTime = System.currentTimeMillis(); + UDPConnection.getConnection().receive(echoResponsePacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + echoOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file close failure, after response receive failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Response receive failure!"; + return null; + } + + String responseString = new String(responseBuffer); + if (!responseString.contains("PSTART") || !responseString.contains("PSTOP")) { + try { + echoOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file close failure, after malformed response receive!"; + return null; + } + testSuccess = false; + testStatusOutput = "Malformed response!"; + return null; + } else { + packageEndTime = System.currentTimeMillis(); + long packageTime = packageEndTime - packageStartTime; + runningTime += packageTime; + + try { + echoOutputStream.write((packageTime + "\t").getBytes(), 0, (packageTime + "\t").getBytes().length); + } catch (IOException exception) { + exception.printStackTrace(); + try { + echoOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file close failure, after buffer write failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Echo file buffer write failure!"; + return null; + } + + if (getTemperature) { + if (currentPackageNumber == 1) { + if (responseString.contains("+")) { + temperatureString = responseString.substring(responseString.indexOf("+"), + responseString.indexOf(" C")); + } else { + temperatureString = responseString.substring(responseString.indexOf("-"), + responseString.indexOf(" C")); + } + } + publish(packageTime, runningTime / currentPackageNumber, Long.parseLong(temperatureString)); + } else { + publish(packageTime, runningTime / currentPackageNumber, null); + } + } + + if (monitorNumberOfPackages) { + if (numberOfPackages == currentPackageNumber) { + try { + echoOutputStream.flush(); + echoOutputStream.close(); + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file buffer flush/close failure!"; + return null; + } + testSuccess = true; + testStatusOutput = "Test finished successfully."; + return null; + } + } + if (monitorDuration) { + if ((packageEndTime - startTime) >= (duration * 1000)) { + try { + echoOutputStream.flush(); + echoOutputStream.close(); + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file buffer flush/close failure!"; + return null; + } + testSuccess = true; + testStatusOutput = "Test finished successfully."; + return null; + } + } + } + } + + @Override + protected void process(List pingValues) { + if (pingValues.size() != 3) { + return; + } else { + if (pingValues.get(2) == null) { + runtimeOutput.setText("Last packet ping time:\t" + pingValues.get(0) + + " ms\nAverage packet ping time:\t" + pingValues.get(1) + " ms\nTemperature = NaN"); + } else { + runtimeOutput + .setText("Last packet ping time:\t" + pingValues.get(0) + " ms\nAverage packet ping time:\t" + + pingValues.get(1) + " ms\nTemperature = " + pingValues.get(2) + " °C"); + } + } + } + + @Override + protected void done() { + Main.setStatusLineText(testStatusOutput, + ((testSuccess) ? Main.STATUS_LINE_ACTION_DONE : Main.STATUS_LINE_ACTION_ERROR)); + Main.setSubmitButtonsEnabled(true); + } +} diff --git a/src/gr/auth/ee/computer_networks/networkTests/Image.java b/src/gr/auth/ee/computer_networks/networkTests/Image.java new file mode 100644 index 0000000..6e16088 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/networkTests/Image.java @@ -0,0 +1,265 @@ +package gr.auth.ee.computer_networks.networkTests; + +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JTextPane; +import javax.swing.SwingWorker; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.UDPBundle; + +public class Image extends SwingWorker { + private static final int IMAGE_WIDTH = 320; + private static final int IMAGE_HEIGHT = 240; + + private static UDPBundle UDPConnection; + private String requestCode; + private int duration, packageLength; + private boolean flowControl; + private static JTextPane runtimeStatsOutput; + private static JLabel runtimeImageOutput; + private ArrayList dispImageBytesList; + + private boolean testSuccess = false; + private String testStatusOutput = "undefined"; + private long currentImageTimeElapsed = 0; + private int currentImageNumberOfPackages = 0; + private float averageImageTimeElapsed = 0, averageImageNumberOfPackages = 0, currentImageSize = 0, + averageImageSize = 0, fps = 0; + + @SuppressWarnings("unused") + private Image() { + // Disable default constructor + } + + public Image(UDPBundle UDPConnection, String requestCode, int duration, boolean flowControl, int packageLength, + JTextPane runtimeStatsOutput, JLabel runtimeImageOutput) { + Image.UDPConnection = UDPConnection; + this.requestCode = requestCode; + this.duration = duration; + this.packageLength = packageLength; + this.flowControl = flowControl; + Image.runtimeStatsOutput = runtimeStatsOutput; + Image.runtimeImageOutput = runtimeImageOutput; + } + + @Override + protected Void doInBackground() { + boolean monitorDuration = !(duration == 0); + byte responseBuffer[] = new byte[packageLength]; + DatagramPacket imageRequestPacket = null, + imageResponsePacket = new DatagramPacket(responseBuffer, packageLength), imageNextPacket = null; + long startTime = System.currentTimeMillis(), totalImagesTimeElapsed = 0; + int numberOfImages = 0, totalImagesNumberOfPackages = 0, totalImagesSize = 0; + + averageImageTimeElapsed = 0; + averageImageNumberOfPackages = 0; + averageImageSize = 0; + fps = 0; + + if (flowControl) { + requestCode = requestCode + "FLOW=ON"; + imageNextPacket = new DatagramPacket("NEXT".getBytes(), "NEXT".getBytes().length, + UDPBundle.getHostAddress(), UDPConnection.getServerPort()); + } + if (packageLength != 128) { + requestCode = requestCode + "UDP=" + packageLength; + } + + requestCode = requestCode + "\r"; + + imageRequestPacket = new DatagramPacket(requestCode.getBytes(), requestCode.getBytes().length, + UDPBundle.getHostAddress(), UDPConnection.getServerPort()); + + while (true) { + ArrayList loadingImageBytesList = new ArrayList(); + FileOutputStream imageOutputStream = null; + try { + imageOutputStream = new FileOutputStream("output/image_" + requestCode + "_" + numberOfImages + ".jpg", + false); + } catch (FileNotFoundException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Image file open failure!"; + return null; + } + boolean shouldBreak = false; + currentImageNumberOfPackages = 0; + currentImageTimeElapsed = 0; + currentImageSize = 0; + try { + UDPConnection.getConnection().send(imageRequestPacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + imageOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Image file close failure, after request send failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Request send failure!"; + return null; + } + long currentImageTimeStart = System.currentTimeMillis(); + + while (true) { + try { + UDPConnection.getConnection().receive(imageResponsePacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + imageOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Image file close failure, after response receive failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Response receive failure!"; + return null; + } + + ++currentImageNumberOfPackages; + + try { + imageOutputStream.write(responseBuffer, 0, responseBuffer.length); + } catch (IOException exception) { + exception.printStackTrace(); + try { + imageOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Image file close failure, after buffer write failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Image file buffer write failure!"; + return null; + } + + for (int i = 0; i < packageLength; ++i) { + loadingImageBytesList.add(responseBuffer[i]); + + if (responseBuffer[i] != 0) { + if ((i < packageLength - 1) && (responseBuffer[i] == (byte) 255) + && (responseBuffer[i + 1] == (byte) 217)) { + shouldBreak = true; + } + + responseBuffer[i] = 0; + } + } + + if (currentImageNumberOfPackages % 20 == 0) { + currentImageSize = (float) ((loadingImageBytesList.size()) / 1000.0); + currentImageTimeElapsed = System.currentTimeMillis() - currentImageTimeStart; + publish(false); + } + + if (shouldBreak) { + currentImageTimeElapsed = System.currentTimeMillis() - currentImageTimeStart; + break; + } + + if (flowControl) { + try { + UDPConnection.getConnection().send(imageNextPacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + imageOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Image file close failure, after request send failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Request send failure!"; + return null; + } + } + } + + try { + imageOutputStream.flush(); + imageOutputStream.close(); + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Image file buffer flush/close failure!"; + return null; + } + + ++numberOfImages; + totalImagesTimeElapsed += currentImageTimeElapsed; + averageImageTimeElapsed = (float) totalImagesTimeElapsed / (float) numberOfImages; + totalImagesNumberOfPackages += currentImageNumberOfPackages; + averageImageNumberOfPackages = (float) totalImagesNumberOfPackages / (float) numberOfImages; + totalImagesSize += currentImageSize; + averageImageSize = totalImagesSize / (float) numberOfImages; + dispImageBytesList = loadingImageBytesList; + fps = (float) ((numberOfImages) / (totalImagesTimeElapsed / 1000.0)); + publish(true); + + if (monitorDuration) { + if ((System.currentTimeMillis() - startTime) >= (duration * 1000)) { + break; + } + } + } + testSuccess = true; + testStatusOutput = "Test finished successfully."; + return null; + } + + @Override + protected void process(List shouldRefreshImage) { + runtimeStatsOutput.setText("Current Image" + "\t" + "\t" + "Average" + "\n" + "Time elapsed = " + + currentImageTimeElapsed + " ms\t" + "Average image time = " + averageImageTimeElapsed + " ms\n" + + "Number of packages = " + currentImageNumberOfPackages + "\t" + "Average number of packages = " + + averageImageNumberOfPackages + "\n" + "Image size = " + currentImageSize + " KB\t" + + "Average image size = " + averageImageSize + " KB\n" + "\n" + "FPS = " + fps); + + if (shouldRefreshImage.get(0)) { + byte[] imageBytes = new byte[dispImageBytesList.size()]; + for (int i = 0; i < dispImageBytesList.size(); ++i) { + imageBytes[i] = dispImageBytesList.get(i); + } + + ImageIcon image = new ImageIcon(imageBytes); + + BufferedImage resizedImg = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_ARGB); + Graphics2D g2 = resizedImg.createGraphics(); + + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g2.drawImage(image.getImage(), 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null); + g2.dispose(); + image = new ImageIcon(resizedImg); + + runtimeImageOutput.setIcon(image); + } + } + + @Override + protected void done() { + Main.setStatusLineText(testStatusOutput, + ((testSuccess) ? Main.STATUS_LINE_ACTION_DONE : Main.STATUS_LINE_ACTION_ERROR)); + Main.setSubmitButtonsEnabled(true); + } +} diff --git a/src/gr/auth/ee/computer_networks/networkTests/Vehicle.java b/src/gr/auth/ee/computer_networks/networkTests/Vehicle.java new file mode 100644 index 0000000..53c1432 --- /dev/null +++ b/src/gr/auth/ee/computer_networks/networkTests/Vehicle.java @@ -0,0 +1,393 @@ +package gr.auth.ee.computer_networks.networkTests; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.DatagramPacket; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JLabel; +import javax.swing.SwingWorker; + +import gr.auth.ee.computer_networks.Main; +import gr.auth.ee.computer_networks.helpers.TCPBundle; +import gr.auth.ee.computer_networks.helpers.UDPBundle; + +public class Vehicle extends SwingWorker { + private static final int MAX_RESPONSE_LENGTH = 12; + private static final String[] OBD_UDP_REQUEST_CODES = new String[] { "01 1F", "01 0F", "01 11", "01 0C", "01 0D", + "01 05" }; + private static final int ENGINE_RUN_TIME = 0; + private static final int INTAKE_AIR_TEMPERATURE = 1; + private static final int THROTTLE_POSITION = 2; + private static final int ENGINE_RPM = 3; + private static final int VEHICLE_SPEED = 4; + private static final int COOLANT_TEMPERATURE = 5; + + private final TCPBundle TCPConnection; + private final UDPBundle UDPConnection; + private String requestCode; + private final boolean useUDP; + private final int duration; + private final JLabel lblVehicleEngineRunTimeOutput; + private final JLabel lblVehicleAirTempOutput; + private final JLabel lblVehicleThrottlePositionOutput; + private final JLabel lblVehicleEngineRPMOutput; + private final JLabel lblVehicleSpeedOutput; + private final JLabel lblVehicleCoolantTemperatureOutput; + private final JLabel lblVehiclePacketsTotalTimeOutput; + + private boolean testSuccess = false; + private String testStatusOutput = "undefined"; + private String[] outputData = new String[7]; + private ArrayList engineRunTimeValues = new ArrayList<>(), intakeAirTemperatureValues = new ArrayList<>(), + vehicleSpeedValues = new ArrayList<>(), coolantTemperatureValues = new ArrayList<>(); + private ArrayList throttlePositionValues = new ArrayList<>(), engineRPMValues = new ArrayList<>(); + + @SuppressWarnings("unused") + private Vehicle() { + // Disable default constructor + this.TCPConnection = null; + this.UDPConnection = null; + this.useUDP = false; + this.duration = 0; + this.lblVehicleEngineRunTimeOutput = null; + this.lblVehicleAirTempOutput = null; + this.lblVehicleThrottlePositionOutput = null; + this.lblVehicleEngineRPMOutput = null; + this.lblVehicleSpeedOutput = null; + this.lblVehicleCoolantTemperatureOutput = null; + this.lblVehiclePacketsTotalTimeOutput = null; + } + + public Vehicle(UDPBundle UDPConnection, String requestCode, int duration, JLabel lblVehicleEngineRunTimeOutput, + JLabel lblVehicleAirTempOutput, JLabel lblVehicleThrottlePositionOutput, JLabel lblVehicleEngineRPMOutput, + JLabel lblVehicleSpeedOutput, JLabel lblVehicleCoolantTemperatureOutput, + JLabel lblVehiclePacketsTotalTimeOutput) { + this.TCPConnection = null; + this.UDPConnection = UDPConnection; + this.requestCode = requestCode; + this.useUDP = true; + this.duration = duration; + this.lblVehicleEngineRunTimeOutput = lblVehicleEngineRunTimeOutput; + this.lblVehicleAirTempOutput = lblVehicleAirTempOutput; + this.lblVehicleThrottlePositionOutput = lblVehicleThrottlePositionOutput; + this.lblVehicleEngineRPMOutput = lblVehicleEngineRPMOutput; + this.lblVehicleSpeedOutput = lblVehicleSpeedOutput; + this.lblVehicleCoolantTemperatureOutput = lblVehicleCoolantTemperatureOutput; + this.lblVehiclePacketsTotalTimeOutput = lblVehiclePacketsTotalTimeOutput; + } + + public Vehicle(TCPBundle TCPConnection, String requestCode, int duration, JLabel lblVehicleEngineRunTimeOutput, + JLabel lblVehicleAirTempOutput, JLabel lblVehicleThrottlePositionOutput, JLabel lblVehicleEngineRPMOutput, + JLabel lblVehicleSpeedOutput, JLabel lblVehicleCoolantTemperatureOutput, + JLabel lblVehiclePacketsTotalTimeOutput) { + this.TCPConnection = TCPConnection; + this.UDPConnection = null; + this.requestCode = requestCode; + this.useUDP = false; + this.duration = duration; + this.lblVehicleEngineRunTimeOutput = lblVehicleEngineRunTimeOutput; + this.lblVehicleAirTempOutput = lblVehicleAirTempOutput; + this.lblVehicleThrottlePositionOutput = lblVehicleThrottlePositionOutput; + this.lblVehicleEngineRPMOutput = lblVehicleEngineRPMOutput; + this.lblVehicleSpeedOutput = lblVehicleSpeedOutput; + this.lblVehicleCoolantTemperatureOutput = lblVehicleCoolantTemperatureOutput; + this.lblVehiclePacketsTotalTimeOutput = lblVehiclePacketsTotalTimeOutput; + } + + private String getValueFromResponse(byte[] response, int bytesReturned, int loopIndex) { + int returnValueXX = 0, returnValueYY = 0; + String value = ""; + + if (bytesReturned == 9) { + String hexValueXX = "" + (char) response[6] + (char) response[7]; + + returnValueXX = Integer.parseInt(hexValueXX, 16); + } else if (bytesReturned == 12) { + String hexValueXX = "" + (char) response[6] + (char) response[7]; + String hexValueYY = "" + (char) response[9] + (char) response[10]; + + returnValueXX = Integer.parseInt(hexValueXX, 16); + returnValueYY = Integer.parseInt(hexValueYY, 16); + } else { + // Shouldn't happen + return null; + } + + switch (loopIndex) { + case ENGINE_RUN_TIME: + value = "" + 256 * returnValueXX + returnValueYY; + engineRunTimeValues.add(256 * returnValueXX + returnValueYY); + break; + case INTAKE_AIR_TEMPERATURE: + value = "" + (returnValueXX - 40); + intakeAirTemperatureValues.add(returnValueXX - 40); + break; + case THROTTLE_POSITION: + value = "" + (100 * returnValueXX / 255); + throttlePositionValues.add((float) (100 * returnValueXX / 255)); + break; + case ENGINE_RPM: + value = "" + ((256 * returnValueXX + returnValueYY) / 4); + engineRPMValues.add((float) ((256 * returnValueXX + returnValueYY) / 4)); + break; + case VEHICLE_SPEED: + value = "" + returnValueXX; + vehicleSpeedValues.add(returnValueXX); + break; + case COOLANT_TEMPERATURE: + value = "" + (returnValueXX - 40); + coolantTemperatureValues.add(returnValueXX - 40); + break; + default: + break; + } + return value; + } + + @Override + protected Void doInBackground() { + int vehicleOutputFileCounter = 0; + byte responseBuffer[] = new byte[MAX_RESPONSE_LENGTH]; + long totalTimeElapsed = 0, OBDPacketStart = 0; + FileOutputStream vehicleOutputStream = null; + File vehicleOutputFile = null; + do { + vehicleOutputFile = new File("output/vehicle_" + (useUDP ? requestCode : "TCP") + + (vehicleOutputFileCounter == 0 ? "" : "_" + vehicleOutputFileCounter) + ".csv"); + if (!vehicleOutputFile.isFile()) { + break; + } + ++vehicleOutputFileCounter; + } while (true); + + try { + vehicleOutputStream = new FileOutputStream(vehicleOutputFile, false); + } catch (FileNotFoundException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Echo file open failure!"; + return null; + } + + if (useUDP) { + DatagramPacket OBDRequestPacket = null, + OBDResponsePacket = new DatagramPacket(responseBuffer, MAX_RESPONSE_LENGTH); + + while (totalTimeElapsed < duration * 1000) { + for (int i = 0; i < OBD_UDP_REQUEST_CODES.length; ++i) { + int bytesReturned = MAX_RESPONSE_LENGTH; + String OBDRequestCode = requestCode + "OBD=" + OBD_UDP_REQUEST_CODES[i]; + OBDRequestPacket = new DatagramPacket(OBDRequestCode.getBytes(), OBDRequestCode.getBytes().length, + UDPBundle.getHostAddress(), UDPConnection.getServerPort()); + + try { + UDPConnection.getConnection().send(OBDRequestPacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + vehicleOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file close failure, after request send failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Request send failure!"; + return null; + } + + OBDPacketStart = System.currentTimeMillis(); + try { + UDPConnection.getConnection().receive(OBDResponsePacket); + } catch (IOException exception) { + exception.printStackTrace(); + try { + vehicleOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file close failure, after response receive failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Response receive failure!"; + return null; + } + totalTimeElapsed += System.currentTimeMillis() - OBDPacketStart; + + for (int j = MAX_RESPONSE_LENGTH - 1; j > 0; --j) { + if (responseBuffer[j] == 0) { + --bytesReturned; + } + } + + outputData[i] = getValueFromResponse(responseBuffer, bytesReturned + 1, i); + + for (int j = 0; j < MAX_RESPONSE_LENGTH; ++j) { + responseBuffer[j] = 0; + } + } + + outputData[6] = "" + totalTimeElapsed; + publish(); + } + } else { + while (totalTimeElapsed < duration * 1000) { + for (int i = 0; i < OBD_UDP_REQUEST_CODES.length; ++i) { + int bytesReturned = 0; + + try { + TCPConnection.getOutputStream().write((OBD_UDP_REQUEST_CODES[i] + (char) 13).getBytes()); + } catch (IOException exception) { + exception.printStackTrace(); + try { + vehicleOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file close failure, after request send failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Request send failure!"; + return null; + } + OBDPacketStart = System.currentTimeMillis(); + try { + bytesReturned = TCPConnection.getInputStream().read(responseBuffer); + } catch (IOException exception) { + exception.printStackTrace(); + try { + vehicleOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file close failure, after response receive failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Response receive failure!"; + return null; + } + totalTimeElapsed += System.currentTimeMillis() - OBDPacketStart; + + if (bytesReturned == -1) { + try { + vehicleOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file close failure, after connection failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Server closed the connection, try running the test again after restarting the app."; + return null; + } else if (bytesReturned != 9 && bytesReturned != 12) { + try { + vehicleOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file close failure, after malformed response failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Malformed response."; + return null; + } + + outputData[i] = getValueFromResponse(responseBuffer, bytesReturned, i); + } + outputData[6] = "" + totalTimeElapsed; + publish(); + } + } + try { + + for (Integer engineRunTime : engineRunTimeValues) { + vehicleOutputStream.write((engineRunTime + "\t").getBytes(), 0, + (engineRunTime + "\t").getBytes().length); + } + vehicleOutputStream.write(("\n").getBytes(), 0, ("\n").getBytes().length); + + for (Integer intakeAirTemperatureValues : intakeAirTemperatureValues) { + vehicleOutputStream.write((intakeAirTemperatureValues + "\t").getBytes(), 0, + (intakeAirTemperatureValues + "\t").getBytes().length); + } + vehicleOutputStream.write(("\n").getBytes(), 0, ("\n").getBytes().length); + + for (Float throttlePositionValues : throttlePositionValues) { + vehicleOutputStream.write((throttlePositionValues + "\t").getBytes(), 0, + (throttlePositionValues + "\t").getBytes().length); + } + vehicleOutputStream.write(("\n").getBytes(), 0, ("\n").getBytes().length); + + for (Float engineRPMValues : engineRPMValues) { + vehicleOutputStream.write((engineRPMValues + "\t").getBytes(), 0, + (engineRPMValues + "\t").getBytes().length); + } + vehicleOutputStream.write(("\n").getBytes(), 0, ("\n").getBytes().length); + + for (Integer vehicleSpeedValues : vehicleSpeedValues) { + vehicleOutputStream.write((vehicleSpeedValues + "\t").getBytes(), 0, + (vehicleSpeedValues + "\t").getBytes().length); + } + vehicleOutputStream.write(("\n").getBytes(), 0, ("\n").getBytes().length); + + for (Integer coolantTemperatureValues : coolantTemperatureValues) { + vehicleOutputStream.write((coolantTemperatureValues + "\t").getBytes(), 0, + (coolantTemperatureValues + "\t").getBytes().length); + } + } catch (IOException exception) { + exception.printStackTrace(); + try { + vehicleOutputStream.close(); + } catch (IOException inception) { + inception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file close failure, after buffer write failure!"; + return null; + } + testSuccess = false; + testStatusOutput = "Vehicle file buffer write failure!"; + return null; + } + + try { + vehicleOutputStream.flush(); + vehicleOutputStream.close(); + } catch (IOException exception) { + exception.printStackTrace(); + testSuccess = false; + testStatusOutput = "Vehicle file buffer flush/close failure!"; + return null; + } + testSuccess = true; + testStatusOutput = "Test finished successfully."; + return null; + } + + @Override + protected void process(List notInUse) { + lblVehicleEngineRunTimeOutput.setText(outputData[0] + " s"); + lblVehicleAirTempOutput.setText(outputData[1] + " °C"); + lblVehicleThrottlePositionOutput.setText(outputData[2] + " %"); + lblVehicleEngineRPMOutput.setText(outputData[3] + " RPM"); + lblVehicleSpeedOutput.setText(outputData[4] + " Km/h"); + lblVehicleCoolantTemperatureOutput.setText(outputData[5] + " °C"); + lblVehiclePacketsTotalTimeOutput.setText(outputData[6] + " ms"); + } + + @Override + protected void done() { + Main.setStatusLineText(testStatusOutput, + ((testSuccess) ? Main.STATUS_LINE_ACTION_DONE : Main.STATUS_LINE_ACTION_ERROR)); + Main.setSubmitButtonsEnabled(true); + } +} diff --git a/src/org/eclipse/wb/swing/FocusTraversalOnArray.java b/src/org/eclipse/wb/swing/FocusTraversalOnArray.java new file mode 100644 index 0000000..50a4e5b --- /dev/null +++ b/src/org/eclipse/wb/swing/FocusTraversalOnArray.java @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (c) 2011 Google, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Google, Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.swing; + +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; + +/** + * Cyclic focus traversal policy based on array of components. + *

    + * This class may be freely distributed as part of any application or plugin. + * + * @author scheglov_ke + */ +public class FocusTraversalOnArray extends FocusTraversalPolicy { + private final Component m_Components[]; + + //////////////////////////////////////////////////////////////////////////// + // + // Constructor + // + //////////////////////////////////////////////////////////////////////////// + public FocusTraversalOnArray(Component components[]) { + m_Components = components; + } + + //////////////////////////////////////////////////////////////////////////// + // + // Utilities + // + //////////////////////////////////////////////////////////////////////////// + private int indexCycle(int index, int delta) { + int size = m_Components.length; + int next = (index + delta + size) % size; + return next; + } + + private Component cycle(Component currentComponent, int delta) { + int index = -1; + loop: for (int i = 0; i < m_Components.length; i++) { + Component component = m_Components[i]; + for (Component c = currentComponent; c != null; c = c.getParent()) { + if (component == c) { + index = i; + break loop; + } + } + } + // try to find enabled component in "delta" direction + int initialIndex = index; + while (true) { + int newIndex = indexCycle(index, delta); + if (newIndex == initialIndex) { + break; + } + index = newIndex; + // + Component component = m_Components[newIndex]; + if (component.isEnabled() && component.isVisible() && component.isFocusable()) { + return component; + } + } + // not found + return currentComponent; + } + + //////////////////////////////////////////////////////////////////////////// + // + // FocusTraversalPolicy + // + //////////////////////////////////////////////////////////////////////////// + @Override + public Component getComponentAfter(Container container, Component component) { + return cycle(component, 1); + } + + @Override + public Component getComponentBefore(Container container, Component component) { + return cycle(component, -1); + } + + @Override + public Component getFirstComponent(Container container) { + return m_Components[0]; + } + + @Override + public Component getLastComponent(Container container) { + return m_Components[m_Components.length - 1]; + } + + @Override + public Component getDefaultComponent(Container container) { + return getFirstComponent(container); + } +} \ No newline at end of file