START,Thu Nov 12 19:25:38 +0000 UTC 2015,Thu Nov 12 19:25:38 +0000
UTC 2015
     UNPAUSE,71289772
     2739899291,Found 2 device(s):
     2740283977,0: Realtek, RTL2838UHIDIR, SN: stratux:978
     2740438248,1: Realtek, RTL2838UHIDIR, SN: 00000001 (currently
selected)
     2740605904,Found Rafael Micro R820T tuner
     2740683299,Max available gain is: 49.60
     2740807935,Setting gain to: 49.60
     2740880330,Exact sample rate is: 2000000.052982 Hz
     2740943976,Gain reported by device: 49.60
pull/112/head^2
Christopher Young 2015-11-12 14:26:43 -05:00
rodzic 3745a805b7
commit 7f50242867
2 zmienionych plików z 67 dodań i 7 usunięć

Wyświetl plik

@ -31,6 +31,7 @@ const (
esReplayLog = "/var/log/stratux-es.log" esReplayLog = "/var/log/stratux-es.log"
gpsReplayLog = "/var/log/stratux-gps.log" gpsReplayLog = "/var/log/stratux-gps.log"
ahrsReplayLog = "/var/log/stratux-ahrs.log" ahrsReplayLog = "/var/log/stratux-ahrs.log"
dump1090ReplayLog = "/var/log/stratux-dump1090.log"
UPLINK_BLOCK_DATA_BITS = 576 UPLINK_BLOCK_DATA_BITS = 576
UPLINK_BLOCK_BITS = (UPLINK_BLOCK_DATA_BITS + 160) UPLINK_BLOCK_BITS = (UPLINK_BLOCK_DATA_BITS + 160)
@ -51,10 +52,11 @@ const (
MSGTYPE_BASIC_REPORT = 0x1E MSGTYPE_BASIC_REPORT = 0x1E
MSGTYPE_LONG_REPORT = 0x1F MSGTYPE_LONG_REPORT = 0x1F
MSGCLASS_UAT = 0 MSGCLASS_UAT = 0
MSGCLASS_ES = 1 MSGCLASS_ES = 1
MSGCLASS_GPS = 3 MSGCLASS_GPS = 3
MSGCLASS_AHRS = 4 MSGCLASS_AHRS = 4
MSGCLASS_DUMP1090 = 5
LON_LAT_RESOLUTION = float32(180.0 / 8388608.0) LON_LAT_RESOLUTION = float32(180.0 / 8388608.0)
TRACK_RESOLUTION = float32(360.0 / 256.0) TRACK_RESOLUTION = float32(360.0 / 256.0)
@ -74,6 +76,7 @@ var uatReplayfp *os.File
var esReplayfp *os.File var esReplayfp *os.File
var gpsReplayfp *os.File var gpsReplayfp *os.File
var ahrsReplayfp *os.File var ahrsReplayfp *os.File
var dump1090Replayfp *os.File
type msg struct { type msg struct {
MessageClass uint MessageClass uint
@ -469,6 +472,23 @@ func updateStatus() {
globalStatus.Uptime = time.Since(timeStarted).Nanoseconds() / 1000000 globalStatus.Uptime = time.Since(timeStarted).Nanoseconds() / 1000000
} }
type ReplayWriter struct {
fp *os.File
}
func (r ReplayWriter) Write(p []byte) (n int, err error) {
//TODO.
return r.fp.Write(p)
}
func (r ReplayWriter) Close() error {
return r.fp.Close()
}
func makeReplayLogEntry(msg string) string {
return fmt.Sprintf("%d,%s\n", time.Since(timeStarted).Nanoseconds(), msg)
}
func replayLog(msg string, msgclass int) { func replayLog(msg string, msgclass int) {
if !globalSettings.ReplayLog { // Logging disabled. if !globalSettings.ReplayLog { // Logging disabled.
return return
@ -487,9 +507,12 @@ func replayLog(msg string, msgclass int) {
fp = gpsReplayfp fp = gpsReplayfp
case MSGCLASS_AHRS: case MSGCLASS_AHRS:
fp = ahrsReplayfp fp = ahrsReplayfp
case MSGCLASS_DUMP1090:
fp = dump1090Replayfp
} }
if fp != nil { if fp != nil {
fmt.Fprintf(fp, "%d,%s\n", time.Since(timeStarted).Nanoseconds(), msg) s := makeReplayLogEntry(msg)
fp.Write([]byte(s))
} }
} }
@ -799,6 +822,10 @@ func replayMark(active bool) {
ahrsReplayfp.Write([]byte(t)) ahrsReplayfp.Write([]byte(t))
} }
if dump1090Replayfp != nil {
dump1090Replayfp.Write([]byte(t))
}
} }
func openReplay(fn string) (*os.File, error) { func openReplay(fn string) (*os.File, error) {
@ -884,6 +911,13 @@ func main() {
ahrsReplayfp = ahrsfp ahrsReplayfp = ahrsfp
defer ahrsReplayfp.Close() defer ahrsReplayfp.Close()
} }
// Dump1090 replay log.
if dump1090fp, err := openReplay(dump1090ReplayLog); err != nil {
globalSettings.ReplayLog = false
} else {
dump1090Replayfp = dump1090fp
defer dump1090Replayfp.Close()
}
// Mark the files (whether we're logging or not). // Mark the files (whether we're logging or not).
replayMark(globalSettings.ReplayLog) replayMark(globalSettings.ReplayLog)

Wyświetl plik

@ -1,6 +1,7 @@
package main package main
import ( import (
"io"
"log" "log"
"os/exec" "os/exec"
"strconv" "strconv"
@ -34,20 +35,42 @@ var es_wg *sync.WaitGroup = &sync.WaitGroup{}
var maxSignalStrength int var maxSignalStrength int
func readToChan(fp io.ReadCloser, ch chan []byte) {
for {
buf := make([]byte, 1024)
n, err := fp.Read(buf)
if n > 0 {
ch <- buf[:n]
} else if err != nil {
return
}
}
}
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))
stdout, _ := cmd.StdoutPipe()
stderr, _ := cmd.StderrPipe()
outputChan := make(chan []byte, 1024)
go readToChan(stdout, outputChan)
go readToChan(stderr, outputChan)
err := cmd.Start() err := cmd.Start()
if err != nil { if err != nil {
log.Printf("Error executing /usr/bin/dump1090: %s\n", err.Error()) log.Printf("Error executing /usr/bin/dump1090: %s\n", err.Error())
return return
} }
log.Println("Executed /usr/bin/dump1090 successfully...") log.Println("Executed /usr/bin/dump1090 successfully...")
for { for {
select { select {
default: case buf := <-outputChan:
time.Sleep(1 * time.Second) replayLog(string(buf), MSGCLASS_DUMP1090)
case <-es_shutdown: case <-es_shutdown:
log.Println("ES read(): shutdown msg received, calling cmd.Process.Kill() ...") log.Println("ES read(): shutdown msg received, calling cmd.Process.Kill() ...")
err := cmd.Process.Kill() err := cmd.Process.Kill()
@ -58,6 +81,9 @@ func (e *ES) read() {
log.Println("\t kill successful...") log.Println("\t kill successful...")
} }
return return
default:
time.Sleep(1 * time.Second)
} }
} }
} }