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
|
package cvend
import (
"bytes"
"encoding/binary"
"encoding/hex"
"log"
"pm3.dev/ipp"
)
const Path = "/dev/ttymxc3"
func OpenIPP(handler ipp.Handler) (ipp.Session, error) {
return ipp.Open(Path, handler)
}
func LogIPP(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) %s", msgData[0], string(bytes.TrimSuffix(msgData[1:], []byte{0})))
}
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("EMVStatus\n%s", hex.Dump(msgData))
default:
log.Printf("ipp %02x\n%s", msgType, hex.Dump(msgData))
}
}
|