@@ -181,6 +181,8 @@ public bool prearmstatus
181181 get => connected && ( sensors_health . prearm || ! sensors_enabled . prearm ) ;
182182 }
183183
184+ private readonly PrearmFailureTracker _prearmFailureTracker = new PrearmFailureTracker ( ) ;
185+
184186 private bool useLocation ;
185187
186188 /// <summary>
@@ -1274,10 +1276,10 @@ public string messageHigh
12741276 if ( value == null || value == "" )
12751277 return ;
12761278 // check against get
1279+ _messageHighTime = DateTime . Now ;
12771280 if ( messageHigh == value )
12781281 return ;
12791282 log . Info ( "messageHigh " + value ) ;
1280- _messageHighTime = DateTime . Now ;
12811283 _messagehigh = value ;
12821284 messageHighSeverity = MAVLink . MAV_SEVERITY . EMERGENCY ;
12831285 }
@@ -2967,16 +2969,17 @@ private void Parent_OnPacketReceived(object sender, MAVLink.MAVLinkMessage mavLi
29672969
29682970 safetyactive = ! sensors_enabled . motor_control ;
29692971
2972+ string latestPrearmFailure = _prearmFailureTracker . Update (
2973+ sensors_health . prearm ,
2974+ sensors_enabled . prearm ,
2975+ sensors_present . prearm ,
2976+ messages ,
2977+ DateTime . Now ) ;
2978+
29702979 if ( errors_count1 > 0 || errors_count2 > 0 )
29712980 {
29722981 messageHigh = "InternalError 0x" + ( errors_count1 + ( errors_count2 << 16 ) ) . ToString ( "X" ) ;
29732982 }
2974-
2975- if ( ! sensors_health . prearm && sensors_enabled . prearm && sensors_present . prearm )
2976- {
2977- messageHigh = messages . LastOrDefault ( a => a . message . ToLower ( ) . Contains ( "prearm" ) ) . message
2978- ? . ToString ( ) ;
2979- }
29802983 else if ( ! sensors_health . gps && sensors_enabled . gps && sensors_present . gps )
29812984 {
29822985 messageHigh = Strings . BadGPSHealth ;
@@ -3053,6 +3056,10 @@ private void Parent_OnPacketReceived(object sender, MAVLink.MAVLinkMessage mavLi
30533056 {
30543057 messageHigh = Strings . BadAirspeed ;
30553058 }
3059+ else if ( ! string . IsNullOrEmpty ( latestPrearmFailure ) )
3060+ {
3061+ messageHigh = latestPrearmFailure ;
3062+ }
30563063 }
30573064
30583065 break ;
@@ -4056,11 +4063,11 @@ private void Parent_OnPacketReceived(object sender, MAVLink.MAVLinkMessage mavLi
40564063 case ( uint ) MAVLink . MAVLINK_MSG_ID . HIGHRES_IMU :
40574064 {
40584065 const ushort HIGHRES_IMU_UPDATED_XACC = 0x01 ;
4059- const ushort HIGHRES_IMU_UPDATED_XGYRO = 0x08 ;
4060- const ushort HIGHRES_IMU_UPDATED_XMAG = 0x40 ;
4061- const ushort HIGHRES_IMU_UPDATED_ABS_PRESSURE = 0x200 ;
4062- const ushort HIGHRES_IMU_UPDATED_PRESSURE_ALT = 0x800 ;
4063- const ushort HIGHRES_IMU_UPDATED_TEMPERATURE = 0x1000 ;
4066+ const ushort HIGHRES_IMU_UPDATED_XGYRO = 0x08 ;
4067+ const ushort HIGHRES_IMU_UPDATED_XMAG = 0x40 ;
4068+ const ushort HIGHRES_IMU_UPDATED_ABS_PRESSURE = 0x200 ;
4069+ const ushort HIGHRES_IMU_UPDATED_PRESSURE_ALT = 0x800 ;
4070+ const ushort HIGHRES_IMU_UPDATED_TEMPERATURE = 0x1000 ;
40644071
40654072 var imu = mavLinkMessage . ToStructure < MAVLink . mavlink_highres_imu_t > ( ) ;
40664073 if ( imu . id == 0 )
@@ -4643,8 +4650,8 @@ public void UpdateCurrentSettings(Action<CurrentState> bs, bool updatenow,
46434650 mavinterface . requestDatastream ( MAVLink . MAV_DATA_STREAM . RC_CHANNELS , MAV . cs . raterc ,
46444651 MAV . sysid ,
46454652 MAV . compid ) ; // request rc info
4646- MAV . Camera ? . RequestMessageIntervals ( MAV . cs . ratestatus ) ; // use ratestatus until we create a new setting for this
4647- MAV . GimbalManager ? . Discover ( ) ;
4653+ // Use ratestatus until camera-specific configuration is available.
4654+ MAV . Camera ? . UpdateRateIfChanged ( MAV . cs . ratestatus ) ;
46484655 }
46494656 catch
46504657 {
0 commit comments