mirror of
https://github.com/markqvist/Reticulum.git
synced 2024-11-22 13:40:19 +00:00
Compare commits
8 Commits
e18f6d2969
...
8d96673bec
Author | SHA1 | Date | |
---|---|---|---|
|
8d96673bec | ||
|
62a13eb0e8 | ||
|
10d03753b5 | ||
|
f19b87759f | ||
|
04f009f57c | ||
|
78253093c7 | ||
|
63d54dbecb | ||
|
32922868b9 |
@ -39,7 +39,7 @@ import RNS
|
|||||||
RNS.logtimefmt = "%H:%M:%S"
|
RNS.logtimefmt = "%H:%M:%S"
|
||||||
RNS.compact_log_fmt = True
|
RNS.compact_log_fmt = True
|
||||||
|
|
||||||
program_version = "2.0.0"
|
program_version = "2.1.0"
|
||||||
eth_addr = "0x81F7B979fEa6134bA9FD5c701b3501A2e61E897a"
|
eth_addr = "0x81F7B979fEa6134bA9FD5c701b3501A2e61E897a"
|
||||||
btc_addr = "3CPmacGm34qYvR6XWLVEJmi2aNe3PZqUuq"
|
btc_addr = "3CPmacGm34qYvR6XWLVEJmi2aNe3PZqUuq"
|
||||||
xmr_addr = "87HcDx6jRSkMQ9nPRd5K9hGGpZLn2s7vWETjMaVM5KfV4TD36NcYa8J8WSxhTSvBzzFpqDwp2fg5GX2moZ7VAP9QMZCZGET"
|
xmr_addr = "87HcDx6jRSkMQ9nPRd5K9hGGpZLn2s7vWETjMaVM5KfV4TD36NcYa8J8WSxhTSvBzzFpqDwp2fg5GX2moZ7VAP9QMZCZGET"
|
||||||
@ -842,7 +842,7 @@ class RNode():
|
|||||||
|
|
||||||
selected_version = None
|
selected_version = None
|
||||||
selected_hash = None
|
selected_hash = None
|
||||||
firmware_version_url = "https://unsigned.io/firmware/latest/?variant="
|
firmware_version_url = "https://unsigned.io/firmware/latest/?v="+program_version+"&variant="
|
||||||
def ensure_firmware_file(fw_filename):
|
def ensure_firmware_file(fw_filename):
|
||||||
global selected_version, selected_hash, upd_nocheck
|
global selected_version, selected_hash, upd_nocheck
|
||||||
try:
|
try:
|
||||||
@ -898,7 +898,7 @@ def ensure_firmware_file(fw_filename):
|
|||||||
RNS.log("No release hash found for "+fw_filename+". The firmware integrity could not be verified.")
|
RNS.log("No release hash found for "+fw_filename+". The firmware integrity could not be verified.")
|
||||||
exit(97)
|
exit(97)
|
||||||
|
|
||||||
RNS.log("Veryfying firmware integrity...")
|
RNS.log("Verifying firmware integrity...")
|
||||||
fw_file = open(UPD_DIR+"/"+selected_version+"/"+fw_filename, "rb")
|
fw_file = open(UPD_DIR+"/"+selected_version+"/"+fw_filename, "rb")
|
||||||
expected_hash = bytes.fromhex(selected_hash)
|
expected_hash = bytes.fromhex(selected_hash)
|
||||||
file_hash = hashlib.sha256(fw_file.read()).hexdigest()
|
file_hash = hashlib.sha256(fw_file.read()).hexdigest()
|
||||||
@ -1053,9 +1053,12 @@ def main():
|
|||||||
from cryptography.hazmat.primitives.asymmetric import padding
|
from cryptography.hazmat.primitives.asymmetric import padding
|
||||||
|
|
||||||
if args.autoinstall:
|
if args.autoinstall:
|
||||||
print("\nHello!\n\nThis guide will help you install the RNode firmware on supported")
|
clear = lambda: os.system('clear')
|
||||||
print("and homebrew devices. Please connect the device you wish to set\nup now. Hit enter when it is connected.")
|
clear()
|
||||||
input()
|
if not args.port:
|
||||||
|
print("\nHello!\n\nThis guide will help you install the RNode firmware on supported")
|
||||||
|
print("and homebrew devices. Please connect the device you wish to set\nup now. Hit enter when it is connected.")
|
||||||
|
input()
|
||||||
|
|
||||||
global squashvw
|
global squashvw
|
||||||
squashvw = True
|
squashvw = True
|
||||||
@ -1073,7 +1076,7 @@ def main():
|
|||||||
print(" ["+str(pi)+"] "+str(port.device)+" ("+str(port.product)+", "+str(port.serial_number)+")")
|
print(" ["+str(pi)+"] "+str(port.device)+" ("+str(port.product)+", "+str(port.serial_number)+")")
|
||||||
pi += 1
|
pi += 1
|
||||||
|
|
||||||
print("\nEnter the number of the serial port your device is connected to: ", end="")
|
print("\nEnter the number of the serial port your device is connected to:\n? ", end="")
|
||||||
try:
|
try:
|
||||||
c_port = int(input())
|
c_port = int(input())
|
||||||
if c_port < 1 or c_port > len(ports):
|
if c_port < 1 or c_port > len(ports):
|
||||||
@ -1092,6 +1095,7 @@ def main():
|
|||||||
port_product = selected_port.product
|
port_product = selected_port.product
|
||||||
port_serialno = selected_port.serial_number
|
port_serialno = selected_port.serial_number
|
||||||
|
|
||||||
|
clear()
|
||||||
print("\nOk, using device on "+str(port_path)+" ("+str(port_product)+", "+str(port_serialno)+")")
|
print("\nOk, using device on "+str(port_path)+" ("+str(port_product)+", "+str(port_serialno)+")")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -1137,6 +1141,8 @@ def main():
|
|||||||
print("wipe the current EEPROM. See the help for more info.\n\nExiting now.")
|
print("wipe the current EEPROM. See the help for more info.\n\nExiting now.")
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
print("\n---------------------------------------------------------------------------")
|
||||||
|
print(" Device Selection")
|
||||||
if rnode.detected:
|
if rnode.detected:
|
||||||
print("\nThe device seems to have an RNode firmware installed, but it was not")
|
print("\nThe device seems to have an RNode firmware installed, but it was not")
|
||||||
print("provisioned correctly, or it is corrupt. We are going to reinstall the")
|
print("provisioned correctly, or it is corrupt. We are going to reinstall the")
|
||||||
@ -1144,14 +1150,28 @@ def main():
|
|||||||
else:
|
else:
|
||||||
print("\nIt looks like this is a fresh device with no RNode firmware.")
|
print("\nIt looks like this is a fresh device with no RNode firmware.")
|
||||||
|
|
||||||
|
print("")
|
||||||
print("What kind of device is this?\n")
|
print("What kind of device is this?\n")
|
||||||
print("[1] RNode from Unsigned.io")
|
print("[1] A specific kind of RNode")
|
||||||
|
print(" .")
|
||||||
|
print(" / \\ Select this option if you have an RNode of a specific")
|
||||||
|
print(" | type, built from a recipe or bought from a vendor.")
|
||||||
|
print("")
|
||||||
print("[2] Homebrew RNode")
|
print("[2] Homebrew RNode")
|
||||||
print("[3] LilyGO T-Beam")
|
print(" .")
|
||||||
print("[4] LilyGO LoRa32 v2.0")
|
print(" / \\ Select this option if you have put toghether an RNode")
|
||||||
print("[5] LilyGO LoRa32 v2.1")
|
print(" | of your own design, or if you are prototyping one.")
|
||||||
|
print("")
|
||||||
|
print("[3] LilyGO LoRa32 v2.1 (aka T3 v1.6.1)")
|
||||||
|
print("[4] LilyGO LoRa32 v2.0 (aka T3 v1.6)")
|
||||||
|
print("[5] LilyGO T-Beam")
|
||||||
print("[6] Heltec LoRa32 v2")
|
print("[6] Heltec LoRa32 v2")
|
||||||
print("\n? ", end="")
|
print(" .")
|
||||||
|
print(" / \\ Select one of these options if you want to easily turn")
|
||||||
|
print(" | a supported development board into an RNode.")
|
||||||
|
print("")
|
||||||
|
print("---------------------------------------------------------------------------")
|
||||||
|
print("\nEnter the number that matches your device type:\n? ", end="")
|
||||||
|
|
||||||
selected_product = None
|
selected_product = None
|
||||||
try:
|
try:
|
||||||
@ -1162,18 +1182,32 @@ def main():
|
|||||||
selected_product = ROM.PRODUCT_RNODE
|
selected_product = ROM.PRODUCT_RNODE
|
||||||
elif c_dev == 2:
|
elif c_dev == 2:
|
||||||
selected_product = ROM.PRODUCT_HMBRW
|
selected_product = ROM.PRODUCT_HMBRW
|
||||||
|
clear()
|
||||||
print("")
|
print("")
|
||||||
print("---------------------------------------------------------------------------")
|
print("---------------------------------------------------------------------------")
|
||||||
|
print(" Homebrew RNode Installer")
|
||||||
|
print("")
|
||||||
|
print("This option allows you to install and provision the RNode firmware on a")
|
||||||
|
print("custom board design, or a custom device created by coupling a generic")
|
||||||
|
print("development board with a supported transceiver module.")
|
||||||
|
print("")
|
||||||
print("Important! Using RNode firmware on homebrew devices should currently be")
|
print("Important! Using RNode firmware on homebrew devices should currently be")
|
||||||
print("considered experimental. It is not intended for production or critical use.")
|
print("considered experimental. It is not intended for production or critical use.")
|
||||||
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
||||||
print("who would like to experiment with it. Hit enter to continue.")
|
print("who would like to experiment with it. Hit enter to continue.")
|
||||||
print("---------------------------------------------------------------------------")
|
print("---------------------------------------------------------------------------")
|
||||||
input()
|
input()
|
||||||
elif c_dev == 3:
|
elif c_dev == 5:
|
||||||
selected_product = ROM.PRODUCT_TBEAM
|
selected_product = ROM.PRODUCT_TBEAM
|
||||||
|
clear()
|
||||||
print("")
|
print("")
|
||||||
print("---------------------------------------------------------------------------")
|
print("---------------------------------------------------------------------------")
|
||||||
|
print(" T-Beam RNode Installer")
|
||||||
|
print("")
|
||||||
|
print("The RNode firmware can currently be installed on T-Beam devices using the")
|
||||||
|
print("SX1276 and SX1278 transceiver chips. Support for devices with the newer")
|
||||||
|
print("SX1262 and SX1268 chips is in development.")
|
||||||
|
print("")
|
||||||
print("Important! Using RNode firmware on T-Beam devices should currently be")
|
print("Important! Using RNode firmware on T-Beam devices should currently be")
|
||||||
print("considered experimental. It is not intended for production or critical use.")
|
print("considered experimental. It is not intended for production or critical use.")
|
||||||
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
||||||
@ -1182,18 +1216,24 @@ def main():
|
|||||||
input()
|
input()
|
||||||
elif c_dev == 4:
|
elif c_dev == 4:
|
||||||
selected_product = ROM.PRODUCT_T32_20
|
selected_product = ROM.PRODUCT_T32_20
|
||||||
|
clear()
|
||||||
print("")
|
print("")
|
||||||
print("---------------------------------------------------------------------------")
|
print("---------------------------------------------------------------------------")
|
||||||
|
print(" LilyGO LoRa32 v2.0 RNode Installer")
|
||||||
|
print("")
|
||||||
print("Important! Using RNode firmware on LoRa32 devices should currently be")
|
print("Important! Using RNode firmware on LoRa32 devices should currently be")
|
||||||
print("considered experimental. It is not intended for production or critical use.")
|
print("considered experimental. It is not intended for production or critical use.")
|
||||||
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
||||||
print("who would like to experiment with it. Hit enter to continue.")
|
print("who would like to experiment with it. Hit enter to continue.")
|
||||||
print("---------------------------------------------------------------------------")
|
print("---------------------------------------------------------------------------")
|
||||||
input()
|
input()
|
||||||
elif c_dev == 5:
|
elif c_dev == 3:
|
||||||
selected_product = ROM.PRODUCT_T32_21
|
selected_product = ROM.PRODUCT_T32_21
|
||||||
|
clear()
|
||||||
print("")
|
print("")
|
||||||
print("---------------------------------------------------------------------------")
|
print("---------------------------------------------------------------------------")
|
||||||
|
print(" LilyGO LoRa32 v2.1 RNode Installer")
|
||||||
|
print("")
|
||||||
print("Important! Using RNode firmware on LoRa32 devices should currently be")
|
print("Important! Using RNode firmware on LoRa32 devices should currently be")
|
||||||
print("considered experimental. It is not intended for production or critical use.")
|
print("considered experimental. It is not intended for production or critical use.")
|
||||||
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
print("The currently supplied firmware is provided AS-IS as a courtesey to those")
|
||||||
@ -1202,8 +1242,11 @@ def main():
|
|||||||
input()
|
input()
|
||||||
elif c_dev == 6:
|
elif c_dev == 6:
|
||||||
selected_product = ROM.PRODUCT_H32_V2
|
selected_product = ROM.PRODUCT_H32_V2
|
||||||
|
clear()
|
||||||
print("")
|
print("")
|
||||||
print("---------------------------------------------------------------------------")
|
print("---------------------------------------------------------------------------")
|
||||||
|
print(" Heltec LoRa32 v2.0 RNode Installer")
|
||||||
|
print("")
|
||||||
print("Important! Using RNode firmware on Heltec devices should currently be")
|
print("Important! Using RNode firmware on Heltec devices should currently be")
|
||||||
print("considered experimental. It is not intended for production or critical use.")
|
print("considered experimental. It is not intended for production or critical use.")
|
||||||
print("")
|
print("")
|
||||||
@ -1269,39 +1312,39 @@ def main():
|
|||||||
elif selected_product == ROM.PRODUCT_RNODE:
|
elif selected_product == ROM.PRODUCT_RNODE:
|
||||||
selected_mcu = ROM.MCU_1284P
|
selected_mcu = ROM.MCU_1284P
|
||||||
print("\nWhat model is this RNode?\n")
|
print("\nWhat model is this RNode?\n")
|
||||||
print("[1] Original v1.x RNode, 410 - 525 MHz")
|
print("[1] Handheld v2.x RNode, 410 - 525 MHz")
|
||||||
print("[2] Original v1.x RNode, 820 - 1020 MHz")
|
print("[2] Handheld v2.x RNode, 820 - 1020 MHz")
|
||||||
print("[3] Prototype v2 RNode, 410 - 525 MHz")
|
print("[3] Original v1.x RNode, 410 - 525 MHz")
|
||||||
print("[4] Prototype v2 RNode, 820 - 1020 MHz")
|
print("[4] Original v1.x RNode, 820 - 1020 MHz")
|
||||||
print("[5] RNode v2.x, 410 - 525 MHz")
|
# print("[5] Prototype v2 RNode, 410 - 525 MHz")
|
||||||
print("[6] RNode v2.x, 820 - 1020 MHz")
|
# print("[6] Prototype v2 RNode, 820 - 1020 MHz")
|
||||||
print("\n? ", end="")
|
print("\n? ", end="")
|
||||||
try:
|
try:
|
||||||
c_model = int(input())
|
c_model = int(input())
|
||||||
if c_model < 1 or c_model > 6:
|
if c_model < 1 or c_model > 6:
|
||||||
raise ValueError()
|
raise ValueError()
|
||||||
elif c_model == 1:
|
elif c_model == 3:
|
||||||
selected_model = ROM.MODEL_A4
|
selected_model = ROM.MODEL_A4
|
||||||
selected_platform = ROM.PLATFORM_AVR
|
selected_platform = ROM.PLATFORM_AVR
|
||||||
elif c_model == 2:
|
elif c_model == 4:
|
||||||
selected_model = ROM.MODEL_A9
|
selected_model = ROM.MODEL_A9
|
||||||
selected_platform = ROM.PLATFORM_AVR
|
selected_platform = ROM.PLATFORM_AVR
|
||||||
elif c_model == 3:
|
elif c_model == 1:
|
||||||
selected_model = ROM.MODEL_A3
|
|
||||||
selected_mcu = ROM.MCU_ESP32
|
|
||||||
selected_platform = ROM.PLATFORM_ESP32
|
|
||||||
elif c_model == 4:
|
|
||||||
selected_model = ROM.MODEL_A8
|
|
||||||
selected_mcu = ROM.MCU_ESP32
|
|
||||||
selected_platform = ROM.PLATFORM_ESP32
|
|
||||||
elif c_model == 5:
|
|
||||||
selected_model = ROM.MODEL_A2
|
selected_model = ROM.MODEL_A2
|
||||||
selected_mcu = ROM.MCU_ESP32
|
selected_mcu = ROM.MCU_ESP32
|
||||||
selected_platform = ROM.PLATFORM_ESP32
|
selected_platform = ROM.PLATFORM_ESP32
|
||||||
elif c_model == 6:
|
elif c_model == 2:
|
||||||
selected_model = ROM.MODEL_A7
|
selected_model = ROM.MODEL_A7
|
||||||
selected_mcu = ROM.MCU_ESP32
|
selected_mcu = ROM.MCU_ESP32
|
||||||
selected_platform = ROM.PLATFORM_ESP32
|
selected_platform = ROM.PLATFORM_ESP32
|
||||||
|
# elif c_model == 5:
|
||||||
|
# selected_model = ROM.MODEL_A3
|
||||||
|
# selected_mcu = ROM.MCU_ESP32
|
||||||
|
# selected_platform = ROM.PLATFORM_ESP32
|
||||||
|
# elif c_model == 6:
|
||||||
|
# selected_model = ROM.MODEL_A8
|
||||||
|
# selected_mcu = ROM.MCU_ESP32
|
||||||
|
# selected_platform = ROM.PLATFORM_ESP32
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("That model does not exist, exiting now.")
|
print("That model does not exist, exiting now.")
|
||||||
exit()
|
exit()
|
||||||
@ -1432,9 +1475,14 @@ def main():
|
|||||||
print("")
|
print("")
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
print("\nOk, that should be all the information we need. Please confirm the following")
|
clear()
|
||||||
|
print("")
|
||||||
|
print("------------------------------------------------------------------------------")
|
||||||
|
print(" Installer Ready")
|
||||||
|
print("")
|
||||||
|
print("Ok, that should be all the information we need. Please confirm the following")
|
||||||
print("summary before proceeding. In the next step, the device will be flashed and")
|
print("summary before proceeding. In the next step, the device will be flashed and")
|
||||||
print("provisioned, so make that you are satisfied with your choices.\n")
|
print("provisioned, so make sure that you are satisfied with your choices.\n")
|
||||||
|
|
||||||
print("Serial port : "+str(selected_port.device))
|
print("Serial port : "+str(selected_port.device))
|
||||||
print("Device type : "+str(products[selected_product])+" "+str(models[selected_model][3]))
|
print("Device type : "+str(products[selected_product])+" "+str(models[selected_model][3]))
|
||||||
@ -1442,6 +1490,9 @@ def main():
|
|||||||
print("Device MCU : "+str(mcus[selected_mcu]))
|
print("Device MCU : "+str(mcus[selected_mcu]))
|
||||||
print("Firmware file : "+str(fw_filename))
|
print("Firmware file : "+str(fw_filename))
|
||||||
|
|
||||||
|
print("")
|
||||||
|
print("------------------------------------------------------------------------------")
|
||||||
|
|
||||||
print("\nIs the above correct? [y/N] ", end="")
|
print("\nIs the above correct? [y/N] ", end="")
|
||||||
try:
|
try:
|
||||||
c_ok = input().lower()
|
c_ok = input().lower()
|
||||||
@ -1619,144 +1670,297 @@ def main():
|
|||||||
RNS.log("Please install \""+flasher+"\" and try again.")
|
RNS.log("Please install \""+flasher+"\" and try again.")
|
||||||
exit()
|
exit()
|
||||||
elif platform == ROM.PLATFORM_ESP32:
|
elif platform == ROM.PLATFORM_ESP32:
|
||||||
|
numeric_version = float(selected_version)
|
||||||
flasher = UPD_DIR+"/"+selected_version+"/esptool.py"
|
flasher = UPD_DIR+"/"+selected_version+"/esptool.py"
|
||||||
if which(flasher) is not None:
|
if which(flasher) is not None:
|
||||||
if fw_filename == "rnode_firmware_tbeam.zip":
|
if fw_filename == "rnode_firmware_tbeam.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "4MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.boot_app0",
|
"--flash_size", "4MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "4MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_tbeam.partitions",
|
||||||
|
]
|
||||||
elif fw_filename == "rnode_firmware_lora32v20.zip":
|
elif fw_filename == "rnode_firmware_lora32v20.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "4MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.boot_app0",
|
"--flash_size", "4MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "4MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v20.partitions",
|
||||||
|
]
|
||||||
elif fw_filename == "rnode_firmware_lora32v21.zip":
|
elif fw_filename == "rnode_firmware_lora32v21.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "4MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.boot_app0",
|
"--flash_size", "4MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "4MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_lora32v21.partitions",
|
||||||
|
]
|
||||||
elif fw_filename == "rnode_firmware_heltec32v2.zip":
|
elif fw_filename == "rnode_firmware_heltec32v2.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "8MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.boot_app0",
|
"--flash_size", "8MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "8MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_heltec32v2.partitions",
|
||||||
|
]
|
||||||
elif fw_filename == "rnode_firmware_featheresp32.zip":
|
elif fw_filename == "rnode_firmware_featheresp32.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "4MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.boot_app0",
|
"--flash_size", "4MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "4MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_featheresp32.partitions",
|
||||||
|
]
|
||||||
elif fw_filename == "rnode_firmware_esp32_generic.zip":
|
elif fw_filename == "rnode_firmware_esp32_generic.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "4MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.boot_app0",
|
"--flash_size", "4MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "4MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_esp32_generic.partitions",
|
||||||
|
]
|
||||||
elif fw_filename == "rnode_firmware_ng20.zip":
|
elif fw_filename == "rnode_firmware_ng20.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "4MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.boot_app0",
|
"--flash_size", "4MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "4MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng20.partitions",
|
||||||
|
]
|
||||||
elif fw_filename == "rnode_firmware_ng21.zip":
|
elif fw_filename == "rnode_firmware_ng21.zip":
|
||||||
return [
|
if numeric_version >= 1.55:
|
||||||
flasher,
|
return [
|
||||||
"--chip", "esp32",
|
flasher,
|
||||||
"--port", args.port,
|
"--chip", "esp32",
|
||||||
"--baud", "921600",
|
"--port", args.port,
|
||||||
"--before", "default_reset",
|
"--baud", "921600",
|
||||||
"--after", "hard_reset",
|
"--before", "default_reset",
|
||||||
"write_flash", "-z",
|
"--after", "hard_reset",
|
||||||
"--flash_mode", "dio",
|
"write_flash", "-z",
|
||||||
"--flash_freq", "80m",
|
"--flash_mode", "dio",
|
||||||
"--flash_size", "4MB",
|
"--flash_freq", "80m",
|
||||||
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.boot_app0",
|
"--flash_size", "4MB",
|
||||||
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.bootloader",
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.boot_app0",
|
||||||
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.bin",
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.bootloader",
|
||||||
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.partitions",
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.bin",
|
||||||
]
|
"0x210000",UPD_DIR+"/"+selected_version+"/console_image.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.partitions",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
return [
|
||||||
|
flasher,
|
||||||
|
"--chip", "esp32",
|
||||||
|
"--port", args.port,
|
||||||
|
"--baud", "921600",
|
||||||
|
"--before", "default_reset",
|
||||||
|
"--after", "hard_reset",
|
||||||
|
"write_flash", "-z",
|
||||||
|
"--flash_mode", "dio",
|
||||||
|
"--flash_freq", "80m",
|
||||||
|
"--flash_size", "4MB",
|
||||||
|
"0xe000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.boot_app0",
|
||||||
|
"0x1000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.bootloader",
|
||||||
|
"0x10000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.bin",
|
||||||
|
"0x8000", UPD_DIR+"/"+selected_version+"/rnode_firmware_ng21.partitions",
|
||||||
|
]
|
||||||
else:
|
else:
|
||||||
RNS.log("No flasher available for this board, cannot install firmware.")
|
RNS.log("No flasher available for this board, cannot install firmware.")
|
||||||
else:
|
else:
|
||||||
@ -1881,8 +2085,10 @@ def main():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
RNS.log("Checking firmware file availability...")
|
RNS.log("Checking firmware file availability...")
|
||||||
|
fw_file_ensured = False
|
||||||
if selected_version == None:
|
if selected_version == None:
|
||||||
ensure_firmware_file(fw_filename)
|
ensure_firmware_file(fw_filename)
|
||||||
|
fw_file_ensured = True
|
||||||
|
|
||||||
if not force_update:
|
if not force_update:
|
||||||
if rnode.version == selected_version:
|
if rnode.version == selected_version:
|
||||||
@ -1905,7 +2111,7 @@ def main():
|
|||||||
RNS.log("Override with -U option to install anyway")
|
RNS.log("Override with -U option to install anyway")
|
||||||
exit(0)
|
exit(0)
|
||||||
|
|
||||||
if selected_version != None:
|
if not fw_file_ensured and selected_version != None:
|
||||||
ensure_firmware_file(fw_filename)
|
ensure_firmware_file(fw_filename)
|
||||||
|
|
||||||
if fw_filename.endswith(".zip"):
|
if fw_filename.endswith(".zip"):
|
||||||
@ -2255,6 +2461,26 @@ def main():
|
|||||||
print("")
|
print("")
|
||||||
print("https://markqvist.github.io/Reticulum/manual/gettingstartedfast.html")
|
print("https://markqvist.github.io/Reticulum/manual/gettingstartedfast.html")
|
||||||
print("")
|
print("")
|
||||||
|
print("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *")
|
||||||
|
print(" Important! ")
|
||||||
|
print("")
|
||||||
|
print("ESP32-based RNodes are created with the RNode Bootstrap Console on-board.")
|
||||||
|
print("")
|
||||||
|
print("This repository is hosted directly on the RNode, and contains a wealth of")
|
||||||
|
print("information, software and tools.")
|
||||||
|
print("")
|
||||||
|
print("The RNode Bootstrap Console also contains everything needed to build")
|
||||||
|
print("and replicate RNodes, including detailed build recipes, 3D-printable")
|
||||||
|
print("cases, and copies of the source code for both the RNode Firmware,")
|
||||||
|
print("Reticulum and other utilities.")
|
||||||
|
print("")
|
||||||
|
print("To activate the RNode Bootstrap Console, power up your RNode and press")
|
||||||
|
print("the reset button twice with a one second interval. The RNode will now")
|
||||||
|
print("reboot into console mode, and activate a WiFi access point for you to")
|
||||||
|
print("connect to. The console is then reachable at: http://10.0.0.1")
|
||||||
|
print("")
|
||||||
|
print("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *")
|
||||||
|
print("")
|
||||||
print("Thank you for using this utility! Please help the project by")
|
print("Thank you for using this utility! Please help the project by")
|
||||||
print("contributing code and reporting bugs, or by donating!")
|
print("contributing code and reporting bugs, or by donating!")
|
||||||
print("")
|
print("")
|
||||||
|
@ -409,7 +409,8 @@ install one or more dependencies
|
|||||||
|
|
||||||
On more unusual systems, and in some rare cases, it might not be possible to
|
On more unusual systems, and in some rare cases, it might not be possible to
|
||||||
install or even compile one or more of the above modules. In such situations,
|
install or even compile one or more of the above modules. In such situations,
|
||||||
you can use the ``rnspure`` package instead of the ``rns`` package. The ``rnspure``
|
you can use the ``rnspure`` package instead of the ``rns`` package, or use ``pip``
|
||||||
|
with the ``--no-dependencies`` command-line option. The ``rnspure``
|
||||||
package requires no external dependencies for installation. Please note that the
|
package requires no external dependencies for installation. Please note that the
|
||||||
actual contents of the ``rns`` and ``rnspure`` packages are *completely identical*.
|
actual contents of the ``rns`` and ``rnspure`` packages are *completely identical*.
|
||||||
The only difference is that the ``rnspure`` package lists no dependencies required
|
The only difference is that the ``rnspure`` package lists no dependencies required
|
||||||
|
@ -557,7 +557,8 @@ here at a later point. Until then you can use the <a class="reference external"
|
|||||||
install one or more dependencies</p>
|
install one or more dependencies</p>
|
||||||
<p>On more unusual systems, and in some rare cases, it might not be possible to
|
<p>On more unusual systems, and in some rare cases, it might not be possible to
|
||||||
install or even compile one or more of the above modules. In such situations,
|
install or even compile one or more of the above modules. In such situations,
|
||||||
you can use the <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> package instead of the <code class="docutils literal notranslate"><span class="pre">rns</span></code> package. The <code class="docutils literal notranslate"><span class="pre">rnspure</span></code>
|
you can use the <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> package instead of the <code class="docutils literal notranslate"><span class="pre">rns</span></code> package, or use <code class="docutils literal notranslate"><span class="pre">pip</span></code>
|
||||||
|
with the <code class="docutils literal notranslate"><span class="pre">--no-dependencies</span></code> command-line option. The <code class="docutils literal notranslate"><span class="pre">rnspure</span></code>
|
||||||
package requires no external dependencies for installation. Please note that the
|
package requires no external dependencies for installation. Please note that the
|
||||||
actual contents of the <code class="docutils literal notranslate"><span class="pre">rns</span></code> and <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> packages are <em>completely identical</em>.
|
actual contents of the <code class="docutils literal notranslate"><span class="pre">rns</span></code> and <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> packages are <em>completely identical</em>.
|
||||||
The only difference is that the <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> package lists no dependencies required
|
The only difference is that the <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> package lists no dependencies required
|
||||||
|
@ -409,7 +409,8 @@ install one or more dependencies
|
|||||||
|
|
||||||
On more unusual systems, and in some rare cases, it might not be possible to
|
On more unusual systems, and in some rare cases, it might not be possible to
|
||||||
install or even compile one or more of the above modules. In such situations,
|
install or even compile one or more of the above modules. In such situations,
|
||||||
you can use the ``rnspure`` package instead of the ``rns`` package. The ``rnspure``
|
you can use the ``rnspure`` package instead of the ``rns`` package, or use ``pip``
|
||||||
|
with the ``--no-dependencies`` command-line option. The ``rnspure``
|
||||||
package requires no external dependencies for installation. Please note that the
|
package requires no external dependencies for installation. Please note that the
|
||||||
actual contents of the ``rns`` and ``rnspure`` packages are *completely identical*.
|
actual contents of the ``rns`` and ``rnspure`` packages are *completely identical*.
|
||||||
The only difference is that the ``rnspure`` package lists no dependencies required
|
The only difference is that the ``rnspure`` package lists no dependencies required
|
||||||
|
Loading…
Reference in New Issue
Block a user