def test_startup_alert(self, expected_event, car_model, toggle_enabled, fw_versions): # TODO: this should be done without any real sockets controls_sock = messaging.sub_sock("controlsState") pm = messaging.PubMaster(['can', 'pandaStates']) params = Params() params.clear_all() params.put_bool("Passive", False) params.put_bool("OpenpilotEnabledToggle", True) params.put_bool("CommunityFeaturesToggle", toggle_enabled) # Build capnn version of FW array if fw_versions is not None: car_fw = [] cp = car.CarParams.new_message() for ecu, addr, subaddress, version in fw_versions: f = car.CarParams.CarFw.new_message() f.ecu = ecu f.address = addr f.fwVersion = version if subaddress is not None: f.subAddress = subaddress car_fw.append(f) cp.carVin = "1" * 17 cp.carFw = car_fw params.put("CarParamsCache", cp.to_bytes()) time.sleep(2) # wait for controlsd to be ready msg = messaging.new_message('pandaStates', 1) msg.pandaStates[0].pandaType = log.PandaState.PandaType.uno pm.send('pandaStates', msg) # fingerprint if (car_model is None) or (fw_versions is not None): finger = {addr: 1 for addr in range(1, 100)} else: finger = _FINGERPRINTS[car_model][0] for _ in range(1000): msgs = [[addr, 0, b'\x00' * length, 0] for addr, length in finger.items()] pm.send('can', can_list_to_can_capnp(msgs)) time.sleep(0.01) msgs = messaging.drain_sock(controls_sock) if len(msgs): event_name = msgs[0].controlsState.alertType.split("/")[0] self.assertEqual( EVENT_NAME[expected_event], event_name, f"expected {EVENT_NAME[expected_event]} for '{car_model}', got {event_name}" ) break else: self.fail(f"failed to fingerprint {car_model}")
def can_function(pm, speed, angle, idx, cruise_button, is_engaged, left_blinker, right_blinker): msg = [] # *** powertrain bus *** speed = speed * 3.6 # convert m/s to kph msg.append(packer.make_can_msg("ENGINE_DATA", 0, {"XMISSION_SPEED": speed}, idx)) msg.append(packer.make_can_msg("WHEEL_SPEEDS", 0, { "WHEEL_SPEED_FL": speed, "WHEEL_SPEED_FR": speed, "WHEEL_SPEED_RL": speed, "WHEEL_SPEED_RR": speed }, -1)) msg.append(packer.make_can_msg("SCM_BUTTONS", 0, {"CRUISE_BUTTONS": cruise_button}, idx)) values = {"COUNTER_PEDAL": idx & 0xF} checksum = crc8_pedal(packer.make_can_msg("GAS_SENSOR", 0, {"COUNTER_PEDAL": idx & 0xF}, -1)[2][:-1]) values["CHECKSUM_PEDAL"] = checksum msg.append(packer.make_can_msg("GAS_SENSOR", 0, values, -1)) msg.append(packer.make_can_msg("GEARBOX", 0, {"GEAR": 4, "GEAR_SHIFTER": 8}, idx)) msg.append(packer.make_can_msg("GAS_PEDAL_2", 0, {}, idx)) msg.append(packer.make_can_msg("SEATBELT_STATUS", 0, {"SEATBELT_DRIVER_LATCHED": 1}, idx)) msg.append(packer.make_can_msg("STEER_STATUS", 0, {}, idx)) msg.append(packer.make_can_msg("STEERING_SENSORS", 0, {"STEER_ANGLE": angle}, idx)) msg.append(packer.make_can_msg("VSA_STATUS", 0, {}, idx)) msg.append(packer.make_can_msg("STANDSTILL", 0, {}, idx)) msg.append(packer.make_can_msg("STEER_MOTOR_TORQUE", 0, {}, idx)) msg.append(packer.make_can_msg("EPB_STATUS", 0, {}, idx)) msg.append(packer.make_can_msg("DOORS_STATUS", 0, {}, idx)) msg.append(packer.make_can_msg("CRUISE_PARAMS", 0, {}, idx)) msg.append(packer.make_can_msg("CRUISE", 0, {}, idx)) msg.append(packer.make_can_msg("SCM_FEEDBACK", 0, {"MAIN_ON": 1, "LEFT_BLINKER": left_blinker, "RIGHT_BLINKER": right_blinker}, idx)) msg.append(packer.make_can_msg("POWERTRAIN_DATA", 0, {"ACC_STATUS": int(is_engaged)}, idx)) # *** cam bus *** msg.append(packer.make_can_msg("STEERING_CONTROL", 2, {}, idx)) msg.append(packer.make_can_msg("ACC_HUD", 2, {}, idx)) msg.append(packer.make_can_msg("BRAKE_COMMAND", 2, {}, idx)) # *** radar bus *** if idx % 5 == 0: msg.append(rpacker.make_can_msg("RADAR_DIAGNOSTIC", 1, {"RADAR_STATE": 0x79}, -1)) for i in range(16): msg.append(rpacker.make_can_msg("TRACK_%d" % i, 1, {"LONG_DIST": 255.5}, -1)) # fill in the rest for fingerprint done = set([x[0] for x in msg]) for k, v in FINGERPRINTS[CAR.CIVIC][0].items(): if k not in done and k not in [0xE4, 0x194]: msg.append([k, 0, b'\x00'*v, 0]) pm.send('can', can_list_to_can_capnp(msg))
def test_startup_alert(self, expected_event, car, toggle_enabled): # TODO: this should be done without any real sockets controls_sock = messaging.sub_sock("controlsState") pm = messaging.PubMaster(['can', 'health']) params = Params() params.clear_all() params.put("Passive", b"0") params.put("OpenpilotEnabledToggle", b"1") params.put("CommunityFeaturesToggle", b"1" if toggle_enabled else b"0") time.sleep(2) # wait for controlsd to be ready health = messaging.new_message('health') health.health.hwType = log.HealthData.HwType.uno pm.send('health', health) # fingerprint if car is None: finger = {addr: 1 for addr in range(1, 100)} else: finger = _FINGERPRINTS[car][0] for _ in range(500): msgs = [[addr, 0, b'\x00' * length, 0] for addr, length in finger.items()] pm.send('can', can_list_to_can_capnp(msgs)) time.sleep(0.01) msgs = messaging.drain_sock(controls_sock) if len(msgs): event_name = msgs[0].controlsState.alertType.split("/")[0] self.assertEqual( EVENT_NAME[expected_event], event_name, f"expected {EVENT_NAME[expected_event]} for '{car}', got {event_name}" ) break else: self.fail(f"failed to fingerprint {car}")
def can_function(pm, speed, angle, idx, cruise_button=0, is_engaged=False): msg = [] msg.append(packer.make_can_msg("PCM_CRUISE_2", 0, {"SET_SPEED": speed, "MAIN_ON": 1}, -1)) msg.append(packer.make_can_msg("WHEEL_SPEEDS", 0, {"WHEEL_SPEED_FL": speed, "WHEEL_SPEED_FR": speed, "WHEEL_SPEED_RL": speed, "WHEEL_SPEED_RR": speed}, -1)) if os.path.exists('/tmp/op_lc'): msg.append(packer.make_can_msg("STEERING_LEVERS", 0, {"TURN_SIGNALS": 2}, -1)) msg.append(packer.make_can_msg("STEER_ANGLE_SENSOR", 0, {"STEER_ANGLE": angle_to_sangle(angle)}, -1)) msg.append(packer.make_can_msg("STEER_TORQUE_SENSOR", 0, {"STEER_ANGLE": angle_to_sangle(angle)}, -1)) msg.append(packer.make_can_msg("EPS_STATUS", 0, {"LKA_STATE": 5}, -1)) msg.append(packer.make_can_msg("GEAR_PACKET", 0, {"GEAR": 0}, -1)) msg.append(packer.make_can_msg("PCM_CRUISE", 0, {"CRUISE_ACTIVE": int(is_engaged), "GAS_RELEASED": 1}, -1)) #print(msg) # cam bus msg.append(packer.make_can_msg("PRE_COLLISION", 2, {}, -1)) msg.append(packer.make_can_msg("STEERING_LKA", 2, {}, -1)) if idx % 10 == 0 : # radar i = 0 for i in range(16): msg.append(rpacker.make_can_msg("TRACK_A_%d" % i, 1, {"VALID":60, "LONG_DIST": 255.5}, -1)) j = 0 for j in range(16): msg.append(rpacker.make_can_msg("TRACK_B_%d" % j, 1, {"SCORE":100}, -1)) # fill in the rest for fingerprint done = set([x[0] for x in msg]) #for k, v in FINGERPRINTS[CAR.HIGHLANDER][0].items(): #if k not in done and k not in [0xFFF]: # msg.append([k, 0, b'\x00'*v, 0]) pm.send('can', can_list_to_can_capnp(msg))
def can_function(pm, speed, angle, idx, cruise_button=0, is_engaged=0): msg = [] msg.append( packer.make_can_msg("ENGINE_DATA", 0, {"XMISSION_SPEED": speed}, idx)) msg.append( packer.make_can_msg( "WHEEL_SPEEDS", 0, { "WHEEL_SPEED_FL": speed, "WHEEL_SPEED_FR": speed, "WHEEL_SPEED_RL": speed, "WHEEL_SPEED_RR": speed }, -1)) msg.append( packer.make_can_msg("SCM_BUTTONS", 0, {"CRUISE_BUTTONS": cruise_button}, idx)) values = {"COUNTER_PEDAL": idx & 0xF} checksum = crc8_pedal( packer.make_can_msg("GAS_SENSOR", 0, {"COUNTER_PEDAL": idx & 0xF}, -1)[2][:-1]) values["CHECKSUM_PEDAL"] = checksum msg.append(packer.make_can_msg("GAS_SENSOR", 0, values, -1)) msg.append( packer.make_can_msg("GEARBOX", 0, { "GEAR": 4, "GEAR_SHIFTER": 8 }, idx)) msg.append(packer.make_can_msg("GAS_PEDAL_2", 0, {}, idx)) msg.append( packer.make_can_msg("SEATBELT_STATUS", 0, {"SEATBELT_DRIVER_LATCHED": 1}, idx)) # 1201 makes op think steer wheel is pressed msg.append( packer.make_can_msg("STEER_STATUS", 0, {"STEER_TORQUE_SENSOR": 1201}, idx)) msg.append( packer.make_can_msg("STEERING_SENSORS", 0, {"STEER_ANGLE": angle_to_sangle(angle)}, idx)) msg.append(packer.make_can_msg("VSA_STATUS", 0, {}, idx)) msg.append(packer.make_can_msg("STANDSTILL", 0, {}, idx)) msg.append(packer.make_can_msg("STEER_MOTOR_TORQUE", 0, {}, idx)) msg.append(packer.make_can_msg("EPB_STATUS", 0, {}, idx)) msg.append(packer.make_can_msg("DOORS_STATUS", 0, {}, idx)) msg.append(packer.make_can_msg("CRUISE_PARAMS", 0, {}, idx)) msg.append( packer.make_can_msg("CRUISE", 0, {"CRUISE_SPEED_PCM": speed}, idx)) msg.append(packer.make_can_msg("SCM_FEEDBACK", 0, {"MAIN_ON": 1}, idx)) msg.append( packer.make_can_msg("POWERTRAIN_DATA", 0, {"ACC_STATUS": int(is_engaged)}, idx)) #print(msg) # cam bus msg.append(packer.make_can_msg("STEERING_CONTROL", 2, {}, idx)) msg.append(packer.make_can_msg("ACC_HUD", 2, {}, idx)) msg.append(packer.make_can_msg("BRAKE_COMMAND", 2, {}, idx)) # radar if idx % 5 == 0: msg.append( rpacker.make_can_msg("RADAR_DIAGNOSTIC", 1, {"RADAR_STATE": 0x79}, -1)) for i in range(16): msg.append( rpacker.make_can_msg("TRACK_%d" % i, 1, {"LONG_DIST": 255.5}, -1)) # fill in the rest for fingerprint done = set([x[0] for x in msg]) #for k, v in FINGERPRINTS[CAR.CIVIC][0].items(): #if k not in done and k not in [0xE4, 0x194]: #msg.append([k, 0, b'\x00'*v, 0]) pm.send('can', can_list_to_can_capnp(msg))
def can_function(pm, speed, angle, idx, cruise_button, is_engaged): msg = [] # *** powertrain bus *** speed = speed * 3.6 # convert m/s to kph msg.append(packer.make_can_msg("ENGINE_DATA", 0, {"XMISSION_SPEED": speed})) msg.append( packer.make_can_msg( "WHEEL_SPEEDS", 0, { "WHEEL_SPEED_FL": speed, "WHEEL_SPEED_FR": speed, "WHEEL_SPEED_RL": speed, "WHEEL_SPEED_RR": speed })) msg.append( packer.make_can_msg("SCM_BUTTONS", 0, {"CRUISE_BUTTONS": cruise_button})) values = {"COUNTER_PEDAL": idx & 0xF} checksum = crc8_pedal( packer.make_can_msg("GAS_SENSOR", 0, {"COUNTER_PEDAL": idx & 0xF})[2][:-1]) values["CHECKSUM_PEDAL"] = checksum msg.append(packer.make_can_msg("GAS_SENSOR", 0, values)) msg.append( packer.make_can_msg("GEARBOX", 0, { "GEAR": 4, "GEAR_SHIFTER": 8 })) msg.append(packer.make_can_msg("GAS_PEDAL_2", 0, {})) msg.append( packer.make_can_msg("SEATBELT_STATUS", 0, {"SEATBELT_DRIVER_LATCHED": 1})) msg.append(packer.make_can_msg("STEER_STATUS", 0, {})) msg.append( packer.make_can_msg("STEERING_SENSORS", 0, {"STEER_ANGLE": angle})) msg.append(packer.make_can_msg("VSA_STATUS", 0, {})) msg.append( packer.make_can_msg("STANDSTILL", 0, {"WHEELS_MOVING": 1 if speed >= 1.0 else 0})) msg.append(packer.make_can_msg("STEER_MOTOR_TORQUE", 0, {})) msg.append(packer.make_can_msg("EPB_STATUS", 0, {})) msg.append(packer.make_can_msg("DOORS_STATUS", 0, {})) msg.append(packer.make_can_msg("CRUISE_PARAMS", 0, {})) msg.append(packer.make_can_msg("CRUISE", 0, {})) msg.append(packer.make_can_msg("SCM_FEEDBACK", 0, {"MAIN_ON": 1})) msg.append( packer.make_can_msg("POWERTRAIN_DATA", 0, {"ACC_STATUS": int(is_engaged)})) msg.append(packer.make_can_msg("HUD_SETTING", 0, {})) msg.append(packer.make_can_msg("CAR_SPEED", 0, {})) # *** cam bus *** msg.append(packer.make_can_msg("STEERING_CONTROL", 2, {})) msg.append(packer.make_can_msg("ACC_HUD", 2, {})) msg.append(packer.make_can_msg("BRAKE_COMMAND", 2, {})) # *** radar bus *** if idx % 5 == 0: msg.append( rpacker.make_can_msg("RADAR_DIAGNOSTIC", 1, {"RADAR_STATE": 0x79})) for i in range(16): msg.append( rpacker.make_can_msg("TRACK_%d" % i, 1, {"LONG_DIST": 255.5})) pm.send('can', can_list_to_can_capnp(msg))