@@ -40,6 +40,14 @@ class CommandManagerTest : public ::testing::Test
4040 {true , THROTTLE, OFFBOARD_FY},
4141 {true , THROTTLE, OFFBOARD_FZ}};
4242
43+ uint16_t default_rc_override = CommandManager::OVERRIDE_X
44+ | CommandManager::OVERRIDE_Y
45+ | CommandManager::OVERRIDE_Z
46+ | CommandManager::OVERRIDE_OFFBOARD_X_INACTIVE
47+ | CommandManager::OVERRIDE_OFFBOARD_Y_INACTIVE
48+ | CommandManager::OVERRIDE_OFFBOARD_Z_INACTIVE
49+ | CommandManager::OVERRIDE_OFFBOARD_T_INACTIVE;
50+
4351 CommandManagerTest ()
4452 : mavlink(board)
4553 , rf(board, mavlink)
@@ -205,7 +213,7 @@ TEST_F(CommandManagerTest, DisarmStickReversed)
205213 EXPECT_EQ (rf.state_manager_ .state ().armed , false );
206214}
207215
208- TEST_F (CommandManagerTest, DefaultRCOutputd )
216+ TEST_F (CommandManagerTest, DefaultRCOutput )
209217{
210218 stepFirmware (600000 );
211219
@@ -337,6 +345,7 @@ TEST_F(CommandManagerTest, OffboardCommandMuxNoMinThrottle)
337345 EXPECT_CLOSE (output.Fx .value , OFFBOARD_FX);
338346 EXPECT_CLOSE (output.Fy .value , OFFBOARD_FY);
339347 EXPECT_CLOSE (output.Fz .value , OFFBOARD_FZ);
348+ EXPECT_EQ (rf.command_manager_ .get_rc_override (), CommandManager::OVERRIDE_NO_OVERRIDE);
340349}
341350
342351TEST_F (CommandManagerTest, OffboardCommandMuxMinThrottle)
@@ -356,6 +365,8 @@ TEST_F(CommandManagerTest, OffboardCommandMuxMinThrottle)
356365 EXPECT_CLOSE (output.Fx .value , 0.0 );
357366 EXPECT_CLOSE (output.Fy .value , 0.0 );
358367 EXPECT_CLOSE (output.Fz .value , 0.0 );
368+
369+ EXPECT_EQ (rf.command_manager_ .get_rc_override (), CommandManager::OVERRIDE_T);
359370}
360371
361372TEST_F (CommandManagerTest, OffboardCommandMuxRollDeviation)
@@ -370,7 +381,14 @@ TEST_F(CommandManagerTest, OffboardCommandMuxRollDeviation)
370381 EXPECT_CLOSE (output.Qx .value , -0.5 * rf.params_ .get_param_float (PARAM_RC_MAX_ROLL));
371382 EXPECT_CLOSE (output.Qy .value , OFFBOARD_QY);
372383 EXPECT_CLOSE (output.Qz .value , OFFBOARD_QZ);
384+ EXPECT_CLOSE (output.Fx .value , 0.0 );
385+ EXPECT_CLOSE (output.Fy .value , 0.0 );
373386 EXPECT_CLOSE (output.Fz .value , 0.0 );
387+
388+ uint16_t correct_rc_override =
389+ CommandManager::OVERRIDE_T
390+ | CommandManager::OVERRIDE_X;
391+ EXPECT_EQ (rf.command_manager_ .get_rc_override (), correct_rc_override);
374392}
375393
376394TEST_F (CommandManagerTest, OffboardCommandMuxPitchDeviation)
@@ -385,7 +403,14 @@ TEST_F(CommandManagerTest, OffboardCommandMuxPitchDeviation)
385403 EXPECT_CLOSE (output.Qx .value , OFFBOARD_QX);
386404 EXPECT_CLOSE (output.Qy .value , 0.5 * rf.params_ .get_param_float (PARAM_RC_MAX_PITCH));
387405 EXPECT_CLOSE (output.Qz .value , OFFBOARD_QZ);
406+ EXPECT_CLOSE (output.Fx .value , 0.0 );
407+ EXPECT_CLOSE (output.Fy .value , 0.0 );
388408 EXPECT_CLOSE (output.Fz .value , 0.0 );
409+
410+ uint16_t correct_rc_override =
411+ CommandManager::OVERRIDE_T
412+ | CommandManager::OVERRIDE_Y;
413+ EXPECT_EQ (rf.command_manager_ .get_rc_override (), correct_rc_override);
389414}
390415
391416TEST_F (CommandManagerTest, OffboardCommandMuxYawrateDeviation)
@@ -400,7 +425,14 @@ TEST_F(CommandManagerTest, OffboardCommandMuxYawrateDeviation)
400425 EXPECT_CLOSE (output.Qx .value , OFFBOARD_QX);
401426 EXPECT_CLOSE (output.Qy .value , OFFBOARD_QY);
402427 EXPECT_CLOSE (output.Qz .value , -0.5 * rf.params_ .get_param_float (PARAM_RC_MAX_YAWRATE));
428+ EXPECT_CLOSE (output.Fx .value , 0.0 );
429+ EXPECT_CLOSE (output.Fy .value , 0.0 );
403430 EXPECT_CLOSE (output.Fz .value , 0.0 );
431+
432+ uint16_t correct_rc_override =
433+ CommandManager::OVERRIDE_T
434+ | CommandManager::OVERRIDE_Z;
435+ EXPECT_EQ (rf.command_manager_ .get_rc_override (), correct_rc_override);
404436}
405437
406438TEST_F (CommandManagerTest, OffboardCommandMuxLag)
@@ -413,13 +445,17 @@ TEST_F(CommandManagerTest, OffboardCommandMuxLag)
413445
414446 control_t output = rf.command_manager_ .combined_control ();
415447 EXPECT_CLOSE (output.Qx .value , -0.5 * rf.params_ .get_param_float (PARAM_RC_MAX_ROLL));
448+ EXPECT_EQ (rf.command_manager_ .get_rc_override (),
449+ rf.command_manager_ .get_rc_override () | CommandManager::OVERRIDE_X);
416450
417451 rc_values[0 ] = 1500 ; // return stick to center
418452
419453 stepFirmware (500000 );
420454 setOffboard (offboard_command);
421455 output = rf.command_manager_ .combined_control ();
422456 EXPECT_CLOSE (output.Qx .value , 0.0 ); // lag
457+ EXPECT_EQ (rf.command_manager_ .get_rc_override (),
458+ rf.command_manager_ .get_rc_override () | CommandManager::OVERRIDE_X);
423459
424460 stepFirmware (600000 );
425461 setOffboard (offboard_command);
@@ -430,6 +466,8 @@ TEST_F(CommandManagerTest, OffboardCommandMuxLag)
430466 stepFirmware (20000 );
431467 output = rf.command_manager_ .combined_control ();
432468 EXPECT_CLOSE (output.Qx .value , OFFBOARD_QX);
469+ EXPECT_NE (rf.command_manager_ .get_rc_override (),
470+ rf.command_manager_ .get_rc_override () | CommandManager::OVERRIDE_X);
433471}
434472
435473TEST_F (CommandManagerTest, StaleOffboardCommand)
@@ -443,6 +481,8 @@ TEST_F(CommandManagerTest, StaleOffboardCommand)
443481
444482 control_t output = rf.command_manager_ .combined_control ();
445483 EXPECT_CLOSE (output.Qx .value , 0.0 );
484+ EXPECT_EQ (rf.command_manager_ .get_rc_override (),
485+ rf.command_manager_ .get_rc_override () | CommandManager::OVERRIDE_OFFBOARD_X_INACTIVE);
446486}
447487
448488TEST_F (CommandManagerTest, PartialMux)
@@ -456,7 +496,11 @@ TEST_F(CommandManagerTest, PartialMux)
456496 EXPECT_CLOSE (output.Qx .value , 0.0 );
457497 EXPECT_CLOSE (output.Qy .value , OFFBOARD_QY);
458498 EXPECT_CLOSE (output.Qz .value , OFFBOARD_QZ);
499+ EXPECT_CLOSE (output.Fx .value , 0.0 );
500+ EXPECT_CLOSE (output.Fy .value , 0.0 );
459501 EXPECT_CLOSE (output.Fz .value , 0.0 );
502+ EXPECT_EQ (rf.command_manager_ .get_rc_override (),
503+ rf.command_manager_ .get_rc_override () | CommandManager::OVERRIDE_OFFBOARD_X_INACTIVE);
460504}
461505
462506TEST_F (CommandManagerTest, MixedTypes)
@@ -472,3 +516,58 @@ TEST_F(CommandManagerTest, MixedTypes)
472516 EXPECT_EQ (output.Qz .type , RATE);
473517 EXPECT_EQ (output.Fz .type , THROTTLE);
474518}
519+
520+ TEST_F (CommandManagerTest, DefaultRCOverride)
521+ {
522+ uint16_t override = rf.command_manager_ .get_rc_override ();
523+
524+ EXPECT_EQ (override , default_rc_override);
525+ }
526+
527+ TEST_F (CommandManagerTest, RCOverrideGivenBothOvrdSwitchesOn)
528+ {
529+ rf.params_ .set_param_int (PARAM_RC_ATTITUDE_OVERRIDE_CHANNEL, 4 );
530+ rf.params_ .set_param_int (PARAM_RC_THROTTLE_OVERRIDE_CHANNEL, 4 );
531+ rc_values[4 ] = CHN_HIGH;
532+ stepFirmware (1000000 );
533+
534+ uint16_t override = rf.command_manager_ .get_rc_override ();
535+
536+ uint16_t correct_override =
537+ CommandManager::OVERRIDE_ATT_SWITCH
538+ | CommandManager::OVERRIDE_THR_SWITCH
539+ | default_rc_override;
540+ EXPECT_EQ (override , correct_override);
541+ }
542+
543+ TEST_F (CommandManagerTest, RCOverrideOnlyThrOvrdSwitchOn)
544+ {
545+ rf.params_ .set_param_int (PARAM_RC_ATTITUDE_OVERRIDE_CHANNEL, 5 );
546+ rf.params_ .set_param_int (PARAM_RC_THROTTLE_OVERRIDE_CHANNEL, 4 );
547+ rc_values[4 ] = CHN_HIGH;
548+ rc_values[5 ] = CHN_LOW;
549+ stepFirmware (1000000 );
550+
551+ uint16_t override = rf.command_manager_ .get_rc_override ();
552+
553+ uint16_t correct_override =
554+ CommandManager::OVERRIDE_THR_SWITCH
555+ | default_rc_override;
556+ EXPECT_EQ (override , correct_override);
557+ }
558+
559+ TEST_F (CommandManagerTest, RCOverrideOnlyAttOvrdSwitchOn)
560+ {
561+ rf.params_ .set_param_int (PARAM_RC_ATTITUDE_OVERRIDE_CHANNEL, 4 );
562+ rf.params_ .set_param_int (PARAM_RC_THROTTLE_OVERRIDE_CHANNEL, 5 );
563+ rc_values[4 ] = CHN_HIGH;
564+ rc_values[5 ] = CHN_LOW;
565+ stepFirmware (1000000 );
566+
567+ uint16_t override = rf.command_manager_ .get_rc_override ();
568+
569+ uint16_t correct_override =
570+ CommandManager::OVERRIDE_ATT_SWITCH
571+ | default_rc_override;
572+ EXPECT_EQ (override , correct_override);
573+ }
0 commit comments