Broadcast discovery with InfoAll, interface broadcast detection, clean output
This commit is contained in:
@@ -50,17 +50,6 @@ type deviceResult struct {
|
||||
err 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,
|
||||
@@ -76,22 +65,30 @@ func cmdInfo(args []string) error {
|
||||
iface := fs.String("iface", "", "bind to this network interface (for broadcast)")
|
||||
fs.Parse(args)
|
||||
|
||||
if *udpAddr != "" {
|
||||
log := slog.With("addr", *udpAddr)
|
||||
if *iface != "" {
|
||||
log = log.With("iface", *iface)
|
||||
if *udpAddr == "" && *iface != "" {
|
||||
bcast, err := client.InterfaceBroadcast(*iface)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Info("connecting via UDP")
|
||||
c, err := client.NewUDP(*udpAddr, *iface, 2*time.Second)
|
||||
*udpAddr = bcast
|
||||
}
|
||||
|
||||
if *udpAddr != "" {
|
||||
c, err := client.NewUDP(*udpAddr, *iface, 500*time.Millisecond)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer c.Close()
|
||||
info, err := infoFromClient(*udpAddr, c)
|
||||
infos, err := c.InfoAll()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
printInfo(*udpAddr, info)
|
||||
if len(infos) == 0 {
|
||||
return fmt.Errorf("no devices responded")
|
||||
}
|
||||
for _, info := range infos {
|
||||
printInfo(net.IP(info.IP[:]).String(), info)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -108,13 +105,12 @@ func cmdInfo(args []string) error {
|
||||
for i, dev := range devs {
|
||||
results[i].dev = dev
|
||||
wg.Go(func() {
|
||||
slog.Info("connecting", "dev", dev)
|
||||
c, err := client.NewSerial(dev, 2*time.Second)
|
||||
c, err := client.NewSerial(dev, 500*time.Millisecond)
|
||||
if err != nil {
|
||||
results[i].err = err
|
||||
return
|
||||
}
|
||||
info, err := infoFromClient(dev, c)
|
||||
info, err := c.Info()
|
||||
c.Close()
|
||||
if err != nil {
|
||||
results[i].err = err
|
||||
@@ -177,7 +173,7 @@ func cmdLog(_ []string) error {
|
||||
}
|
||||
for _, dev := range devs {
|
||||
log := slog.With("dev", dev)
|
||||
c, err := client.NewSerial(dev, 2*time.Second)
|
||||
c, err := client.NewSerial(dev, 500*time.Millisecond)
|
||||
if err != nil {
|
||||
log.Error("connect error", "err", err)
|
||||
continue
|
||||
@@ -254,8 +250,7 @@ func cmdLoad(args []string) error {
|
||||
for i := range targets {
|
||||
log := slog.With("dev", devs[i])
|
||||
wg.Go(func() {
|
||||
log.Info("connecting for info")
|
||||
c, err := client.NewSerial(devs[i], 2*time.Second)
|
||||
c, err := client.NewSerial(devs[i], 500*time.Millisecond)
|
||||
if err != nil {
|
||||
errs[i] = err
|
||||
return
|
||||
@@ -286,7 +281,7 @@ func cmdLoad(args []string) error {
|
||||
log := slog.With("serial", devices[i].serial)
|
||||
wg.Go(func() {
|
||||
log.Info("sending PICOBOOT")
|
||||
c, err := client.NewSerial(devices[i].dev, 2*time.Second)
|
||||
c, err := client.NewSerial(devices[i].dev, 500*time.Millisecond)
|
||||
if err != nil {
|
||||
errs[i] = err
|
||||
return
|
||||
@@ -347,8 +342,7 @@ func cmdTest(args []string) error {
|
||||
var testDev string
|
||||
for _, dev := range devs {
|
||||
log := slog.With("dev", dev)
|
||||
log.Info("connecting for info")
|
||||
c, err := client.NewSerial(dev, 2*time.Second)
|
||||
c, err := client.NewSerial(dev, 500*time.Millisecond)
|
||||
if err != nil {
|
||||
log.Warn("connect error", "err", err)
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user