Skip to content

Commit

Permalink
Add test for Subaru Brake_Status Signal1 large value (commaai#702)
Browse files Browse the repository at this point in the history
* Add test for Subaru Brake_Status Signal1 large value

* fix

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
  • Loading branch information
martinl and adeebshihadeh committed Sep 8, 2022
1 parent 5d51997 commit cefa958
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 25 deletions.
2 changes: 1 addition & 1 deletion can/parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ int64_t get_raw_value(const std::vector<uint8_t> &msg, const Signal &sig) {
int msb = (int)(sig.msb / 8) == i ? sig.msb : (i+1)*8 - 1;
int size = msb - lsb + 1;

uint8_t d = (msg[i] >> (lsb - (i*8))) & ((1ULL << size) - 1);
uint64_t d = (msg[i] >> (lsb - (i*8))) & ((1ULL << size) - 1);
ret |= d << (bits - size);

bits -= size;
Expand Down
47 changes: 23 additions & 24 deletions can/tests/test_packer_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,42 +48,41 @@ def test_packer_parser(self):
("STEER_TORQUE", "STEERING_CONTROL"),
("STEER_TORQUE_REQUEST", "STEERING_CONTROL"),

("Signal1", "Brake_Status"),

("COUNTER", "CAN_FD_MESSAGE"),
("64_BIT_LE", "CAN_FD_MESSAGE"),
("64_BIT_BE", "CAN_FD_MESSAGE"),
("SIGNED", "CAN_FD_MESSAGE"),
]
checks = [("STEERING_CONTROL", 0), ("CAN_FD_MESSAGE", 0)]

packer = CANPacker("test")
parser = CANParser("test", signals, checks, 0)

idx = 0
packer = CANPacker(TEST_DBC)
parser = CANParser(TEST_DBC, signals, [], 0, enforce_checks=False)

for steer in range(-256, 255):
for active in (1, 0):
v1 = {
"STEER_TORQUE": steer,
"STEER_TORQUE_REQUEST": active,
}
m1 = packer.make_can_msg("STEERING_CONTROL", 0, v1, idx)

v2 = {
"COUNTER": idx % 256,
"SIGNED": steer,
"64_BIT_LE": random.randint(0, 100),
"64_BIT_BE": random.randint(0, 100),
values = {
"STEERING_CONTROL": {
"STEER_TORQUE": steer,
"STEER_TORQUE_REQUEST": active,
},
"Brake_Status": {
"Signal1": 61042322657536.0,
},
"CAN_FD_MESSAGE": {
"SIGNED": steer,
"64_BIT_LE": random.randint(0, 100),
"64_BIT_BE": random.randint(0, 100),
},
}
m2 = packer.make_can_msg("CAN_FD_MESSAGE", 0, v2)

bts = can_list_to_can_capnp([m1, m2])
msgs = [packer.make_can_msg(k, 0, v) for k, v in values.items()]
bts = can_list_to_can_capnp(msgs)
parser.update_string(bts)

for key, val in v1.items():
self.assertAlmostEqual(parser.vl["STEERING_CONTROL"][key], val)

for key, val in v2.items():
self.assertAlmostEqual(parser.vl["CAN_FD_MESSAGE"][key], val)
for k, v in values.items():
for key, val in v.items():
self.assertAlmostEqual(parser.vl[k][key], val)

# also check address
for sig in ("STEER_TORQUE", "STEER_TORQUE_REQUEST", "COUNTER", "CHECKSUM"):
Expand Down Expand Up @@ -115,7 +114,7 @@ def test_scale_offset(self):
idx += 1

def test_subaru(self):
# Subuaru is little endian
# Subaru is little endian

dbc_file = "subaru_global_2017_generated"

Expand Down
9 changes: 9 additions & 0 deletions test.dbc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS

BO_ 316 Brake_Status: 8 XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" XXX
SG_ Signal1 : 12|46@1+ (1,0) [0|1] "" XXX
SG_ ES_Brake : 58|1@1+ (1,0) [0|1] "" XXX
SG_ Signal2 : 59|3@1+ (1,0) [0|1] "" XXX
SG_ Brake : 62|1@1+ (1,0) [0|1] "" XXX
SG_ Signal3 : 63|1@1+ (1,0) [0|1] "" XXX

BO_ 245 CAN_FD_MESSAGE: 32 XXX
SG_ COUNTER : 7|8@0+ (1,0) [0|1] "" XXX
SG_ SIGNED : 22|16@0- (1,0) [0|1] "" XXX
Expand Down

0 comments on commit cefa958

Please sign in to comment.