Add UDP transport with picomap port 28781, info -udp flag
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net"
|
||||
@@ -26,7 +27,7 @@ func main() {
|
||||
var err error
|
||||
switch cmd {
|
||||
case "info":
|
||||
err = cmdInfo()
|
||||
err = cmdInfo(args)
|
||||
case "load":
|
||||
err = cmdLoad(args)
|
||||
case "log":
|
||||
@@ -49,7 +50,47 @@ type deviceResult struct {
|
||||
err error
|
||||
}
|
||||
|
||||
func cmdInfo() error {
|
||||
func infoFromClient(dev string, c *client.Client) (*client.ResponseInfo, error) {
|
||||
log := slog.With("dev", dev)
|
||||
log.Info("requesting info")
|
||||
info, err := c.Info()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
log.Info("got info", "firmware", info.FirmwareName)
|
||||
return info, nil
|
||||
}
|
||||
|
||||
func printInfo(dev string, info *client.ResponseInfo) {
|
||||
slog.Info("device",
|
||||
"dev", dev,
|
||||
"board_id", hex.EncodeToString(info.BoardID[:]),
|
||||
"mac", net.HardwareAddr(info.MAC[:]).String(),
|
||||
"ip", net.IP(info.IP[:]).String(),
|
||||
"firmware", info.FirmwareName)
|
||||
}
|
||||
|
||||
func cmdInfo(args []string) error {
|
||||
fs := flag.NewFlagSet("info", flag.ExitOnError)
|
||||
udpAddr := fs.String("udp", "", "connect via UDP to this IP address")
|
||||
fs.Parse(args)
|
||||
|
||||
if *udpAddr != "" {
|
||||
log := slog.With("addr", *udpAddr)
|
||||
log.Info("connecting via UDP")
|
||||
c, err := client.NewUDP(*udpAddr, 2*time.Second)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer c.Close()
|
||||
info, err := infoFromClient(*udpAddr, c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
printInfo(*udpAddr, info)
|
||||
return nil
|
||||
}
|
||||
|
||||
devs, err := client.ListSerial()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -62,22 +103,19 @@ func cmdInfo() error {
|
||||
var wg sync.WaitGroup
|
||||
for i, dev := range devs {
|
||||
results[i].dev = dev
|
||||
log := slog.With("dev", dev)
|
||||
wg.Go(func() {
|
||||
log.Info("connecting")
|
||||
slog.Info("connecting", "dev", dev)
|
||||
c, err := client.NewSerial(dev, 2*time.Second)
|
||||
if err != nil {
|
||||
results[i].err = err
|
||||
return
|
||||
}
|
||||
log.Info("requesting info")
|
||||
info, err := c.Info()
|
||||
info, err := infoFromClient(dev, c)
|
||||
c.Close()
|
||||
if err != nil {
|
||||
results[i].err = err
|
||||
return
|
||||
}
|
||||
log.Info("got info", "firmware", info.FirmwareName)
|
||||
results[i].info = info
|
||||
})
|
||||
}
|
||||
@@ -88,12 +126,7 @@ func cmdInfo() error {
|
||||
slog.Error("device error", "dev", r.dev, "err", r.err)
|
||||
continue
|
||||
}
|
||||
slog.Info("device",
|
||||
"dev", r.dev,
|
||||
"board_id", hex.EncodeToString(r.info.BoardID[:]),
|
||||
"mac", net.HardwareAddr(r.info.MAC[:]).String(),
|
||||
"ip", net.IP(r.info.IP[:]).String(),
|
||||
"firmware", r.info.FirmwareName)
|
||||
printInfo(r.dev, r.info)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user