From 7326835f3913fdbdabc3ef86fb61d4eb3672b76e Mon Sep 17 00:00:00 2001 From: root Date: Thu, 27 Mar 2014 00:31:38 +0100 Subject: [PATCH] added feature to stop the robot remote control if video stream is not watched. --- UDPclient.depend | 14 ++++++++++++-- UDPclient.layout | 18 +++++++++--------- bin/Debug/UDPclient | Bin 36086 -> 38604 bytes checkvideo.c | 32 ++++++++++++++++++++++++++++++++ checkvideo.h | 12 ++++++++++++ client.config | 3 ++- main.c | 17 +++++++++++++++-- obj/Debug/checkvideo.o | Bin 0 -> 5708 bytes obj/Debug/main.o | Bin 24276 -> 24896 bytes 9 files changed, 82 insertions(+), 14 deletions(-) create mode 100644 checkvideo.c create mode 100644 checkvideo.h create mode 100644 obj/Debug/checkvideo.o diff --git a/UDPclient.depend b/UDPclient.depend index 02a5400..3b36cdc 100644 --- a/UDPclient.depend +++ b/UDPclient.depend @@ -29,7 +29,7 @@ -1395763961 source:/home/chch/HengLongUDPclient/main.c +1395876570 source:/home/chch/HengLongUDPclient/main.c @@ -53,6 +53,7 @@ "wansview.h" "extern.h" + "checkvideo.h" 1395699958 /home/chch/HengLongUDPclient/henglong.h @@ -110,7 +111,7 @@ -1395763555 source:/home/chch/HengLongUDPclient/wansview.c +1395764006 source:/home/chch/HengLongUDPclient/wansview.c "wansview.h" 1395529103 source:/root/HengLongUDPclient/henglong.c @@ -165,3 +166,12 @@ 1395699958 /home/chch/HengLongUDPclient/extern.h +1395871885 /home/chch/HengLongUDPclient/checkvideo.h + + + + + +1395876458 source:/home/chch/HengLongUDPclient/checkvideo.c + "checkvideo.h" + diff --git a/UDPclient.layout b/UDPclient.layout index 3b75491..a0d800b 100644 --- a/UDPclient.layout +++ b/UDPclient.layout @@ -1,13 +1,13 @@ - - + + - + - + @@ -17,12 +17,12 @@ - + - - + + - - + + diff --git a/bin/Debug/UDPclient b/bin/Debug/UDPclient index 6c7748bd90feb2518007f4413041b5ec91c70c12..94420347c09cd4994f8262d4d8d436d46079958d 100755 GIT binary patch literal 38604 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%0A~#t zfuKzaHLng#stwhKCe6W5LaXqL(AW<^#iVGsby7o9ZDX`9FsWfm=`{83_KEdP(MhWs z@G5G_fR{>7s;{k`)G)0N1GcW)dHVmf9-IryywHdhIN3);S zg4k2ZRQFB$EZpC;vKVgpw;$d4=62nHg)WDIboslff6ZnhfM0F5HmRCXDefs9 ze9@y)=)JNb#?$cs`x|0XO?dUh`an~lwV}383*klmctd|5lo0&EFn=$sDwfbR{PAn7 zkz#F!?XD9W8>f}1#*x2DM-si$Za%n}So0wr6CaB82=IeI6LN3dpamNB(S6tqtll-0$1|7WySpT_7v6!B8}zVv^gVfh9E{)|@$z7YP)<1tv<6lt`^X0!?K z)UUJJTE5giHfZr?`}!%0lF&602eb7Cfxc9GAlsb+!`o(n_2WG&Rx%h8dKS8e-Lr5{ z!yh}>;I;UP3R-EtjNkGTsAPyY(0x0c{WEjWAc=jBtCNmbb*se;B0rXFGo6K-(GB!eQ@JRq+b*_ zBmL8jEa*kCZ^!NTnMEu90N3SMZhC4 zqqp0jC!!Z-O{#z4%IKR{ncepx_Yb7RH-uiS?RR`Yzvn2}V=FVI(8&WN1nLZ`U?EbAZ0%RsToO=xIK{L9=F?-*<`W5x{ zj-P1WpPLtf?ErG!y75ILNxI%Th?j{UYUW7`_g^%xMBa6q}Ig{-zOCli)C@^602F$O&5 z9<(%!@cITCdAGjrs+V4R>191X`_cW~R<>t1=o7T$7tysGztZ=i-K5l~cBaST!ab2otPfzV%-0U4msvT*VZ(J*E9sy+Kx2AFY;<<&vIh^?5k%y2`*9QglB^DW776y zU+wRtkAnl1b0Rzx9IWSMo`q3=EjXt4Vl+A&uLylKTldEs**TvQ7+;PV=6gGLf%dF0 z(HR}T+_-Nyp#N0RUNAa#8k#;O+i=`%Xe;%+Z2YnuExu3rtX1taJCX;CSnHPLYrBysPe$Gd=7m%4Ya34qp|+A=VsKc4y0? z{9r?C;GbJ8Hs^1tY4XcgHnc4qn zj8G9)6J4%W&;U}foS6A#?Nm*}s*<)YY*&And77K*!hr0z0r{;@HDNDTSlIJ2yql>B zFWr&Fp);*+!2m;-i-Zu>hEQraytWxTxBPz20L7Ap74!TH7A}}sg#_){w5nBHw!}ZH zyt>?9y<$-%%py5aZdhfpOX^cR8&L|BcJV_B8WSBg7+3?1|7t`EU5}#l~rSJ|a zsMAdML=Di&$lEC2BgB!xL2P|g3U-(bqcs5&Y?M6#m~g|_X5Wne#k1zC zNp+kN!vPzw&}-#)uPg6!sXELjd3xutcLp8^um5WY);l`YLKBTqQ3p>$2uq4fZa*DezXpZD9a9_ zsK)g|ev3<~$TktzhOK@}->3YmzYecS67rda^x>cDDVZSb)#^r*!ZY%aby z4BY)k*f~uULG@)5%bvHWykcHuwNO0(BJjGb=2m~Jh_*;K(BJ5C%;L1hssL0#CVQeH z@QpT(p8m~(;mbE_q0L#L)yP2KiQ(NOVpf6}sZd4L!ph~96<};ywLXF`yY*8+am~6E zua=9I>&LakZeENW#wTXXpM^UD=f(s6^m4AN#*61 zb>yeiXk4q2tR{xabiT@VN>7NVzVOdd?X_a<8YK84KVf~SP1ap`B=*IbQCvdE8#6aI zJ^#~=mM{gSwWS131u<{N^f`jL8e^F@8RJ14@ovVLVKVJujAxHbXEXjgfIKXAuJ zMs*PL2?9zt7>`9Ak@hk!Q0Z9d%wbiTzfqN6C?szt(s)cQWgwCVGx2w3X`)*sPZ^5S zE z;)sXwbl3&umN1sT_C=3i%%9x=FMob>kxHA4`Rb5FJuiTaix5n)J+(V+yT08ZM6Of| z)9t~lL=z5>r3A(#KpNkyCSFo$FCuvmei?zKG5&)}n~eXc(r(6l)D0dF<5yKWn=yYW z#(s>XI#}Jc2u`tdyRmG$am99nAb**cfFk(&z9@pP_C*nV7a`M<)xC0uKEpR-%*dVF z4dTl&+7g5kyaU0s*tZ*ms9^$AqMjc>1`KF)FW8RV729>fe1$Y|MLQLa@F0kB0q5+s zkVK3}NMs~D#ljU^e1xf0A|K&77S1l1a7_Y^g%iFOfd!LK7EZ)X{TK<~nt)^BgjspJ zb`(gMTZnBOYfShlgaKj^dX;YLL)1$MX+&Qh#}oGl$=(M|6t~>;XD9BxbKr^N-lTq| z67|VB*ojL-vW0Wfu%DZk7pB*c2FkHlh4`XUXC!o;6P@^6II$|T&U7+#*mkh=w8HFF?2t$(Pr2bXP9j>BwUda@-MZ?sP^7i{se|< zn?V!&owPg>$XCS4boTP7MCsgm+sBgBaTEfLz<9Jun~d{R+RfOf(jLa+RXUsTTiBPy z_DW^q&j=8d&G>DV_Au^IX*c6jDs3`;N2SqF>bM31x%~{66-FdO*<(?g{sxfDhdSHY zaedx@L#+KZJX60@3N4M{CY=LUAHz+F@e#+LBv9hUo$|*CfY3Y#5KZ7#7)fBN6afTA zbuj`{e3?23jJ_QsF!e)4V01c0VCrKk$S}*B#m%-<*82B6lZIHz@Q08(p5elc;uue#}PC&)rGXPY_Z?_v02iW~HA3uPj^= z!@Uv1#jQ!)|1CzNuJ0fu8f{VTPNF_i=$O&2$lXa4*LA=hGuo`&okVfB=(&uR54lY$5IDFQ|3jv)modH~h{1)I zdNOgd1g>vMW`ZwZOA?Wm`dMuIJ5Od=#Aqf0)CQ+IxM@h0swPi1emb^!yo!)86CDlk z0Z7xtVw>v$$Vt?Vdkj(frd3RQtbljcF=6SoX_cLI4zeyrKmm-x2)c+av&sBssD-Pt zai@W!m2h=B_``&&)0M!jQFwl!BxX5QUDeIOZ#~5Dl*fw;n@`0u{l9!O#g|dQH=pq^ z@gf3!Gvk+3+Qax|m3A}!gG!r>`SMm4Y*%Uu617s9qMeLe5nvNW6q9fnBPZWS!OnuD zJaPf=Lx4&63574=;l-X_8^g9++=fW)b({l>4Z&Z+CMZDF|AavG8Dp7=X)og>m5x=5 zFbzsx#*O1l|O~!n00n4>@`8MR; zBW1@MkN45nAp8R1DFplY4)WfE@E8Jrf@B|@ot;Mb072eeS%hC<^6`6w|3ct~bNl!m zF6%EM&_(_SLhL9EuV0O)>Y@-&%vBt+Q}W4Oizvi9$ODDtGv`jk!zT;ErlG=B(T2vl zi4Aq4kWi>591?|f>zg1?#aNk<6uhWD%!k*B0G>J(wgwu>uM#bI>Q~4oETS;N6^X(i z0FavH`9k0ef#5~jKJ3m_41~?M6?|L4=d+m*+kCT-#%q%0 zdsg{w*FBazyUUP|VF3d6L&|db&ex~GcLD)jN$O1=Tt?(0A9O{@$9Kf?y(`V&vkyCY zH4yguUHNWTZk#Ry&MuerW4I21?}KHU?}S|rhHXf*T;fSC+$f;2uMw5NZ3c%e@r{n@`|9u{8QYyON;M zCgi<6f$t#R4|@=W+&BbC>mVPGyAW)7eCKZ2X!W#85^=K2y~pB{b^+gV@TIX5)?xGg z2r%W5FZ5&dm$7)Kw#CE9=6e8Xn{U>=hB>PMcXw<^>#+GA157@W__Y-GBxP5NEhg`& z1U`ODKKm>9o=)K7N8@wBXO~5pcKTVQ*%mC9@AUP8@3@6SB>C8Gd{AWTcLscC&LNL7 zUrXTQJBmL5-#XyzgFFm92)4Y&gZSZV(YfpUF8EkJ^^1Tn@)dmVTk=4b2l>WZX+|uI z;d3iSB#(Q*x64X1A`cI~)Y489z8C}lgM6mcVbccplhF)yUsP+a#*`|&-II`sd`=x_^nn;ILD*ds7Rmt?b z3RWf1zbcret9NHBSQSWrsbKbW{74G^Nx@JY2mPOdWhDKaf|cRv&lId0jDAbO^xQb; zpKv&&r-Pre-c#+s{S^=T8^#Vi=HjtD2CD|6{~+EWEhhy1go4>B${#2=Q^Fkg3RYJ# zj&B8LOS=7TZv5m+!W^%PK1jkGmkJ&%VU9lq=SZ02Ou-3`6bOfWzAsti$su@kjUNvA zuI)s4cpN~=Ax89rNA`og{oqlten*0VZ`bi!LjOou!{foBh;4glxUv@jw(X(e&FE7B zpRw8lZwC|e0JDDVf0`H~u0*^JFnbQ+5aLDFn|;Zj*iTu01awbA`I`yvvGvIi{{}d* z{O^)(wKwJc02qkyZtq^{}=t}8K{um z{uL>4bKez|5J>D`g-nf=v zA1sfrU$zgzBLMSd9#6xSu>694^b7jI^8n{q?Vq7%iRFO#;+0&;V*Xmd+*$vT1&0CK z_VU19n*iH~v`0Vq`w6fYjK2Wfg8s=o8G4R*EP>Aa{P8q@%F6pimj5!~m1sZq=M0f9 z-UiH<-0+(&q<;pOo9yX12xCyj4$2$e4=x0}Z8zRiVDWQd%09@yq94rnDcxx4%l6{4 zblV@YJU$<%|FiYm0GK=0&xb71Hv{H-u_s&bHv!uR%liS~#Qt!9Kl(Aid~*fA{X%)a z?MHtbFyDKF%de!r+mFr*7=Mjw_rDY>Y8_t0!vOQesoAh2<&Oc(SHoTl8sW)+f0vMd zdP08cUj>-IFTLI3ukJ^0>Ib(0=I-j3EdDzI^JP37=PZve(yC*yGR;!F_3K&3d_e(LZa&0(@`HFsu(e{x}w+%|@-b2Zr5Xl-raZL_tJEcSu0#2j*CWg>zK+O>;scJK$} z{dceypI{5b*^316Jq3f{erlB!TE1@)NvsOcM zZ6twIgw0Bgfj~=~8AYfLqZ*HD+nYO@!(Lo3SuQWtLahww4B#(>H}PXV>W? zuC*bOU|m)*)(u!eb_49+x!?lqNUN=B3dZxEFM`}S6-Qt*sNBS};AfEbzAoqxX^xYM zWRJqe8~Mx5saI9am_|=ys z;~d4<@`C}xO>J?cr2=;OB(_cBE-1DYdLchin3(OHJHuqF^cxgxHfsaXmkskj0F%kf AJ^%m! literal 36086 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 A`~Uy| diff --git a/checkvideo.c b/checkvideo.c new file mode 100644 index 0000000..576ba3f --- /dev/null +++ b/checkvideo.c @@ -0,0 +1,32 @@ + +#include "checkvideo.h" + +int connectionstate(char* remip, uint16_t remport) +{ + FILE* tcpfile; + char line[256]; + uint32_t remipi; + uint32_t remporti; + uint32_t statei; + + statei = 0; + remipi = 0; + remporti = 0; + tcpfile = fopen("/proc/net/tcp","r"); + while(fgets(line,256,tcpfile)){ + sscanf(line, "%*u: %*x:%*x %x:%x %x", &remipi, &remporti, &statei); + if((inet_addr(remip)==remipi) & (remport==remporti)) { + fclose(tcpfile); + return statei; + } + } + fclose(tcpfile); + return 0; +} + +int checkvideo(char* remip, uint16_t remport) +{ + if(0==remip[0]) return 2; + if(1==connectionstate(remip, remport)) return 1; + return 0; +} diff --git a/checkvideo.h b/checkvideo.h new file mode 100644 index 0000000..39ef5f0 --- /dev/null +++ b/checkvideo.h @@ -0,0 +1,12 @@ +#ifndef CHECKVIDEO_H_INCLUDED +#define CHECKVIDEO_H_INCLUDED + +#include +#include +#include +#include + +int connectionstate(char* remip, uint16_t remport); +int checkvideo(char* remip, uint16_t remport); + +#endif // CHECKVIDEO_H_INCLUDED diff --git a/client.config b/client.config index d5d920c..859ca9b 100644 --- a/client.config +++ b/client.config @@ -5,6 +5,7 @@ CAMINTERVAL 100000 USER admin PWD 123456 FRAME_US 100000 -SERVER 192.168.1.18:32000 +SERVER 192.168.1.13:32000 TIMEOUT 250 CLINBR 0 +VIDEO 192.168.1.20:8080 diff --git a/main.c b/main.c index 4ada16f..5fdc451 100644 --- a/main.c +++ b/main.c @@ -23,6 +23,7 @@ #include #include "wansview.h" #include "extern.h" +#include "checkvideo.h" typedef struct outtty_t { @@ -264,10 +265,11 @@ typedef struct henglongconf_t char joystickdevname[256]; in_addr_t ip; // v4 only char cam[64]; + char video[16]; char user[64]; char pwd[64]; uint32_t caminterval; - uint16_t port; + uint16_t port, videoport; uint8_t timeout; uint8_t clinbr; } henglongconf_t; @@ -292,6 +294,8 @@ henglongconf_t getconfig(char* conffilename) conf.caminterval = 100000; conf.user[0] = 0; conf.pwd[0] = 0; + conf.video[0] = 0; + conf.videoport = 0; while(fgets(line, 256, configFile)){ sscanf(line, "%16s %256s", parameter, value); if(0==strcmp(parameter,"KEYBOARD")){ @@ -325,6 +329,9 @@ henglongconf_t getconfig(char* conffilename) if(0==strcmp(parameter,"CLINBR")){ sscanf(value, "%" SCNu8 , &conf.clinbr); } + if(0==strcmp(parameter,"VIDEO")){ + sscanf(value, "%16[^:]:%" SCNu16, conf.video, &conf.videoport); + } } return conf; } @@ -366,6 +373,7 @@ void *cam_ctrl_thread_fcn(void* arg) int main(int argc, char* argv[]) { + pthread_t keybthread, joythread, refl_thread, cam_ctrl_thread; input_thread_t keyboard_thread_args; input_thread_t joystick_thread_args; @@ -443,6 +451,11 @@ int main(int argc, char* argv[]) while(1){ usleep(conf.frame_us); + // do not send control commands if live video is not watched + if(0==checkvideo(conf.video, conf.videoport)){ + printf("No video stream connection from %s:%u, remote control locked!\n", conf.video, conf.videoport); + continue; + } frame = 0xc0ffee; time_us = get_us(); @@ -505,7 +518,7 @@ int main(int argc, char* argv[]) if(senddata.outtty.servo_tilt<-50) senddata.outtty.servo_tilt = -50; // Return-Button on Keyboard via Joystick-Fire for screenshot in Browser - if(0==fire_old & 1==joystick_thread_args.hl.fire){ + if((0==fire_old) & (1==joystick_thread_args.hl.fire)){ fire(); } fire_old = joystick_thread_args.hl.fire; diff --git a/obj/Debug/checkvideo.o b/obj/Debug/checkvideo.o new file mode 100644 index 0000000000000000000000000000000000000000..4d5a8a34b7f15741ba6cffc2cf505071bd7f040a GIT binary patch literal 5708 zcma)A4QyN06~5Pgc3x}ONfS3sY06yc(!yH1NlX+<1`Q2`&`{b!SrKKg{&`NUI?tZ{ zTnbwmH2g(X(F$zRv<=WUHf=DbZ5plkQyCq9(RYN zJa=eUa`;d=IrPrvnR2q@&}cFPpHbjCpvf^EFrMj6diKK}UV#3_lJ+AA4>8k-&1Afe zg9!f4${E)i%9;5?Z$H-fx^H!qc^vc-wg*)DZb${V^*E<_-Dj-ppPhcU_u$pZMEjBP zWb!C8zGb~|d)kk@I5VC!X5wDF>A%VL`;N6gc5M21@3S?LuGT8~v}3zzH(wPi&uy$v ztUPz$dR&Q>0N%xgr~=&yVaPim$QeXrTdgtB2NHaB4ev%<9NM5Xe@zx>3t|A2taMO@ z-&V@dDu7{xN{%anX6PO&&9)B#DvU97J;ebK{*(w zF>|Cz`3Q^xE7qB7XneN(k)j!sTQR&^&uGY;N8>e`4x7)BrsQ5gV8sUW2c-RSy`rP$ z4IDclFH>}rxrRw*B)3Xn#iizhG#-*KD0-R6BM}~vcPZm>^JN-eF7H+JYV$SH&6@5s z-yj{=beH)D(knFGZN5voMJ`uk3+67Su~p|hX-=?ryZoh!TNd+v!tTfBFNZoBev)N~ zyhM|yyo!j(G585T?G?m`JVEwTZ-q?}HX0mma4ST)LpYrU+?mvJPblphzIK%e9EJ0? zepRCg#SE=uav$!2kJPFJ}~@*%|5Rje+E@WI)&`F zG0swzJu~Mae-pS0PXRCcrE{`hs)>our6FE<`U*w-!wdZif~%CD5v^O9o?+2nK~DsJX!N5E|)I}Ngm*@+MHby5(bq+@#T0r&Li9B4 zFNzLFxmaje4Ll`X!$T#TC^cS+N{$lw)`Cq35s@gziSOeI3iqu5g}>+y;s>7GLG&KO zZj|_ur#Fe*3k(cUjk~LeONy-o4wZr@Lbd;(VlXMLBG8{9u(2Od1GMI2AfpghVUCa! zMDD`Y=)KAgH#J#e^L0d-+3m*lLtH<@<+pXp&u>7b{6}m7?&{M5TA7}#OxfxDWPUPz zne9xBSDc9*qg(Ukl8x6?x>2vCOHRJrDA?)Jz|i2@a>;4zTRY)2(z%jb_YBIVTzVp( zPnQPg7-Uj|{@6K=gvd|Y`8|6}1-p{Ub7|{tp;YNlO=7N;3w9AQmejqmYS(Agr3yqW z1j6|u2Rg2&#@XSH5Z&erA5TwDo7Zk0O9zr&=Jd1?5CKC5-;qV^A4-RBeq8I`lf$#R zo!h3bHBUV8!0+!37^skCeYTM;Sgx>&0moVnP1f4#mc8*-C0YOtxyj!X`s^WTW=gwm`d!}Y_d7O%{5V?f9bCPFDh;o=+!shf zT)J`N`o!uTxrXC5(&Hs3TdR1E*7h}&^1O4jW1N~ej}Dr=X}gf0H|5f(VcdnIISd`2 zI&6G)iIJFjdtf9My)!rx>$t-hiN&Wwn__PT0w-c|Xr4vabFg`SBxdjlM8AA0acn;> zu`!l#VmQUA`i)bVDbTHXIO$6@yPR^lWT`^d&5Bg6UKgoag@o39sXkEH6zp7M!YVn% z3M`eJ&E;zLUZ0^5t%liJ)|s&3%Cq%Z(~~-Lx)*UoDqoqJ;$tx7R9riSrC5u7fkUUF z+mlwYmYuRWssFEi0%jkw!u8u4ykvKREW*X{w8N)@SgAQ* zer&tg+0uM}pM;L~|I3a)1L;Do6OjJS2KtSCyf$j|^#`E5*bmmycM;^)dEAD1JcwsB z=fN8I^SH8Q3`B7}gw4x9y7?l1ANex7B5k-@6uwwK&8{1hPjG;4zTG5vYktXYeAq(A z{P^ME=l40t{uqd25dL~7=;rtF^VOHxwFP#W7KJa)pszJ<2617k;w}LCalZnYW7N-c z-~kLerrvQNXzb(lEseh2#rSICn)}VSoBDeXqIe7beojF*KW=MGc8y}-El|R(S{M4``Y>jzzvBot0iEA` ze?IrIRd0y*Px*S{+<#ZdTO*MBv-U;>1vY6*3(lTuzn?4GY{5B|qCf7iW($hBixCvu z3C$K1?M(tHC|K2I3kp`e*@CDPep#q?68BE5=$V=mSjXgPoX;b_vHwD!0Ld>ojc-1U zw?5|?ujP%0@4VAruEk2#<}0&QujJ1^->TR1S*IxQ+2dN-LZK##`EmsxN#5rWeuVPL zi}&mvtC%g7TU-lqIr5NLj%^yR0R~VW^-B`^JIGOs4)o5v~XxyvufW|LsykFy+8vms6q{cIG zv>CTg<1i6@8#Im*aeS}P{nu$MX{_u1eVX5?@yi+?(s+~zzfTfz+@B}H?`s<0BO;H# o6Jhr+jrjSY>>@<;FVVPK<9Qm@{=|)EljGGo0~6o@;BJlo21SHbjsO4v literal 0 HcmV?d00001 diff --git a/obj/Debug/main.o b/obj/Debug/main.o index c05214168d181163208123de82b83a7350748b98..6eed1b5010752fb42d82c15136a38df877643368 100644 GIT binary patch delta 10988 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 JcIe94{{;#G;8_3w delta 10391 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