kopia lustrzana https://github.com/cyoung/stratux
Allows for per-SDR ppm information through RTL Serial numbers of
format stx:freq:ppm, such as stx:1090:20.pull/248/head
rodzic
c7151b74c5
commit
5d926a6274
37
main/sdr.go
37
main/sdr.go
|
@ -14,10 +14,10 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"../godump978"
|
"../godump978"
|
||||||
rtl "github.com/jpoirier/gortlsdr"
|
rtl "github.com/jpoirier/gortlsdr"
|
||||||
|
@ -26,12 +26,14 @@ import (
|
||||||
type UAT struct {
|
type UAT struct {
|
||||||
dev *rtl.Context
|
dev *rtl.Context
|
||||||
indexID int
|
indexID int
|
||||||
|
ppm int
|
||||||
serial string
|
serial string
|
||||||
}
|
}
|
||||||
|
|
||||||
type ES struct {
|
type ES struct {
|
||||||
dev *rtl.Context
|
dev *rtl.Context
|
||||||
indexID int
|
indexID int
|
||||||
|
ppm int
|
||||||
serial string
|
serial string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +63,7 @@ func readToChan(fp io.ReadCloser, ch chan []byte) {
|
||||||
func (e *ES) read() {
|
func (e *ES) read() {
|
||||||
defer es_wg.Done()
|
defer es_wg.Done()
|
||||||
log.Println("Entered ES read() ...")
|
log.Println("Entered ES read() ...")
|
||||||
cmd := exec.Command("/usr/bin/dump1090", "--net", "--device-index", strconv.Itoa(e.indexID))
|
cmd := exec.Command("/usr/bin/dump1090", "--net", "--device-index", strconv.Itoa(e.indexID), "--ppm", strconv.Itoa(e.ppm))
|
||||||
stdout, _ := cmd.StdoutPipe()
|
stdout, _ := cmd.StdoutPipe()
|
||||||
stderr, _ := cmd.StderrPipe()
|
stderr, _ := cmd.StderrPipe()
|
||||||
|
|
||||||
|
@ -125,11 +127,29 @@ func (u *UAT) read() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ES) sdrConfig() (err error) {
|
func (e *ES) sdrConfig() (err error) {
|
||||||
|
log.Printf("===== ES Device Serial: %s =====\n", e.serial)
|
||||||
|
r, _ := regexp.Compile("str?a?t?u?x:\\d+:?(-?\\d*)")
|
||||||
|
arr := r.FindStringSubmatch(e.serial)
|
||||||
|
if ppm, err := strconv.Atoi(arr[1]); err != nil {
|
||||||
|
e.ppm = globalSettings.PPM
|
||||||
|
} else {
|
||||||
|
e.ppm = ppm
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UAT) sdrConfig() (err error) {
|
func (u *UAT) sdrConfig() (err error) {
|
||||||
log.Printf("===== UAT Device name: %s =====\n", rtl.GetDeviceName(u.indexID))
|
log.Printf("===== UAT Device name: %s =====\n", rtl.GetDeviceName(u.indexID))
|
||||||
|
|
||||||
|
r, _ := regexp.Compile("str?a?t?u?x:\\d+:?(-?\\d*)")
|
||||||
|
arr := r.FindStringSubmatch(u.serial)
|
||||||
|
if ppm, err := strconv.Atoi(arr[1]); err != nil {
|
||||||
|
u.ppm = globalSettings.PPM
|
||||||
|
} else {
|
||||||
|
u.ppm = ppm
|
||||||
|
}
|
||||||
|
|
||||||
if u.dev, err = rtl.Open(u.indexID); err != nil {
|
if u.dev, err = rtl.Open(u.indexID); err != nil {
|
||||||
log.Printf("\tUAT Open Failed...\n")
|
log.Printf("\tUAT Open Failed...\n")
|
||||||
return
|
return
|
||||||
|
@ -223,13 +243,13 @@ func (u *UAT) sdrConfig() (err error) {
|
||||||
//---------- Get/Set Freq Correction ----------
|
//---------- Get/Set Freq Correction ----------
|
||||||
freqCorr := u.dev.GetFreqCorrection()
|
freqCorr := u.dev.GetFreqCorrection()
|
||||||
log.Printf("\tGetFreqCorrection: %d\n", freqCorr)
|
log.Printf("\tGetFreqCorrection: %d\n", freqCorr)
|
||||||
err = u.dev.SetFreqCorrection(globalSettings.PPM)
|
err = u.dev.SetFreqCorrection(u.ppm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
u.dev.Close()
|
u.dev.Close()
|
||||||
log.Printf("\tSetFreqCorrection %d Failed, error: %s\n", globalSettings.PPM, err)
|
log.Printf("\tSetFreqCorrection %d Failed, error: %s\n", u.ppm, err)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
log.Printf("\tSetFreqCorrection %d Successful\n", globalSettings.PPM)
|
log.Printf("\tSetFreqCorrection %d Successful\n", u.ppm)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -365,7 +385,9 @@ func sdrWatcher() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
serial = ""
|
serial = ""
|
||||||
}
|
}
|
||||||
if strings.Compare(serial, "stratux:1090") != 0 {
|
|
||||||
|
r, _ := regexp.Compile("str?a?t?u?x:1090")
|
||||||
|
if !r.MatchString(serial) {
|
||||||
UATDev = &UAT{indexID: id, serial: serial}
|
UATDev = &UAT{indexID: id, serial: serial}
|
||||||
if err := UATDev.sdrConfig(); err != nil {
|
if err := UATDev.sdrConfig(); err != nil {
|
||||||
log.Printf("UATDev = &UAT{indexID: id} failed: %s\n", err)
|
log.Printf("UATDev = &UAT{indexID: id} failed: %s\n", err)
|
||||||
|
@ -407,7 +429,8 @@ func sdrWatcher() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
serial = ""
|
serial = ""
|
||||||
}
|
}
|
||||||
if strings.Compare(serial, "stratux:978") != 0 {
|
r, _ := regexp.Compile("str?a?t?u?x:978")
|
||||||
|
if !r.MatchString(serial) {
|
||||||
ESDev = &ES{indexID: id, serial: serial}
|
ESDev = &ES{indexID: id, serial: serial}
|
||||||
if err := ESDev.sdrConfig(); err != nil {
|
if err := ESDev.sdrConfig(); err != nil {
|
||||||
log.Printf("ESDev = &ES{indexID: id} failed: %s\n", err)
|
log.Printf("ESDev = &ES{indexID: id} failed: %s\n", err)
|
||||||
|
|
Ładowanie…
Reference in New Issue