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
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