1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package main
import (
"encoding/hex"
"flag"
"log"
"strconv"
"time"
"pm3.dev/cvend"
)
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)
wc := make(chan struct{}, 1)
cv, err := cvend.Open(cvend.Path, func(msgType byte, msgData []byte) {
log.Printf("ipp %02x\n%s", msgType, hex.Dump(msgData))
select {
case wc <- struct{}{}:
default:
}
})
if err != nil {
panic(err)
}
defer cv.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 := cv.SendIPP(msgType, msgData); err != nil {
panic(err)
}
if *wait > 0 {
select {
case <-wc:
case <-time.After(*wait):
}
}
}
if *follow || flag.NArg() == 0 {
select {}
}
}
|