diff options
| author | Kevin Wallace <kevin@pentabarf.net> | 2026-03-02 15:04:40 -0800 |
|---|---|---|
| committer | Kevin Wallace <kevin@pentabarf.net> | 2026-03-02 15:04:40 -0800 |
| commit | 502a6d983f981aff18b261a61feded2db6006ec6 (patch) | |
| tree | b2f7b65c8c5a0319780f62a891d517148a6623ff /cmd/pic32-ipp/main.go | |
| parent | exec -> systemd-run; more parsing (diff) | |
ipp -> {cvend,pic32}-ipp
Diffstat (limited to 'cmd/pic32-ipp/main.go')
| -rw-r--r-- | cmd/pic32-ipp/main.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/cmd/pic32-ipp/main.go b/cmd/pic32-ipp/main.go new file mode 100644 index 0000000..34a1ec8 --- /dev/null +++ b/cmd/pic32-ipp/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "encoding/hex" + "flag" + "log" + "strconv" + "time" + + "pm3.dev/pic32" +) + +var wait = flag.Duration("w", 5*time.Second, "how long to wait for a response") +var follow = flag.Bool("f", false, "don't exit after response") + +func main() { + flag.Parse() + log.SetFlags(log.Lshortfile | log.Ldate | log.Ltime | log.Lmicroseconds) + log.Println("pic32-ipp start") + wc := make(chan struct{}, 1) + s, err := pic32.OpenIPP(func(msgType byte, msgData []byte) { + pic32.LogIPP(msgType, msgData) + select { + case wc <- struct{}{}: + default: + } + }) + if err != nil { + panic(err) + } + defer s.Close() + for i := 0; i < flag.NArg(); i += 2 { + var msgType byte + var msgData []byte + if n, err := strconv.ParseUint(flag.Arg(i), 0, 8); err != nil { + panic(err) + } else { + msgType = byte(n) + } + if bs, err := hex.DecodeString(flag.Arg(i + 1)); err != nil { + panic(err) + } else { + msgData = bs + } + if err := s.SendIPP(msgType, msgData); err != nil { + panic(err) + } + if *wait > 0 { + select { + case <-wc: + case <-time.After(*wait): + } + } + } + if *follow || flag.NArg() == 0 { + select {} + } +} |