2020package nina
2121
2222import (
23+ "bytes"
2324 "crypto/md5"
2425 "encoding/binary"
2526 "log"
@@ -169,13 +170,14 @@ func (flasher *Flasher) serialFillBuffer(buffer []byte) error {
169170}
170171
171172func (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}
0 commit comments