2020package winc
2121
2222import (
23+ "bytes"
2324 "encoding/binary"
2425 "log"
2526 "time"
@@ -168,13 +169,14 @@ func (flasher *Flasher) serialFillBuffer(buffer []byte) error {
168169}
169170
170171func (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