This commit is contained in:
parent
7e008c154b
commit
8717f425f4
@ -73,10 +73,17 @@ var (
|
|||||||
fmtIn, fmtOut, fmtReset string
|
fmtIn, fmtOut, fmtReset string
|
||||||
)
|
)
|
||||||
|
|
||||||
func decodeSubreport(data []byte) string {
|
func decodeSubreport(id byte, data []byte) string {
|
||||||
if len(data) < 6 {
|
critical := isCriticalSubreport(id)
|
||||||
|
if len(data) < 6 || critical && len(data) < 8 {
|
||||||
return fmt.Sprintf("%x", data)
|
return fmt.Sprintf("%x", data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var cs uint16
|
||||||
|
if critical {
|
||||||
|
data, cs = data[2:], le.Uint16(data[0:2])
|
||||||
|
}
|
||||||
|
|
||||||
usage := uint32(le.Uint16(data[:2]))<<16 | uint32(le.Uint16(data[2:4]))
|
usage := uint32(le.Uint16(data[:2]))<<16 | uint32(le.Uint16(data[2:4]))
|
||||||
filtered := make([]byte, len(data)-6)
|
filtered := make([]byte, len(data)-6)
|
||||||
for i, b := range data[6:] {
|
for i, b := range data[6:] {
|
||||||
@ -86,8 +93,17 @@ func decodeSubreport(data []byte) string {
|
|||||||
filtered[i] = b
|
filtered[i] = b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("<> %08x %04x %x %s", usage, le.Uint16(data[4:6]),
|
if critical {
|
||||||
data[6:], string(filtered))
|
return fmt.Sprintf("<> %08x %04x=%04x %x %s",
|
||||||
|
usage, cs, le.Uint16(data[4:6]), data[6:], string(filtered))
|
||||||
|
} else if usage == 0xff0000f1 {
|
||||||
|
// No idea what this is, but it follows the format.
|
||||||
|
return fmt.Sprintf("<> %08x %04x %s",
|
||||||
|
usage, le.Uint16(data[4:6]), decodeMP(data[6:]))
|
||||||
|
} else {
|
||||||
|
return fmt.Sprintf("<> %08x %04x %x %s",
|
||||||
|
usage, le.Uint16(data[4:6]), data[6:], string(filtered))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeResult(data []byte) string {
|
func decodeResult(data []byte) string {
|
||||||
@ -131,6 +147,14 @@ func isGetSubreport(id byte) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isCriticalSubreport(id byte) bool {
|
||||||
|
switch id {
|
||||||
|
case 11, 12, 13, 14:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func isSubreport(id byte) bool {
|
func isSubreport(id byte) bool {
|
||||||
return isSetSubreport(id) || isGetSubreport(id)
|
return isSetSubreport(id) || isGetSubreport(id)
|
||||||
}
|
}
|
||||||
@ -143,7 +167,7 @@ func processInterrupt(p *Packet) {
|
|||||||
if *raw {
|
if *raw {
|
||||||
fmt.Printf("%s INT %02x %x\n", p.addr(), data[0], data[1:])
|
fmt.Printf("%s INT %02x %x\n", p.addr(), data[0], data[1:])
|
||||||
} else if isSubreport(data[0]) {
|
} else if isSubreport(data[0]) {
|
||||||
fmt.Printf("%s INT %s\n", p.addr(), decodeSubreport(data[1:]))
|
fmt.Printf("%s INT %s\n", p.addr(), decodeSubreport(data[0], data[1:]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +187,7 @@ func processControl(p *Packet) {
|
|||||||
fmt.Printf("%s IN SR %x\n", p.addr(), data[5:])
|
fmt.Printf("%s IN SR %x\n", p.addr(), data[5:])
|
||||||
} else if isGetSubreport(data[0]) {
|
} else if isGetSubreport(data[0]) {
|
||||||
fmt.Printf("%s IN %s%s%s\n", p.addr(),
|
fmt.Printf("%s IN %s%s%s\n", p.addr(),
|
||||||
fmtIn, decodeSubreport(data[1:]), fmtReset)
|
fmtIn, decodeSubreport(data[0], data[1:]), fmtReset)
|
||||||
} else if data[0] == 6 {
|
} else if data[0] == 6 {
|
||||||
fmt.Printf("%s IN PC %04x\n", p.addr(), le.Uint16(data[1:]))
|
fmt.Printf("%s IN PC %04x\n", p.addr(), le.Uint16(data[1:]))
|
||||||
} else if data[0] == 7 {
|
} else if data[0] == 7 {
|
||||||
@ -172,6 +196,8 @@ func processControl(p *Packet) {
|
|||||||
fmt.Printf("%s IN ID %s %s\n", p.addr(), data[1:9], data[9:])
|
fmt.Printf("%s IN ID %s %s\n", p.addr(), data[1:9], data[9:])
|
||||||
} else if data[0] == 9 {
|
} else if data[0] == 9 {
|
||||||
fmt.Printf("%s IN MP %s\n", p.addr(), decodeMP(data[1:]))
|
fmt.Printf("%s IN MP %s\n", p.addr(), decodeMP(data[1:]))
|
||||||
|
} else if data[0] == 10 {
|
||||||
|
fmt.Printf("%s IN CS %04x\n", p.addr(), le.Uint16(data[1:]))
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("%s IN %02x %x\n", p.addr(), data[0], data[1:])
|
fmt.Printf("%s IN %02x %x\n", p.addr(), data[0], data[1:])
|
||||||
}
|
}
|
||||||
@ -180,7 +206,9 @@ func processControl(p *Packet) {
|
|||||||
fmt.Printf("%s OUT %02x %x\n", p.addr(), data[0], data[1:])
|
fmt.Printf("%s OUT %02x %x\n", p.addr(), data[0], data[1:])
|
||||||
} else if isSetSubreport(data[0]) {
|
} else if isSetSubreport(data[0]) {
|
||||||
fmt.Printf("%s OUT %s%s%s\n", p.addr(),
|
fmt.Printf("%s OUT %s%s%s\n", p.addr(),
|
||||||
fmtOut, decodeSubreport(data[1:]), fmtReset)
|
fmtOut, decodeSubreport(data[0], data[1:]), fmtReset)
|
||||||
|
} else if data[0] == 10 {
|
||||||
|
fmt.Printf("%s OUT CS %04x\n", p.addr(), le.Uint16(data[1:]))
|
||||||
} else if data[0] != 1 && !isGetSubreport(data[0]) {
|
} else if data[0] != 1 && !isGetSubreport(data[0]) {
|
||||||
fmt.Printf("%s OUT %02x %x\n", p.addr(), data[0], data[1:])
|
fmt.Printf("%s OUT %02x %x\n", p.addr(), data[0], data[1:])
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user