Skip to content

Commit

Permalink
Merge pull request #11 from arduino/refactors
Browse files Browse the repository at this point in the history
Refactors and fix to serial write overrun
  • Loading branch information
cmaglie committed Sep 29, 2020
2 parents be48f59 + 370de5c commit 56c72bb
Show file tree
Hide file tree
Showing 53 changed files with 476 additions and 3,952 deletions.
6 changes: 4 additions & 2 deletions README.adoc
Expand Up @@ -48,9 +48,11 @@ The full list of command line options can be obtained with the `-h` option: `./u

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

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

This will create a bin folder with `cli` executable in it.
go build -o updater

This will create the `updater` executable.

== License ==

Expand Down
32 changes: 16 additions & 16 deletions distrib.sh
@@ -1,6 +1,6 @@
#!/bin/bash
#!/bin/bash -ex

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

rm -rf distrib
Expand All @@ -13,22 +13,22 @@ mkdir -p distrib/windows

export CGO_ENABLED=0

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

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

cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linux64
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linux32
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linuxarm
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/linuxarm64
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/windows
cp -r $GOPATH/src/github.com/arduino/FirmwareUpdater/firmwares distrib/osx
cp -r firmwares distrib/linux64
cp -r firmwares distrib/linux32
cp -r firmwares distrib/linuxarm
cp -r firmwares distrib/linuxarm64
cp -r firmwares distrib/windows
cp -r firmwares distrib/osx

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

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

# call the tool with something like
# ./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
# ./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
10 changes: 6 additions & 4 deletions go.mod
Expand Up @@ -2,9 +2,11 @@ module github.com/arduino/FirmwareUpdater

go 1.14

// branch with support for serial timeouts
replace go.bug.st/serial => github.com/cmaglie/go-serial v0.0.0-20200923162623-b214c147e37e

require (
github.com/creack/goselect v0.0.0-20180501195510-58854f77ee8d // indirect
github.com/facchinm/go-serial v0.0.0-20190206110233-459a153afba0
go.bug.st/serial.v1 v0.0.0-20180827123349-5f7892a7bb45
golang.org/x/sys v0.0.0-20190411185658-b44545bcd369 // indirect
github.com/arduino/arduino-cli v0.0.0-20200924151007-69ac12c98b2b
github.com/pkg/errors v0.9.1
go.bug.st/serial v1.1.1
)
337 changes: 331 additions & 6 deletions go.sum

Large diffs are not rendered by default.

File renamed without changes.
26 changes: 19 additions & 7 deletions modules/nina/flasher.go
Expand Up @@ -20,13 +20,14 @@
package nina

import (
"bytes"
"crypto/md5"
"encoding/binary"
"github.com/arduino/FirmwareUpdater/utils"
"log"
"time"

serial "github.com/facchinm/go-serial"
"github.com/arduino/FirmwareUpdater/utils"
"go.bug.st/serial"
)

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

func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, payload []byte) error {
if err := binary.Write(flasher.port, binary.BigEndian, command); err != nil {
buff := new(bytes.Buffer)
if err := binary.Write(buff, binary.BigEndian, command); err != nil {
return err
}
if err := binary.Write(flasher.port, binary.BigEndian, address); err != nil {
if err := binary.Write(buff, binary.BigEndian, address); err != nil {
return err
}
if err := binary.Write(flasher.port, binary.BigEndian, val); err != nil {
if err := binary.Write(buff, binary.BigEndian, val); err != nil {
return err
}
var length uint16
Expand All @@ -184,13 +186,23 @@ func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, pa
} else {
length = uint16(len(payload))
}
if err := binary.Write(flasher.port, binary.BigEndian, length); err != nil {
if err := binary.Write(buff, binary.BigEndian, length); err != nil {
return err
}
if payload != nil {
if _, err := flasher.port.Write(payload); err != nil {
buff.Write(payload)
}
data := buff.Bytes()
for {
sent, err := flasher.port.Write(data)
if err != nil {
return err
}
if sent == len(data) {
break
}
// fmt.Println("HEY! sent", sent, "out of", len(data))
data = data[sent:]
}
return nil
}
Expand Down
16 changes: 11 additions & 5 deletions modules/sara/flasher.go
Expand Up @@ -20,12 +20,12 @@
package sara

import (
"github.com/arduino/FirmwareUpdater/utils"
serial "github.com/facchinm/go-serial"
"log"
"strings"
"time"
//"strconv"

"github.com/arduino/FirmwareUpdater/utils"
"go.bug.st/serial"
)

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

func (flasher *Flasher) sendCommand(payload []byte) error {
if payload != nil {
if _, err := flasher.port.Write(payload); err != nil {
return err
for {
if sent, err := flasher.port.Write(payload); err != nil {
return err
} else if sent < len(payload) {
payload = payload[sent:]
} else {
break
}
}
}
return nil
Expand Down
28 changes: 21 additions & 7 deletions modules/winc/flasher.go
Expand Up @@ -20,11 +20,13 @@
package winc

import (
"bytes"
"encoding/binary"
"github.com/arduino/FirmwareUpdater/utils"
serial "github.com/facchinm/go-serial"
"log"
"time"

"github.com/arduino/FirmwareUpdater/utils"
"go.bug.st/serial"
)

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

func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, payload []byte) error {
if err := binary.Write(flasher.port, binary.BigEndian, command); err != nil {
buff := new(bytes.Buffer)
if err := binary.Write(buff, binary.BigEndian, command); err != nil {
return err
}
if err := binary.Write(flasher.port, binary.BigEndian, address); err != nil {
if err := binary.Write(buff, binary.BigEndian, address); err != nil {
return err
}
if err := binary.Write(flasher.port, binary.BigEndian, val); err != nil {
if err := binary.Write(buff, binary.BigEndian, val); err != nil {
return err
}
var length uint16
Expand All @@ -182,13 +185,24 @@ func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, pa
} else {
length = uint16(len(payload))
}
if err := binary.Write(flasher.port, binary.BigEndian, length); err != nil {
if err := binary.Write(buff, binary.BigEndian, length); err != nil {
return err
}
if payload != nil {
if _, err := flasher.port.Write(payload); err != nil {
buff.Write(payload)
}

data := buff.Bytes()
for {
sent, err := flasher.port.Write(data)
if err != nil {
return err
}
if sent == len(data) {
break
}
// fmt.Println("HEY! sent", sent, "out of", len(data))
data = data[sent:]
}
return nil
}
Expand Down
8 changes: 4 additions & 4 deletions modules/winc/main.go
Expand Up @@ -23,22 +23,22 @@ import (
"bytes"
"errors"
"fmt"
"github.com/arduino/FirmwareUpdater/programmers/bossac"
"github.com/arduino/FirmwareUpdater/utils/context"
"io/ioutil"
"log"
"os"
"strconv"

"github.com/arduino/FirmwareUpdater/programmers/bossac"
"github.com/arduino/FirmwareUpdater/utils/context"
)

var f *Flasher
var payloadSize uint16
var programmer context.Programmer

func Run(ctx context.Context) {

var err error
programmer = &bossac.Bossac{}
programmer := &bossac.Bossac{}

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

0 comments on commit 56c72bb

Please sign in to comment.