Skip to content

Commit 56c72bb

Browse files
authored
Merge pull request #11 from arduino/refactors
Refactors and fix to serial write overrun
2 parents be48f59 + 370de5c commit 56c72bb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+476
-3952
lines changed

README.adoc

+4-2
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@ The full list of command line options can be obtained with the `-h` option: `./u
4848

4949
== How to build the tools from source file ==
5050

51-
go get github.com/arduino/FirmwareUpdater/cli
51+
From the sources root directory run:
5252

53-
This will create a bin folder with `cli` executable in it.
53+
go build -o updater
54+
55+
This will create the `updater` executable.
5456

5557
== License ==
5658

distrib.sh

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#!/bin/bash
1+
#!/bin/bash -ex
22

3-
VERSION=`cd src/github.com/arduino/FirmwareUpdater/cli && git describe --tags`
3+
VERSION=`git describe --tags`
44
FILENAME="FirmwareUpdater"
55

66
rm -rf distrib
@@ -13,22 +13,22 @@ mkdir -p distrib/windows
1313

1414
export CGO_ENABLED=0
1515

16-
GOOS=linux GOARCH=amd64 go build -o distrib/linux64/updater github.com/arduino/FirmwareUpdater/cli
17-
GOOS=linux GOARCH=386 GO386=387 go build -o distrib/linux32/updater github.com/arduino/FirmwareUpdater/cli
18-
GOOS=linux GOARCH=arm go build -o distrib/linuxarm/updater github.com/arduino/FirmwareUpdater/cli
19-
GOOS=linux GOARCH=arm64 go build -o distrib/linuxarm64/updater github.com/arduino/FirmwareUpdater/cli
20-
GOOS=windows GOARCH=386 GO386=387 go build -o distrib/windows/updater.exe github.com/arduino/FirmwareUpdater/cli
16+
GOOS=linux GOARCH=amd64 go build -o distrib/linux64/updater
17+
GOOS=linux GOARCH=386 GO386=387 go build -o distrib/linux32/updater
18+
GOOS=linux GOARCH=arm go build -o distrib/linuxarm/updater
19+
GOOS=linux GOARCH=arm64 go build -o distrib/linuxarm64/updater
20+
GOOS=windows GOARCH=386 GO386=387 go build -o distrib/windows/updater.exe
2121

2222
#export CGO_ENABLED=1
2323
# need osxcross in path
24-
GOOS=darwin GOARCH=amd64 go build -o distrib/osx/updater github.com/arduino/FirmwareUpdater/cli
24+
GOOS=darwin GOARCH=amd64 go build -o distrib/osx/updater
2525

26-
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linux64
27-
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linux32
28-
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linuxarm
29-
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linuxarm64
30-
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/windows
31-
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/osx
26+
cp -r firmwares distrib/linux64
27+
cp -r firmwares distrib/linux32
28+
cp -r firmwares distrib/linuxarm
29+
cp -r firmwares distrib/linuxarm64
30+
cp -r firmwares distrib/windows
31+
cp -r firmwares distrib/osx
3232

3333
cd distrib/linux64 && tar cjf ../${FILENAME}-${VERSION}-linux64.tar.bz2 * && cd -
3434
LINUX64_SHA=`sha256sum distrib/${FILENAME}-${VERSION}-linux64.tar.bz2 | cut -f1 -d " "`
@@ -59,7 +59,7 @@ echo "=============================="
5959
echo "BOARD MANAGER SNIPPET"
6060
echo "=============================="
6161

62-
cat $GOPATH/src/github.com/arduino/FirmwareUpdater/extras/package_index.json.template |
62+
cat extras/package_index.json.template |
6363
sed "s/%%VERSION%%/${VERSION}/" |
6464
sed "s/%%FILENAME%%/${FILENAME}/" |
6565
sed "s/%%LINUX64_SHA%%/${LINUX64_SHA}/" |
@@ -76,4 +76,4 @@ sed "s/%%WINDOWS_SHA%%/${WINDOWS_SHA}/" |
7676
sed "s/%%WINDOWS_SIZE%%/${WINDOWS_SIZE}/"
7777

7878
# call the tool with something like
79-
# ./linux64/updater -flasher firmwares/NINA/FirmwareUpdater.mkrwifi1010.ino.bin -firmware firmwares/NINA/1.2.1/NINA_W102.bin -port /dev/ttyACM0 -address arduino.cc:443 -restore_binary /tmp/arduino_build_619137/WiFiSSLClient.ino.bin -programmer {runtime.tools.bossac}/bossac
79+
# ./linux64/updater -flasher firmwares/NINA/FirmwareUpdater.mkrwifi1010.ino.bin -firmware firmwares/NINA/1.2.1/NINA_W102.bin -port /dev/ttyACM0 -address arduino.cc:443 -restore_binary /tmp/arduino_build_619137/WiFiSSLClient.ino.bin -programmer {runtime.tools.bossac}/bossac

go.mod

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ module github.com/arduino/FirmwareUpdater
22

33
go 1.14
44

5+
// branch with support for serial timeouts
6+
replace go.bug.st/serial => github.com/cmaglie/go-serial v0.0.0-20200923162623-b214c147e37e
7+
58
require (
6-
github.com/creack/goselect v0.0.0-20180501195510-58854f77ee8d // indirect
7-
github.com/facchinm/go-serial v0.0.0-20190206110233-459a153afba0
8-
go.bug.st/serial.v1 v0.0.0-20180827123349-5f7892a7bb45
9-
golang.org/x/sys v0.0.0-20190411185658-b44545bcd369 // indirect
9+
github.com/arduino/arduino-cli v0.0.0-20200924151007-69ac12c98b2b
10+
github.com/pkg/errors v0.9.1
11+
go.bug.st/serial v1.1.1
1012
)

go.sum

+331-6
Large diffs are not rendered by default.

cli/main.go renamed to main.go

File renamed without changes.

modules/nina/flasher.go

+19-7
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@
2020
package nina
2121

2222
import (
23+
"bytes"
2324
"crypto/md5"
2425
"encoding/binary"
25-
"github.com/arduino/FirmwareUpdater/utils"
2626
"log"
2727
"time"
2828

29-
serial "github.com/facchinm/go-serial"
29+
"github.com/arduino/FirmwareUpdater/utils"
30+
"go.bug.st/serial"
3031
)
3132

3233
type FlasherError struct {
@@ -169,13 +170,14 @@ func (flasher *Flasher) serialFillBuffer(buffer []byte) error {
169170
}
170171

171172
func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, payload []byte) error {
172-
if err := binary.Write(flasher.port, binary.BigEndian, command); err != nil {
173+
buff := new(bytes.Buffer)
174+
if err := binary.Write(buff, binary.BigEndian, command); err != nil {
173175
return err
174176
}
175-
if err := binary.Write(flasher.port, binary.BigEndian, address); err != nil {
177+
if err := binary.Write(buff, binary.BigEndian, address); err != nil {
176178
return err
177179
}
178-
if err := binary.Write(flasher.port, binary.BigEndian, val); err != nil {
180+
if err := binary.Write(buff, binary.BigEndian, val); err != nil {
179181
return err
180182
}
181183
var length uint16
@@ -184,13 +186,23 @@ func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, pa
184186
} else {
185187
length = uint16(len(payload))
186188
}
187-
if err := binary.Write(flasher.port, binary.BigEndian, length); err != nil {
189+
if err := binary.Write(buff, binary.BigEndian, length); err != nil {
188190
return err
189191
}
190192
if payload != nil {
191-
if _, err := flasher.port.Write(payload); err != nil {
193+
buff.Write(payload)
194+
}
195+
data := buff.Bytes()
196+
for {
197+
sent, err := flasher.port.Write(data)
198+
if err != nil {
192199
return err
193200
}
201+
if sent == len(data) {
202+
break
203+
}
204+
// fmt.Println("HEY! sent", sent, "out of", len(data))
205+
data = data[sent:]
194206
}
195207
return nil
196208
}

modules/sara/flasher.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
package sara
2121

2222
import (
23-
"github.com/arduino/FirmwareUpdater/utils"
24-
serial "github.com/facchinm/go-serial"
2523
"log"
2624
"strings"
2725
"time"
28-
//"strconv"
26+
27+
"github.com/arduino/FirmwareUpdater/utils"
28+
"go.bug.st/serial"
2929
)
3030

3131
type FlasherError struct {
@@ -124,8 +124,14 @@ func (flasher *Flasher) serialFillBuffer(buffer []byte) error {
124124

125125
func (flasher *Flasher) sendCommand(payload []byte) error {
126126
if payload != nil {
127-
if _, err := flasher.port.Write(payload); err != nil {
128-
return err
127+
for {
128+
if sent, err := flasher.port.Write(payload); err != nil {
129+
return err
130+
} else if sent < len(payload) {
131+
payload = payload[sent:]
132+
} else {
133+
break
134+
}
129135
}
130136
}
131137
return nil

modules/winc/flasher.go

+21-7
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@
2020
package winc
2121

2222
import (
23+
"bytes"
2324
"encoding/binary"
24-
"github.com/arduino/FirmwareUpdater/utils"
25-
serial "github.com/facchinm/go-serial"
2625
"log"
2726
"time"
27+
28+
"github.com/arduino/FirmwareUpdater/utils"
29+
"go.bug.st/serial"
2830
)
2931

3032
type FlasherError struct {
@@ -167,13 +169,14 @@ func (flasher *Flasher) serialFillBuffer(buffer []byte) error {
167169
}
168170

169171
func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, payload []byte) error {
170-
if err := binary.Write(flasher.port, binary.BigEndian, command); err != nil {
172+
buff := new(bytes.Buffer)
173+
if err := binary.Write(buff, binary.BigEndian, command); err != nil {
171174
return err
172175
}
173-
if err := binary.Write(flasher.port, binary.BigEndian, address); err != nil {
176+
if err := binary.Write(buff, binary.BigEndian, address); err != nil {
174177
return err
175178
}
176-
if err := binary.Write(flasher.port, binary.BigEndian, val); err != nil {
179+
if err := binary.Write(buff, binary.BigEndian, val); err != nil {
177180
return err
178181
}
179182
var length uint16
@@ -182,13 +185,24 @@ func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, pa
182185
} else {
183186
length = uint16(len(payload))
184187
}
185-
if err := binary.Write(flasher.port, binary.BigEndian, length); err != nil {
188+
if err := binary.Write(buff, binary.BigEndian, length); err != nil {
186189
return err
187190
}
188191
if payload != nil {
189-
if _, err := flasher.port.Write(payload); err != nil {
192+
buff.Write(payload)
193+
}
194+
195+
data := buff.Bytes()
196+
for {
197+
sent, err := flasher.port.Write(data)
198+
if err != nil {
190199
return err
191200
}
201+
if sent == len(data) {
202+
break
203+
}
204+
// fmt.Println("HEY! sent", sent, "out of", len(data))
205+
data = data[sent:]
192206
}
193207
return nil
194208
}

modules/winc/main.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,22 @@ import (
2323
"bytes"
2424
"errors"
2525
"fmt"
26-
"github.com/arduino/FirmwareUpdater/programmers/bossac"
27-
"github.com/arduino/FirmwareUpdater/utils/context"
2826
"io/ioutil"
2927
"log"
3028
"os"
3129
"strconv"
30+
31+
"github.com/arduino/FirmwareUpdater/programmers/bossac"
32+
"github.com/arduino/FirmwareUpdater/utils/context"
3233
)
3334

3435
var f *Flasher
3536
var payloadSize uint16
36-
var programmer context.Programmer
3737

3838
func Run(ctx context.Context) {
3939

4040
var err error
41-
programmer = &bossac.Bossac{}
41+
programmer := &bossac.Bossac{}
4242

4343
if ctx.FWUploaderBinary != "" {
4444
log.Println("Flashing firmware uploader winc")

0 commit comments

Comments
 (0)