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