@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.
Files changed (3) hide show
  1. package/README.md +101 -1
  2. package/grav-fw-pvi.js +124 -16
  3. 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("ST.writefirmwarestm8_stlink", [
8
- dirFirm.replace(/[\\]/g, "\/").replace(/\.stp|\.STP/, ".HEX"),
9
- dirOpt.replace(/[\\]/g, "\/").replace(/\.stp|\.STP/, ".HEX"),
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, "Gravador não respondeu")
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, "Falha na gravação do firmware final")
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, "Tempo de gravação excedido")
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, "\/").replace(/\.stp|\.STP/, ".HEX"),
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, "Gravador não respondeu")
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, "Falha na gravação do firmware")
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, "Tempo de gravação excedido")
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("ST.writeoptionstm8_stlink", [
85
- dirOpt.replace(/[\\]/g, "\/").replace(/\.stp|\.STP/, ".HEX"),
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, "Gravador não respondeu")
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, "Falha na gravação do option byte")
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, "Tempo de gravação excedido")
125
+ callback(false, `Tempo de gravação excedido`)
118
126
  }, timeOut)
119
127
 
120
128
  } else {
121
- callback(false, "Nenhum diretório de firmware ou option byte informado.")
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.0.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
- }
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
+ }