-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
114 lines (91 loc) · 1.94 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"encoding/hex"
"flag"
"fmt"
"log"
"time"
)
var (
fileFlag string
tcpIQServer string
tcpNetMsgAddr = "localhost:30001"
isExit bool
// 254kb
dataBuffLen = 16 * 16384
)
func main() {
flag.StringVar(&fileFlag, "ifile", fileFlag, "")
flag.StringVar(&tcpIQServer, "tcp_iq_server", tcpIQServer, "")
flag.StringVar(&tcpNetMsgAddr, "net_msg_addr", tcpNetMsgAddr, "")
flag.IntVar(&dataBuffLen, "iq_buff_len", dataBuffLen, "")
flag.Parse()
var scanner Scanner
switch true {
case len(fileFlag) > 0:
scanner = NewFileScanner(fileFlag, dataBuffLen)
break
case len(tcpIQServer) > 0:
scanner = NewTCPScanner(tcpIQServer, dataBuffLen)
break
default:
scanner = NewRtlSdrScanner(dataBuffLen)
}
defer scanner.Close()
demod := NewDemod()
var msgChs = make([]chan Message, 0)
var netListener *Net
if len(tcpNetMsgAddr) > 0 {
netMsgCh := make(chan Message, 1)
netListener = NewNetListener(tcpNetMsgAddr, netMsgCh)
msgChs = append(msgChs, netMsgCh)
go netListener.Start()
}
go func(demod *Demod) {
lastTime := time.Now()
for {
select {
case msg := <-demod.MessageCh:
fmt.Printf(
"%q,\n",
//"%d, %s, %s +%s\n",
//msg.DF,
//hex.EncodeToString(msg.ICAO),
hex.EncodeToString(msg.Msg),
//lastTime.Sub(msg.ReceiptTime).String(),
//msg.ReceiptTime.Sub(lastTime).String(),
)
_ = lastTime
lastTime = msg.ReceiptTime
for i := 0; i < len(msgChs); i++ {
msgChs[i] <- msg
}
}
}
}(demod)
go func() {
ch := scanner.GetSourceIQCh()
for {
select {
case iq := <-ch:
demod.DetectModeS(iq)
}
}
}()
err := scanner.Start()
if err != nil {
log.Println("Scanner err: " + err.Error())
}
if err := scanner.Error(); err != nil {
log.Println("Scanner err: " + err.Error())
}
if netListener != nil {
netListener.Close()
}
}
type Scanner interface {
Start() error
Close()
GetSourceIQCh() <-chan *SourceIQ
Error() error
}