Skip to content

Commit af6f2ce

Browse files
committed
Check serial write overrun in WiFiNINA flasher
1 parent 775097c commit af6f2ce

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

modules/winc/flasher.go

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

2222
import (
23+
"bytes"
2324
"encoding/binary"
2425
"log"
2526
"time"
@@ -168,13 +169,14 @@ func (flasher *Flasher) serialFillBuffer(buffer []byte) error {
168169
}
169170

170171
func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, payload []byte) error {
171-
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 {
172174
return err
173175
}
174-
if err := binary.Write(flasher.port, binary.BigEndian, address); err != nil {
176+
if err := binary.Write(buff, binary.BigEndian, address); err != nil {
175177
return err
176178
}
177-
if err := binary.Write(flasher.port, binary.BigEndian, val); err != nil {
179+
if err := binary.Write(buff, binary.BigEndian, val); err != nil {
178180
return err
179181
}
180182
var length uint16
@@ -183,13 +185,24 @@ func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, pa
183185
} else {
184186
length = uint16(len(payload))
185187
}
186-
if err := binary.Write(flasher.port, binary.BigEndian, length); err != nil {
188+
if err := binary.Write(buff, binary.BigEndian, length); err != nil {
187189
return err
188190
}
189191
if payload != nil {
190-
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 {
191199
return err
192200
}
201+
if sent == len(data) {
202+
break
203+
}
204+
// fmt.Println("HEY! sent", sent, "out of", len(data))
205+
data = data[sent:]
193206
}
194207
return nil
195208
}

0 commit comments

Comments
 (0)