From f88dcd01e61feaf1385a1f47411714304732fd7e Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 8 Oct 2018 19:01:01 +0200 Subject: [PATCH] FileRecord improvement: create a command to rescue corrupted .sdriq files --- rescuesdriq/rescuesdriq.go | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 rescuesdriq/rescuesdriq.go diff --git a/rescuesdriq/rescuesdriq.go b/rescuesdriq/rescuesdriq.go new file mode 100644 index 000000000..614fa4216 --- /dev/null +++ b/rescuesdriq/rescuesdriq.go @@ -0,0 +1,77 @@ +package main + +import ( + "flag" + "fmt" + "bufio" + "io" + "os" + "bytes" + "encoding/binary" + "time" +) + + +type HeaderStd struct { + SampleRate uint32 + CenterFrequency uint64 + StartTimestamp int64 + SampleSize uint32 + _ uint32 + CRC32 uint32 +} + +func analyze(fileName string) HeaderStd { + fmt.Println("input file:", fileName) + + // open input file + fi, err := os.Open(fileName) + if err != nil { + panic(err) + } + // close fi on exit and check for its returned error + defer func() { + if err := fi.Close(); err != nil { + panic(err) + } + }() + // make a read buffer + r := bufio.NewReader(fi) + + headerbuf := make([]byte, 32) // This is a full header with CRC + n, err := r.Read(headerbuf) + if err != nil && err != io.EOF { + panic(err) + } + if (n != 32) { + panic("Header too small") + } + + var header HeaderStd + headerr := bytes.NewReader(headerbuf) + err = binary.Read(headerr, binary.LittleEndian, &header) + if err != nil { + panic(err) + } + + fmt.Println("Sample rate:", header.SampleRate) + fmt.Println("Frequency :", header.CenterFrequency) + fmt.Println("Sample Size:", header.SampleSize) + tm := time.Unix(header.StartTimestamp, 0) + fmt.Println("Start :", tm) + + return header +} + +func main() { + wordPtr := flag.String("in", "foo", "input file") + flag.Parse() + flagSeen := make(map[string]bool) + flag.Visit(func(f *flag.Flag) { flagSeen[f.Name] = true }) + + if flagSeen["in"] { + analyze(*wordPtr) + } else { + fmt.Println("No input file given") + } +}