mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-09 01:13:40 +00:00
b6b5668945
Signed-off-by: deadprogram <ron@hybridgroup.com>
74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
//go:build gnse || lorae5 || nucleowl55jc
|
|
|
|
package main
|
|
|
|
import (
|
|
"device/stm32"
|
|
"machine"
|
|
"runtime/interrupt"
|
|
|
|
rfswitch "tinygo.org/x/drivers/examples/sx126x/rfswitch"
|
|
|
|
"tinygo.org/x/drivers/lora"
|
|
"tinygo.org/x/drivers/sx126x"
|
|
)
|
|
|
|
const (
|
|
FREQ = 868100000
|
|
LORA_DEFAULT_RXTIMEOUT_MS = 1000
|
|
LORA_DEFAULT_TXTIMEOUT_MS = 5000
|
|
)
|
|
|
|
var (
|
|
loraRadio *sx126x.Device
|
|
)
|
|
|
|
// do sx126x setup here
|
|
func setupLora() (LoraRadio, error) {
|
|
loraRadio = sx126x.New(machine.SPI3)
|
|
loraRadio.SetDeviceType(sx126x.DEVICE_TYPE_SX1262)
|
|
|
|
// Create RF Switch
|
|
var radioSwitch rfswitch.CustomSwitch
|
|
loraRadio.SetRfSwitch(radioSwitch)
|
|
|
|
if state := loraRadio.DetectDevice(); !state {
|
|
return nil, errRadioNotFound
|
|
}
|
|
|
|
// Add interrupt handler for Radio IRQs
|
|
intr := interrupt.New(stm32.IRQ_Radio_IRQ_Busy, radioIntHandler)
|
|
intr.Enable()
|
|
|
|
loraConf := lora.Config{
|
|
Freq: FREQ,
|
|
Bw: lora.Bandwidth_500_0,
|
|
Sf: lora.SpreadingFactor9,
|
|
Cr: lora.CodingRate4_7,
|
|
HeaderType: lora.HeaderExplicit,
|
|
Preamble: 12,
|
|
Ldr: lora.LowDataRateOptimizeOff,
|
|
Iq: lora.IQStandard,
|
|
Crc: lora.CRCOn,
|
|
SyncWord: lora.SyncPrivate,
|
|
LoraTxPowerDBm: 20,
|
|
}
|
|
|
|
loraRadio.LoraConfig(loraConf)
|
|
|
|
return loraRadio, nil
|
|
}
|
|
|
|
// radioIntHandler will take care of radio interrupts
|
|
func radioIntHandler(intr interrupt.Interrupt) {
|
|
loraRadio.HandleInterrupt()
|
|
}
|
|
|
|
func firmwareVersion() string {
|
|
return "sx126x"
|
|
}
|
|
|
|
func lorarx() ([]byte, error) {
|
|
return loraRadio.Rx(LORA_DEFAULT_RXTIMEOUT_MS)
|
|
}
|