nopenpilot/selfdrive/debug/internal/honda_sniff_steering.py

114 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import zmq
import cereal.messaging as messaging
from cereal.services import service_list
from panda.lib.panda import Panda
from hexdump import hexdump
import time
def raw_panda():
p = Panda()
print(p)
p.set_uart_baud(2, 9600)
p.set_uart_baud(3, 9600)
p.set_uart_parity(2, 1)
p.set_uart_parity(3, 1)
p.set_uart_callback(2, 1)
p.set_uart_callback(3, 1)
idx = 0
while 1:
"""
dat = p.serial_read(2)
if len(dat) > 0:
print "2:",
hexdump(dat)
dat = p.serial_read(3)
if len(dat) > 0:
print "3:",
hexdump(dat)
print "read done, waiting"
time.sleep(0.01)
"""
if idx%2 == 1:
dat = "\x20\x80\xc0\xa0"
else:
dat = "\x00\x80\xc0\xc0"
p.can_send(0, dat, 8)
for r in p.can_recv():
if r[-1] in [8, 9]:
print(r[-1], r[2].encode("hex"))
time.sleep(0.01)
idx += 1
if __name__ == "__main__":
#raw_panda()
#exit(0)
logcan = messaging.sub_sock('can')
t1 = []
t2 = []
t3 = []
while len(t1) < 1000 or os.uname()[-1] == "aarch64":
rr = messaging.recv_sock(logcan, wait=True)
for c in rr.can:
if c.src in [9] and len(c.dat) == 5:
aa = map(lambda x: ord(x)&0x7f, c.dat)
# checksum
assert (-(aa[0]+aa[1]+aa[2]+aa[3]))&0x7f == aa[4]
#print map(bin, aa[0:4])
aa[0] &= ~0x20
aa[1] &= ~0x20
st = (aa[0] << 5) + aa[1]
if st >= 256:
st = -(512-st)
mt = ((aa[2] >> 3) << 7) + aa[3]
if mt >= 512:
mt = -(1024-mt)
print(st, mt)
t1.append(st)
t2.append(mt)
#print map(bin, aa), "apply", st
if c.src in [8] and len(c.dat) == 4:
aa = map(lambda x: ord(x)&0x7f, c.dat)
# checksum
assert (-(aa[0]+aa[1]+aa[2]))&0x7f == aa[3]
aa[0] &= ~0x20
aa[1] &= ~0x20
st = (aa[0] << 5) + aa[1]
if st >= 256:
st = -(512-st)
print(aa, "apply", st)
t3.append(st)
import matplotlib.pyplot as plt
plt.plot(t1)
plt.plot(t2)
plt.plot(t3)
plt.show()