mirror of
https://github.com/Fishwaldo/go-dcdc200.git
synced 2025-03-15 19:41:23 +00:00
91 lines
2.1 KiB
Go
91 lines
2.1 KiB
Go
package sim
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/go-logr/logr"
|
|
)
|
|
|
|
type SimIF struct {
|
|
log logr.Logger
|
|
file *os.File
|
|
}
|
|
|
|
var captureFile string
|
|
|
|
func SetCaptureFile(name string) error {
|
|
// fmt.Printf("Simulation Open File: %s\n", name)
|
|
file, err := os.Open(name)
|
|
if err != nil {
|
|
// fmt.Printf("Open Failed: %s", err);
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
captureFile = name
|
|
// fmt.Printf("Simulation File: %s\n", captureFile)
|
|
return nil
|
|
}
|
|
|
|
func Init(log logr.Logger) *SimIF {
|
|
usbif := SimIF{log: log}
|
|
usbif.log.Info("Enabling Simulation Replay")
|
|
if captureFile == "" {
|
|
usbif.log.Error(nil, "USB Capture File not Specified");
|
|
}
|
|
var err error
|
|
usbif.file, err = os.Open(captureFile)
|
|
if err != nil {
|
|
usbif.log.Error(err, "cannot open USB Capture File", "file", captureFile)
|
|
}
|
|
return &usbif
|
|
}
|
|
|
|
func (usbif *SimIF) SetUSBDebug(level int) {
|
|
}
|
|
|
|
func (usbif *SimIF) Scan() (bool, error) {
|
|
if usbif.file != nil {
|
|
return true, nil
|
|
} else {
|
|
return false, fmt.Errorf("capture File Not Specified")
|
|
}
|
|
}
|
|
func (usbif *SimIF) Close() {
|
|
if usbif.file != nil {
|
|
usbif.file.Close()
|
|
}
|
|
}
|
|
func (usbif *SimIF) GetAllParam(ctx context.Context) ([]byte, int, error) {
|
|
if usbif.file == nil {
|
|
usbif.log.Error(nil, "usb Capture File Not Opened")
|
|
return nil, 0, fmt.Errorf("usb Capture File Not Opened")
|
|
}
|
|
cap := make([]byte, 24)
|
|
var len int
|
|
var err error
|
|
if offset, err := usbif.file.Seek(0, io.SeekCurrent); err == nil {
|
|
usbif.log.V(2).Info("USB Capture File at Position", "offset", offset)
|
|
}
|
|
len, err = usbif.file.Read(cap)
|
|
if err != nil {
|
|
if err == io.EOF {
|
|
usbif.file.Seek(0, 0)
|
|
_, err = usbif.file.Read(cap)
|
|
if err != nil {
|
|
usbif.log.Error(err, "Seek to start of file Failed")
|
|
return nil, 0, fmt.Errorf("seek to Start of File Failed: %s", err)
|
|
}
|
|
} else {
|
|
usbif.log.Error(err, "Read From Capture File Returned Error")
|
|
return nil, 0, fmt.Errorf("read from Capture FIle Returned %s", err)
|
|
}
|
|
}
|
|
if len != 24 {
|
|
usbif.log.Error(nil, "Short Read from USB Capture File", "len", len)
|
|
return nil, 0, fmt.Errorf("short Read from USB Capture File: %d", len)
|
|
}
|
|
return cap, len, nil
|
|
}
|