mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-17 21:23:58 +00:00
lora/lorawan: implement minimal Join() function, and supporting functions
Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
+59
-3
@@ -1,8 +1,16 @@
|
||||
package lorawan
|
||||
|
||||
import "tinygo.org/x/drivers/lora"
|
||||
import (
|
||||
"errors"
|
||||
|
||||
var ActiveRadio lora.Radio
|
||||
"tinygo.org/x/drivers/lora"
|
||||
)
|
||||
|
||||
const LORA_RXTX_TIMEOUT = 1000
|
||||
|
||||
var (
|
||||
ActiveRadio lora.Radio
|
||||
)
|
||||
|
||||
func UseRadio(r lora.Radio) {
|
||||
if ActiveRadio != nil {
|
||||
@@ -11,7 +19,55 @@ func UseRadio(r lora.Radio) {
|
||||
ActiveRadio = r
|
||||
}
|
||||
|
||||
func Join() error {
|
||||
func Join(otaa *Otaa, session *Session) error {
|
||||
var resp []uint8
|
||||
|
||||
if ActiveRadio == nil {
|
||||
return errors.New("no LoRa radio attached")
|
||||
}
|
||||
|
||||
otaa.Init()
|
||||
|
||||
// Send join packet
|
||||
payload, err := otaa.GenerateJoinRequest()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ActiveRadio.SetCrc(true)
|
||||
ActiveRadio.SetIqMode(0) // IQ Standard
|
||||
ActiveRadio.Tx(payload, LORA_RXTX_TIMEOUT)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Wait for JoinAccept
|
||||
//println("lorawan: Wait for JOINACCEPT for 10s")
|
||||
ActiveRadio.SetIqMode(1) // IQ Inverted
|
||||
for i := 0; i < 15; i++ {
|
||||
resp, err = ActiveRadio.Rx(LORA_RXTX_TIMEOUT)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if resp != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
if resp == nil {
|
||||
return errors.New("no JoinAccept packet received")
|
||||
}
|
||||
//println("lorawan: Received packet: len=", len(resp), "payload=", bytesToHexString(resp))
|
||||
|
||||
err = otaa.DecodeJoinAccept(resp, session)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// println("lorawan: Valid JOINACCEPT, now connected")
|
||||
// println("lorawan: | DevAddr: ", bytesToHexString(r.Session.DevAddr[:]), " (LSB)")
|
||||
// println("lorawan: | NetID : ", bytesToHexString(r.Otaa.NetID[:]))
|
||||
// println("lorawan: | NwkSKey: ", bytesToHexString(r.Session.NwkSKey[:]))
|
||||
// println("lorawan: | AppSKey: ", bytesToHexString(r.Session.AppSKey[:]))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user