From f1d6cda337c62f5238d67ece20c404f1a0f6e4b5 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 28 Aug 2024 18:47:33 +0200 Subject: [PATCH] Added RNodeMultiInterface to documentation --- docs/manual/_sources/interfaces.rst.txt | 115 ++++++++++++++++++++++++ docs/manual/_sources/networks.rst.txt | 2 +- docs/manual/_static/pygments.css | 12 +-- docs/manual/examples.html | 8 +- docs/manual/gettingstartedfast.html | 2 +- docs/manual/index.html | 1 + docs/manual/interfaces.html | 112 +++++++++++++++++++++++ docs/manual/networks.html | 2 +- docs/manual/objects.inv | Bin 2513 -> 2524 bytes docs/manual/searchindex.js | 2 +- docs/source/interfaces.rst | 115 ++++++++++++++++++++++++ 11 files changed, 360 insertions(+), 11 deletions(-) diff --git a/docs/manual/_sources/interfaces.rst.txt b/docs/manual/_sources/interfaces.rst.txt index e07f5bd..8af9ca6 100644 --- a/docs/manual/_sources/interfaces.rst.txt +++ b/docs/manual/_sources/interfaces.rst.txt @@ -406,6 +406,121 @@ can be used, and offers full control over LoRa parameters. # airtime_limit_short = 33 +.. _interfaces-rnode-multi: + +RNode Multi Interface +===================== + +For RNodes that support multiple LoRa transceivers, the RNode +Multi interface can be used to configure sub-interfaces individually. + +.. code:: + + # Here's an example of how to add an RNode Multi interface + # using the RNode LoRa transceiver. + + [[RNode Multi Interface]] + type = RNodeMultiInterface + + # Enable interface if you want to use it! + interface_enabled = True + + # Serial port for the device + port = /dev/ttyACM0 + + # You can configure the RNode to send + # out identification on the channel with + # a set interval by configuring the + # following two parameters. + + # id_callsign = MYCALL-0 + # id_interval = 600 + + # A subinterface + [[[HIGHDATARATE]]] + # Subinterfaces can be enabled and disabled in of themselves + interface_enabled = True + + # Set frequency to 2.4GHz + frequency = 2400000000 + + # Set LoRa bandwidth to 1625 KHz + bandwidth = 1625000 + + # Set TX power to 0 dBm (0.12 mW) + txpower = 0 + + # The virtual port, only the manufacturer + # or the person who wrote the board config + # can tell you what it will be for which + # physical hardware interface + vport = 1 + + # Select spreading factor 5. Valid + # range is 5 through 12, with 5 + # being the fastest and 12 having + # the longest range. + spreadingfactor = 5 + + # Select coding rate 5. Valid range + # is 5 throough 8, with 5 being the + # fastest, and 8 the longest range. + codingrate = 5 + + # It is possible to limit the airtime + # utilisation of an RNode by using the + # following two configuration options. + # The short-term limit is applied in a + # window of approximately 15 seconds, + # and the long-term limit is enforced + # over a rolling 60 minute window. Both + # options are specified in percent. + + # airtime_limit_long = 100 + # airtime_limit_short = 100 + + [[[LOWDATARATE]]] + # Subinterfaces can be enabled and disabled in of themselves + interface_enabled = True + + # Set frequency to 865.6 MHz + frequency = 865600000 + + # The virtual port, only the manufacturer + # or the person who wrote the board config + # can tell you what it will be for which + # physical hardware interface + vport = 0 + + # Set LoRa bandwidth to 125 KHz + bandwidth = 125000 + + # Set TX power to 0 dBm (0.12 mW) + txpower = 0 + + # Select spreading factor 7. Valid + # range is 5 through 12, with 5 + # being the fastest and 12 having + # the longest range. + spreadingfactor = 7 + + # Select coding rate 5. Valid range + # is 5 throough 8, with 5 being the + # fastest, and 8 the longest range. + codingrate = 5 + + # It is possible to limit the airtime + # utilisation of an RNode by using the + # following two configuration options. + # The short-term limit is applied in a + # window of approximately 15 seconds, + # and the long-term limit is enforced + # over a rolling 60 minute window. Both + # options are specified in percent. + + # airtime_limit_long = 100 + # airtime_limit_short = 100 + .. _interfaces-serial: Serial Interface diff --git a/docs/manual/_sources/networks.rst.txt b/docs/manual/_sources/networks.rst.txt index f818771..bc3ebdc 100644 --- a/docs/manual/_sources/networks.rst.txt +++ b/docs/manual/_sources/networks.rst.txt @@ -60,7 +60,7 @@ with Reticulum: * | Reticulum is designed to work reliably in open, trustless environments. This means you can use it to create open-access networks, where participants can - join and leave in an free and unorganised manner. This property allows an + join and leave in a free and unorganised manner. This property allows an entirely new, and so far, mostly unexplored class of networked applications, where networks, and the information flow within them can form and dissolve organically. diff --git a/docs/manual/_static/pygments.css b/docs/manual/_static/pygments.css index c2e07c7..02b4b12 100644 --- a/docs/manual/_static/pygments.css +++ b/docs/manual/_static/pygments.css @@ -106,17 +106,17 @@ body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .gd { color: #ff3a3a } /* Generic.Deleted */ body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */ +body[data-theme="dark"] .highlight .gr { color: #ff3a3a } /* Generic.Error */ body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ -body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body[data-theme="dark"] .highlight .gt { color: #ff3a3a } /* Generic.Traceback */ body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ @@ -192,17 +192,17 @@ body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bol body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .gd { color: #ff3a3a } /* Generic.Deleted */ body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */ +body:not([data-theme="light"]) .highlight .gr { color: #ff3a3a } /* Generic.Error */ body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ -body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body:not([data-theme="light"]) .highlight .gt { color: #ff3a3a } /* Generic.Traceback */ body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ diff --git a/docs/manual/examples.html b/docs/manual/examples.html index b820424..8eb6e6f 100644 --- a/docs/manual/examples.html +++ b/docs/manual/examples.html @@ -1072,7 +1072,7 @@ destination, and passing traffic back and forth over the link.

" running, waiting for a connection." ) - RNS.log("Hit enter to manually send an announce (Ctrl-C to quit)") + RNS.log("Hit enter to manually send an announce (Ctrl-C or \"quit\" to quit)") # We enter a loop that runs until the users exits. # If the user hits enter, we will announce our server @@ -1082,6 +1082,12 @@ destination, and passing traffic back and forth over the link.

entered = input() destination.announce() RNS.log("Sent announce from "+RNS.prettyhexrep(destination.hash)) + if entered == "quit": + if latest_client_link: + latest_client_link.teardown() + break + print("") + exit() # When a client establishes a link to our server # destination, this function will be called with diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index 049b4cb..2161a44 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -409,7 +409,7 @@ by adding one of the following interfaces to your [[RNS Testnet BetweenTheBorders]] type = TCPClientInterface enabled = yes - target_host = betweentheborders.com + target_host = reticulum.betweentheborders.com target_port = 4242 # Interface to Testnet I2P Hub diff --git a/docs/manual/index.html b/docs/manual/index.html index 5034284..eca2666 100644 --- a/docs/manual/index.html +++ b/docs/manual/index.html @@ -338,6 +338,7 @@ to participate in the development of Reticulum itself.

  • TCP Client Interface
  • UDP Interface
  • RNode LoRa Interface
  • +
  • RNode Multi Interface
  • Serial Interface
  • Pipe Interface
  • KISS Interface
  • diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html index 3e51ccd..64a93be 100644 --- a/docs/manual/interfaces.html +++ b/docs/manual/interfaces.html @@ -569,6 +569,117 @@ can be used, and offers full control over LoRa parameters.

    +
    +

    RNode Multi Interface#

    +

    For RNodes that support multiple LoRa transceivers, the RNode +Multi interface can be used to configure sub-interfaces individually.

    +
    # Here's an example of how to add an RNode Multi interface
    +# using the RNode LoRa transceiver.
    +
    +[[RNode Multi Interface]]
    +type = RNodeMultiInterface
    +
    +# Enable interface if you want to use it!
    +interface_enabled = True
    +
    +# Serial port for the device
    +port = /dev/ttyACM0
    +
    +# You can configure the RNode to send
    +# out identification on the channel with
    +# a set interval by configuring the
    +# following two parameters.
    +
    +# id_callsign = MYCALL-0
    +# id_interval = 600
    +
    +  # A subinterface
    +  [[[HIGHDATARATE]]]
    +  # Subinterfaces can be enabled and disabled in of themselves
    +  interface_enabled = True
    +
    +  # Set frequency to 2.4GHz
    +  frequency = 2400000000
    +
    +  # Set LoRa bandwidth to 1625 KHz
    +  bandwidth = 1625000
    +
    +  # Set TX power to 0 dBm (0.12 mW)
    +  txpower = 0
    +
    +  # The virtual port, only the manufacturer
    +  # or the person who wrote the board config
    +  # can tell you what it will be for which
    +  # physical hardware interface
    +  vport = 1
    +
    +  # Select spreading factor 5. Valid
    +  # range is 5 through 12, with 5
    +  # being the fastest and 12 having
    +  # the longest range.
    +  spreadingfactor = 5
    +
    +  # Select coding rate 5. Valid range
    +  # is 5 throough 8, with 5 being the
    +  # fastest, and 8 the longest range.
    +  codingrate = 5
    +
    +  # It is possible to limit the airtime
    +  # utilisation of an RNode by using the
    +  # following two configuration options.
    +  # The short-term limit is applied in a
    +  # window of approximately 15 seconds,
    +  # and the long-term limit is enforced
    +  # over a rolling 60 minute window. Both
    +  # options are specified in percent.
    +
    +  # airtime_limit_long = 100
    +  # airtime_limit_short = 100
    +
    +  [[[LOWDATARATE]]]
    +  # Subinterfaces can be enabled and disabled in of themselves
    +  interface_enabled = True
    +
    +  # Set frequency to 865.6 MHz
    +  frequency = 865600000
    +
    +  # The virtual port, only the manufacturer
    +  # or the person who wrote the board config
    +  # can tell you what it will be for which
    +  # physical hardware interface
    +  vport = 0
    +
    +  # Set LoRa bandwidth to 125 KHz
    +  bandwidth = 125000
    +
    +  # Set TX power to 0 dBm (0.12 mW)
    +  txpower = 0
    +
    +  # Select spreading factor 7. Valid
    +  # range is 5 through 12, with 5
    +  # being the fastest and 12 having
    +  # the longest range.
    +  spreadingfactor = 7
    +
    +  # Select coding rate 5. Valid range
    +  # is 5 throough 8, with 5 being the
    +  # fastest, and 8 the longest range.
    +  codingrate = 5
    +
    +  # It is possible to limit the airtime
    +  # utilisation of an RNode by using the
    +  # following two configuration options.
    +  # The short-term limit is applied in a
    +  # window of approximately 15 seconds,
    +  # and the long-term limit is enforced
    +  # over a rolling 60 minute window. Both
    +  # options are specified in percent.
    +
    +  # airtime_limit_long = 100
    +  # airtime_limit_short = 100
    +
    +
    +

    Serial Interface#

    Reticulum can be used over serial ports directly, or over any device with a @@ -1104,6 +1215,7 @@ to 30

  • TCP Client Interface
  • UDP Interface
  • RNode LoRa Interface
  • +
  • RNode Multi Interface
  • Serial Interface
  • Pipe Interface
  • KISS Interface
  • diff --git a/docs/manual/networks.html b/docs/manual/networks.html index 78d33de..ebb69c7 100644 --- a/docs/manual/networks.html +++ b/docs/manual/networks.html @@ -294,7 +294,7 @@ than that.

  • Reticulum is designed to work reliably in open, trustless environments. This means you can use it to create open-access networks, where participants can -join and leave in an free and unorganised manner. This property allows an +join and leave in a free and unorganised manner. This property allows an entirely new, and so far, mostly unexplored class of networked applications, where networks, and the information flow within them can form and dissolve organically.
    diff --git a/docs/manual/objects.inv b/docs/manual/objects.inv index 5011db4ca553bf5bd93e2cdcefc503d9ef277d36..994755b297613f02ffc03591c8bf8a72c365fd5d 100644 GIT binary patch delta 2267 zcmV<12qgE>6WkM!z<&qQdymCpu~8Bg$qq&DW5jac!9O=iFiQ88b8a=K)Z&7{S_2)NSCc;i91uHDf5JAn7XSPF z=i2|ub-D!K0U^iBgB%y6OGOQ8lugNW7r$(cw3{nkD)Y;@QIj=D6+oKm9Uy6*T1l&;QEBN$XXNTxRDb@)IDfk|17lhpz)f7|GWWJZ3P&Ngp> zi$>Eu{du&+)Hs1UlmZ-KqVm$!cC(4D>45WI=izfOojFZg(d3j}SaRP-=O)o6Y)XzP z2~r5YkU2zMN&m+QE!!_hEiN_LnaeqGBJhk^6?$!M9YTsb7$ zLH889(r6*vdAcC8f5w~AGD;|SEaQy8h;q_!8zHqPV@+U~(}G3#RyNI|q=;{}0yZTR zzd*&lA}-kiy5yLCX7&UI#)bLuBrO(J#aQn}hz)wOSU+!mu57bnotay@u+AwmTh^)! zUyI2o;AFm>1wU7^(AIZz7PHaR)$7z>j-a(H>_5pgs)uQLe-t*s4IPL{%L_A2aD#UY zw8N`|MF{7C)Byt_UvPJ>YUvX=J=n=7PG61;9Hd1zeZS7+#GPB7_}tmHk2M<19JEAbk(MAut+>wfaf&h_(pmeup>3> z_iCU|Pb*g|e`pWqQm>$KEk24N7YJhOAqyi1%Y(iLS1%E|w*Gt;(_ZIE)PWVk!a zDP(Izjt{bvaVJ74lW~B#yM}P6`_f#Ri!HZ^AW@MNsa1?=>}0xJzHOJYc{rQe_TFdm z!e9D}?IL{eH^Fo>cjs@m&YYfUUfLEFuq`1MhGejLe=UDJIy3o^7D*fykTyt~CnO^J zp4d&MjEbBxXp}SPlkL`bQ;{sz*I*~B>E`9hUp~%*aAE1|Gr4ETeqWz~ZHd}%P1Wyp zE5n9~@*-m|B>ho{6-h;olW|q)VF#`fvJKkg$U!vzLXeB`z4;!XLC|lx zS#OOpv>l@;ju02uc@GuL5PP>no2F}YL&DLKe_m(I0b$_s2ZE}GxK4YjAr0N!KwhQ# z`kE^$x2qv{cUhY#Z)*%Zh4v#w1MXNTkReq!gI7tq^5)*}@TaQUd8NQhYD}XJ(VNj2 zdvpEB;CpgHXU!VKJ!Qut1;^G$G7r^I(+u!=f^@=zdf;4r$cxe!iS-^Z$qxMPfHRWC zfB36uMDmkSUVe~cy#wL;KA5s5LzG}vF?{upHccLJdA{(9Z7 zLB8cf68^W<1#VV$LHCiG*pSW=e|q)LxJswIl9b3OtLwfKKIq!ZGwOy{mp#1BDeT=r zBMjABNO+x3a}~RThNLOD;w<#0cy+0q(RjQN)9LXZu*+I}lVo z89P7SS1(i+f?z5VtaEp!vRNZ-RnHXsp&&^tBUvXtZa6)Ap+S}9NQYcAXTZ+Y30i`z zX|AcO>h?B^tyZb5VypamQQC3+e_*IkWt4HvEqm}J>1h($e7}a&uJal;^+5=R5wclw$d)0k;aK=T+fvWUDYIsj| zk=7`+b~r<6XTS6gQa^K-CF!y#chhS-L6?&If{A0h(dgBxYRo6aXvYo3(5$3LSm^v9&`Ug(=#G#$+E@}`6dk2=Ab{$z*_LBvrTJks zyP5pvlO7n#kFb<0L+xl%K_i;T{{SHSUaRoX9B*BbTB7E#n0WoqSt>dakZQRE#x zb+=;YOO0)5T)0HJpiwnq<}&fF;O+B)pU(x}h-?pH_$L_Qt;^{vYTs_*^<844q5K(N pkvR(>?jg-COF#mJ%I6W{s!@ljCu$l$;BOCJ8;$?m{U4!}QReKrT2ru{C6VVfpz<&(ty~kp)SS(UXuv||biv1olFF*YmC5UtH-yXxzfU^isjv`I| z^_zEp7Z_j%f8QaT!A)j>K4(XiWjF~iiib5i_zP-37!fXN8sAWh7)AnzI}#IyBSC0} zl5l5+nqqOJ@t|+C3NyoV<9(We4Ds|xs=pSq*J4Z-k6X#g8Gp?&6DNBjisLZFoTCE{ zp(##ASv(=UbkivmG~_so$7nEoARIhq>=CCNj}uDi2mTeqavjP-b@_le9tz+(REa!d zE=Y!Cv|2%x!_?!vUhGX@CG@{XaNXkUY>_AMIqujtW_TF8BN0s zrOrZ8f)NX2ynjbUB0?z}BY~V%)arf5Cua}DIAW(b8KQ~D*O81p>ZZ)UW;)20k9Ri$ZlRyF-5Zh6I!Zx@T|NH#s z+W*_R+mmbp9Zfa9I|-7*sq+rZ(q!_&^DPL0R>a)&eenTknQsdVZSDHgAE8 zM$S0=cZiP*7LkD8g^1@6L+~6Gp z?eJ=25yH76wZTBh7u=nzj`Rua9_-|_!n-npq!{x2O=Kq%E?@0iQzjwoXhekJnEuLJ zX?34`i`msh@GVO1w-MG9HwRoOMlA{Y7)lSY0J(dAx@uE5SR@`Tz;l{$d?URK*pV9c zYc8zk}Ek24N7YJhOAqJWHG?(iLS1%E|w*Gt>4U+aTpo$#8d; zQ^?kc93SLK#+?YIOvVA`?i#|O?n`rNF1B1Ef<#49q*gJev6Ja?`L{R8^U|`YfNcpmF(iY3#cTQU=*;9tS|o8;K-wT_o{)&> zdtx`4GAeS);GmqrIoWQ0Hxd6{N>|32p5*VK9hU8?DzE<*p{fhYpUMY zxxBPE3qhKIRWFW?ESmFBP&ZPBzaTBqd>jix3r4#~cCmHl{~|wC`>KtvP)_dkR|;Ij ze+eF`Ncy7?E0T&FC*!Kp!wy^}WE-@}k%MUbg&-H>d-FX&gP@;s zGv69zXgfwx93d{Q^ByXgA@(kZHci*)hJ>SkBfZX;1H!=N3xcYKxK4YjAr0N!KwhQ# z`kE^$m#ZOnS6Q1VZ)*%Zh2uwx2HdewAVaEd2CtHI<;}g{;iszFd8NQhYD}XJ(VNj2 zdvo1n@I5)9GiMFrp0Z<+f@AAFnMT#sGy{B|Af51_9ynJY@}l%bV!a1UvID<6;EZH{ zG5%^AQMD>TU;YH75R#(q?e;T4Xv1 zxc8zT8fK5<8Um%``X$c8)jiindUn(ji%-hlrQL99UZAXiKrx#sZ}O|w%Jyte4h56L z_RX^z*(3*fcgdThXo=Nwgcry+7a%Tw7)=^#g`k5X5@U>Mu)n_jG06V!1VG>Y^}1h! ze9MO<{BNrZ+^jqW-A8I*Lpn?R>D52uDxLC5QX-?QuKP~-pldIWs2g5g_V7HXuyzNH zFjQ|L;dMUERqPHLlBVE_v(TI3)unQh;~|}u#Pqs@Wiks5(1WD}z0v^ni*U?;2pXK= zwL)=IFxo=Pv#Y>3^J~{<+(Y3NqP$VHs7xyHF=aW=vqBr0rgH>Sa-i}(pdexrmk9gJW(f}M^&R1 zFy~BOTEx}V=`I@&RL9!}_JYQRg1IXvm*)|mcf|#kr7z(rEJD~B1R}|Q1!ehtI6CwM zOK&HpgH??d6tW0w%EQTwM0l-OAGEO9NaKD-lbBj6iwOXVG( zs<=^?t;1TY^2;#qJ3g6z;3=ssBrJ4(5UBs3N_0m^9BnKKFp7@SIS@eg*lf$OvO4^*8r@8Or%4YC