Exemple #1
0
    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}")
Exemple #2
0
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))
Exemple #3
0
    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}")
Exemple #4
0
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))
Exemple #5
0
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))
Exemple #6
0
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))