New SPI Device and main
parent
ad23db2039
commit
4aea5666cb
@ -0,0 +1,43 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/fulr/rfm69"
|
||||||
|
"github.com/kidoman/embd"
|
||||||
|
|
||||||
|
_ "github.com/kidoman/embd/host/rpi"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
log.Print("Start")
|
||||||
|
|
||||||
|
if err := embd.InitGPIO(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer embd.CloseGPIO()
|
||||||
|
|
||||||
|
gpio, err := embd.NewDigitalPin(25)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer gpio.Close()
|
||||||
|
|
||||||
|
if err := gpio.SetDirection(embd.In); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
gpio.ActiveLow(false)
|
||||||
|
|
||||||
|
spiBus, err := rfm69.NewSPIDevice()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer spiBus.Close()
|
||||||
|
|
||||||
|
rfm, err := rfm69.NewDevice(spiBus, gpio, 1, 10, true)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
t.Log(rfm)
|
||||||
|
|
||||||
|
}
|
@ -1,8 +1,40 @@
|
|||||||
package rfm69
|
package rfm69
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/kidoman/embd"
|
||||||
|
)
|
||||||
|
|
||||||
// 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() error {
|
||||||
for {
|
c := make(chan Data)
|
||||||
|
irq := make(chan int)
|
||||||
|
|
||||||
|
r.gpio.Watch(embd.EdgeRising, func(pin embd.DigitalPin) {
|
||||||
|
irq <- 1
|
||||||
|
})
|
||||||
|
|
||||||
|
r.SetMode(RF_OPMODE_RECEIVER)
|
||||||
|
|
||||||
|
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 err
|
||||||
|
}
|
||||||
|
log.Print(data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
// +build !linux
|
||||||
|
|
||||||
|
package rfm69
|
||||||
|
|
||||||
|
// SPIDevice is a device
|
||||||
|
type SPIDevice struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewSPIDevice creates a new device
|
||||||
|
func NewSPIDevice() (*SPIDevice, error) {
|
||||||
|
return &SPIDevice{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Xfer cross transfer
|
||||||
|
func (d *SPIDevice) Xfer(tx []byte) ([]byte, error) {
|
||||||
|
length := len(tx)
|
||||||
|
rx := make([]byte, length)
|
||||||
|
return rx, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close closes the fd
|
||||||
|
func (d *SPIDevice) Close() {
|
||||||
|
}
|
Loading…
Reference in New Issue