Skip to content

Commit 4c0c682

Browse files
committed
Add some logging
1 parent c5f12bb commit 4c0c682

File tree

4 files changed

+152
-37
lines changed

4 files changed

+152
-37
lines changed

flasher/flasher.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"time"
2525

2626
"github.com/arduino/go-paths-helper"
27+
"github.com/sirupsen/logrus"
2728
"go.bug.st/serial"
2829
)
2930

@@ -74,9 +75,10 @@ func openSerial(portAddress string) (serial.Port, error) {
7475
// Try another baudrate
7576
continue
7677
}
78+
logrus.Infof("Opened port %s at %s", portAddress, baudRate)
7779

7880
if err := port.SetReadTimeout(30 * time.Second); err != nil {
79-
return nil, fmt.Errorf("Could not set timeout on serial port: %s", err)
81+
return nil, fmt.Errorf("could not set timeout on serial port: %s", err)
8082
}
8183

8284
return port, nil

flasher/nina.go

+68-17
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,31 @@ import (
2424
"crypto/md5"
2525
"encoding/binary"
2626
"fmt"
27+
"strconv"
2728
"time"
2829

2930
"github.com/arduino/go-paths-helper"
31+
"github.com/sirupsen/logrus"
3032
"go.bug.st/serial"
3133
)
3234

3335
// NewNinaFlasher creates an new instance of NinaFlasher
3436
func NewNinaFlasher(portAddress string) (*NinaFlasher, error) {
3537
port, err := openSerial(portAddress)
3638
if err != nil {
39+
logrus.Error(err)
3740
return nil, err
3841
}
3942
f := &NinaFlasher{port: port}
4043
payloadSize, err := f.getMaximumPayloadSize()
4144
if err != nil {
45+
logrus.Error(err)
4246
return nil, err
4347
}
4448
if payloadSize < 1024 {
45-
return nil, fmt.Errorf("programmer reports %d as maximum payload size (1024 is needed)", payloadSize)
49+
err = fmt.Errorf("programmer reports %d as maximum payload size (1024 is needed)", payloadSize)
50+
logrus.Error(err)
51+
return nil, err
4652
}
4753
f.payloadSize = int(payloadSize)
4854
return f, nil
@@ -55,17 +61,21 @@ type NinaFlasher struct {
5561

5662
// FlashFirmware in board connected to port using data from firmwareFile
5763
func (f *NinaFlasher) FlashFirmware(firmwareFile *paths.Path) error {
64+
logrus.Infof("Flashing firmware %s", firmwareFile)
5865
if err := f.hello(); err != nil {
66+
logrus.Error(err)
5967
return err
6068
}
6169

6270
data, err := firmwareFile.ReadFile()
6371
if err != nil {
72+
logrus.Error(err)
6473
return err
6574
}
6675

6776
firmwareOffset := 0x0000
6877
if err := f.flashChunk(firmwareOffset, data); err != nil {
78+
logrus.Error(err)
6979
return err
7080
}
7181

@@ -79,7 +89,9 @@ func (f *NinaFlasher) FlashCertificates(certificatePaths *paths.PathList) error
7989

8090
// Close the port used by this flasher
8191
func (f *NinaFlasher) Close() error {
82-
return f.port.Close()
92+
err := f.port.Close()
93+
logrus.Error(err)
94+
return err
8395
}
8496

8597
// Ping the programmer to see if it is alive.
@@ -93,6 +105,7 @@ func (f *NinaFlasher) hello() error {
93105
Payload: nil,
94106
})
95107
if err != nil {
108+
logrus.Error(err)
96109
return err
97110
}
98111

@@ -103,6 +116,7 @@ func (f *NinaFlasher) hello() error {
103116
res := make([]byte, 65535)
104117
n, err := f.port.Read(res)
105118
if err != nil {
119+
logrus.Error(err)
106120
return err
107121
}
108122
// flush eventual leftover from the rx buffer
@@ -111,11 +125,15 @@ func (f *NinaFlasher) hello() error {
111125
}
112126

113127
if res[0] != 'v' {
114-
return FlasherError{err: "Programmer is not responding"}
128+
err = FlasherError{err: "Programmer is not responding"}
129+
logrus.Error(err)
130+
return err
115131
}
116132
if string(res) != "v10000" {
117133
// TODO: Do we really need this check? What is it trying to verify?
118-
return FlasherError{err: fmt.Sprintf("Programmer version mismatch, v10000 needed: %s", res)}
134+
err = FlasherError{err: fmt.Sprintf("Programmer version mismatch, v10000 needed: %s", res)}
135+
logrus.Error(err)
136+
return err
119137
}
120138
return nil
121139
}
@@ -126,17 +144,19 @@ func (f *NinaFlasher) flashChunk(offset int, buffer []byte) error {
126144
bufferLength := len(buffer)
127145

128146
if err := f.erase(uint32(offset), uint32(bufferLength)); err != nil {
147+
logrus.Error(err)
129148
return err
130149
}
131150

132151
for i := 0; i < bufferLength; i += chunkSize {
133-
// fmt.Printf("\rFlashing: " + strconv.Itoa((i*100)/bufferLength) + "%%")
152+
logrus.Debugf("Flashing chunk: %s%%", strconv.Itoa((i*100)/bufferLength))
134153
start := i
135154
end := i + chunkSize
136155
if end > bufferLength {
137156
end = bufferLength
138157
}
139158
if err := f.write(uint32(offset+i), buffer[start:end]); err != nil {
159+
logrus.Error(err)
140160
return err
141161
}
142162
}
@@ -154,12 +174,14 @@ func (f *NinaFlasher) getMaximumPayloadSize() (uint16, error) {
154174
Payload: nil,
155175
})
156176
if err != nil {
177+
logrus.Error(err)
157178
return 0, err
158179
}
159180

160181
// Receive response
161182
res := make([]byte, 2)
162183
if err := f.serialFillBuffer(res); err != nil {
184+
logrus.Error(err)
163185
return 0, err
164186
}
165187
return (uint16(res[0]) << 8) + uint16(res[1]), nil
@@ -171,10 +193,13 @@ func (f *NinaFlasher) serialFillBuffer(buffer []byte) error {
171193
for read < len(buffer) {
172194
n, err := f.port.Read(buffer[read:])
173195
if err != nil {
196+
logrus.Error(err)
174197
return err
175198
}
176199
if n == 0 {
177-
return FlasherError{err: "Serial port closed unexpectedly"}
200+
err = FlasherError{err: "Serial port closed unexpectedly"}
201+
logrus.Error(err)
202+
return err
178203
}
179204
read += n
180205
}
@@ -183,14 +208,18 @@ func (f *NinaFlasher) serialFillBuffer(buffer []byte) error {
183208

184209
// sendCommand sends the data over serial port to connected board
185210
func (f *NinaFlasher) sendCommand(data CommandData) error {
211+
logrus.Debugf("sending command data %s", data)
186212
buff := new(bytes.Buffer)
187213
if err := binary.Write(buff, binary.BigEndian, data.Command); err != nil {
214+
logrus.Error(err)
188215
return err
189216
}
190217
if err := binary.Write(buff, binary.BigEndian, data.Address); err != nil {
218+
logrus.Error(err)
191219
return err
192220
}
193221
if err := binary.Write(buff, binary.BigEndian, data.Value); err != nil {
222+
logrus.Error(err)
194223
return err
195224
}
196225
var length uint16
@@ -200,6 +229,7 @@ func (f *NinaFlasher) sendCommand(data CommandData) error {
200229
length = uint16(len(data.Payload))
201230
}
202231
if err := binary.Write(buff, binary.BigEndian, length); err != nil {
232+
logrus.Error(err)
203233
return err
204234
}
205235
if data.Payload != nil {
@@ -209,11 +239,13 @@ func (f *NinaFlasher) sendCommand(data CommandData) error {
209239
for {
210240
sent, err := f.port.Write(bufferData)
211241
if err != nil {
242+
logrus.Error(err)
212243
return err
213244
}
214245
if sent == len(bufferData) {
215246
break
216247
}
248+
logrus.Debugf("Sent %d bytes out of %d", sent, len(bufferData))
217249
bufferData = bufferData[sent:]
218250
}
219251
return nil
@@ -229,20 +261,25 @@ func (f *NinaFlasher) read(address uint32, length uint32) ([]byte, error) {
229261
Payload: nil,
230262
})
231263
if err != nil {
264+
logrus.Error(err)
232265
return nil, err
233266
}
234267

235268
// Receive response
236269
result := make([]byte, length)
237270
if err := f.serialFillBuffer(result); err != nil {
271+
logrus.Error(err)
238272
return nil, err
239273
}
240274
ack := make([]byte, 2)
241275
if err := f.serialFillBuffer(ack); err != nil {
276+
logrus.Error(err)
242277
return nil, err
243278
}
244279
if string(ack) != "OK" {
245-
return nil, FlasherError{err: fmt.Sprintf("Missing ack on read: %s, result: %s", ack, result)}
280+
err = FlasherError{err: fmt.Sprintf("Missing ack on read: %s, result: %s", ack, result)}
281+
logrus.Error(err)
282+
return nil, err
246283
}
247284
return result, nil
248285
}
@@ -257,16 +294,20 @@ func (f *NinaFlasher) write(address uint32, buffer []byte) error {
257294
Payload: buffer,
258295
})
259296
if err != nil {
297+
logrus.Error(err)
260298
return err
261299
}
262300

263301
// wait acknowledge
264302
ack := make([]byte, 2)
265303
if err := f.serialFillBuffer(ack); err != nil {
304+
logrus.Error(err)
266305
return err
267306
}
268307
if string(ack) != "OK" {
269-
return FlasherError{err: fmt.Sprintf("Missing ack on write: %s", ack)}
308+
err = FlasherError{err: fmt.Sprintf("Missing ack on write: %s", ack)}
309+
logrus.Error(err)
310+
return err
270311
}
271312
return nil
272313
}
@@ -281,16 +322,20 @@ func (f *NinaFlasher) erase(address uint32, length uint32) error {
281322
Payload: nil,
282323
})
283324
if err != nil {
325+
logrus.Error(err)
284326
return err
285327
}
286328

287329
// wait acknowledge
288330
ack := make([]byte, 2)
289331
if err := f.serialFillBuffer(ack); err != nil {
332+
logrus.Error(err)
290333
return err
291334
}
292335
if string(ack) != "OK" {
293-
return FlasherError{err: fmt.Sprintf("Missing ack on erase: %s", ack)}
336+
err = FlasherError{err: fmt.Sprintf("Missing ack on erase: %s", ack)}
337+
logrus.Error(err)
338+
return err
294339
}
295340
return nil
296341
}
@@ -307,33 +352,39 @@ func (f *NinaFlasher) md5sum(data []byte) error {
307352
Payload: nil,
308353
})
309354
if err != nil {
355+
logrus.Error(err)
310356
return err
311357
}
312358

313359
// Wait acknowledge
314360
ack := make([]byte, 2)
315361
if err := f.serialFillBuffer(ack); err != nil {
362+
logrus.Error(err)
316363
return err
317364
}
318365
if string(ack) != "OK" {
319-
return FlasherError{err: fmt.Sprintf("Missing ack on md5sum: %s", ack)}
366+
err := FlasherError{err: fmt.Sprintf("Missing ack on md5sum: %s", ack)}
367+
logrus.Error(err)
368+
return err
320369
}
321370

322371
// Wait md5
323-
md5sum := make([]byte, 16)
324-
if err := f.serialFillBuffer(md5sum); err != nil {
372+
md5sumfromdevice := make([]byte, 16)
373+
if err := f.serialFillBuffer(md5sumfromdevice); err != nil {
325374
return err
326375
}
327376

328-
md5sumfromdevice := hasher.Sum(nil)
377+
md5sum := hasher.Sum(nil)
378+
logrus.Debugf("md5 read from device %s", md5sumfromdevice)
379+
logrus.Debugf("md5 of data %s", md5sum)
329380

330381
for i := 0; i < 16; i++ {
331-
if md5sumfromdevice[i] != md5sum[i] {
332-
return &FlasherError{err: "MD5sum failed"}
382+
if md5sum[i] != md5sumfromdevice[i] {
383+
err := FlasherError{err: "MD5sum failed"}
384+
logrus.Error(err)
385+
return err
333386
}
334387
}
335388

336-
// log.Println("Integrity ok")
337-
338389
return nil
339390
}

0 commit comments

Comments
 (0)