forked from IQ.Lvbs/IQ.Pilot
42 lines
1.9 KiB
Python
42 lines
1.9 KiB
Python
"""
|
|
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos
|
|
|
|
Camera-bus message spoofers for Subaru stop-and-go: re-emit the stock Throttle
|
|
and Brake_Pedal frames, nudging a single field to trigger an ACC resume from a
|
|
standstill. Field sets mirror the DBC message layout.
|
|
"""
|
|
from iqdbc.car.subaru.values import CanBus, SubaruFlags
|
|
|
|
_THROTTLE_FIELDS_PREGLOBAL = ("Throttle_Pedal", "Signal1", "Not_Full_Throttle", "Signal2", "Engine_RPM",
|
|
"Off_Throttle", "Signal3", "Throttle_Cruise", "Throttle_Combo", "Throttle_Body",
|
|
"Off_Throttle_2", "Signal4")
|
|
_THROTTLE_FIELDS_GLOBAL = ("CHECKSUM", "Signal1", "Engine_RPM", "Neutral", "Throttle_Pedal", "Throttle_Cruise",
|
|
"Throttle_Combo", "Signal3", "Off_Accel")
|
|
_BRAKE_FIELDS_PREGLOBAL = ("Speed", "Brake_Pedal", "Signal1")
|
|
_BRAKE_FIELDS_GLOBAL = ("CHECKSUM", "Signal1", "Speed", "Signal2", "Brake_Lights", "Signal3", "Brake_Pedal", "Signal4")
|
|
|
|
|
|
def _next_counter(msg):
|
|
return (msg["COUNTER"] + 1) % 0x10
|
|
|
|
|
|
def create_throttle(packer, CP, throttle_msg, send_resume):
|
|
preglobal = bool(CP.flags & SubaruFlags.PREGLOBAL)
|
|
fields = _THROTTLE_FIELDS_PREGLOBAL if preglobal else _THROTTLE_FIELDS_GLOBAL
|
|
values = {name: throttle_msg[name] for name in fields}
|
|
values["COUNTER"] = _next_counter(throttle_msg)
|
|
if send_resume:
|
|
values["Throttle_Pedal"] = 5
|
|
return packer.make_can_msg("Throttle", CanBus.camera, values)
|
|
|
|
|
|
def create_brake_pedal(packer, CP, brake_pedal_msg, send_resume):
|
|
preglobal = bool(CP.flags & SubaruFlags.PREGLOBAL)
|
|
fields = _BRAKE_FIELDS_PREGLOBAL if preglobal else _BRAKE_FIELDS_GLOBAL
|
|
values = {name: brake_pedal_msg[name] for name in fields}
|
|
if not preglobal:
|
|
values["COUNTER"] = _next_counter(brake_pedal_msg)
|
|
if send_resume:
|
|
values["Speed"] = 1 if preglobal else 3
|
|
return packer.make_can_msg("Brake_Pedal", CanBus.camera, values)
|