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
58
59
60
|
package main
import (
"encoding/hex"
"flag"
"log"
"strconv"
"time"
"pm3.dev/cvend"
"pm3.dev/ipp"
)
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()
*ipp.Trace = true
log.SetFlags(log.Lshortfile | log.Ldate | log.Ltime | log.Lmicroseconds)
log.Println("cvend-ipp start")
wc := make(chan struct{}, 1)
s, err := cvend.OpenIPP(func(msgType byte, msgData []byte) {
cvend.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 {}
}
}
|