@libs-scripts-mep/grav-fw-pvi 4.0.3 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compat.py +66 -0
- package/grav-fw-pvi.js +49 -13
- package/package.json +1 -1
package/compat.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import sys
|
|
3
|
+
import os
|
|
4
|
+
from importlib.metadata import version as get_version, PackageNotFoundError
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# Detecta se há um ambiente virtual na pasta atual
|
|
8
|
+
def detect_venv_python():
|
|
9
|
+
venv_path = os.path.join(os.getcwd(), ".venv", "Scripts", "python.exe")
|
|
10
|
+
if os.path.exists(venv_path):
|
|
11
|
+
return venv_path
|
|
12
|
+
return sys.executable # Fallback para o Python atual (global ou outro venv)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
PYTHON_EXEC = detect_venv_python()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_installed_version(package):
|
|
19
|
+
try:
|
|
20
|
+
return get_version(package)
|
|
21
|
+
except PackageNotFoundError as e:
|
|
22
|
+
print(e)
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def uninstall_package(package):
|
|
27
|
+
try:
|
|
28
|
+
print(f"[ESP DEP]Uninstalling {package}...")
|
|
29
|
+
subprocess.check_call([PYTHON_EXEC, "-m", "pip", "uninstall", "-y", package])
|
|
30
|
+
except subprocess.CalledProcessError as e:
|
|
31
|
+
print(f"[ESP DEP]Failed to uninstall {package}. Error: {e}")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def install_package(package, version):
|
|
35
|
+
try:
|
|
36
|
+
print(f"[ESP DEP]Installing {package} version {version}...")
|
|
37
|
+
subprocess.check_call([PYTHON_EXEC, "-m", "pip", "install", f"{package}=={version}"])
|
|
38
|
+
except subprocess.CalledProcessError as e:
|
|
39
|
+
print(f"[ESP DEP]Failed to install {package} version {version}. Error: {e}")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def check_and_fix_package(package, module, expected_version):
|
|
43
|
+
installed_version = get_installed_version(package)
|
|
44
|
+
|
|
45
|
+
if installed_version:
|
|
46
|
+
print(f"[ESP DEP]{package} is installed with version {installed_version}.")
|
|
47
|
+
if installed_version != expected_version:
|
|
48
|
+
print(f"[ESP DEP]Version mismatch! Expected: {expected_version}, Installed: {installed_version}.")
|
|
49
|
+
uninstall_package(package)
|
|
50
|
+
install_package(package, expected_version)
|
|
51
|
+
else:
|
|
52
|
+
print(f"[ESP DEP]{package} is already at the expected version ({expected_version}).")
|
|
53
|
+
else:
|
|
54
|
+
print(f"[ESP DEP]{package} is not installed.")
|
|
55
|
+
install_package(package, expected_version)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
packages = {
|
|
59
|
+
"esptool": ("esptool", "4.10")
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Check and fix packages
|
|
63
|
+
for package, (module, expected_version) in packages.items():
|
|
64
|
+
check_and_fix_package(package, module, expected_version)
|
|
65
|
+
|
|
66
|
+
print("[ESP DEP]Package version check and update completed.")
|
package/grav-fw-pvi.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import FWLink from "../daq-fwlink/FWLink.js"
|
|
2
|
+
import Log from "../script-loader/utils-script.js"
|
|
2
3
|
|
|
3
4
|
export default class GravaFW {
|
|
4
5
|
|
|
6
|
+
static progress
|
|
7
|
+
|
|
5
8
|
/**
|
|
6
9
|
*
|
|
7
10
|
* @param {String} dirFirm
|
|
@@ -45,6 +48,7 @@ export default class GravaFW {
|
|
|
45
48
|
|
|
46
49
|
console.log(`%cLog Program: ${param[0]}`, ' color: #B0E0E6')
|
|
47
50
|
logGravacao = logGravacao + param[0]
|
|
51
|
+
this.progress = param[0]
|
|
48
52
|
|
|
49
53
|
if (param[0] != undefined) {
|
|
50
54
|
|
|
@@ -89,7 +93,7 @@ export default class GravaFW {
|
|
|
89
93
|
resolve({ success: false, msg: `Nenhum diretório de firmware ou option byte informado` })
|
|
90
94
|
}
|
|
91
95
|
|
|
92
|
-
FWLink.runInstructionS("EXEC", [
|
|
96
|
+
FWLink.runInstructionS("EXEC", [`I:/Teste_Producao/Resources/stvp/STVP_CmdLine.exe`, ObjWriteSTM8.commandLineArguments, "true", "true"])
|
|
93
97
|
|
|
94
98
|
})
|
|
95
99
|
|
|
@@ -172,6 +176,7 @@ export default class GravaFW {
|
|
|
172
176
|
|
|
173
177
|
console.log(`%cLog Program: ${param[0]}`, ' color: #B0E0E6')
|
|
174
178
|
logGravacao = logGravacao + param[0]
|
|
179
|
+
this.progress = param[0]
|
|
175
180
|
|
|
176
181
|
if (param[0] != undefined) {
|
|
177
182
|
|
|
@@ -209,7 +214,7 @@ export default class GravaFW {
|
|
|
209
214
|
|
|
210
215
|
}, "sniffer.exec")
|
|
211
216
|
|
|
212
|
-
FWLink.runInstructionS("EXEC", [
|
|
217
|
+
FWLink.runInstructionS("EXEC", [`I:/Teste_Producao/Resources/Renesas/RFPV3.Console.exe`, dirProject, "true", "true"])
|
|
213
218
|
|
|
214
219
|
let timeOutGravacao = setTimeout(() => {
|
|
215
220
|
|
|
@@ -263,6 +268,7 @@ export default class GravaFW {
|
|
|
263
268
|
|
|
264
269
|
console.log(`%cLog Program: ${param[0]}`, ' color: #B0E0E6')
|
|
265
270
|
logGravacao = logGravacao + param[0]
|
|
271
|
+
this.progress = param[0]
|
|
266
272
|
|
|
267
273
|
if (param == "Script processing completed.") {
|
|
268
274
|
|
|
@@ -284,7 +290,7 @@ export default class GravaFW {
|
|
|
284
290
|
}, "sniffer.exec")
|
|
285
291
|
|
|
286
292
|
const commandFile = commandJlink(nameFile, speed, dirProject)
|
|
287
|
-
FWLink.runInstructionS("EXEC", [
|
|
293
|
+
FWLink.runInstructionS("EXEC", [`I:/Teste_Producao/Resources/JLink7/JLink.exe`, `-device ${device} -CommandFile ${commandFile}`, "true", "true"])
|
|
288
294
|
|
|
289
295
|
let timeOutGravacao = setTimeout(() => {
|
|
290
296
|
FWLink.PVIEventObserver.remove(id)
|
|
@@ -329,9 +335,10 @@ export default class GravaFW {
|
|
|
329
335
|
* { success: Boolean, msg: String }
|
|
330
336
|
* ```
|
|
331
337
|
*/
|
|
332
|
-
static async ESP32(sessionStorageTag, AddressFilePath, isBatFile, betweenMsgTimeout) {
|
|
338
|
+
static async ESP32(sessionStorageTag, AddressFilePath, isBatFile, betweenMsgTimeout = 10000, chip = "esp32") {
|
|
333
339
|
|
|
334
|
-
return new Promise((resolve) => {
|
|
340
|
+
return new Promise(async (resolve) => {
|
|
341
|
+
await this.checkDependenciesPython()
|
|
335
342
|
|
|
336
343
|
if (!AddressFilePath) {
|
|
337
344
|
resolve({ success: false, msg: "Caminho de arquivo para gravação não especificado", AddressFilePath: AddressFilePath }); return
|
|
@@ -362,16 +369,15 @@ export default class GravaFW {
|
|
|
362
369
|
} else if (info.includes("Serial port")) {
|
|
363
370
|
const splittedInfo = info.split(" ")
|
|
364
371
|
tryingPorts.push(splittedInfo[2])
|
|
365
|
-
UI.setMsg(`Tentando gravar na porta ${splittedInfo[2]}`)
|
|
366
372
|
|
|
367
|
-
} else if (info.includes("
|
|
373
|
+
} else if (info.includes("Failed to connect")) {
|
|
368
374
|
if (tryingPorts.length >= portsFound) {
|
|
369
375
|
FWLink.PVIEventObserver.remove(id)
|
|
370
376
|
resolve({ success: false, msg: "Gravador não conseguiu se conectar com o ESP32", AddressFilePath: AddressFilePath }); return
|
|
371
377
|
}
|
|
372
378
|
|
|
373
379
|
} else if (info.includes("%")) {
|
|
374
|
-
|
|
380
|
+
this.progress = info
|
|
375
381
|
|
|
376
382
|
} else if (info.includes("Hard resetting via RTS pin...")) {
|
|
377
383
|
sessionStorage.getItem(sessionStorageTag) == null ? sessionStorage.setItem(sessionStorageTag, tryingPorts.pop()) : null
|
|
@@ -384,25 +390,55 @@ export default class GravaFW {
|
|
|
384
390
|
|
|
385
391
|
console.log("writeFirmware ID", id)
|
|
386
392
|
|
|
387
|
-
let pythonPath = "C:/esp-idf/Python/python.exe"
|
|
388
|
-
let espToolPath = "C:/esp-idf/components/esptool_py/esptool/esptool.py"
|
|
389
393
|
let port = ""
|
|
390
394
|
|
|
391
395
|
sessionStorage.getItem(sessionStorageTag) != null ? port = `-p${sessionStorage.getItem(sessionStorageTag)}` : null
|
|
392
396
|
|
|
393
|
-
const args = `${
|
|
397
|
+
const args = `${port} -b 480600 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m ${AddressFilePath}`
|
|
394
398
|
|
|
395
399
|
if (isBatFile) {
|
|
396
400
|
console.log(`Executando batch: ${AddressFilePath} args: ${port}`)
|
|
397
401
|
FWLink.runInstructionS("EXEC", [AddressFilePath, port, "true", "true", "true"])
|
|
398
402
|
} else {
|
|
399
|
-
console.log(`Executando
|
|
400
|
-
FWLink.runInstructionS("EXEC", [
|
|
403
|
+
console.log(`Executando esptoll, args: ${args}`)
|
|
404
|
+
FWLink.runInstructionS("EXEC", ["esptool", args, "true", "true", "true"])
|
|
401
405
|
}
|
|
402
406
|
|
|
403
407
|
})
|
|
404
408
|
}
|
|
405
409
|
|
|
410
|
+
static getScriptPath() {
|
|
411
|
+
const pathC = location.pathname.slice(location.pathname.indexOf("C:/"), location.pathname.lastIndexOf("/"))
|
|
412
|
+
const pathI = location.pathname.slice(location.pathname.indexOf("I:/"), location.pathname.lastIndexOf("/"))
|
|
413
|
+
|
|
414
|
+
if (pathC.length > 0) {
|
|
415
|
+
return pathC
|
|
416
|
+
} else if (pathI.length > 0) {
|
|
417
|
+
return pathI
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
static async checkDependenciesPython(pyFilePath = this.getScriptPath() + '/node_modules/@libs-scripts-mep/grav-fw-pvi/compat.py') {
|
|
422
|
+
return new Promise((resolve) => {
|
|
423
|
+
const id = FWLink.PVIEventObserver.add((message, params) => {
|
|
424
|
+
const msg = params?.[0]
|
|
425
|
+
|
|
426
|
+
if (msg.includes("[ESP DEP]")) { Log.warn(msg, Log.Colors.Brown.SandyBrown) }
|
|
427
|
+
|
|
428
|
+
if (msg.includes("[ESP DEP]") && msg.includes("Package version check and update completed.")) {
|
|
429
|
+
FWLink.PVIEventObserver.remove(id)
|
|
430
|
+
Log.console("ESP: Dependências instaladas com sucesso.", Log.Colors.Green.SpringGreen)
|
|
431
|
+
resolve({ success: true, msg: msg, })
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
}, "PVI.Sniffer.sniffer.PID_")
|
|
435
|
+
|
|
436
|
+
setTimeout(() => {
|
|
437
|
+
FWLink.runInstructionS("EXEC", ["Python", pyFilePath, "true", "true"])
|
|
438
|
+
}, 300)
|
|
439
|
+
})
|
|
440
|
+
}
|
|
441
|
+
|
|
406
442
|
static { window.GravaFW = GravaFW }
|
|
407
443
|
|
|
408
444
|
}
|