Files

84 lines
1.7 KiB
Go

package extract
import (
"bufio"
"fmt"
"os"
"path/filepath"
log "github.com/sirupsen/logrus"
)
const (
AOSFrameLength = 1024
AOSTempDataPrefix = "AOS_Data_"
)
var AOSSyncWord = []byte{0x1A, 0xCF, 0xFC, 0x1D}
type AOSFrame struct {
}
func (p *Extractor) ExtractAosData() (string, error) {
// 打开传输帧文件 - 一次读入内存
rawData, err := os.ReadFile(p.params.InputData)
if err != nil {
log.Println("read data from", p.params.InputData, "error:", err.Error())
return "", err
}
name := filepath.Base(p.params.InputData)
aosDataFile := filepath.Join(p.params.TempPath, AOSTempDataPrefix+name)
foData, err := os.OpenFile(aosDataFile,
os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777)
if err != nil {
fmt.Println("create data err", err.Error())
return "", err
}
defer foData.Close()
wData := bufio.NewWriter(foData)
var validFrameCnt int
var errFrameCnt int
for i := 0; i < len(rawData); {
// 寻找帧头 0x1A CF FC 1D
if i+4 > len(rawData) {
log.Info("end of raw data")
break
}
if rawData[i] == 0x1A && rawData[i+1] == 0xCF && rawData[i+2] == 0xFC && rawData[i+3] == 0x1D {
// 找到帧头
log.Debug("detect AOS frame")
} else {
i++
continue
}
if i+1024 > len(rawData) {
log.Info("not enough data for AOS frame")
break
}
// 读取完整帧
if LDPCCheck(rawData[i:i+1024]) != nil {
errFrameCnt++
}
// 三江源一号在 AOS 帧的数据域最后 2 字节为填充字节
wData.Write(rawData[i+10 : i+894])
i += 1024
validFrameCnt++
}
log.Println("valid AOS frame cnt:", validFrameCnt)
log.Println("error AOS frame cnt:", errFrameCnt)
return aosDataFile, nil
}
func LDPCCheck(frame []byte) error {
return nil
}