summaryrefslogtreecommitdiff
path: root/cmd/pic32-ipp/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/pic32-ipp/main.go')
-rw-r--r--cmd/pic32-ipp/main.go58
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 {}
+ }
+}