in tools/cansim/canigen.py [0:0]
def _encode_pid_data(self, num, ecu):
for name, data in ecu["pids"].items():
if num == int(data["num"], 0):
scaled_val = (self._values["pid"][name] + data["offset"]) * data["scale"]
is_float = data.get("signal_value_type", "INTEGER") == "FLOATING_POINT"
if is_float:
if data["size"] == 4:
return list(struct.pack(">f", scaled_val))
elif data["size"] == 8:
return list(struct.pack(">d", scaled_val))
else:
print(
"error: invalid size for floating point value,"
f" expected 4 or 8 bytes but got {data['size']}"
)
return None
else:
val = int(scaled_val)
out = []
for i in range(data["size"]):
out.append((val >> ((data["size"] - i - 1) * 8)) & 0xFF)
return out
return None