version: sunnypilot v2026.002.000 (staging) date: 2026-07-21T07:44:02 master commit: 2c334ede443d7391d27575af8c854a095ba702a8
42 lines
1.0 KiB
Python
42 lines
1.0 KiB
Python
"""
|
|
Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
|
|
|
|
This file is part of sunnypilot and is licensed under the MIT License.
|
|
See the LICENSE.md file in the root directory for more details.
|
|
"""
|
|
|
|
|
|
def crc8_pedal(data):
|
|
crc = 0xFF # standard init value
|
|
poly = 0xD5 # standard crc8: x8+x7+x6+x4+x2+1
|
|
size = len(data)
|
|
for i in range(size - 1, -1, -1):
|
|
crc ^= data[i]
|
|
for _ in range(8):
|
|
if (crc & 0x80) != 0:
|
|
crc = ((crc << 1) ^ poly) & 0xFF
|
|
else:
|
|
crc <<= 1
|
|
return crc
|
|
|
|
|
|
def create_gas_interceptor_command(packer, gas_amount, idx):
|
|
# Common gas pedal msg generator
|
|
enable = gas_amount > 0.001
|
|
|
|
values = {
|
|
"ENABLE": enable,
|
|
"PEDAL_COUNTER": idx & 0xF,
|
|
}
|
|
|
|
if enable:
|
|
values["GAS_COMMAND"] = gas_amount * 255.
|
|
values["GAS_COMMAND2"] = gas_amount * 255.
|
|
|
|
dat = packer.make_can_msg("GAS_COMMAND", 0, values)[1]
|
|
|
|
checksum = crc8_pedal(dat[:-1])
|
|
values["PEDAL_CHECKSUM"] = checksum
|
|
|
|
return packer.make_can_msg("GAS_COMMAND", 0, values)
|