@libs-scripts-mep/grav-fw-pvi 1.0.0 → 1.2.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/README.md +101 -1
- package/grav-fw-pvi.js +124 -16
- package/package.json +25 -25
package/README.md
CHANGED
|
@@ -23,12 +23,21 @@ npm uninstall @libs-scripts-mep/grav-fw-pvi
|
|
|
23
23
|
| Fabricante | Ferramenta | Suporte |
|
|
24
24
|
| ---------- | ------------------------ | ------- |
|
|
25
25
|
| ST | STVP | ✔️ |
|
|
26
|
-
| Renesas | Renesas Flash Programmer |
|
|
26
|
+
| Renesas | Renesas Flash Programmer | ✔️ |
|
|
27
|
+
| Nuvoton | JLink v7.82 | ✔️ |
|
|
27
28
|
|
|
28
29
|
## Resumo da Classe
|
|
29
30
|
|
|
30
31
|
```js
|
|
31
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Realiza gravacao nos microcontroladores ST atraves do PVI, via STVP command line
|
|
35
|
+
* @param {string} dirFirm formato esperado: "I:\\\Documentos\\\Softwares\\\STM8\\\STM8S003F3\\\INV-173\\\173v01\\\173v01_1.50_Com.stp"
|
|
36
|
+
* @param {string} dirOpt formato esperado: "I:\\\Documentos\\\Softwares\\\STM8\\\STM8S003F3\\\INV-173\\\173v01\\\173v01_1.50_Com.stp"
|
|
37
|
+
* @param {string} modelo_uC formato esperado: "STM8S003F3"
|
|
38
|
+
* @param {function} callback
|
|
39
|
+
* @param {number} timeOut
|
|
40
|
+
*/
|
|
32
41
|
GravaFW.STM8(params , callback , timeOut = 5000){
|
|
33
42
|
|
|
34
43
|
//invoca o STVP passando os parametros informados
|
|
@@ -44,5 +53,96 @@ GravaFW.STM8(params , callback , timeOut = 5000){
|
|
|
44
53
|
}
|
|
45
54
|
}
|
|
46
55
|
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Realiza gravacao nos microcontroladores renesas atraves do PVI, via renesas flash programmer command line
|
|
59
|
+
* @param {string} dirProject Formato esperado: "I:\\\Documentos\\\Softwares\\\RENESAS\\\R5F51303ADFL\\\INV-301\\\301v06\\\301v06.rpj"
|
|
60
|
+
* @param {function} callback
|
|
61
|
+
* @param {number} timeOut
|
|
62
|
+
*/
|
|
63
|
+
static Renesas(params, callback, timeOut = 5000) {
|
|
64
|
+
|
|
65
|
+
//invoca o Renesas Flash Programmer passando os parametros informados
|
|
66
|
+
let result = pvi.runInstructionS(`RENESAS.gravafw`, [params])
|
|
67
|
+
|
|
68
|
+
//executa callback dependendo do resultado
|
|
69
|
+
if (result.includes(`Operation completed.`)) {
|
|
70
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #00EE66')
|
|
71
|
+
callback(true, result)
|
|
72
|
+
|
|
73
|
+
} else if (result.includes(`Cannot find the specified tool.`)) {
|
|
74
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
75
|
+
callback(null, `Gravador não respondeu`)
|
|
76
|
+
|
|
77
|
+
} else if (result.includes(`Error: No project file specifed.`)) {
|
|
78
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
79
|
+
callback(false, `Projeto informado é inválido`)
|
|
80
|
+
|
|
81
|
+
} else {
|
|
82
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
83
|
+
callback(false, `Falha na gravação do firmware final`)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Realiza gravacao nos microcontroladores Nuvoton atraves do PVI, via Jlink v7 command line
|
|
89
|
+
* @param {string} dirProject Formato esperado: "C:\\Users\\eduardo.rezzadori\\Desktop\\Farmwar\\193M3PL3v01_3.02.hex"
|
|
90
|
+
* @param {string} commandFile Arquivo de comandos JLink, pseudo-script de gravação
|
|
91
|
+
* @param {string} device modelo do micrcontrolador
|
|
92
|
+
* @param {function} callback
|
|
93
|
+
* @param {number} timeOut
|
|
94
|
+
*/
|
|
95
|
+
static JLink_v7(dirProject = null, commandFile = null, device, callback = () => { }, timeOut = 10000) {
|
|
96
|
+
// inicia as variaveis locais utilizadas
|
|
97
|
+
let error = null, observer = null, logGravacao = [], controleGravacao = null
|
|
98
|
+
const pathPVI = pvi.runInstructionS("GETPVIPATH", [])
|
|
99
|
+
|
|
100
|
+
// start do obsever para o retorno do cmd
|
|
101
|
+
observer = pvi.FWLink.globalDaqMessagesObservers.add((m, data) => {
|
|
102
|
+
console.log(m, data)
|
|
103
|
+
|
|
104
|
+
// monta um array para validar a gravação
|
|
105
|
+
logGravacao.push(data)
|
|
106
|
+
|
|
107
|
+
// aguarda a string final do processo de gravação
|
|
108
|
+
if (data == "Script processing completed.") {
|
|
109
|
+
pvi.FWLink.globalDaqMessagesObservers.clear()
|
|
110
|
+
pvi.daq.init()
|
|
111
|
+
logGravacao.forEach((e) => {
|
|
112
|
+
|
|
113
|
+
// mensagem que valida a gravação
|
|
114
|
+
if (e == "O.K.") {
|
|
115
|
+
observer = () => { }
|
|
116
|
+
controleGravacao = true
|
|
117
|
+
// erro conhecido
|
|
118
|
+
} else if (e == "Cannot connect to target.") {
|
|
119
|
+
error = e
|
|
120
|
+
}
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
// retorno convencional do script
|
|
124
|
+
if (controleGravacao) {
|
|
125
|
+
clearTimeout(timeOutGravacao)
|
|
126
|
+
callback(true, `Gravado com sucesso, caminho: ${dirProject}`)
|
|
127
|
+
} else if (error) {
|
|
128
|
+
clearTimeout(timeOutGravacao)
|
|
129
|
+
callback(false, `Falha na gravação, ${error}`)
|
|
130
|
+
} else {
|
|
131
|
+
clearTimeout(timeOutGravacao)
|
|
132
|
+
callback(false, `Falha na gravação, caminho: ${dirProject}`)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}, "sniffer.exec")
|
|
136
|
+
|
|
137
|
+
// execução do comando de gravação
|
|
138
|
+
pvi.runInstructionS("EXEC", [`${pathPVI}\\Plugins\\JLINK7\\JLink.exe`, `-device ${device} -CommandFile ${commandFile}`, "true", "true"])
|
|
139
|
+
|
|
140
|
+
// timeout para setar erro caso ocorra algum tipo de erro inesperado
|
|
141
|
+
let timeOutGravacao = setTimeout(() => {
|
|
142
|
+
pvi.FWLink.globalDaqMessagesObservers.clear()
|
|
143
|
+
pvi.daq.init()
|
|
144
|
+
callback(false, `Falha na gravação, verifique a conexão USB do gravador`)
|
|
145
|
+
}, timeOut)
|
|
146
|
+
}
|
|
47
147
|
```
|
|
48
148
|
|
package/grav-fw-pvi.js
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
class GravaFW {
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Realiza gravacao nos microcontroladores ST atraves do PVI, via STVP command line
|
|
5
|
+
* @param {string} dirFirm formato esperado: "I:\\\Documentos\\\Softwares\\\STM8\\\STM8S003F3\\\INV-173\\\173v01\\\173v01_1.50_Com.stp"
|
|
6
|
+
* @param {string} dirOpt formato esperado: "I:\\\Documentos\\\Softwares\\\STM8\\\STM8S003F3\\\INV-173\\\173v01\\\173v01_1.50_Com.stp"
|
|
7
|
+
* @param {string} modelo_uC formato esperado: "STM8S003F3"
|
|
8
|
+
* @param {function} callback
|
|
9
|
+
* @param {number} timeOut
|
|
10
|
+
*/
|
|
3
11
|
static STM8(dirFirm = null, dirOpt = null, modelo_uC = null, callback = () => { }, timeOut = 5000) {
|
|
4
12
|
|
|
5
13
|
if (dirFirm != null && dirOpt != null) {
|
|
6
14
|
|
|
7
|
-
let result = pvi.runInstructionS(
|
|
8
|
-
dirFirm.replace(/[\\]/g,
|
|
9
|
-
dirOpt.replace(/[\\]/g,
|
|
15
|
+
let result = pvi.runInstructionS(`ST.writefirmwarestm8_stlink`, [
|
|
16
|
+
dirFirm.replace(/[\\]/g, `\/`).replace(/\.stp|\.STP/, `.HEX`),
|
|
17
|
+
dirOpt.replace(/[\\]/g, `\/`).replace(/\.stp|\.STP/, `.HEX`),
|
|
10
18
|
modelo_uC
|
|
11
19
|
])
|
|
12
20
|
|
|
@@ -25,12 +33,12 @@ class GravaFW {
|
|
|
25
33
|
} else if (result.includes(`ERROR : Cannot communicate with the tool`)) {
|
|
26
34
|
|
|
27
35
|
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
28
|
-
callback(null,
|
|
36
|
+
callback(null, `Gravador não respondeu`)
|
|
29
37
|
|
|
30
38
|
} else {
|
|
31
39
|
|
|
32
40
|
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
33
|
-
callback(false,
|
|
41
|
+
callback(false, `Falha na gravação do firmware final`)
|
|
34
42
|
|
|
35
43
|
}
|
|
36
44
|
}
|
|
@@ -38,13 +46,13 @@ class GravaFW {
|
|
|
38
46
|
|
|
39
47
|
let timeoutMonitor = setTimeout(() => {
|
|
40
48
|
clearInterval(monitor)
|
|
41
|
-
callback(false,
|
|
49
|
+
callback(false, `Tempo de gravação excedido`)
|
|
42
50
|
}, timeOut)
|
|
43
51
|
|
|
44
52
|
} else if (dirFirm != null) {
|
|
45
53
|
|
|
46
54
|
let result = pvi.runInstructionS(`ST.writeprogramstm8_stlink`, [
|
|
47
|
-
dirFirm.replace(/[\\]/g,
|
|
55
|
+
dirFirm.replace(/[\\]/g, `\/`).replace(/\.stp|\.STP/, `.HEX`),
|
|
48
56
|
modelo_uC
|
|
49
57
|
])
|
|
50
58
|
|
|
@@ -63,12 +71,12 @@ class GravaFW {
|
|
|
63
71
|
} else if (result.includes(`ERROR : Cannot communicate with the tool`)) {
|
|
64
72
|
|
|
65
73
|
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
66
|
-
callback(null,
|
|
74
|
+
callback(null, `Gravador não respondeu`)
|
|
67
75
|
|
|
68
76
|
} else {
|
|
69
77
|
|
|
70
78
|
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
71
|
-
callback(false,
|
|
79
|
+
callback(false, `Falha na gravação do firmware`)
|
|
72
80
|
|
|
73
81
|
}
|
|
74
82
|
}
|
|
@@ -76,13 +84,13 @@ class GravaFW {
|
|
|
76
84
|
|
|
77
85
|
let timeoutMonitor = setTimeout(() => {
|
|
78
86
|
clearInterval(monitor)
|
|
79
|
-
callback(false,
|
|
87
|
+
callback(false, `Tempo de gravação excedido`)
|
|
80
88
|
}, timeOut)
|
|
81
89
|
|
|
82
90
|
} else if (dirOpt != null) {
|
|
83
91
|
|
|
84
|
-
let result = pvi.runInstructionS(
|
|
85
|
-
dirOpt.replace(/[\\]/g,
|
|
92
|
+
let result = pvi.runInstructionS(`ST.writeoptionstm8_stlink`, [
|
|
93
|
+
dirOpt.replace(/[\\]/g, `\/`).replace(/\.stp|\.STP/, `.HEX`),
|
|
86
94
|
modelo_uC
|
|
87
95
|
])
|
|
88
96
|
|
|
@@ -101,12 +109,12 @@ class GravaFW {
|
|
|
101
109
|
} else if (result.includes(`ERROR : Cannot communicate with the tool`)) {
|
|
102
110
|
|
|
103
111
|
console.log(`%cLog Desprotect:\n\n${result}`, ' color: #EE0033')
|
|
104
|
-
callback(null,
|
|
112
|
+
callback(null, `Gravador não respondeu`)
|
|
105
113
|
|
|
106
114
|
} else {
|
|
107
115
|
|
|
108
116
|
console.log(`%cLog Desprotect:\n\n${result}`, ' color: #EE0033')
|
|
109
|
-
callback(false,
|
|
117
|
+
callback(false, `Falha na gravação do option byte`)
|
|
110
118
|
|
|
111
119
|
}
|
|
112
120
|
}
|
|
@@ -114,11 +122,111 @@ class GravaFW {
|
|
|
114
122
|
|
|
115
123
|
let timeoutMonitor = setTimeout(() => {
|
|
116
124
|
clearInterval(monitor)
|
|
117
|
-
callback(false,
|
|
125
|
+
callback(false, `Tempo de gravação excedido`)
|
|
118
126
|
}, timeOut)
|
|
119
127
|
|
|
120
128
|
} else {
|
|
121
|
-
callback(false,
|
|
129
|
+
callback(false, `Nenhum diretório de firmware ou option byte informado.`)
|
|
122
130
|
}
|
|
123
131
|
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Realiza gravacao nos microcontroladores renesas atraves do PVI, via renesas flash programmer command line
|
|
135
|
+
* @param {string} dirProject Formato esperado: "I:\\\Documentos\\\Softwares\\\RENESAS\\\R5F51303ADFL\\\INV-301\\\301v06\\\301v06.rpj"
|
|
136
|
+
* @param {function} callback
|
|
137
|
+
* @param {number} timeOut
|
|
138
|
+
*/
|
|
139
|
+
static Renesas(dirProject = null, callback = () => { }, timeOut = 5000) {
|
|
140
|
+
|
|
141
|
+
if (dirProject != null) {
|
|
142
|
+
|
|
143
|
+
let result = pvi.runInstructionS(`RENESAS.gravafw`, [dirProject])
|
|
144
|
+
|
|
145
|
+
let monitor = setInterval(() => {
|
|
146
|
+
|
|
147
|
+
if (result != null) {
|
|
148
|
+
|
|
149
|
+
clearInterval(monitor)
|
|
150
|
+
clearTimeout(timeoutMonitor)
|
|
151
|
+
|
|
152
|
+
if (result.includes(`Operation completed.`)) {
|
|
153
|
+
|
|
154
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #00EE66')
|
|
155
|
+
callback(true, result)
|
|
156
|
+
|
|
157
|
+
} else if (result.includes(`Cannot find the specified tool.`)) {
|
|
158
|
+
|
|
159
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
160
|
+
callback(null, `Gravador não respondeu`)
|
|
161
|
+
|
|
162
|
+
} else if (result.includes(`Error: No project file specifed.`)) {
|
|
163
|
+
|
|
164
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
165
|
+
callback(false, `Projeto informado é inválido`)
|
|
166
|
+
|
|
167
|
+
} else {
|
|
168
|
+
|
|
169
|
+
console.log(`%cLog Program:\n\n${result}`, ' color: #EE0033')
|
|
170
|
+
callback(false, `Falha na gravação do firmware final`)
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}, 100)
|
|
175
|
+
|
|
176
|
+
let timeoutMonitor = setTimeout(() => {
|
|
177
|
+
clearInterval(monitor)
|
|
178
|
+
callback(false, `Tempo de gravação excedido`)
|
|
179
|
+
}, timeOut)
|
|
180
|
+
|
|
181
|
+
} else {
|
|
182
|
+
callback(false, `Caminho do firmware não informado`)
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Realiza gravacao nos microcontroladores Nuvoton atraves do PVI, via JLink command line
|
|
188
|
+
* @param {string} dirProject Formato esperado: "C:\\Users\\eduardo.rezzadori\\Desktop\\Farmwar\\193M3PL3v01_3.02.hex"
|
|
189
|
+
* @param {string} commandFile Arquivo de comandos JLink, pseudo-script de gravação
|
|
190
|
+
* @param {string} device modelo do micrcontrolador
|
|
191
|
+
* @param {function} callback
|
|
192
|
+
* @param {number} timeOut
|
|
193
|
+
*/
|
|
194
|
+
static JLink_v7(dirProject = null, commandFile = null, device, callback = () => { }, timeOut = 10000) {
|
|
195
|
+
|
|
196
|
+
let error = null, observer = null, logGravacao = [], controleGravacao = null
|
|
197
|
+
const pathPVI = pvi.runInstructionS("GETPVIPATH", [])
|
|
198
|
+
|
|
199
|
+
observer = pvi.FWLink.globalDaqMessagesObservers.add((m, data) => {
|
|
200
|
+
console.log(m, data)
|
|
201
|
+
logGravacao.push(data)
|
|
202
|
+
if (data == "Script processing completed.") {
|
|
203
|
+
pvi.FWLink.globalDaqMessagesObservers.clear()
|
|
204
|
+
pvi.daq.init()
|
|
205
|
+
logGravacao.forEach((e) => {
|
|
206
|
+
if (e == "O.K.") {
|
|
207
|
+
observer = () => { }
|
|
208
|
+
controleGravacao = true
|
|
209
|
+
} else if (e == "Cannot connect to target.") {
|
|
210
|
+
error = e
|
|
211
|
+
}
|
|
212
|
+
})
|
|
213
|
+
if (controleGravacao) {
|
|
214
|
+
clearTimeout(timeOutGravacao)
|
|
215
|
+
callback(true, `Gravado com sucesso, caminho: ${dirProject}`)
|
|
216
|
+
} else if (error) {
|
|
217
|
+
clearTimeout(timeOutGravacao)
|
|
218
|
+
callback(false, `Falha na gravação, ${error}`)
|
|
219
|
+
} else {
|
|
220
|
+
clearTimeout(timeOutGravacao)
|
|
221
|
+
callback(false, `Falha na gravação, caminho: ${dirProject}`)
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}, "sniffer.exec")
|
|
225
|
+
pvi.runInstructionS("EXEC", [`${pathPVI}\\Plugins\\JLINK7\\JLink.exe`, `-device ${device} -CommandFile ${commandFile}`, "true", "true"])
|
|
226
|
+
let timeOutGravacao = setTimeout(() => {
|
|
227
|
+
pvi.FWLink.globalDaqMessagesObservers.clear()
|
|
228
|
+
pvi.daq.init()
|
|
229
|
+
callback(false, `Falha na gravação, verifique a conexão USB do gravador`)
|
|
230
|
+
}, timeOut)
|
|
231
|
+
}
|
|
124
232
|
}
|
package/package.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@libs-scripts-mep/grav-fw-pvi",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Auxilia na gravação de microcontroladores por linha de comando através do PVI",
|
|
5
|
-
"main": "grav-fw-pvi.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
-
},
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/libs-scripts-mep/grav-fw-pvi.git"
|
|
12
|
-
},
|
|
13
|
-
"keywords": [
|
|
14
|
-
"gravacao",
|
|
15
|
-
"firmware",
|
|
16
|
-
"uc",
|
|
17
|
-
"microcontrolador"
|
|
18
|
-
],
|
|
19
|
-
"author": "Lucas Kroth",
|
|
20
|
-
"license": "ISC",
|
|
21
|
-
"bugs": {
|
|
22
|
-
"url": "https://github.com/libs-scripts-mep/grav-fw-pvi/issues"
|
|
23
|
-
},
|
|
24
|
-
"homepage": "https://github.com/libs-scripts-mep/grav-fw-pvi#readme"
|
|
25
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-scripts-mep/grav-fw-pvi",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Auxilia na gravação de microcontroladores por linha de comando através do PVI",
|
|
5
|
+
"main": "grav-fw-pvi.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/libs-scripts-mep/grav-fw-pvi.git"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"gravacao",
|
|
15
|
+
"firmware",
|
|
16
|
+
"uc",
|
|
17
|
+
"microcontrolador"
|
|
18
|
+
],
|
|
19
|
+
"author": "Lucas Kroth",
|
|
20
|
+
"license": "ISC",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/libs-scripts-mep/grav-fw-pvi/issues"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/libs-scripts-mep/grav-fw-pvi#readme"
|
|
25
|
+
}
|