kopia lustrzana https://github.com/cyoung/stratux
Merge branch 'master' of https://github.com/cyoung/stratux
commit
63922bccdd
96
main/sdr.go
96
main/sdr.go
|
@ -5,6 +5,9 @@ import (
|
||||||
rtl "github.com/jpoirier/gortlsdr"
|
rtl "github.com/jpoirier/gortlsdr"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
"os/exec"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var uatSDR int // Index.
|
var uatSDR int // Index.
|
||||||
|
@ -12,6 +15,20 @@ var esSDR int // Index.
|
||||||
|
|
||||||
var maxSignalStrength int
|
var maxSignalStrength int
|
||||||
|
|
||||||
|
|
||||||
|
func getSDRSerial(dev *rtl.Context) (string, error) {
|
||||||
|
info, err := dev.GetHwInfo()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
info.Serial = strings.Replace(info.Serial, "\x00", "", -1)
|
||||||
|
return info.Serial, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func setSDRSerial(dev *rtl.Context, info rtl.HwInfo) error {
|
||||||
|
return dev.SetHwInfo(info)
|
||||||
|
}
|
||||||
|
|
||||||
// Read 978MHz from SDR.
|
// Read 978MHz from SDR.
|
||||||
func sdrReader() {
|
func sdrReader() {
|
||||||
var err error
|
var err error
|
||||||
|
@ -24,12 +41,7 @@ func sdrReader() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer dev.Close()
|
defer dev.Close()
|
||||||
m, p, s, err := dev.GetUsbStrings()
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("\tGetUsbStrings Failed - error: %s\n", err)
|
|
||||||
} else {
|
|
||||||
log.Printf("\tGetUsbStrings - %s %s %s\n", m, p, s)
|
|
||||||
}
|
|
||||||
log.Printf("\tGetTunerType: %s\n", dev.GetTunerType())
|
log.Printf("\tGetTunerType: %s\n", dev.GetTunerType())
|
||||||
|
|
||||||
//---------- Set Tuner Gain ----------
|
//---------- Set Tuner Gain ----------
|
||||||
|
@ -111,7 +123,7 @@ func sdrReader() {
|
||||||
log.Printf("\tSetFreqCorrection %d Successful\n", globalSettings.PPM)
|
log.Printf("\tSetFreqCorrection %d Successful\n", globalSettings.PPM)
|
||||||
}
|
}
|
||||||
|
|
||||||
for uatSDR != -1 {
|
for uatSDR != -1 && globalSettings.UAT_Enabled {
|
||||||
var buffer = make([]uint8, rtl.DefaultBufLength)
|
var buffer = make([]uint8, rtl.DefaultBufLength)
|
||||||
nRead, err := dev.ReadSync(buffer, rtl.DefaultBufLength)
|
nRead, err := dev.ReadSync(buffer, rtl.DefaultBufLength)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -124,6 +136,7 @@ func sdrReader() {
|
||||||
godump978.InChan <- buf
|
godump978.InChan <- buf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
esSDR = -1
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read from the godump978 channel - on or off.
|
// Read from the godump978 channel - on or off.
|
||||||
|
@ -145,28 +158,75 @@ func sdrWatcher() {
|
||||||
// Update device count.
|
// Update device count.
|
||||||
globalStatus.Devices = uint(rtl.GetDeviceCount())
|
globalStatus.Devices = uint(rtl.GetDeviceCount())
|
||||||
|
|
||||||
if uatSDR == -1 && globalSettings.UAT_Enabled {
|
if (uatSDR != -1 || !globalSettings.UAT_Enabled) && (esSDR != -1 || !globalSettings.ES_Enabled) {
|
||||||
if globalStatus.Devices == 0 {
|
// Nothing to do. All devices are set up and running or not required.
|
||||||
log.Printf("No RTL-SDR devices.\n")
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the device strings for every device that we can.
|
||||||
|
devs := make(map[int]string)
|
||||||
|
for i := 0; i < int(globalStatus.Devices); i++ {
|
||||||
|
dev, err := rtl.Open(i)
|
||||||
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
uatSDR = 0
|
serial, err := getSDRSerial(dev)
|
||||||
go sdrReader()
|
if err != nil {
|
||||||
}
|
continue
|
||||||
if esSDR == -1 && globalSettings.ES_Enabled {
|
}
|
||||||
if globalStatus.Devices == 0 || (globalStatus.Devices == 1 && globalSettings.UAT_Enabled) {
|
devs[i] = serial
|
||||||
log.Printf("Not enough RTL-SDR devices.\n")
|
dev.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
if uatSDR == -1 && globalSettings.UAT_Enabled {
|
||||||
|
for devid, serial := range devs {
|
||||||
|
if strings.HasPrefix(serial, "stratux:978") {
|
||||||
|
uatSDR = devid
|
||||||
|
delete(devs, devid)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if uatSDR == -1 {
|
||||||
|
for devid, _ := range devs {
|
||||||
|
uatSDR = devid
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if uatSDR != -1 {
|
||||||
|
log.Printf("UAT SDR: %d\n", uatSDR)
|
||||||
|
go sdrReader()
|
||||||
|
} else {
|
||||||
|
log.Printf("Can't start UAT listening - no available RTL-SDR.\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if esSDR == -1 && globalSettings.ES_Enabled {
|
||||||
|
for devid, _ := range devs {
|
||||||
|
esSDR = devid
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if esSDR != -1 {
|
||||||
|
log.Printf("ES SDR: %d\n", esSDR)
|
||||||
|
// Assume that this keeps running forever and won't change.
|
||||||
|
//TODO: esSDR modify, watch if SDR disappears.
|
||||||
|
err := exec.Command("/usr/bin/dump1090", "--net", "--device-index", strconv.Itoa(esSDR)).Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error executing /usr/bin/dump1090: %s\n", err.Error())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Printf("Can't start ES listening - no available RTL-SDR.\n")
|
||||||
}
|
}
|
||||||
esSDR = 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func sdrInit() {
|
func sdrInit() {
|
||||||
|
godump978.Dump978Init()
|
||||||
uatSDR = -1
|
uatSDR = -1
|
||||||
esSDR = -1
|
esSDR = -1
|
||||||
go sdrWatcher()
|
go sdrWatcher()
|
||||||
go uatReader()
|
go uatReader()
|
||||||
godump978.Dump978Init()
|
|
||||||
go godump978.ProcessDataFromChannel()
|
go godump978.ProcessDataFromChannel()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
screen -S stratux -d -m /usr/bin/start_uat
|
screen -S stratux -d -m /usr/bin/start_uat
|
||||||
screen -S dump1090 -d -m /usr/bin/dump1090 --net --device-index 1
|
|
||||||
|
|
Ładowanie…
Reference in New Issue