20
20
package winc
21
21
22
22
import (
23
+ "bytes"
23
24
"encoding/binary"
24
25
"log"
25
26
"time"
@@ -168,13 +169,14 @@ func (flasher *Flasher) serialFillBuffer(buffer []byte) error {
168
169
}
169
170
170
171
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 {
172
174
return err
173
175
}
174
- if err := binary .Write (flasher . port , binary .BigEndian , address ); err != nil {
176
+ if err := binary .Write (buff , binary .BigEndian , address ); err != nil {
175
177
return err
176
178
}
177
- if err := binary .Write (flasher . port , binary .BigEndian , val ); err != nil {
179
+ if err := binary .Write (buff , binary .BigEndian , val ); err != nil {
178
180
return err
179
181
}
180
182
var length uint16
@@ -183,13 +185,24 @@ func (flasher *Flasher) sendCommand(command byte, address uint32, val uint32, pa
183
185
} else {
184
186
length = uint16 (len (payload ))
185
187
}
186
- if err := binary .Write (flasher . port , binary .BigEndian , length ); err != nil {
188
+ if err := binary .Write (buff , binary .BigEndian , length ); err != nil {
187
189
return err
188
190
}
189
191
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 {
191
199
return err
192
200
}
201
+ if sent == len (data ) {
202
+ break
203
+ }
204
+ // fmt.Println("HEY! sent", sent, "out of", len(data))
205
+ data = data [sent :]
193
206
}
194
207
return nil
195
208
}
0 commit comments