8383struct rcvr_activity_fsm {
8484 ManualControlSettingsChannelGroupsOptions group ;
8585 uint16_t prev [RCVR_ACTIVITY_MONITOR_CHANNELS_PER_GROUP ];
86- uint8_t sample_count ;
86+ uint8_t check_count ;
8787};
8888
8989extern uintptr_t pios_rcvr_group_map [];
@@ -853,7 +853,7 @@ static void resetRcvrActivity(struct rcvr_activity_fsm * fsm)
853853
854854 /* Reset the FSM state */
855855 fsm -> group = 0 ;
856- fsm -> sample_count = 0 ;
856+ fsm -> check_count = 0 ;
857857}
858858
859859static void updateRcvrActivitySample (uintptr_t rcvr_id , uint16_t samples [], uint8_t max_channels ) {
@@ -927,26 +927,21 @@ static bool updateRcvrActivity(struct rcvr_activity_fsm * fsm)
927927 resetRcvrActivity (fsm );
928928 }
929929
930- if (! pios_rcvr_group_map [fsm -> group ]) {
931- /* Unbound group, skip it */
932- goto group_completed ;
930+ if (fsm -> check_count && ( pios_rcvr_group_map [fsm -> group ]) ) {
931+ /* Compare with previous sample */
932+ activity_updated = updateRcvrActivityCompare ( pios_rcvr_group_map [ fsm -> group ], fsm ) ;
933933 }
934934
935- if (fsm -> sample_count == 0 ) {
936- /* Take a sample of each channel in this group */
937- updateRcvrActivitySample (pios_rcvr_group_map [fsm -> group ],
938- fsm -> prev ,
939- NELEMENTS (fsm -> prev ));
940- fsm -> sample_count ++ ;
941- return (false);
942- }
935+ if (!activity_updated && fsm -> check_count < 3 ) {
936+ // First time through this is 1, so basically be willing
937+ // to check twice.
938+ fsm -> check_count ++ ;
943939
944- /* Compare with previous sample */
945- activity_updated = updateRcvrActivityCompare ( pios_rcvr_group_map [ fsm -> group ], fsm );
940+ return false;
941+ }
946942
947- group_completed :
948943 /* Reset the sample counter */
949- fsm -> sample_count = 0 ;
944+ fsm -> check_count = 0 ;
950945
951946 /* Find the next active group, but limit search so we can't loop forever here */
952947 for (uint8_t i = 0 ; i <= MANUALCONTROLSETTINGS_CHANNELGROUPS_NONE ; i ++ ) {
@@ -965,7 +960,9 @@ static bool updateRcvrActivity(struct rcvr_activity_fsm * fsm)
965960 updateRcvrActivitySample (pios_rcvr_group_map [fsm -> group ],
966961 fsm -> prev ,
967962 NELEMENTS (fsm -> prev ));
968- fsm -> sample_count ++ ;
963+
964+ fsm -> check_count = 1 ;
965+
969966 break ;
970967 }
971968 }
0 commit comments