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 | |
| parent | exec -> systemd-run; more parsing (diff) | |
ipp -> {cvend,pic32}-ipp
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/cvend-ipp/main.go | 58 | ||||
| -rw-r--r-- | cmd/ipp/main.go | 87 | ||||
| -rw-r--r-- | cmd/pic32-ipp/main.go | 58 |
3 files changed, 116 insertions, 87 deletions
diff --git a/cmd/cvend-ipp/main.go b/cmd/cvend-ipp/main.go new file mode 100644 index 0000000..ce96732 --- /dev/null +++ b/cmd/cvend-ipp/main.go @@ -0,0 +1,58 @@ +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 | 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 {} + } +} diff --git a/cmd/ipp/main.go b/cmd/ipp/main.go deleted file mode 100644 index 21cf0fc..0000000 --- a/cmd/ipp/main.go +++ /dev/null @@ -1,87 +0,0 @@ -package main - -import ( - "encoding/binary" - "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 | log.Ldate | log.Ltime | log.Lmicroseconds) - log.Println("start") - wc := make(chan struct{}, 1) - cv, err := cvend.Open(cvend.Path, func(msgType byte, msgData []byte) { - switch msgType { - case 0x07: - log.Printf("Heartbeat(%s)", hex.EncodeToString(msgData)) - case 0x0f: - log.Printf("Startup(%s)", hex.EncodeToString(msgData)) - case 0xed: - if len(msgData) == 0 { - log.Printf("Log()") - } else { - log.Printf("Log(%d) %q", msgData[0], string(msgData[1:])) - } - case 0xbe: - if len(msgData) < 22 || len(msgData) < 22+int(msgData[21]) { - log.Printf("PICCRead(short)\n%s", hex.Dump(msgData)) - } else { - _ = msgData[:11] // unknown - uid := msgData[11:18] - atqa := binary.LittleEndian.Uint16(msgData[18:20]) - sak := msgData[20] - atrLen := msgData[21] - atr := msgData[22 : 22+atrLen] - _ = msgData[22+atrLen:] // unknown - log.Printf("PICCRead(uid %s atqa 0x%04x sak %02x atr %s)\n%s", hex.EncodeToString(uid), atqa, sak, hex.EncodeToString(atr), hex.Dump(msgData)) - } - case 0xd1: - log.Printf("EMVTransactionSuccessUnk\n%s", hex.Dump(msgData)) - default: - 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 {} - } -} 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 {} + } +} |