Add UDP transport with picomap port 28781, info -udp flag

This commit is contained in:
Ian Gulliver
2026-04-07 21:36:50 +09:00
parent 3d749add7d
commit 9989d8c66a
5 changed files with 185 additions and 13 deletions

View File

@@ -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