1
1
package msc
2
2
3
3
import (
4
- "fmt"
5
4
"machine"
6
5
"machine/usb"
7
6
"machine/usb/descriptor"
@@ -58,21 +57,6 @@ type msc struct {
58
57
senseKey scsi.Sense
59
58
addlSenseCode scsi.SenseCode
60
59
addlSenseQualifier uint8
61
-
62
- // TODO: Cleanup
63
- loops uint32 // Number of loops in the current state
64
- prevState mscState
65
- savedState mscState
66
- packetsSent uint32 // Number of packets sent
67
- packetsRecv uint32 // Number of packets received
68
- packetsAcked uint32 // Number of packets acknowledged
69
- packetErrors uint32 // Number of error packets sent
70
- canaryA uint32 // Canaries for debugging
71
- canaryB uint32 // Canaries for debugging
72
- canaryC uint32 // Canaries for debugging
73
- canaryBuf [31 ]byte // CBW buffer container
74
- cbwLog []CBW // CBW log container
75
- msgLog []MsgLog // TX/RX log container
76
60
}
77
61
78
62
// Port returns the USB Mass Storage port
@@ -168,10 +152,6 @@ func (m *msc) resetBuffer(length int) {
168
152
169
153
func (m * msc ) sendUSBPacket (b []byte ) {
170
154
if machine .USBDev .InitEndpointComplete {
171
- if len (m .msgLog ) > 0 {
172
- m .saveMsgLog (b , true ) // FIXME: Cleanup
173
- }
174
- m .packetsSent ++ // TODO: Cleanup?
175
155
// Send the USB packet
176
156
machine .SendUSBInPacket (usb .MSC_ENDPOINT_IN , b )
177
157
}
@@ -190,7 +170,6 @@ func (m *msc) sendCSW(status csw.Status) {
190
170
191
171
func txHandler () {
192
172
if MSC != nil {
193
- MSC .packetsAcked ++ // TODO: Cleanup?
194
173
MSC .txHandler ()
195
174
}
196
175
}
@@ -202,10 +181,6 @@ func (m *msc) txHandler() {
202
181
func rxHandler (b []byte ) bool {
203
182
ack := true
204
183
if MSC != nil {
205
- if len (MSC .msgLog ) > 0 {
206
- MSC .saveMsgLog (b , false ) // FIXME: Cleanup
207
- }
208
- MSC .packetsRecv ++ // TODO: Cleanup?
209
184
ack = MSC .run (b , true )
210
185
}
211
186
return ack
@@ -239,14 +214,6 @@ command execution and moves to mscStateStatusSent.
239
214
6. The host ACKs the CSW and the MSC moves back to mscStateCmd, waiting for the next CBW.
240
215
*/
241
216
func (m * msc ) run (b []byte , isEpOut bool ) bool {
242
- // TODO: Cleanup?
243
- if m .prevState != m .state {
244
- m .savedState = m .prevState
245
- m .loops = 0
246
- m .prevState = m .state
247
- }
248
- m .loops ++
249
-
250
217
ack := true
251
218
252
219
switch m .state {
@@ -258,11 +225,6 @@ func (m *msc) run(b []byte, isEpOut bool) bool {
258
225
return ack
259
226
}
260
227
261
- // Save debug log of received CBW commands
262
- if len (m .cbwLog ) > 0 {
263
- m .saveCBW (b )
264
- }
265
-
266
228
// Create a temporary CBW wrapper to validate the incoming data. Has to be temporary
267
229
// to avoid it escaping into the heap since we're in interrupt context
268
230
cbw := CBW {Data : b }
@@ -335,123 +297,3 @@ func (m *msc) run(b []byte, isEpOut bool) bool {
335
297
336
298
return ack
337
299
}
338
-
339
- // TODO: Cleanup
340
- func (m * msc ) CanaryBuf () string {
341
- if m .canaryA > 0 {
342
- return fmt .Sprintf ("% x" , m .canaryBuf )
343
- }
344
- return ""
345
- }
346
-
347
- func stateToString (state mscState ) string {
348
- switch state {
349
- case mscStateCmd :
350
- return "CmdWait"
351
- case mscStateData :
352
- return "Data"
353
- case mscStateStatus :
354
- return "SendStatus"
355
- case mscStateStatusSent :
356
- return "StatusSent"
357
- case mscStateNeedReset :
358
- return "NeedReset"
359
- default :
360
- return "Unknown"
361
- }
362
- }
363
-
364
- func (m * msc ) State () string {
365
- switch m .state {
366
- case mscStateCmd :
367
- return fmt .Sprintf ("(%d/%d/%d) [%d/%d/%d/%d] CmdWait (%d) <- %s" , m .canaryA , m .canaryB , m .canaryC , m .packetsRecv , m .packetsSent , m .packetsAcked , m .packetErrors , m .loops , stateToString (m .savedState ))
368
- case mscStateData :
369
- return fmt .Sprintf ("(%d/%d/%d) [%d/%d/%d/%d] Data [%d/%d/%d] (%d) <- %s" , m .canaryA , m .canaryB , m .canaryC , m .packetsRecv , m .packetsSent , m .packetsAcked , m .packetErrors , m .queuedBytes , m .sentBytes , m .totalBytes , m .loops , stateToString (m .savedState ))
370
- case mscStateStatus :
371
- return fmt .Sprintf ("(%d/%d/%d) [%d/%d/%d/%d] SendStatus (%d) <- %s" , m .canaryA , m .canaryB , m .canaryC , m .packetsRecv , m .packetsSent , m .packetsAcked , m .packetErrors , m .loops , stateToString (m .savedState ))
372
- case mscStateStatusSent :
373
- return fmt .Sprintf ("(%d/%d/%d) [%d/%d/%d/%d] StatusSent (%d) <- %s" , m .canaryA , m .canaryB , m .canaryC , m .packetsRecv , m .packetsSent , m .packetsAcked , m .packetErrors , m .loops , stateToString (m .savedState ))
374
- case mscStateNeedReset :
375
- return fmt .Sprintf ("(%d/%d/%d) [%d/%d/%d/%d] NeedReset (%d) <- %s" , m .canaryA , m .canaryB , m .canaryC , m .packetsRecv , m .packetsSent , m .packetsAcked , m .packetErrors , m .loops , stateToString (m .savedState ))
376
- default :
377
- return "Unknown"
378
- }
379
- }
380
-
381
- func (m * msc ) saveCBW (b []byte ) {
382
- n := len (m .cbwLog ) - 1
383
- // Shift the log entries up to make room for a new entry
384
- for i := 0 ; i < n ; i ++ {
385
- copy (m .cbwLog [i ].Data , m .cbwLog [i + 1 ].Data )
386
- m .cbwLog [i ].HasCmd = m .cbwLog [i + 1 ].HasCmd
387
- }
388
- copy (m .cbwLog [n ].Data , b )
389
- m .cbwLog [n ].HasCmd = true
390
- }
391
-
392
- func (m * msc ) SetCBWLogSize (n int ) {
393
- // Initialize the CBW log with a fixed size
394
- m .cbwLog = make ([]CBW , n )
395
- for i := range m .cbwLog {
396
- m .cbwLog [i ].Data = make ([]byte , 31 )
397
- }
398
- }
399
-
400
- func (m * msc ) CBWLog () []CBW {
401
- return m .cbwLog
402
- }
403
-
404
- type MsgLog struct {
405
- CBW CBW
406
- Data []byte
407
- Length int
408
- Tx bool
409
- Valid bool
410
- }
411
-
412
- func (m * msc ) saveMsgLog (b []byte , tx bool ) {
413
- n := len (m .msgLog ) - 1
414
- // Shift the log entries up to make room for a new entry
415
- for i := 0 ; i < n ; i ++ {
416
- copy (m .msgLog [i ].CBW .Data , m .msgLog [i + 1 ].CBW .Data )
417
- copy (m .msgLog [i ].Data , m .msgLog [i + 1 ].Data )
418
- m .msgLog [i ].Length = m .msgLog [i + 1 ].Length
419
- m .msgLog [i ].Tx = m .msgLog [i + 1 ].Tx
420
- m .msgLog [i ].Valid = m .msgLog [i + 1 ].Valid
421
- }
422
- copy (m .msgLog [n ].CBW .Data , m .cbw .Data )
423
- copy (m .msgLog [n ].Data , b )
424
- m .msgLog [n ].Length = len (b )
425
- m .msgLog [n ].Tx = tx
426
- m .msgLog [n ].Valid = true
427
- }
428
-
429
- func (m * msc ) SetMsgLogSize (n int ) {
430
- // Initialize the TX log with a fixed size
431
- m .msgLog = make ([]MsgLog , n )
432
- for i := range m .msgLog {
433
- m .msgLog [i ].CBW = CBW {Data : make ([]byte , cbwMsgLen )}
434
- m .msgLog [i ].Data = make ([]byte , m .maxPacketSize )
435
- }
436
- }
437
-
438
- func (m * msc ) MsgLog () []MsgLog {
439
- return m .msgLog
440
- }
441
-
442
- func (m * msc ) ClearMsgLog () {
443
- // Clear the TX log
444
- for i := range m .msgLog {
445
- m .msgLog [i ].Valid = false
446
- }
447
- }
448
-
449
- func allZero (b []byte ) bool {
450
- // FIXME: Cleanup
451
- for i := 0 ; i < len (b ); i ++ {
452
- if b [i ] != 0 {
453
- return false
454
- }
455
- }
456
- return len (b ) != 0
457
- }
0 commit comments