Signal handling in main
This commit is contained in:
parent
57a157fc26
commit
ce84d79540
2 changed files with 48 additions and 27 deletions
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/fulr/rfm69"
|
"github.com/fulr/rfm69"
|
||||||
"github.com/kidoman/embd"
|
"github.com/kidoman/embd"
|
||||||
|
@ -40,5 +41,13 @@ func main() {
|
||||||
}
|
}
|
||||||
log.Print(rfm)
|
log.Print(rfm)
|
||||||
|
|
||||||
rfm.Loop()
|
quit := rfm.Loop()
|
||||||
|
|
||||||
|
sigint := make(chan os.Signal)
|
||||||
|
os.Notify(sigint, os.Interrupt)
|
||||||
|
|
||||||
|
<-sigint
|
||||||
|
|
||||||
|
quit <- 1
|
||||||
|
<-quit
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,34 +7,46 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Loop is the main receive and transmit handling loop
|
// Loop is the main receive and transmit handling loop
|
||||||
func (r *Device) Loop() error {
|
func (r *Device) Loop() chan int {
|
||||||
|
quit := make(chan int)
|
||||||
c := make(chan Data)
|
c := make(chan Data)
|
||||||
irq := make(chan int)
|
go func() {
|
||||||
|
irq := make(chan int)
|
||||||
|
|
||||||
r.gpio.Watch(embd.EdgeRising, func(pin embd.DigitalPin) {
|
r.gpio.Watch(embd.EdgeRising, func(pin embd.DigitalPin) {
|
||||||
irq <- 1
|
irq <- 1
|
||||||
})
|
})
|
||||||
|
|
||||||
r.SetMode(RF_OPMODE_RECEIVER)
|
err := r.SetMode(RF_OPMODE_RECEIVER)
|
||||||
|
if err != nil {
|
||||||
for {
|
log.Print(err)
|
||||||
select {
|
return
|
||||||
case dataToTransmit := <-c:
|
|
||||||
// can send?
|
|
||||||
r.SetMode(RF_OPMODE_STANDBY)
|
|
||||||
r.writeFifo(&dataToTransmit)
|
|
||||||
r.writeReg(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_00)
|
|
||||||
r.SetMode(RF_OPMODE_TRANSMITTER)
|
|
||||||
<-irq
|
|
||||||
r.SetMode(RF_OPMODE_RECEIVER)
|
|
||||||
r.writeReg(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_01)
|
|
||||||
case <-irq:
|
|
||||||
data, err := r.readFifo()
|
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
log.Print(data)
|
|
||||||
}
|
}
|
||||||
}
|
defer r.SetMode(RF_OPMODE_STANDBY)
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case dataToTransmit := <-c:
|
||||||
|
// can send?
|
||||||
|
r.SetMode(RF_OPMODE_STANDBY)
|
||||||
|
r.writeFifo(&dataToTransmit)
|
||||||
|
r.writeReg(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_00)
|
||||||
|
r.SetMode(RF_OPMODE_TRANSMITTER)
|
||||||
|
<-irq
|
||||||
|
r.SetMode(RF_OPMODE_RECEIVER)
|
||||||
|
r.writeReg(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_01)
|
||||||
|
case <-irq:
|
||||||
|
data, err := r.readFifo()
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Print(data)
|
||||||
|
case <-quit:
|
||||||
|
quit <- 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return quit
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue