158 chassis_.set_error_code(chassis_error_code());
161 chassis_.set_engine_started(
true);
164 if (chassis_detail.has_scu_bcs_3_308()) {
166 if (scu_bcs_3_308.has_bcs_rrwheelspd()) {
167 if (chassis_.has_wheel_speed()) {
168 chassis_.mutable_wheel_speed()->set_is_wheel_spd_rr_valid(
170 chassis_.mutable_wheel_speed()->set_wheel_direction_rr(
172 chassis_.mutable_wheel_speed()->set_wheel_spd_rr(
177 if (scu_bcs_3_308.has_bcs_rlwheelspd()) {
178 if (chassis_.has_wheel_speed()) {
179 chassis_.mutable_wheel_speed()->set_is_wheel_spd_rl_valid(
181 chassis_.mutable_wheel_speed()->set_wheel_direction_rl(
183 chassis_.mutable_wheel_speed()->set_wheel_spd_rl(
188 if (scu_bcs_3_308.has_bcs_frwheelspd()) {
189 if (chassis_.has_wheel_speed()) {
190 chassis_.mutable_wheel_speed()->set_is_wheel_spd_fr_valid(
192 chassis_.mutable_wheel_speed()->set_wheel_direction_fr(
194 chassis_.mutable_wheel_speed()->set_wheel_spd_fr(
199 if (scu_bcs_3_308.has_bcs_flwheelspd()) {
200 if (chassis_.has_wheel_speed()) {
201 chassis_.mutable_wheel_speed()->set_is_wheel_spd_fl_valid(
203 chassis_.mutable_wheel_speed()->set_wheel_direction_fl(
205 chassis_.mutable_wheel_speed()->set_wheel_spd_fl(
211 if (chassis_detail.has_scu_bcs_2_307() &&
213 chassis_.set_speed_mps(
216 chassis_.set_speed_mps(0);
222 chassis_.set_fuel_range_m(0);
224 if (chassis_detail.has_scu_vcu_1_312() &&
226 chassis_.set_throttle_percentage(
229 chassis_.set_throttle_percentage(0);
232 if (chassis_detail.has_scu_bcs_1_306() &&
234 chassis_.set_brake_percentage(
237 chassis_.set_brake_percentage(0);
240 if (chassis_detail.has_scu_vcu_1_312() &&
267 if (chassis_detail.has_scu_eps_311() &&
268 chassis_detail.
scu_eps_311().has_eps_steerangle()) {
269 chassis_.set_steering_percentage(
273 chassis_.set_steering_percentage(0);
277 if (chassis_detail.has_scu_epb_310() &&
282 chassis_.set_parking_brake(
false);
286 if (chassis_detail.has_scu_bcm_304() &&
287 chassis_detail.
scu_bcm_304().has_bcm_highbeamst() &&
290 if (chassis_.has_signal()) {
291 chassis_.mutable_signal()->set_high_beam(
true);
294 if (chassis_.has_signal()) {
295 chassis_.mutable_signal()->set_high_beam(
false);
300 if (chassis_detail.has_scu_bcm_304()) {
302 if (scu_bcm_304.has_bcm_leftturnlampst() &&
305 chassis_.mutable_signal()->set_turn_signal(
307 }
else if (scu_bcm_304.has_bcm_rightturnlampst() &&
310 chassis_.mutable_signal()->set_turn_signal(
313 chassis_.mutable_signal()->set_turn_signal(
317 chassis_.mutable_signal()->set_turn_signal(
321 if (chassis_detail.has_scu_bcm_304() &&
325 chassis_.mutable_signal()->set_horn(
true);
327 chassis_.mutable_signal()->set_horn(
false);
331 chassis_.mutable_vehicle_id()->set_vin(
"");
332 if (chassis_detail.has_scu_1_301() && chassis_detail.has_scu_2_302() &&
333 chassis_detail.has_scu_3_303()) {
337 if (scu_2_302.has_vin00() && scu_2_302.has_vin01() &&
338 scu_2_302.has_vin02() && scu_2_302.has_vin03() &&
339 scu_2_302.has_vin04() && scu_2_302.has_vin05() &&
340 scu_2_302.has_vin06() && scu_2_302.has_vin07() &&
341 scu_3_303.has_vin08() && scu_3_303.has_vin09() &&
342 scu_3_303.has_vin10() && scu_3_303.has_vin11() &&
343 scu_3_303.has_vin12() && scu_3_303.has_vin13() &&
344 scu_3_303.has_vin14() && scu_3_303.has_vin15() &&
345 scu_1_301.has_vin16()) {
347 n[0] = scu_2_302.
vin00();
348 n[1] = scu_2_302.
vin01();
349 n[2] = scu_2_302.
vin02();
350 n[3] = scu_2_302.
vin03();
351 n[4] = scu_2_302.
vin04();
352 n[5] = scu_2_302.
vin05();
353 n[6] = scu_2_302.
vin06();
354 n[7] = scu_2_302.
vin07();
355 n[8] = scu_3_303.
vin08();
356 n[9] = scu_3_303.
vin09();
357 n[10] = scu_3_303.
vin10();
358 n[11] = scu_3_303.
vin11();
359 n[12] = scu_3_303.
vin12();
360 n[13] = scu_3_303.
vin13();
361 n[14] = scu_3_303.
vin14();
362 n[15] = scu_3_303.
vin15();
363 n[16] = scu_1_301.
vin16();
366 memset(&ch,
'\0',
sizeof(ch));
367 for (
int i = 0; i < 17; i++) {
368 ch[i] =
static_cast<char>(n[i]);
370 if (chassis_.has_vehicle_id()) {
371 chassis_.mutable_vehicle_id()->set_vin(ch);
377 if (chassis_error_mask_) {
378 if (chassis_.has_engage_advice()) {
379 chassis_.mutable_engage_advice()->set_advice(
381 chassis_.mutable_engage_advice()->set_reason(
"Chassis error!");
383 }
else if (chassis_.
parking_brake() || CheckSafetyError(chassis_detail)) {
384 if (chassis_.has_engage_advice()) {
385 chassis_.mutable_engage_advice()->set_advice(
387 chassis_.mutable_engage_advice()->set_reason(
388 "Vehicle is not in a safe state to engage!");
391 if (chassis_.has_engage_advice()) {
392 chassis_.mutable_engage_advice()->set_advice(
398 if (chassis_detail.has_scu_bcs_1_306() &&
400 chassis_.mutable_check_response()->set_is_esp_online(
403 if (chassis_detail.has_scu_eps_311() &&
405 chassis_.mutable_check_response()->set_is_eps_online(
408 if (chassis_detail.has_scu_vcu_1_312() &&
410 chassis_.mutable_check_response()->set_is_vcu_online(