tx working now too

master
cheetah 4 years ago
parent b1588540ad
commit 62ddf2a631

@ -1 +1,3 @@
# pocsag-gateway
This WIP Software aims to provide an Interface for transmitting Messages sent over AMQP via an RFM69 Transceiver.

@ -3,7 +3,7 @@ package main
import (
"fmt"
"time"
//"sync"
"sync"
"log"
"github.com/kgolding/go-pocsagencode"
"github.com/RPIZeroDuplexPOCSAG/rfm69"
@ -17,11 +17,16 @@ import (
)
var (
conf *settings.App
queueMutex sync.Mutex
)
var messageQueue []*pocsagencode.Message
var lastTransmitBatch int64
func queueMessage(msg *pocsagencode.Message) {
queueMutex.Lock()
lastTransmitBatch = time.Now().Unix()
messageQueue = append(messageQueue, msg)
queueMutex.Unlock()
}
func resetModem() {
@ -61,6 +66,9 @@ func main() {
if err != nil {
log.Panic(err)
}
if _, err := consumeCh.QueueDeclare("tx_pocsag", true, false, false, false, nil); err != nil {
log.Panic(err)
}
go func() {
d, err := consumeCh.Consume("tx_pocsag", "", false, false, false, false, nil)
if err != nil {
@ -69,10 +77,10 @@ func main() {
for msg := range d {
if msg.Headers["ric"] == nil { continue }
log.Printf("ric: %s", string(msg.Headers["ric"].(string)))
log.Printf("ric: %s", string(msg.Headers["ric"].(int64)))
log.Printf("msg: %s", string(msg.Body))
queueMessage(&pocsagencode.Message {
Addr: uint32(msg.Headers["ric"].(int)),
Addr: uint32(msg.Headers["ric"].(int64)),
Content: string(msg.Body),
IsNumeric: (msg.Headers["numeric"] != nil),
})
@ -80,10 +88,6 @@ func main() {
}
}()
}
err = publishCh.ExchangeDeclare("rx", amqp.ExchangeFanout, true, false, false, false, nil)
if err != nil {
log.Panic(err)
}
/***** RABBITMQ END**/
if rfm, err = rfm69.NewDevice(true); err != nil {
@ -110,30 +114,12 @@ func main() {
log.Println("Frequency Offset(Correction): ", conf.FreqOffset, "Hz")
log.Println("Transmit Freq: ", conf.TXFreq, "Hz @", conf.TXBaud, "bps")
log.Println("Receive Freq: ", conf.RXFreq, "Hz @", conf.RXBaud, "bps")
/*
messages := []*pocsagencode.Message{
&pocsagencode.Message{133701, "Hello 1234567890!", false},
//&pocsagencode.Message{133702, "Hello d2efa947-7618-440c-8f79-fab32762af8ed2bb9c62-007e-4b2c-93d5-3124a247032eefe71db4-ef8d-46fb-9cf8-dac70db000bc12067966-da61-447c-a9ce-c0c24be17df5 Pager!", false},
//&pocsagencode.Message{133703, "Hello c41554ca-7372-4975-b0c3-3e2eaccc1e8b Pager!", false},
//&pocsagencode.Message{133704, "Hello Pager!", false},
}
log.Println("Sending", len(messages), "messages")
var burst pocsagencode.Burst
for len(messages) > 220 {
burst, messages = pocsagencode.Generate(messages, pocsagencode.OptionMaxLen(6000))
// Options can be set as below for MaxLen and PreambleBits
// burst, messages = pocsagencode.Generate(messages, pocsagencode.OptionPreambleBits(250))
//log.Println("% X\n\n", burst.Bytes())
log.Println(len(burst.Bytes()))
data := &rfm69.Data{
Data: burst.Bytes(),
}
rfm.Send(data)
}
*/
if conf.RXFreq != 0 {
err = publishCh.ExchangeDeclare("rx_pocsag", amqp.ExchangeFanout, true, false, false, false, nil)
if err != nil {
log.Panic(err)
}
rfm.OnReceive = func(stream *rfm69.RXStream) {
rssiMeasurementArray := make([]int, 5)
rssiStart := -0
@ -164,7 +150,7 @@ func main() {
data[i] = <-stream.ByteStream
//fmt.Printf("%x", data[i])
}
err := publishCh.Publish("rx", "", false, false, amqp.Publishing{
err := publishCh.Publish("rx_pocsag", "", false, false, amqp.Publishing{
ContentType: "application/octet-stream",
Body: data,
Headers: map[string]interface{} {
@ -184,6 +170,31 @@ func main() {
rfm.PrepareRX()
}
// Only if we allow TX, we process Messages
if conf.TXFreq != 0 {
go func() {
lastTransmitBatch = time.Now().Unix()
for {
log.Println(time.Now().Unix(), lastTransmitBatch + 5)
time.Sleep(500 * time.Millisecond)
if len(messageQueue) > 0 && (time.Now().Unix() > lastTransmitBatch + 5) {
lastTransmitBatch = time.Now().Unix()
log.Println("transmitting pocsag batch")
queueMutex.Lock()
burst, _ := pocsagencode.Generate(messageQueue, pocsagencode.OptionMaxLen(6000))
log.Println("Transmitting", len(burst.Bytes()), "bytes")
data := &rfm69.Data{
Data: burst.Bytes(),
}
rfm.Send(data)
messageQueue = make([]*pocsagencode.Message, 0)
queueMutex.Unlock()
// Make Pocsag Burst
}
}
}()
}
rfm.Loop()
log.Println("Done")
}

Loading…
Cancel
Save