Skip to content

Commit 0630fc2

Browse files
committed
Checking serial port write overrung in all flashers
1 parent 984a6fd commit 0630fc2

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

modules/nina/flasher.go

+17-5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package nina
2121

2222
import (
23+
"bytes"
2324
"crypto/md5"
2425
"encoding/binary"
2526
"log"
@@ -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

+8-2
Original file line numberDiff line numberDiff line change
@@ -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

0 commit comments

Comments
 (0)