|  |  |  | @ -5,34 +5,6 @@ from selfdrive.car import make_can_msg | 
			
		
	
		
			
				
					|  |  |  |  | GearShifter = car.CarState.GearShifter | 
			
		
	
		
			
				
					|  |  |  |  | VisualAlert = car.CarControl.HUDControl.VisualAlert | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def calc_checksum(data): | 
			
		
	
		
			
				
					|  |  |  |  |   """This function does not want the checksum byte in the input data. | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   jeep chrysler canbus checksum from http://illmatics.com/Remote%20Car%20Hacking.pdf | 
			
		
	
		
			
				
					|  |  |  |  |   """ | 
			
		
	
		
			
				
					|  |  |  |  |   checksum = 0xFF | 
			
		
	
		
			
				
					|  |  |  |  |   for curr in data[:-1]: | 
			
		
	
		
			
				
					|  |  |  |  |     shift = 0x80 | 
			
		
	
		
			
				
					|  |  |  |  |     for _ in range(0, 8): | 
			
		
	
		
			
				
					|  |  |  |  |       bit_sum = curr & shift | 
			
		
	
		
			
				
					|  |  |  |  |       temp_chk = checksum & 0x80 | 
			
		
	
		
			
				
					|  |  |  |  |       if (bit_sum != 0): | 
			
		
	
		
			
				
					|  |  |  |  |         bit_sum = 0x1C | 
			
		
	
		
			
				
					|  |  |  |  |         if (temp_chk != 0): | 
			
		
	
		
			
				
					|  |  |  |  |           bit_sum = 1 | 
			
		
	
		
			
				
					|  |  |  |  |         checksum = checksum << 1 | 
			
		
	
		
			
				
					|  |  |  |  |         temp_chk = checksum | 1 | 
			
		
	
		
			
				
					|  |  |  |  |         bit_sum ^= temp_chk | 
			
		
	
		
			
				
					|  |  |  |  |       else: | 
			
		
	
		
			
				
					|  |  |  |  |         if (temp_chk != 0): | 
			
		
	
		
			
				
					|  |  |  |  |           bit_sum = 0x1D | 
			
		
	
		
			
				
					|  |  |  |  |         checksum = checksum << 1 | 
			
		
	
		
			
				
					|  |  |  |  |         bit_sum ^= checksum | 
			
		
	
		
			
				
					|  |  |  |  |       checksum = bit_sum | 
			
		
	
		
			
				
					|  |  |  |  |       shift = shift >> 1 | 
			
		
	
		
			
				
					|  |  |  |  |   return ~checksum & 0xFF | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def create_lkas_hud(packer, gear, lkas_active, hud_alert, hud_count, lkas_car_model): | 
			
		
	
		
			
				
					|  |  |  |  |   # LKAS_HUD 0x2a6 (678) Controls what lane-keeping icon is displayed. | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -73,18 +45,13 @@ def create_lkas_command(packer, apply_steer, moving_fast, frame): | 
			
		
	
		
			
				
					|  |  |  |  |     "LKAS_HIGH_TORQUE": int(moving_fast), | 
			
		
	
		
			
				
					|  |  |  |  |     "COUNTER": frame % 0x10, | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   dat = packer.make_can_msg("LKAS_COMMAND", 0, values)[2] | 
			
		
	
		
			
				
					|  |  |  |  |   checksum = calc_checksum(dat) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   values["CHECKSUM"] = checksum | 
			
		
	
		
			
				
					|  |  |  |  |   return packer.make_can_msg("LKAS_COMMAND", 0, values) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def create_wheel_buttons(frame): | 
			
		
	
		
			
				
					|  |  |  |  | def create_wheel_buttons(packer, frame, cancel=False): | 
			
		
	
		
			
				
					|  |  |  |  |   # WHEEL_BUTTONS (571) Message sent to cancel ACC. | 
			
		
	
		
			
				
					|  |  |  |  |   start = b"\x01"  # acc cancel set | 
			
		
	
		
			
				
					|  |  |  |  |   counter = (frame % 10) << 4 | 
			
		
	
		
			
				
					|  |  |  |  |   dat = start + counter.to_bytes(1, 'little') + b"\x00" | 
			
		
	
		
			
				
					|  |  |  |  |   dat = dat[:-1] + calc_checksum(dat).to_bytes(1, 'little') | 
			
		
	
		
			
				
					|  |  |  |  |   return make_can_msg(0x23b, dat, 0) | 
			
		
	
		
			
				
					|  |  |  |  |   values = { | 
			
		
	
		
			
				
					|  |  |  |  |     "ACC_CANCEL": cancel, | 
			
		
	
		
			
				
					|  |  |  |  |     "COUNTER": frame % 10 | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   return packer.make_can_msg("WHEEL_BUTTONS", 0, values) | 
			
		
	
	
		
			
				
					|  |  |  | 
 |