From ab98a84532f2fd20fd939dedd6a84b01aae981ca Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 2 May 2019 10:29:27 +0200 Subject: [PATCH] Local Input/Sink: updated documentation --- doc/img/LocalInput_plugin.png | Bin 0 -> 12139 bytes doc/img/LocalInput_plugin.xcf | Bin 0 -> 56263 bytes doc/img/LocalSink.png | Bin 0 -> 13272 bytes doc/img/LocalSink.xcf | Bin 0 -> 41919 bytes plugins/channelrx/localsink/readme.md | 47 ++----- plugins/samplesource/localinput/readme.md | 153 ++-------------------- 6 files changed, 17 insertions(+), 183 deletions(-) create mode 100644 doc/img/LocalInput_plugin.png create mode 100644 doc/img/LocalInput_plugin.xcf create mode 100644 doc/img/LocalSink.png create mode 100644 doc/img/LocalSink.xcf diff --git a/doc/img/LocalInput_plugin.png b/doc/img/LocalInput_plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..3585ee104b3e4bbcb4209eb8d8168d043ace75aa GIT binary patch literal 12139 zcmbWd2T)W^ur`b@0xC&zPJ#j=SwON#aFHY;Npg^!BrI`v1tdupl$->~lJgQJNtT?K z3=)=Qfh8@l-{HM~{kQ7-@2$G`r)uid4rgXg_w@91_wz)&)_h5NkMSNJ9v-PGNa+n8 z-mNj9QQaW~dV(gxxPb?urP@m+;0gSlE5c#GZW#_mH+6?e||Ur?n>9;X9JD?>(R&mJm#T1VNqp&uJ>E6Pu&K4CCtTT zO<6Ul{=!F|EmnqI^yn%b72vViyyd?+C`s5J93CF-8KJGn{@}rPb{Yx_?YPh3;XEK^ zB_-;-2mkZFdv7TIKV$y~eSV3CitJ-pUva{+I*XtleIV2aP zpLsz330ty(C6H=`HUDo$8N|ey7_%0FdOnacbzaM8rdWk-EpCT2>t1Jpov||T*|utN zWuf)7XXS`Jf_rc5lREI0n(l9!;8UqQcmIc(KSWFX7w3o~G^YmyEcd{<>933rN{io> zN$L;w$V|UIM541SAUXk*{dZTegOZh42ldfkE|fcRdHb?vxjwoR?YHTFd|wLJW?-4?(G^u z@Ah=F+Gb~OxrI|YRMb)&F-(Lg0=py~I#l{(k-6}q+Qg%}@=Owvcd z5G-ltzwr#*!cI@?r|s1LUEtf|^hMoI)USb~m6zo&-hAr;HErbct#m7M!{ps=Z_3`m zU4yJRZ>F{>!CV{FytLwgeoeiz7OEJoY{l`N9a%!6lI$y($odhZCdN9(ueNlWxi5J6 zfL@l!)QrG;BvAfZ2^bH&$Kf|G-;xz8=Oz2hiIECTY=pn}49|n@U>|WcOv6YO|9s3g zPqu@SP(FYl)RZLF^j=uKgL)SZHA#Y4Y|>s~B&Hy+H=~>+hgLCPWZ=iDhvZ6&JsRV0 z!?G0?htOobKxhjwSe&sp*b0z<(3vYBU=JaRZ)h)_9vZw@sZV;oJeHlb!qgOY5_~hrO z9@)kaVRSk0(px2^JlAbeIG9^AJ$zt8iu1zHt4+gJNq*^Pa-n{B`0YV`Gsq8iq%&<+ zo2p|zo5ltoX;Ap>Eq6{e2xbuCnU#qaVKJs#~>@6l@r4d1(Qug1+k%3hRO;$F8fLOBP+>+vMFN< z3W6eB_m2*iwP0x@qt_y#8t=V310*{pXqBb!aeaq0)x#zY6cK6cl!Gn8a?88&g zmLX*mB^JF>XbF=lSNs%+mU8kjsFS#rYo)sF&!0cb^&26dKADT8m>-(_4611;Ox8&A zT#g5^4`#}y1qCHclObyCb+UX|-3f_`Y^|0Zuu|mqUQS{s*EUsQ)>I6X5gmW7boP8@ zSW8Lu$O0fAcMNPxu+b`W`e+e zPg%*GBn|pnbHyek8p6pWL>VdIezfq*i_QkG!tW&m zk=oCUGPXg?(b&-!hChNq@6r<9@5XpK1Ozl%54O_|L`GK#eE`X*R&vk_xs~<|=QqEK z(Uqtv_Fhho?6^|bKn73hUCcyzY6z4L15UCCX-wK_@j=Mvx6t4tQDre@sFBSJrGJ9M zNO~+5Mt54z&U^+pZ2J5AFYB5c8lH)Wic0RSsmG|~j!GNJcIRI@Ty%emzyIFC*oJvc zWbI&Cmd!f1Jo2Ygf63u2YrFL!o~HUEowV5Pn3Ek?T|qi;E~RQTF(;>RGw)k1T|MWm z>ctH??6e+)yu!hsVf-aG1&hn(LSSXOw9r&<8vXB~60Y)^R{hBvE%e%nWP-1xO|Hz# zvf?dh@pksgG-b71A#6ZIhD{29HDs&*QT> zORMO;x}DOuq7<5PSD2|na)G%7eBf32_4_O79Kw1XL_+jOICkOA&$XerxHo=Ul}_-b_uOM;Qy2y^=y%~ zRGhn8mvoP>=8dCA-T8ul6*RlIZSkXUsuXn|a*}-Wg24ez*w(qRy}%Soh0&tRV?q2$ zmHpVFhJ-KaUA&DWOp^zfgY(M**#*m^*`3oFSa@nbWKT@>NV|;NBjVv{taQl?quaZ5 zdQv>4r4F`W>m7Fpxm$KuPavg{w3wgkm3dT~pcff=d6}Rj(&O)+v)dL|#+BO!VU8EY zC_d1TN%CgO(7r(Z=}RL?wIENx54$iLOOrl|`o#HA$b2(JESXitN9GzvG^00k5>$f~ zrPcpvt5jTm(bCph{t@*mE>*qkKSmP=O;~?g90;m!7V@Ca+59suH@shC*1!>3G5|wuUqH+h=DsewIE{Zjxwhl8RfzMGso*0=T;4_)la^o7{`$wWrv;d0 zI<_^Fn8FPc{&q6{%CMG9Wz;L6|zbh*%c|U$w)X($s^Z&@n$x(!dHk#dK_=y?cCda! zUK=x!J>n+zsMtDp+S~ROVr6kiR%YwJm#=0nMc)K>JlE5stzQH)S@lHS%C4zNd_V9F zjqpdUcuEPU4H<)H-w&pUhD}Vo#jA5&8eYO(d!L||mZ%$$5S3yRIH07C`Pve88Up)l zvH9Bhax;0C)^nRs5{6$yYyr_-#HFPT{Ep{r-1uhn%zgdN?sPfe z0@M2vxJ6wNGOYf4!mnPvqRshfPT!MYd}`g9XRfcG z;6y!mEI1y0E0depEESn?R#xyM)BtJi&uM6C_E?KpRL{~&gP#xv2Wsc4Xd4=;IygMO z*^a!t*M^3Dh1$8{F)=pBe@C4bn`r9iH2~pse#Wrot)oa)yut5_T6eOxF|q}B$I!uR z3<(UqvLmkVJLOPCB=wv6lynTgG<1enFkUY!q!;9{OnY^d1}dZq=850Ft-3efxqH_F zdxD&pnyPY~7O=FmH9M8+!x%m}&8s5EB#ITWGAd*VnbTw+~xlA==^oGw>QR zi9%xL{f9P4RNMF6;{CI$x{+pkvYLRRSFWt)_FOA&lscID)vvjFj71t;Vbx0}(01v5 zcywe~X-QycXqcCuUuD^SFI|%x)pE+Js;X*jYkRa0M^(Xa(6WZrdtek|=o`OLssrY2 za&hYpA4qG~JkuxF@hPKfB)Rm5FFyFE#uDjTteO22qkYu+ep<{~nfFIm(L?h@@Sk?m z`wT^;rBM&nzPW8>c#C*!4(88p$FN9))YPn|N)72r2+7#w29t%Y=q25`RC42G{ZA^a z`@ZDkM@uzD^8LvozESE=%=}y}6RqX9)b`onf@G~9gk^h(~*2{kXsl0sVN;(2(ao;1*%DeHf>AqZ3T^OF)57XEm;L-Hu$ zZftLGhq?Lo*bf=paD20C{AH1>eyaI?U3m5 z6PB&ok$XHvH5uA`C8Orc==mN|sGAI48}tKHNqrKyWK)^*LfG*QAtzzieJYEb{vG!6 zhHo@xG*y27cNb;Xtg?5Be&I}IqnHF(|K#+_p-)Ur&Ac0?e`cu!2deevxoyu-hraIu zZupLk6SwB3zzl+~%~)NEG_pkRrm}gY%f-8QEsG)DPF+awQI|CK{OEIerSxK6Z`iHZ zw%+2hb?0p^_0oTxl||pQRY@aD<(sc-P*aQ}PS)OYaGDt~Jmd26QnP+{55A@Y@jraN zpDLNCgBn(k;1YfKrDSAe8E3jM917{3ha@efkP|mo=FmpOi==S->H+jiny_ z=tf>yzSyRt>d)I#l3Psacm3wlyK!>dbP>pmOTL4mQCVOm7tqJGN$~21Gotn=Dhs zMkq7Gl>XF(cZ{kz5Zo|0XG2d2|C#>&^=|EhgL!q~LTU&Y?jytxT*io3#LfwX0K28F}m}rYIkgh*KZj^poB~G zU%S#>N!B-N30lga?7i|*3ru;tr_5Webah_#(+>U^{1zwz&{q^AePrjxW}o*78tS60 zW1te6k|GVc@6jq8$JbNv1_I zYr_oDy4sPw)3YWrSJ$_OnW%fiZwU{kClAZ(v+RvUd8(O8G6BbiZklY%b;V4_r#Ul1 zk*Yz2JG$EynbWc2Fk0q|HLnNmo98y}frYyrRL5H%c8H-qIC{b#O8*?Ja)-G!8p-F6 z?JOe&iO&%=9?9ZT5%T;?T9Dw9X~ONx*-ntwovo}AvMS_j-Fk1Nskb(agmA|2^$<4g zGi1u=Z|$N<<_Cf%XoXGQq?cwJk$v{`NZ~;OUF)!5W!)?ezgtg*B%I^%;KKeH){kGD zyZ~!D^DEZI+M~Cgkcx@oSG<)T>-njsUVzucmSY3(v2|bNsPl9@%sY_RKc{JlX@OLL z@&P4JIp68L2-O413UPxMw0>p$ zd;740x4deI^q0Pw{y~fV)_n(I;Zhih(Gj2j`#4i^@etP-RSRs#%S1GRW&fGjImx3Ss!32wP%2MQEuF1!qmuH1+U?wJ{BgiB?5ZMNLD4ruj`6H!d zl$`Nm5xcV-Cqcy&{Je8l`lijZ#Om07?Qr3P@PG=|ePBTys}*kSI6NRkf5a~}B*?@G zILF$K{=jl_bA|~ikfVcxn^XpH6`mn|0Wm&*{w$O}UU_Z%L*>?MV|zy_c;6=ubY7P) zz8%bhAA8U7*;@x^2T?Aus>#q|36R>IHJB~wk9N2l3Wx}74cxFotfAo~h$KH+^8w(gUPne0 zOA$$v=~k|mJa8v}>)8a(p4KWD=oIB6KR9v>13a)4k=m{gOh-6|%8WGPp6Jn%4v~n1 zISDu{4R>m>MRr?83?w~XR)U1j>zRGrR#b3EzQ4dtt3#vs*Mbh)e`?XaQ{NP?L}|#R zsvbm9=txsTKtS+}nGDy$@eJ*iQYSz&xf9+^RUL7d8k&zSgICA{#{tiLJN2Ivx=A49 zw(xGaTT34iO=7QGP+*()C^ygy=Fdfu^9Xu0rrBT2^v@VHuF>bv5BwFcp2xy`!tYl1VX;VkYYGSZ^N{PV zzxVUg)4CEp5&)C93kz^GD~ORI>$y0;&ZpdAS_p8Rle}Et$ypGy66$qi6k;Sjjy#!~ z^UMyil^?W)X*<{3bWT!^@DRu zc?26ZU#cM{&qp4_}+=$p2YmW3jM5 zq4(Js?+mD^jrw)y_r!+NO4O9LLOuTjYffulEU%&UJVY@_*S5KbQSGHAryN*~f z7*u(a2H|?GgIfRlfeAypKVBy9j7-_t&-|Hb$9Hc`bAUllZMb4CTcElQMpk>}5mYB* z#vN@JaOH0Yje8NPC)f6Ud}~z#>R-fY(ia#>JXD+CDRAa9#Z)Pk(~^_{_+8SPvqp z8{FA#wj|xo26bZv>{?ZEEv?mNEdC#fgc6F#($?x_bKInD+ zv|hJVq(9-OWxOaTUb9H*W^8?jw%S`!*L3`kW6*J?W3_4&*-B;oiF-xY+&&YL8F%|L zldD6jHGH?y{wW)5^J;>>C{Ri8^a=RKM4sONwv?r9M_)O|L#)B{Trt~U%u#>(+ZX&Q zGORuyFgfB$H@Cb1Q`(C+>O53oJ=L3ux&HISV`YP&v@i?Xd2H@a9*}ftF@5Hhh%C>* zy&-qXZyP}ukglrOnZL_2y_Qz|(#$LAjzzAR4DpXwA!5cU2`aCgcvfgR_2A>S8H0%l zMBRI`ZzhX1y%7Z77!$Dir;td^0Izl1>M(TmZ0Fq1%4O-?=0IKNt&1fHBIg=rVz79O z`}8+XJS(kp+d&wA_wU*5CLq{o(_xCSA!?gtltSPDw;yd5TU_k%+Gy!S0rrpvqk+@< zeAl`9x(EpBHEp-#tHDwkCN4m-2$WR6{;D$Wf{s%hZ?Li_vc%jOuARUJY&A=cV0~jp z?abeR|0$_EM`)Zz$0OQ{i@d8)b{gf$6uvT<`6e)DVR{k`qS6^=0b>EJ0`L_}d0m3O zv6`L(wa$pfDpD}!%y{^Bps)r`{;dO246uLB3`vd*;xKMXM$6Sqn3Mfc-o;i1)x0Hm zarBzV@5*W6D=U))N0-xquaf7Q>Bj_TMyUV?t%C80^5DbVUxR~#svABUK)r;|S%O5% znJo$s;44@>w4imlO`z0bB;FzPG;43OlpYzN}JfE}43}@4;A1&8{OKyp{7C(AP zMatyFjP@jdqfGimJE5Dv5N~2idNy5uv?!a{^XhrD{PXbH-w(I^!jb)Rp_2YM0&xb@e7e_Bov#O)?!BQYNkwHzVdtNf5-DDbOl!P(_?s=vdz+;za# zZNdU&^bG%+&*oM6tiC~Xw>6h7=pXM9MwP;DkgqfT2rSWijzP=lH0)he6tj=J&0)Fj zxk;+5SH4DMFZf`gr$BCV2ou)m@P;s0C)eP3X$w8=eTvQ+>YkW2vHqcgZqp}sY;yli zTyj`cFYT{;^*ja#XNncs`VyGO{pl#dF*G5bzGL2uIj5m2v*JD#RVdd%Zptk1Kl}q= zBJU;~;0N?w1y{^fX@lQ9Xk6>(m|-+7U3fd;`6Be-K9z(f>x^eg1I~$e^><|xS*-5i zAJynEo|=k+{0~WYqu8=G;YeN_VF_^B;7-e&f!H0jjuvfxX#G}7;RVmr>=Evhv=cI- z?QhNQtPlt{kbZutG(^ilrn~fFi)zFVj<&?L-#h<3jw&1dtMI`<9fAMig!Sjf2Ba-LHcM;)R*M#{Vwqvp;GCr&{k_ISh7USU?LCH zw-dBE!m6qIgEY6}`Kti>N4cl22i=)gGEGiNBWR4*{26+Umxt%I!|z!!PRyx#(_{^iG19e z*=vUlf0%J^>5*u%h*U_2{isq%N~Kr>Pg$Yu+VsW~Z0X0`-rXj^jLWh@dUqSn(U<_o z0IBg|H48hHr@Uwj9~lJxIGFA&kkfEvAs;&*iJE7eJ*UpQmC9Qu#^*FJQ)zX+tp)3E z55xxw0M_W$?tqK!0*%up@Vs*Xc7Ev*P|zV|5pa~at zLWK|DD^FgYOd?JE%2*_etI-eU3Eu0;&Ay9*Q!!&$kEFvz6g0^dvTFp?<~{%~di&}zhG(7Z zgoP#3%Pn_p1+cNTZ-BA2&}=L$e|q|isG#+?p*$z@03LBi!v1JiNLc}6Yx7wDlNWr` zcPrzivN8cs%DTOLG$L;c6noUOFeqWyDdMDQsGn#BYP+*nesy|iIR${v&n1M=dh2vs6_g_Q3nLN6G){cI;bTlRp=?jM>=`Q<)huZb8(KB*cXs^GL4?$lUsM#R@j}A6Z$tS zpg-YWyLzjutI1-Hv_R!1J)QZHW;)2ujt9VFlhq%oL^F2(tVi@~NGvMZ*gTTITp`!G zwun-p<$u=|h);AjzjQsdPb~KbUK_C3b{3tXeuj28z2FjL$KWsGL|a;WhQIh;5{4mlr=-;; z@4E?{<%`gOiefy)u0Dr>$Yq5+Pk3ue3g zSfo=>1-f%>{^tVPJm1Nv5)i-9v<1=4HrQC zTXVAv6cEU&dKS+I-Axw}8@q+9U+UTRtO6t7W%_QW=y@UhcKHPwmj7w}(D%@39gtwDro$%9R1)~?yP_>K&zUBMAGs*ps_8d2(>*4WEV6cdkB=~TKG>T$)x_3 zXbv>H)Sxm5I6HOS&TVJig6}RfgkH9qT?Tf}yd z)WMXZjo%J8I3}R1VInX$-&0m(9K+8*(QQ1EsaCk#~u_HN%X2x{&4I+Y)h}I z5&^2-qn=nM*XE8d57iRi-5YD=eKN4fsUNaEsABD8!)ztmVpi{Kb){Xr%aY;Ki^3)R zsMW_^?%h^7j@^EpA$a<=8Vm9Y+a-S$W4+U;nz6H6<@K_#R?=S?0ApYt_!r7TPh~&n zCBJ?#q~b&-K{G{oLO11JF|kvR;l96X`!0Z9aXeQwg7o2&u1^EVoH~SRN2L@1Cc1bj zpv{LssKzbUta=G~4LeQE81d43Z|;W141)M=IDr^I$i2Of_&I!`Y`pFW;YxB4y5J3o z>~mW^|1igw`pl#?OU($A0VwTso19CS-mVE;IM6HNR}2;EVQYq@xx0uM7V)1Vls=_~ z-y!AZ`A zt9fD|&-vCCn~(8Ychc&=Nk)ZQp50JgZc!HI+Veer?6)U5yW{-MQ8{mZK0b3Mrn|S7 z4>ZE{kerLK6zt$IB3lkoUXeL9O{}~9U@RI5A}K1WR4}nQ5|sdKvvTHbLrW6Wra@xw z#gsvTwokKv0m~o}f@jCn?0f7wCFH5T5mkJ3s)=GYyEDH4={~*L0w1<6+nOY;e?OF? zB}Zc9hIw<@RmgFlf?_nP=IcU>w$sA&QPxAv-!2eq=ZSdZ?=dbU4)PA7k6zE46|hiI zNLmF?P_-`zsoO#30hs>s90P4w+-GfMcL6SyM+p(|vRvJ`P`UusU$(HjK5dLx^GX9A znJn>O&+%CN`ZVv$ENTS6Y`~<6HCD{U&hHgT3jK&i)(mX?auQGY`c)Y?f`q{wb|d3! z=+|auT2QE*fbA|SlQCK)l$?$A4^#}L_%i0((diRIQFDMiMA*J#Y;aJD+u?6$L9%0f zWUSx6w-8U`<>Mp1Xz%Inj!#L62T7LE{ z&t$Z=sbe8yK4pVR=-7u%YJh=J8U4xk?R$+}4yly59n00WYjWO3L38(s?XO(G3a!7_ z(938aKhJYHS8kuH!(R72?V`Q56+=c#O;eG9Orh{q)p`r3LT;~ddCV(HfWqQ>(4}@T z-VKolq1{vnwmbM(zjHha4*z0uY=(XL;1zgiZATxNg&D{-fpcEH~hmX;p-w`Kb6 z@XB4ES>1SdJoQIZH#7UsK z7R(9Q^Y)(=G2wFb;{YxB>)6_8g`kXY32VoB-!{D>zr4;e_rC3-a?y@Ye$Y*4cAt^) z6&NgDkMQG5c%-okpicQYIkzIaf33yJ1MZvmbO|O86x{%bN(8_YGXoA)UEs(%@ix=3 z3={Ye7K*z%O-M=U%ep@124E_Uw{NM(3$(UY!q_%%TJ?w=@k~_BMS33|mow}quadG- zUJ~JU_HhD^O^lwFER=z+vqrjoDg<9ky2){R4Q*aMJ5%S(bc*m7RQvX1rJt{S9f)8o zfoS4WXy{Gs0RX7CczAf0bHZ3H0kkoB$i_+BXzN8OJ{-)1l>&4>MbH)8?p>u|dui|`4^`ED>CDq^2_q%FZ}%QTGd>6e2wUoK}zNS7>XN0;k? zZLR5tGLu*$Q!Kf9BdKM<^TYRUYl0j&9%CWK{Yz973} zw^oE)GevBN(#CQTbLI)(XYN5x`vJaWCWm7ON{S(ne_DnwB2I(sPm08~`WVzp+_jrZk5jnGMag$;@8BB!BDuB_pJldaTHD z1l~88sscU*8LjeOL7giRyvFrBT2#|azI8tqKyHC(uhgiX41n`{qM2@@ehUi=epXu{ z`eYz>1W;Av6w0Md+!ZkhAiV(sTVra18_ONR8lqFfCpnxCBI~@(<1jC7&SR|K->?H% zeY>wBhY0gUcL!$N;(QH(O)AI0!o|rMfWmp7wdL8tip<5|-1V)kqtTaaD`+2|qalf+ zqN0_`URJBFa0MT1SZlO&mK?WlWI23OAt9fh7b zD<$ra@u?~eziU|)9ZOVd@DhJ=VX=#CUAU#y!r1U$@Lf$IuM@z)F{pK*5o|tqF)r!8 zySv-CTLy0c;CzD`I|=}~NK8tq_QN=^LeDIi$zHbiZgmi`S?@12J~3{Ho0%~%7N9e# zb6Nqo1@GtUoC8f17)y`M;K@M)tn8@bUZcgVN^oT>EhpggGQlVvx8-ne+EfTxa#Te* z-t`s56R5D;5@*X!af#I10$|I#Bk8Jr(5sq)OQ)Y|uAqxR&cqM(mdcPhUGTVR#;_}l zvDc*Tg2#yL;*O&2@%$B;jsL@kYp(eMyi6a%s~}vi(D*a_lH3YweK z!&v>o;i%R$iKT!9z#0WG3Q9^Bf1;k=S689ZEBQJzGxIT>{Io_C;4hWx@jc2dngrmU zm-QF5z!GFbDoi&QUQK>v_;Cn(Mk+qB%c*Ni9eotxJz`>2EiF_$D)8NZz$o-aX5=;b z`Gf`I3aZ*{!K*b}o1RE$DO3v0#0-WiU^Q)LsZXVG$33mbNfr5g<>zGp6 zuiciw>*plGvAtA@z*r70uJz-NY5B0ZYe_%l@bKd)cCp*OK_VRRZ*bSY=eIKB7B7sO zF9IvW*j#`Vfb$bVNTNgbc@<`lHCltjHx{>r9707!yP3hfbdC>U3DkZ zFmsL%tH)CJ6+Kk|IDoM=NQB&%5-~F%(3yLuD=dS3?lTZBbd;hDx8y4k%aFPFW?0?$_@Ogpg;f9O+?;8KU z_rK};R|Wsq*#A}Ezx3&UnV&b@;v357|D#e6-)8H{ryHUtO!uY>+$|`sIbj9}7u1jE z^OOYmZj;=R|Ce|Df64HlI{r_&{;R(KjjaEbp8i*|{#SbXZ{`25bn>rRnC`yWz~MDr+j0y)X~@KhVaoy8r+H literal 0 HcmV?d00001 diff --git a/doc/img/LocalInput_plugin.xcf b/doc/img/LocalInput_plugin.xcf new file mode 100644 index 0000000000000000000000000000000000000000..9800b1b3039d264463ee123f84ad71f62f45a754 GIT binary patch literal 56263 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 z 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 I#2)eg0c#_{9RL6T literal 0 HcmV?d00001 diff --git a/doc/img/LocalSink.png b/doc/img/LocalSink.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc53133baffe265ddfc5a35cca664366d536b10 GIT binary patch literal 13272 zcmb7r1zc6%wVRDB&1)U&!JwwMT9m^v2TKc z@&H9b?76(d=*EPzOYp&5^Ul!b1j4>BoL#>w-TR%?t%Wzg%-bIBGUL2`b)eAt9kk71d8ITpXOYY<|AJ9ujb= zj`}~`^v@;aP5*rFpPT;q9`dGtzK3k-Ki~AQ*x%Ld zwL{#b|HYzycJgfeOUvBkA_|HpCOXr5o0fOf-Uk=89$M=)UCSS>_c%T~+k3u*FO%+A zWS;(+HeHs;jqV-}y-p!HnQ!)+&-@!w^4#iL^7#mvg~*q-u0_hVO|SO)=&pSfG$wRo zR(&Jz_}A}lF>i0H#j>g4ol)b_z8CXRtA%cYGHz}|PxWKE<7dvyCVmm!Z%>@cVy_a9 zQqMt0V5AXVW|YTtmcD7L+LM_~;Ms~zay}d}FyykPt-VW`YwqnkUihYRE>!&1?b|aG z&pk27^6a-JZCv)>DkGw{5VrL+oO@eqD;jo1EbE7MmbHY;%EbEo}u^XT4E|gk0?Y7ck-bsyQREo;b ziSo$!qF~zREmV8aWQ~s9>pmsq!6I<6q>_v#>vAQ?+SI_dz5QWxeQJuE>Ep3QqJWJr z5!Is=gfoxACSohLZ`XV>-oWiDVF`m!VGv z^?%qZ%l|r!^VWRq_nlwFw+D6`uY}zblh=lB@TK<$XRC-Nu&7()D2Ha6 zj&3(sIck+y%`CrN9LjlpUgz1cKG~VhWgJFEe)sndrF%oV*@UqSD<6Y@r8;7E>L+Sc zHWN1%X~Rf<{`jMdi>i7}_pKJ_=4~7t2gNM?`>9rYi#E|*0SfAsUmbQ+xKmz{+)l@% zlX;W;@@_Dtu-n*|Fpmu1@$>Un)jvx^2`NM3k|=X)YEX35%D);%(=cMf5F7=Ow{zBB z$s|p=CGRaIEjedyNIn$x!7VZ-B46s%`DpWG!=U4L&j{a?B_}T4Rcq$D2^rayBkp-m zV}KEnJRch zl$5G9C$y0s9?F-~o=m0#{$C%8VsHsszrz)vmC?2AOLH0ci8?S=lDwl}_K3MQ-k{a#*G-S%cDT`AH*cRL!t z@vJvPE+w8%u3XV9>}`^9_r z%opd>&bNhmXL+>brqJm!*H+EiKo(Jgfc@h1>B0GS1KxU`T8vk{tejqD?Pwe0hF#Sm zX^wu^eCH3*ypc`$j>8QM8k~yMnytaRgSn|13vEp0Z3ojWf8V@+Ji>@@3zjgQ@_QA7 zNmo#-<$tiPRa=_nJ5H-D_!M6%b;A3zPjR|Gz^7!$V*A#BB0=a_Tka%+KuYg??AVJo@J(^tymfp)B&9&+jYIr#G8|$SDKI}S8U&F%Q{jv-X4=3T& z58SZz!XSud`*3~A{YvoR!-por`JZ{FT<~~!%0wcM8uZF6xlM+@qTMA$nO<6I&Q(XS z#Ym0riHVt&Y4JPlKZYkN=P0?m4I7o<5)wA`B#WDFNk_ANo}brsI$W1%4klljsukuk z>erfY2_1^h4GF>aWHIjE+-asPLzPogBMW)Dduy>4;ZB4TTD5-4mu5fZ`ptH2a7OJ} zz&MJ2Q4IW>XUG|@=&kgorlh8hT-WRW^_KT?Lc6TzqwezGAH~K)Sjj!F92|J@Xr&$q z3MMoL5Y5fa)we}5o-BORblC3^Hyp|(FEJX>ZVjVBz8<&f=-(fr=oIefmRJ-|UtOFY z+`e^7Yamm><>Fun<$O)^N_+bEXXPBlQq!@Q6P32Nv9J~qTQze9%@oPzQ#HK&{Msd| zC#P$9D%DOUhx#~ggEEQ*+%KQr=Qer3$;ml26B84Ie9j&Ovy(72^_Q|qr-1Y%w^*lx z)emgMuU@@+AS6WbNyzo|9zMQUt=k1e6XV;rZ_lT$E-2xP;d37VrD7jm8#dDLW>U5pV9rvunf8r7rKS7 zZa(1Pz!eu4XORE(?9H2d>9R@sSC{ePUPC$W4dN6P6$zKRlhU1!HeupChliClTn`jD zI5>)V0(?C(vZHy-DOOfiDkfjc${I{oIi3WYm#D&!>+di3JU!p8uiE~D>EPhN=6q;^ z@>EdJai@_;rOb?cZ7^r9PgaB_*NDW1YdA_u?TGg2i+Jz7uSdSeO+SGa{!4Yv0zY*Vj!5S=6Ep)HF3UW4Vl* znu6||ZoLo_+g?de+C3Q3oLgOOgVt249N2{~_T>`0&(6-Kw$Ia2Ql>3ma6TenSzDdm zU+Js5x;%TJU zm-_m&EG#V1QnVfVoDeh)PELe|8b=#r;+?Tv8A^E+;=yDyu*%ZMr(8J(a@FG?6R=y& zzhcp-dIe-Vadi3s1M}#?ld9v<35?7nvA$D@(9Xf>;uda>oFf&DiPF}@ z>f`+E(F$uiSP||SNwVRs4c>R}BU2#^cDh73t$eOpjHr*9boga z^?Xwm{LlS^V|GYtY%4)%Ti?KxA~~LEZd*shI^~7HJP29 ze>~K{AxHJYZ^}_xDxR6MEG>pqZh?|H^d-Vk@qm^`4EQaERE7}EUZ;UK6ukv)qWcQE zn3NN|`53pBROQ^7!j{>gyw=dQV-*mM+JDb1+qxpx=j#Wd!);XQxmpW}?H)A4{ynjG&-$obo7x4#u{EE1)S9Dt3g4Mm4iu3PYja^U^)8tU z$g47&%fprWadSPD#LGM`uN9etxxF7jk-JoZ3QZ>1-H`1(I@M*FB1<%${{& zZ%^2jNS&e)=sd2dtnAJIAo?C9g7(|>z3Dp77g$|r1K~03>$h4BgYU!=wp3ug5MD+f zkexkY>7l8KpGr9`hklw{u>^ZqB;5&mrtq`b2`?^6tf}$ji;BFm5q|dcJ}vEo_nHw@h05BU-~4j{dg

=%4tI4UlhTuY-WyhCk+{*fLN4ehjt_odLp9k$-Y zOk(%;_FCB5me|&6kkZi7&aSOFx65)7+8>dAGtyNm)zujPY*GC@6vvR-F#I*U4EqF& zr^Jv~fMQ?OYQ}M#!$^ahXRDFdFVB0GXnzKO|26;Jnku!)rkFLbS#$G|aE?;;0)hJx z=~qpn`;C;h%9P%WpKDc~40*L@{?vHHVk{}arZS!LQqN6KHD~Z0rPLvDyq-fyU48?;|pa$yKRCRIWfqnrt;xhoc7$ieG{_Ka6By&>{pn9!IC#k{T$= z*fufBJ-Smv*mk07ff(zka9n5!9#E2(d@~jDa4eg&uagiL*8_nNAPn#d47~F*Ir(Ix zY)ZNKV`xrjPZ&VdqtpEr&$zhzBO@c{$8#ZHzI=&jvyHSCu$O25rj+lzS>dCk;pj!m zW%Tvy*WZC8oWnJ)2-D;5&pnZOnl{`I>=aJRS+OwSR|0lSw{PEeIp1kky6QUEXcw}U z%H?1ks&RFOXNUsvC{SjCOj>9%Qm8i842hpe!{PJURxKs`ATucdPYl2#5sO;+3?6F6 z6=xXfqL_Xlj&bG8!k(HhWTR;d3@mw7Y-C#^U7CW!UxF z@UbX`?mW}ddH~5RMYY6;nwEAKU}10S>XHbBm6f$AnEW+7uC=3s8Ym86{*G0UQp}ENDR-UgXcAWR~q&eC;IxB-Y_aWzf2f9X0N5^T@{}{Z0765jCz0<4H zp;}@-D{3T0w?{GS>gxUlNNoxv@r0l-9?C_MCP00w!*vzpNXf+Wey*(*7WKi>tMfnw zjQ82!-(O4g>F9gO;u3zw7)`$RN;@CZEGXR4LUDsz7^%E1H|1ZvYyE3_!vFR6s}Lyy}-{hZ`{Cy1)}V;`unIG=-JWJ%ZoFB6G4c*@4&`7 zl7y3nhvTs@nnNg)%=suN{<*^WLG;rfLAr(6*+1@=dz3JSjiV*Trd#Of=y;Tr=3}L@ zLMPN+U0qd&qsF@W`qwRh^CBY>-onz#s`7_cTfJ6e&zQf#Sv*G{Rz|7(-y?^XuMd%s zPM74uF_aHfu*k5F77Rv|msg}53bm(p~<;L^~zdRnAdp#4Hs`tG84BE~u=rp)=Z_e9S+dyhWtnN}>Nr=;8? zBa;GdqYU!_OY9K?gTF?#(+7^2XhCQ0YNrEju&M44vwd0}$l4p$3Hk7Z^aP^Kv_2P7 zw>J=M)iSeA7-)Y8TZK&df{k^aObDF*JWb)L4?ftGi=agqzOYEoHD4;mJ*EZtza(!kt#b4Qf`fyf81?(sd7}4~nQKD6Z3S*%P3|)3xI_+Nb-Z5G?e9X$PD8U0J47rf zC}`eV-y2Lp7u*NY&(RuJ0c@e;2aq8_((Lxj$<8b;dbdUh%)`2A0oaKac6Uqs zS|Oj+)zZ=;Cua@pW?-PCrCv=9!_8zS!G3b4nbN)EKq=$hWWV7^Aq_Ha0Nr#AG?(UX zvrzoK;#A(nRSTpq8QUopRC-flq%b=>yS?4w_}98Cp6@CfKRFacJW5q{wS<&Z@m<9J z<$%XZm}DdaJE%zr{f3!(ACLtf#>*|$$}K)Kzc0maw_Sglhy@1Q{*CHag%F3{)sF!wjc8MR%%*;~K(!ye6{fmmM6F(?9|8gBIHe4T#M5zCG z5kR=$M1Jqy@8g|05-ub8u8^MCp$d^J!Mjv$J_%D1s~Z|l9xI)uZ)&ACk621hY)r7L z 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 HEsy^Jl}>Zm literal 0 HcmV?d00001 diff --git a/doc/img/LocalSink.xcf b/doc/img/LocalSink.xcf new file mode 100644 index 0000000000000000000000000000000000000000..533e62ecf0cf5eda5184014dacb0e94fe80a879a GIT binary patch literal 41919 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 literal 0 HcmV?d00001 diff --git a/plugins/channelrx/localsink/readme.md b/plugins/channelrx/localsink/readme.md index 245a66517..ea471db05 100644 --- a/plugins/channelrx/localsink/readme.md +++ b/plugins/channelrx/localsink/readme.md @@ -1,26 +1,20 @@ -

Remote sink channel plugin

+

Local sink channel plugin

Introduction

-This plugin sends I/Q samples from the baseband via UDP to a distant network end point. It can use FEC protection to prevent possible data loss inherent to UDP protocol. - -It is present only in Linux binary releases. - -

Build

- -The plugin will be built only if the [CM256cc library](https://github.com/f4exb/cm256cc) is installed in your system. For CM256cc library you will have to specify the include and library paths on the cmake command line. Say if you install cm256cc in `/opt/install/cm256cc` you will have to add `-DCM256CC_DIR=/opt/install/cm256cc` to the cmake commands. +This plugin sends I/Q samples from the baseband to a Local Input plugin source in another device set.

Interface

-![Remote sink channel plugin GUI](../../../doc/img/RemoteSink.png) +![Local sink channel plugin GUI](../../../doc/img/LocalSink.png)

1: Decimation factor

The device baseband can be decimated in the channel and its center can be selected with (5). The resulting sample rate of the I/Q stream sent over the network is the baseband sample rate divided by this value. The value is displayed in (2). -

2: Network I/Q stream sample rate

+

2: I/Q stream sample rate

-This is the sample rate in kS/s of the I/Q stream sent over the network. +This is the sample rate in kS/s of the I/Q stream sent to the Local Input source instance.

3: Half-band filters chain sequence

@@ -42,33 +36,10 @@ The slider moves the channel center frequency roughly from the lower to the high - **1**: centered - **2**: higher half-band -

6: Distant address

+

6: Local Input source index

-IP address of the distant network interface from where the I/Q samples are sent via UDP +This selects the index of the Local Input source where to send the I/Q samples. The list can be refreshed with the next button (7) -

7: Data distant port

+

7: Refresh local input devices list

-Distant port to which the I/Q samples are sent via UDP - -

8: Validation button

- -When the return key is hit within the address (1) or port (2) the changes are effective immediately. You can also use this button to set again these values. - -

9: Desired number of FEC blocks per frame

- -This sets the number of FEC blocks per frame. A frame consists of 128 data blocks (1 meta data block followed by 127 I/Q data blocks) and a variable number of FEC blocks used to protect the UDP transmission with a Cauchy MDS block erasure correction. The two numbers next are the total number of blocks and the number of FEC blocks separated by a slash (/). - -

10: Delay between UDP blocks transmission

- -This sets the minimum delay between transmission of an UDP block (send datagram) and the next. This allows throttling of the UDP transmission that is otherwise uncontrolled and causes network congestion. - -The value is a percentage of the nominal time it takes to process a block of samples corresponding to one UDP block (512 bytes). This is calculated as follows: - - - Sample rate on the network: _SR_ - - Delay percentage: _d_ - - Number of FEC blocks: _F_ - - There are 127 blocks of I/Q data per frame (1 meta block for 128 blocks) and each I/Q data block of 512 bytes (128 samples) has a 8 bytes header (2 samples) thus there are 126 samples remaining effectively. This gives the constant 127*126 = 16002 samples per frame in the formula - -Formula: ((127 ✕ 126 ✕ _d_) / _SR_) / (128 + _F_) - -The percentage appears first at the right of the dial button and then the actual delay value in microseconds. \ No newline at end of file +Use this button to refresh the list of Local Input sources indexes. diff --git a/plugins/samplesource/localinput/readme.md b/plugins/samplesource/localinput/readme.md index 4e352b3cc..1c1177547 100644 --- a/plugins/samplesource/localinput/readme.md +++ b/plugins/samplesource/localinput/readme.md @@ -1,26 +1,12 @@ -

Remote input plugin

+

Local input plugin

Introduction

-This input sample source plugin gets its samples over tbe network from a SDRangel instance's Remote channel sink using UDP connection. - -Forward Error Correction with a Cauchy MDS block erasure codec is used to prevent block loss. This can make the UDP transmission more robust particularly over WiFi links. - -Please note that there is no provision for handling out of sync UDP blocks. It is assumed that frames and block numbers always increase with possible blocks missing. Such out of sync situation has never been encountered in practice. - -The distant SDRangel instance that sends the data stream is controlled via its REST API using a separate control software for example [SDRangelcli](https://github.com/f4exb/sdrangelcli) - -A sample size conversion takes place if the stream sample size sent by the distant instance and the Rx sample size of the local instance do not match (i.e. 16 to 24 bits or 24 to 16 bits). Best performace is obtained when both instances use the same sample size. - -It is present only in Linux binary releases. - -

Build

- -The plugin will be built only if the [CM256cc library](https://github.com/f4exb/cm256cc) is installed in your system. For CM256cc library you will have to specify the include and library paths on the cmake command line. Say if you install cm256cc in `/opt/install/cm256cc` you will have to add `-DCM256CC_DIR=/opt/install/cm256cc` to the cmake commands. +This input sample source plugin gets its samples from a Local Sink channel in another device set.

Interface

-![SDR Remote input plugin GUI](../../../doc/img/RemoteInput_plugin.png) +![SDR Local input plugin GUI](../../../doc/img/LocalInput_plugin.png)

1: Start/Stop

@@ -35,139 +21,16 @@ Record I/Q stream toggle button

3: Frequency

-This is the center frequency in Hz sent in the meta data from the distant SDRangel instance and corresponds to the center frequency of reception. The sub kHz value (000 to 999 Hz) is represented in smaller digits on the right. +This is the center frequency in Hz sent from the Local Sink channel instance and corresponds to the center frequency of reception. The sub kHz value (000 to 999 Hz) is represented in smaller digits on the right.

4: Stream sample rate

Stream I/Q sample rate in kS/s -

5: Auto correction options and stream status

+

5: Auto remove DC component

-![SDR Remote input stream GUI](../../../doc/img/RemoteInput_plugin_02.png) +Filters out the possible DC component. You use this if yoy notice a spike in the center of the pass band. -

5.1: Auto correction options

+

6: Auto make I/Q balance

-These buttons control the local DSP auto correction options: - - - **DC**: auto remove DC component - - **IQ**: auto make I/Q balance - -

5.2: Receive buffer length

- -This is the main buffer (writes from UDP / reads from DSP engine) length in units of time (seconds). As read and write pointers are normally about half the buffer apart the nominal delay introduced by the buffer is the half of this value. - -

5.3: Main buffer R/W pointers positions

- -Read and write pointers should always be a half buffer distance buffer apart. This is the difference in percent of the main buffer size from this ideal position. - - - When positive it means that the read pointer is leading - - When negative it means that the write pointer is leading (read is lagging) - -This corresponds to the value shown in the gauges above (9) - -

5.4: Date/time

- -This is the current timestamp of the block of data sent from the receiver. It is refreshed about every second. The plugin tries to take into account the buffer that is used between the data received from the network and the data effectively used by the system however this may not be extremely accurate. It is based on the timestamps sent from the Remote sink channel at the other hand that does not take into account its own buffers. - -

6: Main buffer R/W pointers gauge

- -There are two gauges separated by a dot in the center. Ideally these gauges should not display any value thus read and write pointers are always half a buffer apart. However due to the fact that a whole frame is reconstructed at once up to ~10% variation is normal and should appear on the left gauge (write leads). - - - The left gauge is the negative gauge. It is the value in percent of buffer size from the write pointer position to the read pointer position when this difference is less than half of a buffer distance. It means that the writes are leading or reads are lagging. - - The right gauge is the positive gauge. It is the value in percent of buffer size of the difference from the read pointer position to the write pointer position when this difference is less than half of a buffer distance. It menas that the writes are lagging or reads are leading. - -The system tries to compensate read / write unbalance however at start or when a large stream disruption has occurred a delay of a few tens of seconds is necessary before read / write reaches equilibrium. - -

7: Data stream status

- -![SDR Remote input stream GUI](../../../doc/img/RemoteInput_plugin_04.png) - -

7.1: Sample size

- -This is the size in bits of a I or Q sample sent in the stream by the distant server. - -

7.2: Total number of frames and number of FEC blocks

- -This is the total number of frames and number of FEC blocks separated by a slash '/' as sent in the meta data block thus acknowledged by the distant server. When you set the number of FEC blocks with (4.1) the effect may not be immediate and this information can be used to monitor when it gets effectively set in the distant server. - -A frame consists of 128 data blocks (1 meta data block followed by 127 I/Q data blocks) and a variable number of FEC blocks used to protect the UDP transmission with a Cauchy MDS block erasure correction. - -Using the Cauchy MDS block erasure correction ensures that if at least the number of data blocks (128) is received per complete frame then all lost blocks in any position can be restored. For example if 8 FEC blocks are used then 136 blocks are transmitted per frame. If only 130 blocks (128 or greater) are received then data can be recovered. If only 127 blocks (or less) are received then none of the lost blocks can be recovered. - -

7.3: Stream status

- -The color of the icon indicates stream status: - - - Green: all original blocks have been received for all frames during the last polling timeframe (ex: 136) - - No color: some original blocks were reconstructed from FEC blocks for some frames during the last polling timeframe (ex: between 128 and 135) - - Red: some original blocks were definitely lost for some frames during the last polling timeframe (ex: less than 128) - -

7.4: Minimum total number of blocks per frame

- -This is the minimum total number of blocks per frame during the last polling period. If all blocks were received for all frames then this number is the nominal number of original blocks plus FEC blocks (Green lock icon). In our example this is 128+8 = 136. - -If this number falls below 128 then some blocks are definitely lost and the lock lights in red. - -

7.5: Maximum number of FEC blocks used by frame

- -Maximum number of FEC blocks used for original blocks recovery during the last polling timeframe. Ideally this should be 0 when no blocks are lost but the system is able to correct lost blocks up to the nominal number of FEC blocks (Neutral lock icon). - -

7.6: Reset events counters

- -This push button can be used to reset the events counters (4.7 and 4.8) and reset the event counts timer (4.9) - -

7.7: Unrecoverable error events counter

- -This counter counts the unrecoverable error conditions found (i.e. 4.4 lower than 128) since the last counters reset. - -

7.8: Recoverable error events counter

- -This counter counts the unrecoverable error conditions found (i.e. 4.4 between 128 and 128 plus the number of FEC blocks) since the last counters reset. - -

7.9: events counters timer

- -This HH:mm:ss time display shows the time since the reset events counters button (4.6) was pushed. - -

8: Distant server API address and port

- -![SDR Remote input stream GUI](../../../doc/img/RemoteInput_plugin_05.png) - -

8.1: API connection indicator

- -The "API" label is lit in green when the connection is successful - -

8.2: API IP address

- -IP address of the distant SDRangel instance REST API - -

8.3: API port

- -Port of the distant SDRangel instance REST API - -

8.4: Validation button

- -When the return key is hit within the address (5.2) or port (5.3) the changes are effective immediately. You can also use this button to set again these values. Clicking on this button will send a request to the API to get the distant SDRangel instance information that is displayed in the API message box (8) - -

9: Local data address and port

- -![SDR Remote source input stream GUI](../../../doc/img/RemoteInput_plugin_06.png) - -

9.1: Data IP address

- -IP address of the local network interface the distant SDRangel instance sends the data to - -

9.2: Data port

- -Local port the distant SDRangel instance sends the data to - -

9.3: Validation button

- -When the return key is hit within the address (5.2) or port (5.3) the changes are effective immediately. You can also use this button to set again these values. - -

10: Status message

- -The API status is displayed in this box. It shows "API OK" when the connection is successful and reply is OK - -

11: API information

- -This is the information returned by the API and is the distance SDRangel instance information if transaction is successful +Re-balances the I and Q channels. You use this if you notice ghost artifacts symmetric around the center frequency.