From 5d926a627403d7f3b85e5f07fc78aefd923f7b6d Mon Sep 17 00:00:00 2001 From: root Date: Sat, 13 Feb 2016 20:30:33 +0000 Subject: [PATCH 1/6] Allows for per-SDR ppm information through RTL Serial numbers of format stx:freq:ppm, such as stx:1090:20. --- main/sdr.go | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/main/sdr.go b/main/sdr.go index 6c145a65..3eb92fbb 100644 --- a/main/sdr.go +++ b/main/sdr.go @@ -14,10 +14,10 @@ import ( "log" "os/exec" "strconv" - "strings" "sync" "sync/atomic" "time" + "regexp" "../godump978" rtl "github.com/jpoirier/gortlsdr" @@ -26,12 +26,14 @@ import ( type UAT struct { dev *rtl.Context indexID int + ppm int serial string } type ES struct { dev *rtl.Context indexID int + ppm int serial string } @@ -61,7 +63,7 @@ func readToChan(fp io.ReadCloser, ch chan []byte) { func (e *ES) read() { defer es_wg.Done() 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() stderr, _ := cmd.StderrPipe() @@ -125,11 +127,29 @@ func (u *UAT) read() { } 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 } func (u *UAT) sdrConfig() (err error) { 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 { log.Printf("\tUAT Open Failed...\n") return @@ -223,13 +243,13 @@ func (u *UAT) sdrConfig() (err error) { //---------- Get/Set Freq Correction ---------- freqCorr := u.dev.GetFreqCorrection() log.Printf("\tGetFreqCorrection: %d\n", freqCorr) - err = u.dev.SetFreqCorrection(globalSettings.PPM) + err = u.dev.SetFreqCorrection(u.ppm) if err != nil { 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 } else { - log.Printf("\tSetFreqCorrection %d Successful\n", globalSettings.PPM) + log.Printf("\tSetFreqCorrection %d Successful\n", u.ppm) } return } @@ -365,7 +385,9 @@ func sdrWatcher() { if err != nil { 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} if err := UATDev.sdrConfig(); err != nil { log.Printf("UATDev = &UAT{indexID: id} failed: %s\n", err) @@ -407,7 +429,8 @@ func sdrWatcher() { if err != nil { 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} if err := ESDev.sdrConfig(); err != nil { log.Printf("ESDev = &ES{indexID: id} failed: %s\n", err) From 2414087ede4c58ba1266707b1b50e38720b195de Mon Sep 17 00:00:00 2001 From: root Date: Mon, 15 Feb 2016 18:21:43 +0000 Subject: [PATCH 2/6] refactor --- main/sdr.go | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/main/sdr.go b/main/sdr.go index 3eb92fbb..a1413e4f 100644 --- a/main/sdr.go +++ b/main/sdr.go @@ -126,29 +126,28 @@ func (u *UAT) read() { } } -func (e *ES) sdrConfig() (err error) { - log.Printf("===== ES Device Serial: %s =====\n", e.serial) +func getPPM(serial string) int { 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 + arr := r.FindStringSubmatch(e.serial) + if arr == nil { + return globalSettings.PPM } + if ppm, err := strconv.Atoi(arr[1]); err != nil { + return globalSettings.PPM + } else { + return ppm + } +} + +func (e *ES) sdrConfig() (err error) { + e.ppm = getPPM(e.serial) return } func (u *UAT) sdrConfig() (err error) { 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 - } + u.ppm = getPPM(u.serial) if u.dev, err = rtl.Open(u.indexID); err != nil { log.Printf("\tUAT Open Failed...\n") From e101c101748529f375393fef06ec739281dc0f8c Mon Sep 17 00:00:00 2001 From: root Date: Mon, 15 Feb 2016 18:24:56 +0000 Subject: [PATCH 3/6] refactor, bug fix --- main/sdr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/sdr.go b/main/sdr.go index a1413e4f..e894ad96 100644 --- a/main/sdr.go +++ b/main/sdr.go @@ -128,7 +128,7 @@ func (u *UAT) read() { func getPPM(serial string) int { r, _ := regexp.Compile("str?a?t?u?x:\\d+:?(-?\\d*)") - arr := r.FindStringSubmatch(e.serial) + arr := r.FindStringSubmatch(serial) if arr == nil { return globalSettings.PPM } From 3cefce063b2fc85d577bf6f6d222ae6dbeb747fd Mon Sep 17 00:00:00 2001 From: root Date: Tue, 16 Feb 2016 13:29:50 +0000 Subject: [PATCH 4/6] error on startup --- init.d-stratux | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/init.d-stratux b/init.d-stratux index e2889e65..e824a125 100755 --- a/init.d-stratux +++ b/init.d-stratux @@ -31,14 +31,16 @@ case "$1" in log_daemon_msg "Starting $DESC" "$NAME" echo powersave >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # Check if we need to run an update. - UPDATE_SCRIPT=`ls -1t /root/update*.sh | head -1` - if [ -n "$UPDATE_SCRIPT" ] ; then - # Execute the script, remove it, then reboot. - echo - echo "Running update script ${UPDATE_SCRIPT}..." - sh ${UPDATE_SCRIPT} - rm -f $UPDATE_SCRIPT - reboot + if [ -e /root/update*.sh ] ; then + UPDATE_SCRIPT=`ls -1t /root/update*.sh | head -1` + if [ -n "$UPDATE_SCRIPT" ] ; then + # Execute the script, remove it, then reboot. + echo + echo "Running update script ${UPDATE_SCRIPT}..." + sh ${UPDATE_SCRIPT} + rm -f $UPDATE_SCRIPT + reboot + fi fi start-stop-daemon --start --background --oknodo --quiet --exec "$DAEMON_SBIN" \ --pidfile "$PIDFILE" --make-pidfile -- $DAEMON_OPTS >/dev/null From b356b64f153fe9b8bf9988f23de9ecad1daadaea Mon Sep 17 00:00:00 2001 From: root Date: Tue, 16 Feb 2016 20:28:14 +0000 Subject: [PATCH 5/6] Error checking and optimizations per jpoirier --- main/sdr.go | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/main/sdr.go b/main/sdr.go index f5156dec..d9bb5e61 100644 --- a/main/sdr.go +++ b/main/sdr.go @@ -13,11 +13,12 @@ import ( "io" "log" "os/exec" + "regexp" "strconv" + "strings" "sync" "sync/atomic" "time" - "regexp" "../godump978" rtl "github.com/jpoirier/gortlsdr" @@ -127,8 +128,12 @@ func (u *UAT) read() { } func getPPM(serial string) int { - r, _ := regexp.Compile("str?a?t?u?x:\\d+:?(-?\\d*)") - arr := r.FindStringSubmatch(serial) + r, err := regexp.Compile("str?a?t?u?x:\\d+:?(-?\\d*)"); + if err != nil { + return globalSettings.PPM + } + + arr := r.FindStringSubmatch(serial); if arr == nil { return globalSettings.PPM } @@ -316,6 +321,19 @@ func sdrKill() { // Watch for config/device changes. func sdrWatcher() { + var doSkip bool + rES, err := regexp.Compile("str?a?t?u?x:1090") + if err != nil { + rES = nil + log.Println("failed to compile ES regexp because %s", err.Error()) + } + + rUAT, err := regexp.Compile("str?a?t?u?x:978") + if err != nil { + rUAT = nil + log.Println("failed to compile ES regexp because %s", err.Error()) + } + for { time.Sleep(1 * time.Second) if sdrShutdown { @@ -385,8 +403,13 @@ func sdrWatcher() { serial = "" } - r, _ := regexp.Compile("str?a?t?u?x:1090") - if !r.MatchString(serial) { + if (rES == nil) { + doSkip = rES.MatchString(serial) + } else { + doSkip = strings.Compare(serial, "stratux:1090") == 0 + } + + if !doSkip { UATDev = &UAT{indexID: id, serial: serial} if err := UATDev.sdrConfig(); err != nil { log.Printf("UATDev = &UAT{indexID: id} failed: %s\n", err) @@ -428,8 +451,14 @@ func sdrWatcher() { if err != nil { serial = "" } - r, _ := regexp.Compile("str?a?t?u?x:978") - if !r.MatchString(serial) { + + if (rUAT == nil) { + doSkip = rUAT.MatchString(serial) + } else { + doSkip = strings.Compare(serial, "stratux:978") == 0 + } + + if !doSkip { ESDev = &ES{indexID: id, serial: serial} if err := ESDev.sdrConfig(); err != nil { log.Printf("ESDev = &ES{indexID: id} failed: %s\n", err) From 9ff70d6633b77fbab362019aadcd7e6322545f83 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 16 Feb 2016 20:31:12 +0000 Subject: [PATCH 6/6] Copy and paste error in the log message --- main/sdr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/sdr.go b/main/sdr.go index d9bb5e61..1e00b5b1 100644 --- a/main/sdr.go +++ b/main/sdr.go @@ -331,7 +331,7 @@ func sdrWatcher() { rUAT, err := regexp.Compile("str?a?t?u?x:978") if err != nil { rUAT = nil - log.Println("failed to compile ES regexp because %s", err.Error()) + log.Println("failed to compile UAT regexp because %s", err.Error()) } for {