You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							59 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							59 lines
						
					
					
						
							1.7 KiB
						
					
					
				#!/usr/bin/env python
 | 
						|
import time
 | 
						|
import struct
 | 
						|
from panda import Panda
 | 
						|
from hexdump import hexdump
 | 
						|
from isotp import isotp_send, isotp_recv
 | 
						|
 | 
						|
# 0x7e0 = Toyota
 | 
						|
# 0x18DB33F1 for Honda?
 | 
						|
 | 
						|
def get_current_data_for_pid(pid):
 | 
						|
  # 01 xx = Show current data
 | 
						|
  isotp_send(panda, "\x01"+chr(pid), 0x7e0)
 | 
						|
  return isotp_recv(panda, 0x7e8)
 | 
						|
 | 
						|
def get_supported_pids():
 | 
						|
  ret = []
 | 
						|
  pid = 0
 | 
						|
  while 1:
 | 
						|
    supported = struct.unpack(">I", get_current_data_for_pid(pid)[2:])[0]
 | 
						|
    for i in range(1+pid, 0x21+pid):
 | 
						|
      if supported & 0x80000000:
 | 
						|
        ret.append(i)
 | 
						|
      supported <<= 1
 | 
						|
    pid += 0x20
 | 
						|
    if pid not in ret:
 | 
						|
      break
 | 
						|
  return ret
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
  panda = Panda()
 | 
						|
  panda.set_safety_mode(Panda.SAFETY_ELM327)
 | 
						|
  panda.can_clear(0)
 | 
						|
 | 
						|
  # 09 02 = Get VIN
 | 
						|
  isotp_send(panda, "\x09\x02", 0x7e0)
 | 
						|
  ret = isotp_recv(panda, 0x7e8)
 | 
						|
  hexdump(ret)
 | 
						|
  print "VIN: %s" % ret[2:]
 | 
						|
 | 
						|
  # 03 = get DTCS
 | 
						|
  isotp_send(panda, "\x03", 0x7e0)
 | 
						|
  dtcs = isotp_recv(panda, 0x7e8)
 | 
						|
  print "DTCs:", dtcs[2:].encode("hex")
 | 
						|
 | 
						|
  supported_pids = get_supported_pids()
 | 
						|
  print "Supported PIDs:",supported_pids
 | 
						|
 | 
						|
  while 1:
 | 
						|
    speed = struct.unpack(">B", get_current_data_for_pid(13)[2:])[0]                  # kph
 | 
						|
    rpm = struct.unpack(">H", get_current_data_for_pid(12)[2:])[0]/4.0                # revs
 | 
						|
    throttle = struct.unpack(">B", get_current_data_for_pid(17)[2:])[0]/255.0 * 100   # percent
 | 
						|
    temp = struct.unpack(">B", get_current_data_for_pid(5)[2:])[0] - 40               # degrees C
 | 
						|
    load = struct.unpack(">B", get_current_data_for_pid(4)[2:])[0]/255.0 * 100        # percent
 | 
						|
    print "%d KPH, %d RPM, %.1f%% Throttle, %d deg C, %.1f%% load" % (speed, rpm, throttle, temp, load)
 | 
						|
    time.sleep(0.2)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |