mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-11 10:23:44 +00:00
examples: move atcmd into lorawan
Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
@@ -0,0 +1,410 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Use to test if connection to module is OK.
|
||||
func quicktest() {
|
||||
writeCommandOutput("AT", "OK")
|
||||
}
|
||||
|
||||
// Check firmware version.
|
||||
func version() {
|
||||
writeCommandOutput("VER", currentVersion()+" ("+firmwareVersion()+")")
|
||||
}
|
||||
|
||||
// Use to check the ID of the LoRaWAN module, or change the ID.
|
||||
func id(args string) error {
|
||||
cmd := "ID"
|
||||
|
||||
// look for comma in args
|
||||
param, val, hasComma := strings.Cut(args, ",")
|
||||
if hasComma {
|
||||
// set
|
||||
switch param {
|
||||
case "DevAddr":
|
||||
writeCommandOutput(cmd, "DevAddr, "+val)
|
||||
case "DevEui":
|
||||
writeCommandOutput(cmd, "DevEui, "+val)
|
||||
case "AppEui":
|
||||
writeCommandOutput(cmd, "AppEui, "+val)
|
||||
default:
|
||||
return errInvalidCommand
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// get
|
||||
switch param {
|
||||
case "DevAddr":
|
||||
writeCommandOutput(cmd, "DevAddr, xx:xx:xx:xx")
|
||||
case "DevEui":
|
||||
writeCommandOutput(cmd, "DevEui, xx:xx:xx:xx:xx:xx:xx:xx")
|
||||
case "AppEui":
|
||||
writeCommandOutput(cmd, "AppEui, xx:xx:xx:xx:xx:xx:xx:xx")
|
||||
default:
|
||||
writeCommandOutput(cmd, "DevAddr, xx:xx:xx:xx")
|
||||
writeCommandOutput(cmd, "DevEui, xx:xx:xx:xx:xx:xx:xx:xx")
|
||||
writeCommandOutput(cmd, "AppEui, xx:xx:xx:xx:xx:xx:xx:xx")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use to reset the module. If module returns error, then reset function is invalid.
|
||||
func reset() error {
|
||||
radio.Reset()
|
||||
|
||||
writeCommandOutput("RESET", "OK")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use to send string format frame which is no need to be confirmed by the server.
|
||||
func msg(data string) error {
|
||||
cmd := "MSG"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
if err := radio.Tx([]byte(data), defaultTimeout); err != nil {
|
||||
writeCommandOutput(cmd, err.Error())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use to send string format frame which must be confirmed by the server
|
||||
func cmsg(data string) error {
|
||||
cmd := "CMSG"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
if err := radio.Tx([]byte(data), defaultTimeout); err != nil {
|
||||
writeCommandOutput(cmd, err.Error())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: confirmation
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use to send hex format frame which is no need to be confirmed by the server
|
||||
func msghex(data string) error {
|
||||
cmd := "MSGHEX"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use to send hex format frame which must be confirmed by the server.
|
||||
func cmsghex(data string) error {
|
||||
cmd := "CMSGHEX"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use to send string format LoRaWAN proprietary frames
|
||||
func pmsg(data string) error {
|
||||
cmd := "PMSG"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use to send hex format LoRaWAN proprietary frames.
|
||||
func pmsghex(data string) error {
|
||||
cmd := "PMSGHEX"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Set PORT number which will be used by MSG/CMSG/MSGHEX/CMSGHEX command to send
|
||||
// message, port number should range from 1 to 255. User should refer to LoRaWAN
|
||||
// specification to choose port.
|
||||
func port(p string) error {
|
||||
cmd := "PMSG"
|
||||
writeCommandOutput(cmd, p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Set ADR function of LoRaWAN module
|
||||
func adr(state string) error {
|
||||
cmd := "ADR"
|
||||
writeCommandOutput(cmd, state)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use LoRaWAN defined DRx to set datarate of LoRaWAN AT modem.
|
||||
func dr(rate string) error {
|
||||
cmd := "DR"
|
||||
writeCommandOutput(cmd, rate)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Channel Configuration
|
||||
func ch(channel string) error {
|
||||
cmd := "CH"
|
||||
writeCommandOutput(cmd, channel)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Set and Check Power
|
||||
func power(setting string) error {
|
||||
cmd := "POWER"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Unconfirmed message repeats times.
|
||||
func rept(setting string) error {
|
||||
cmd := "REPT"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Confirmed message retry times. Valid range 0~254,
|
||||
// if retry times is less than 2, only one message will
|
||||
// be sent. Random delay 3 - 10s between each retry
|
||||
// (band duty cycle limitation has the priority)
|
||||
func retry(setting string) error {
|
||||
cmd := "RETRY"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func rxwin2(setting string) error {
|
||||
cmd := "RXWIN2"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func rxwin1(setting string) error {
|
||||
cmd := "RXWIN1"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func key(setting string) error {
|
||||
cmd := "KEY"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func fdefault(setting string) error {
|
||||
cmd := "FDEFAULT"
|
||||
writeCommandOutput(cmd, "OK")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func mode(setting string) error {
|
||||
cmd := "MODE"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func join(setting string) error {
|
||||
cmd := "JOIN"
|
||||
writeCommandOutput(cmd, "Starting")
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
func beacon(setting string) error {
|
||||
cmd := "BEACON"
|
||||
writeCommandOutput(cmd, "Starting")
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func class(setting string) error {
|
||||
cmd := "CLASS"
|
||||
writeCommandOutput(cmd, "Starting")
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func delay(setting string) error {
|
||||
cmd := "DELAY"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func lw(setting string) error {
|
||||
cmd := "LW"
|
||||
writeCommandOutput(cmd, setting)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func wdt(setting string) error {
|
||||
cmd := "WDT"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func lowpower(setting string) error {
|
||||
cmd := "LOWPOWER"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func vdd(setting string) error {
|
||||
cmd := "VDD"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func temp(setting string) error {
|
||||
cmd := "TEMP"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func rtc(setting string) error {
|
||||
cmd := "RTC"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func eeprom(setting string) error {
|
||||
cmd := "EEPROM"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func uartcmd(setting string) error {
|
||||
cmd := "UART"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func test(setting string) error {
|
||||
cmd := "TEST"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func log(setting string) error {
|
||||
cmd := "LOG"
|
||||
writeCommandOutput(cmd, "Not implemented")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func send(data string) error {
|
||||
cmd := "SEND"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
// remove leading/trailing quotes
|
||||
data = strings.Trim(data, "\"'")
|
||||
|
||||
if err := radio.Tx([]byte(data), defaultTimeout); err != nil {
|
||||
writeCommandOutput(cmd, err.Error())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
func sendhex(data string) error {
|
||||
cmd := "SENDHEX"
|
||||
writeCommandOutput(cmd, "Start")
|
||||
|
||||
// remove leading/trailing quotes
|
||||
data = strings.Trim(data, "\"'")
|
||||
|
||||
// convert data from hex formatted string
|
||||
data = strings.ReplaceAll(data, " ", "")
|
||||
payload, err := hex.DecodeString(data)
|
||||
if err != nil {
|
||||
writeCommandOutput(cmd, err.Error())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
if err := radio.Tx(payload, defaultTimeout); err != nil {
|
||||
writeCommandOutput(cmd, err.Error())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
writeCommandOutput(cmd, "Done")
|
||||
return nil
|
||||
}
|
||||
|
||||
func recv(setting string) error {
|
||||
cmd := "RECV"
|
||||
|
||||
data, err := lorarx()
|
||||
if err != nil {
|
||||
writeCommandOutput(cmd, "ERROR "+err.Error())
|
||||
return err
|
||||
}
|
||||
writeCommandOutput(cmd, string(data))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func recvhex(setting string) error {
|
||||
cmd := "RECVHEX"
|
||||
|
||||
data, err := lorarx()
|
||||
if err != nil {
|
||||
writeCommandOutput(cmd, "ERROR "+err.Error())
|
||||
return err
|
||||
}
|
||||
writeCommandOutput(cmd, string(data))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func crlf() {
|
||||
uart.Write([]byte("\r\n"))
|
||||
}
|
||||
|
||||
func writeCommandOutput(cmd, data string) {
|
||||
uart.Write([]byte("+" + cmd + ": "))
|
||||
uart.Write([]byte(data))
|
||||
crlf()
|
||||
}
|
||||
Reference in New Issue
Block a user