Skip to content

Commit 9377af8

Browse files
committed
rcvractivity: check each group TWICE for activity
1 parent 0f0985a commit 9377af8

File tree

1 file changed

+15
-18
lines changed

1 file changed

+15
-18
lines changed

flight/Modules/ManualControl/transmitter_control.c

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
struct 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

8989
extern 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

859859
static 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

Comments
 (0)