version: 2.0.0 status: hil_verified domain: seat source: firmware_store_format: SMV8 verified_on: 2026-07-30 test_status: ../../../firmware/t2g/Seat_Controller_demo/Docs/HIL_TEST_STATUS_2026-07-30.md protocol: version: 1 bitrate: 500000 frame_format: classic_can_11_bit payload_bytes: 8 absolute_position_opcode: 1 timed_duty_opcode: 3 stop_all_opcode: 9 start_dynamic_mode_opcode: 14 stop_dynamic_mode_opcode: 15 dynamic_status_frame_id: 774 stop_all_motor_selector: 0 home_known_range_opcode: 11 home_known_range_key: 19282 home_known_range_timeout_s: 120 normalized_position_max: 10000 # A full M0 stroke takes more than the firmware's legacy 12 s default. # Always send this override with Opcode 1 so every calibrated axis has # enough time to reach either endpoint on the physical bench. absolute_position_timeout_ms: 30000 # The currently deployed SMV8 image commits Work Flash as soon as an axis # stops. Give that blocking persistence step time to finish before the next # axis command; the updated image additionally batches the four-axis save. inter_axis_settle_ms: 2000 default_duty_percent: 90 timed_duty_level_scale: 10 timed_duty_min_duration_ms: 300 # User-specified duration commands are bounded per axis below. A long # request is clamped, but reaching a proven endpoint before the timer ends # is a successful completion rather than a motion error. timed_duty_max_duration_ms: 30000 increase_direction: 1 decrease_direction: 2 dynamic_modes: max_runtime_ms: 600000 arrival_grace_ms: 30000 rocking_horse: mode_id: 1 phases: - {id: rock_forward, completion: all_targets_reached, timeout_ms: 15000} - {id: rock_backward, completion: all_targets_reached, timeout_ms: 15000} cradle: mode_id: 2 phases: - {id: forward, completion: all_targets_reached, timeout_ms: 30000} - {id: return, completion: all_targets_reached, timeout_ms: 30000} axes: seat.set_longitudinal_position: motor_selector: 0 physical_mode: 0 physical_name: horizontal_fore_aft physical_unit: mm physical_full_scale_x100: 21500 default_max_hall_count: 480 default_timeout_ms: 12000 timed_duty_ms_per_pct: 120 max_user_timed_duration_ms: 30000 max_uncalibrated_relative_pct: 15 hardware_verified: true seat.set_cushion_tilt: motor_selector: 1 physical_mode: 1 physical_name: seat_pan_oblique_height physical_unit: percent physical_full_scale_x100: 10000 horizontal_full_scale_x100: 5100 vertical_full_scale_x100: 5600 default_max_hall_count: 374 default_timeout_ms: 8000 timed_duty_ms_per_pct: 80 max_user_timed_duration_ms: 20000 max_uncalibrated_relative_pct: 15 hardware_verified: true seat.set_backrest_recline: motor_selector: 2 physical_mode: 2 physical_name: backrest_recline physical_unit: degree physical_full_scale_x100: 6800 display_zero_degree_x100: 9500 default_max_hall_count: 917 default_timeout_ms: 12000 timed_duty_ms_per_pct: 120 max_user_timed_duration_ms: 30000 max_uncalibrated_relative_pct: 15 hardware_verified: true seat.set_legrest_height: motor_selector: 3 physical_mode: 3 physical_name: legrest_lift physical_unit: degree physical_full_scale_x100: 7200 display_zero_degree_x100: 9500 default_max_hall_count: 647 default_timeout_ms: 10000 timed_duty_ms_per_pct: 100 max_user_timed_duration_ms: 25000 max_uncalibrated_relative_pct: 15 hardware_verified: true