add xbee device parser
This commit is contained in:
parent
ddad848127
commit
6f8e696dcc
59
cmd/xbee.go
59
cmd/xbee.go
|
@ -4,10 +4,13 @@ package cmd
|
||||||
// we can do network discovery and netcat-like things.
|
// we can do network discovery and netcat-like things.
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/kschamplin/gotelem/xbee"
|
"github.com/kschamplin/gotelem/xbee"
|
||||||
|
@ -69,8 +72,8 @@ writtend to stdout.
|
||||||
func xbeeInfo(ctx *cli.Context) error {
|
func xbeeInfo(ctx *cli.Context) error {
|
||||||
|
|
||||||
logger := slog.New(slog.NewTextHandler(os.Stderr))
|
logger := slog.New(slog.NewTextHandler(os.Stderr))
|
||||||
serialDevice, _ := serial.Open("/dev/ttyACM0", &serial.Mode{})
|
transport, _ := parseDeviceString(ctx.String("device"))
|
||||||
xb, err := xbee.NewSession(serialDevice, logger.With("name", ""))
|
xb, err := xbee.NewSession(transport, logger.With("device", transport.Type()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cli.Exit(err, 1)
|
return cli.Exit(err, 1)
|
||||||
}
|
}
|
||||||
|
@ -94,7 +97,7 @@ func netcat(ctx *cli.Context) error {
|
||||||
// basically create two pipes.
|
// basically create two pipes.
|
||||||
logger := slog.New(slog.NewTextHandler(os.Stderr))
|
logger := slog.New(slog.NewTextHandler(os.Stderr))
|
||||||
|
|
||||||
transport, _ := parseDeviceString("/dev/ttyUSB0")
|
transport, _ := parseDeviceString(ctx.String("device"))
|
||||||
xb, _ := xbee.NewSession(transport, logger.With("devtype", transport.Type()))
|
xb, _ := xbee.NewSession(transport, logger.With("devtype", transport.Type()))
|
||||||
|
|
||||||
sent := make(chan int64)
|
sent := make(chan int64)
|
||||||
|
@ -137,10 +140,58 @@ func parseDeviceString(dev string) (*xbeeTransport, error) {
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(dev, "tcp://") {
|
if strings.HasPrefix(dev, "tcp://") {
|
||||||
|
|
||||||
|
addr, _ := strings.CutPrefix(dev, "tcp://")
|
||||||
|
|
||||||
|
conn, err := net.Dial("tcp", addr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
xbt.ReadWriteCloser = conn
|
||||||
|
|
||||||
|
xbt.devType = "tcp"
|
||||||
|
|
||||||
} else if strings.HasPrefix(dev, "COM") && runtime.GOOS == "windows" {
|
} else if strings.HasPrefix(dev, "COM") && runtime.GOOS == "windows" {
|
||||||
|
|
||||||
} else if strings.HasPrefix(dev, "/") && runtime.GOOS != "windows" {
|
path, bRate, found := strings.Cut(dev, ":")
|
||||||
|
|
||||||
|
mode := &serial.Mode{
|
||||||
|
BaudRate: 9600,
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
b, err := strconv.Atoi(bRate)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
mode.BaudRate = b
|
||||||
|
}
|
||||||
|
sDev, err := serial.Open(path, mode)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
xbt.ReadWriteCloser = sDev
|
||||||
|
xbt.devType = "serialWin"
|
||||||
|
|
||||||
|
} else if strings.HasPrefix(dev, "/") && runtime.GOOS != "windows" {
|
||||||
|
path, bRate, found := strings.Cut(dev, ":")
|
||||||
|
|
||||||
|
mode := &serial.Mode{
|
||||||
|
BaudRate: 9600,
|
||||||
|
}
|
||||||
|
if found {
|
||||||
|
b, err := strconv.Atoi(bRate)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
mode.BaudRate = b
|
||||||
|
}
|
||||||
|
sDev, err := serial.Open(path, mode)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
xbt.ReadWriteCloser = sDev
|
||||||
|
xbt.devType = "serial"
|
||||||
|
} else {
|
||||||
|
return nil, errors.New("could not parse device path")
|
||||||
}
|
}
|
||||||
return xbt, nil
|
return xbt, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue