@libs-scripts-mep/grav-fw-pvi 1.1.0 → 1.3.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 +62 -0
  2. package/grav-fw-pvi.js +73 -31
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -24,6 +24,7 @@ npm uninstall @libs-scripts-mep/grav-fw-pvi
24
24
  | ---------- | ------------------------ | ------- |
25
25
  | ST | STVP | ✔️ |
26
26
  | Renesas | Renesas Flash Programmer | ✔️ |
27
+ | Nuvoton | JLink v7.82 | ✔️ |
27
28
 
28
29
  ## Resumo da Classe
29
30
 
@@ -82,5 +83,66 @@ static Renesas(params, callback, timeOut = 5000) {
82
83
  callback(false, `Falha na gravação do firmware final`)
83
84
  }
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
+ }
85
147
  ```
86
148
 
package/grav-fw-pvi.js CHANGED
@@ -139,47 +139,89 @@ class GravaFW {
139
139
  static Renesas(dirProject = null, callback = () => { }, timeOut = 5000) {
140
140
 
141
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')
142
+ const eventObserverId = pvi.FWLink.globalDaqMessagesObservers.add((msg, [renesasOutLog]) => {
143
+ console.log(`%cLog Program: ${renesasOutLog}`, ' color: #B0E0E6')
144
+
145
+ if (renesasOutLog != undefined) {
146
+ if (renesasOutLog.includes(`Operation completed.`)) {
147
+ pvi.FWLink.globalDaqMessagesObservers.remove(eventObserverId)
148
+ clearTimeout(timeoutGravacao)
149
+ callback(true, `Gravação bem-sucedida: ${dirProject}`)
150
+ } else if (renesasOutLog.includes(`Cannot find the specified tool.`)) {
151
+ pvi.FWLink.globalDaqMessagesObservers.remove(eventObserverId)
152
+ clearTimeout(timeoutGravacao)
160
153
  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')
154
+ } else if (renesasOutLog.includes(`Error: No project file specifed.`)) {
155
+ pvi.FWLink.globalDaqMessagesObservers.remove(eventObserverId)
156
+ clearTimeout(timeoutGravacao)
165
157
  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
-
158
+ } else if (renesasOutLog.includes(`The device is not responding.`)) {
159
+ pvi.FWLink.globalDaqMessagesObservers.remove(eventObserverId)
160
+ clearTimeout(timeoutGravacao)
161
+ callback(false, `Sem resposta do microcontrolador`)
162
+ } else if (renesasOutLog.includes(`A framing error occurred while receiving data`)) {
163
+ pvi.FWLink.globalDaqMessagesObservers.remove(eventObserverId)
164
+ clearTimeout(timeoutGravacao)
165
+ callback(false, `Falha ao receber dados do microcontrolador`)
172
166
  }
173
167
  }
174
- }, 100)
168
+ }, "sniffer.exec")
175
169
 
176
- let timeoutMonitor = setTimeout(() => {
177
- clearInterval(monitor)
170
+ let timeoutGravacao = setTimeout(() => {
171
+ pvi.FWLink.globalDaqMessagesObservers.remove(eventObserverId)
178
172
  callback(false, `Tempo de gravação excedido`)
179
173
  }, timeOut)
180
174
 
175
+ pvi.runInstructionS("EXEC", [`${pvi.runInstructionS("GETRESOURCESPATH", [])}/Renesas/RFPV3.Console.exe`, dirProject, "true", "true"])
181
176
  } else {
182
177
  callback(false, `Caminho do firmware não informado`)
183
178
  }
184
179
  }
180
+
181
+ /**
182
+ * Realiza gravacao nos microcontroladores Nuvoton atraves do PVI, via JLink command line
183
+ * @param {string} dirProject Formato esperado: "C:\\Users\\eduardo.rezzadori\\Desktop\\Farmwar\\193M3PL3v01_3.02.hex"
184
+ * @param {string} commandFile Arquivo de comandos JLink, pseudo-script de gravação
185
+ * @param {string} device modelo do micrcontrolador
186
+ * @param {function} callback
187
+ * @param {number} timeOut
188
+ */
189
+ static JLink_v7(dirProject = null, commandFile = null, device, callback = () => { }, timeOut = 10000) {
190
+
191
+ let error = null, observer = null, logGravacao = [], controleGravacao = null
192
+ const pathPVI = pvi.runInstructionS("GETPVIPATH", [])
193
+
194
+ observer = pvi.FWLink.globalDaqMessagesObservers.add((m, data) => {
195
+ console.log(m, data)
196
+ logGravacao.push(data)
197
+ if (data == "Script processing completed.") {
198
+ pvi.FWLink.globalDaqMessagesObservers.clear()
199
+ pvi.daq.init()
200
+ logGravacao.forEach((e) => {
201
+ if (e == "O.K.") {
202
+ observer = () => { }
203
+ controleGravacao = true
204
+ } else if (e == "Cannot connect to target.") {
205
+ error = e
206
+ }
207
+ })
208
+ if (controleGravacao) {
209
+ clearTimeout(timeOutGravacao)
210
+ callback(true, `Gravado com sucesso, caminho: ${dirProject}`)
211
+ } else if (error) {
212
+ clearTimeout(timeOutGravacao)
213
+ callback(false, `Falha na gravação, ${error}`)
214
+ } else {
215
+ clearTimeout(timeOutGravacao)
216
+ callback(false, `Falha na gravação, caminho: ${dirProject}`)
217
+ }
218
+ }
219
+ }, "sniffer.exec")
220
+ pvi.runInstructionS("EXEC", [`${pathPVI}\\Plugins\\JLINK7\\JLink.exe`, `-device ${device} -CommandFile ${commandFile}`, "true", "true"])
221
+ let timeOutGravacao = setTimeout(() => {
222
+ pvi.FWLink.globalDaqMessagesObservers.clear()
223
+ pvi.daq.init()
224
+ callback(false, `Falha na gravação, verifique a conexão USB do gravador`)
225
+ }, timeOut)
226
+ }
185
227
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-scripts-mep/grav-fw-pvi",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Auxilia na gravação de microcontroladores por linha de comando através do PVI",
5
5
  "main": "grav-fw-pvi.js",
6
6
  "scripts": {