1diff --git a/RNS/Utilities/rnodeconf.py b/RNS/Utilities/rnodeconf.py
2index 566df60..8f6201d 100755
3--- a/RNS/Utilities/rnodeconf.py
4+++ b/RNS/Utilities/rnodeconf.py
5@@ -1453,18 +1453,17 @@ def main():
6 print("\nReady to extract firmware images from the RNode")
7 print("Press enter to start the extraction process")
8 input()
9- extract_recovery_esptool()
10
11 hash_f = open(EXT_DIR+"/extracted_rnode_firmware.version", "wb")
12 hash_f.write(v_str.encode("utf-8"))
13 hash_f.close()
14
15 extraction_parts = [
16- ("bootloader", "python \""+CNF_DIR+"/recovery_esptool.py\" --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x1000 0x4650 \""+EXT_DIR+"/extracted_rnode_firmware.bootloader\""),
17- ("partition table", "python \""+CNF_DIR+"/recovery_esptool.py\" --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x8000 0xC00 \""+EXT_DIR+"/extracted_rnode_firmware.partitions\""),
18- ("app boot", "python \""+CNF_DIR+"/recovery_esptool.py\" --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0xe000 0x2000 \""+EXT_DIR+"/extracted_rnode_firmware.boot_app0\""),
19- ("application image", "python \""+CNF_DIR+"/recovery_esptool.py\" --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x10000 0x200000 \""+EXT_DIR+"/extracted_rnode_firmware.bin\""),
20- ("console image", "python \""+CNF_DIR+"/recovery_esptool.py\" --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x210000 0x1F0000 \""+EXT_DIR+"/extracted_console_image.bin\""),
21+ ("bootloader", "@esptool@ --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x1000 0x4650 \""+EXT_DIR+"/extracted_rnode_firmware.bootloader\""),
22+ ("partition table", "@esptool@ --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x8000 0xC00 \""+EXT_DIR+"/extracted_rnode_firmware.partitions\""),
23+ ("app boot", "@esptool@ --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0xe000 0x2000 \""+EXT_DIR+"/extracted_rnode_firmware.boot_app0\""),
24+ ("application image", "@esptool@ --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x10000 0x200000 \""+EXT_DIR+"/extracted_rnode_firmware.bin\""),
25+ ("console image", "@esptool@ --chip esp32 --port "+port_path+" --baud "+args.baud_flash+" --before default_reset --after hard_reset read_flash 0x210000 0x1F0000 \""+EXT_DIR+"/extracted_console_image.bin\""),
26 ]
27 import subprocess, shlex
28 for part, command in extraction_parts:
29@@ -2290,25 +2289,12 @@ def main():
30 graceful_exit()
31 elif platform == ROM.PLATFORM_ESP32:
32 numeric_version = float(selected_version)
33- flasher_dir = UPD_DIR+"/"+selected_version
34- flasher = flasher_dir+"/esptool.py"
35- if not os.path.isfile(flasher):
36- if os.path.isfile(CNF_DIR+"/recovery_esptool.py"):
37- import shutil
38- if not os.path.isdir(flasher_dir):
39- os.makedirs(flasher_dir)
40- shutil.copy(CNF_DIR+"/recovery_esptool.py", flasher)
41- RNS.log("No flasher present, using recovery flasher to write firmware to device")
42-
43- if os.path.isfile(flasher):
44- import stat
45- os.chmod(flasher, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP)
46
47- if which(flasher) is not None:
48+ if True:
49 if fw_filename == "rnode_firmware_tbeam.zip":
50 if numeric_version >= 1.55:
51 return [
52- sys.executable, flasher,
53+ "@esptool@",
54 "--chip", "esp32",
55 "--port", args.port,
56 "--baud", args.baud_flash,
57@@ -2326,7 +2312,7 @@ def main():
58 ]
59 else:
60 return [
61- sys.executable, flasher,
62+ "@esptool@",
63 "--chip", "esp32",
64 "--port", args.port,
65 "--baud", args.baud_flash,
66@@ -2344,7 +2330,7 @@ def main():
67 elif fw_filename == "rnode_firmware_tbeam_sx1262.zip":
68 if numeric_version >= 1.55:
69 return [
70- sys.executable, flasher,
71+ "@esptool@",
72 "--chip", "esp32",
73 "--port", args.port,
74 "--baud", args.baud_flash,
75@@ -2362,7 +2348,7 @@ def main():
76 ]
77 else:
78 return [
79- sys.executable, flasher,
80+ "@esptool@",
81 "--chip", "esp32",
82 "--port", args.port,
83 "--baud", args.baud_flash,
84@@ -2380,7 +2366,7 @@ def main():
85 elif fw_filename == "rnode_firmware_lora32v10.zip":
86 if numeric_version >= 1.59:
87 return [
88- sys.executable, flasher,
89+ "@esptool@",
90 "--chip", "esp32",
91 "--port", args.port,
92 "--baud", args.baud_flash,
93@@ -2398,7 +2384,7 @@ def main():
94 ]
95 else:
96 return [
97- sys.executable, flasher,
98+ "@esptool@",
99 "--chip", "esp32",
100 "--port", args.port,
101 "--baud", args.baud_flash,
102@@ -2416,7 +2402,7 @@ def main():
103 elif fw_filename == "rnode_firmware_lora32v20.zip":
104 if numeric_version >= 1.55:
105 return [
106- sys.executable, flasher,
107+ "@esptool@",
108 "--chip", "esp32",
109 "--port", args.port,
110 "--baud", args.baud_flash,
111@@ -2434,7 +2420,7 @@ def main():
112 ]
113 else:
114 return [
115- sys.executable, flasher,
116+ "@esptool@",
117 "--chip", "esp32",
118 "--port", args.port,
119 "--baud", args.baud_flash,
120@@ -2452,7 +2438,7 @@ def main():
121 elif fw_filename == "rnode_firmware_lora32v21.zip":
122 if numeric_version >= 1.55:
123 return [
124- sys.executable, flasher,
125+ "@esptool@",
126 "--chip", "esp32",
127 "--port", args.port,
128 "--baud", args.baud_flash,
129@@ -2470,7 +2456,7 @@ def main():
130 ]
131 else:
132 return [
133- sys.executable, flasher,
134+ "@esptool@",
135 "--chip", "esp32",
136 "--port", args.port,
137 "--baud", args.baud_flash,
138@@ -2487,7 +2473,7 @@ def main():
139 ]
140 elif fw_filename == "rnode_firmware_lora32v21_tcxo.zip":
141 return [
142- sys.executable, flasher,
143+ "@esptool@",
144 "--chip", "esp32",
145 "--port", args.port,
146 "--baud", args.baud_flash,
147@@ -2506,7 +2492,7 @@ def main():
148 elif fw_filename == "rnode_firmware_heltec32v2.zip":
149 if numeric_version >= 1.55:
150 return [
151- sys.executable, flasher,
152+ "@esptool@",
153 "--chip", "esp32",
154 "--port", args.port,
155 "--baud", args.baud_flash,
156@@ -2524,7 +2510,7 @@ def main():
157 ]
158 else:
159 return [
160- sys.executable, flasher,
161+ "@esptool@",
162 "--chip", "esp32",
163 "--port", args.port,
164 "--baud", args.baud_flash,
165@@ -2541,7 +2527,7 @@ def main():
166 ]
167 elif fw_filename == "rnode_firmware_heltec32v3.zip":
168 return [
169- sys.executable, flasher,
170+ "@esptool@",
171 "--chip", "esp32-s3",
172 "--port", args.port,
173 "--baud", args.baud_flash,
174@@ -2559,7 +2545,7 @@ def main():
175 elif fw_filename == "rnode_firmware_featheresp32.zip":
176 if numeric_version >= 1.55:
177 return [
178- sys.executable, flasher,
179+ "@esptool@",
180 "--chip", "esp32",
181 "--port", args.port,
182 "--baud", args.baud_flash,
183@@ -2577,7 +2563,7 @@ def main():
184 ]
185 else:
186 return [
187- sys.executable, flasher,
188+ "@esptool@",
189 "--chip", "esp32",
190 "--port", args.port,
191 "--baud", args.baud_flash,
192@@ -2595,7 +2581,7 @@ def main():
193 elif fw_filename == "rnode_firmware_esp32_generic.zip":
194 if numeric_version >= 1.55:
195 return [
196- sys.executable, flasher,
197+ "@esptool@",
198 "--chip", "esp32",
199 "--port", args.port,
200 "--baud", args.baud_flash,
201@@ -2613,7 +2599,7 @@ def main():
202 ]
203 else:
204 return [
205- sys.executable, flasher,
206+ "@esptool@",
207 "--chip", "esp32",
208 "--port", args.port,
209 "--baud", args.baud_flash,
210@@ -2631,7 +2617,7 @@ def main():
211 elif fw_filename == "rnode_firmware_ng20.zip":
212 if numeric_version >= 1.55:
213 return [
214- sys.executable, flasher,
215+ "@esptool@",
216 "--chip", "esp32",
217 "--port", args.port,
218 "--baud", args.baud_flash,
219@@ -2649,7 +2635,7 @@ def main():
220 ]
221 else:
222 return [
223- sys.executable, flasher,
224+ "@esptool@",
225 "--chip", "esp32",
226 "--port", args.port,
227 "--baud", args.baud_flash,
228@@ -2667,7 +2653,7 @@ def main():
229 elif fw_filename == "rnode_firmware_ng21.zip":
230 if numeric_version >= 1.55:
231 return [
232- sys.executable, flasher,
233+ "@esptool@",
234 "--chip", "esp32",
235 "--port", args.port,
236 "--baud", args.baud_flash,
237@@ -2685,7 +2671,7 @@ def main():
238 ]
239 else:
240 return [
241- sys.executable, flasher,
242+ "@esptool@",
243 "--chip", "esp32",
244 "--port", args.port,
245 "--baud", args.baud_flash,
246@@ -2702,7 +2688,7 @@ def main():
247 ]
248 elif fw_filename == "rnode_firmware_t3s3.zip":
249 return [
250- sys.executable, flasher,
251+ "@esptool@",
252 "--chip", "esp32s3",
253 "--port", args.port,
254 "--baud", args.baud_flash,
255@@ -2720,7 +2706,7 @@ def main():
256 ]
257 elif fw_filename == "extracted_rnode_firmware.zip":
258 return [
259- sys.executable, flasher,
260+ "@esptool@",
261 "--chip", "esp32",
262 "--port", args.port,
263 "--baud", args.baud_flash,