aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-07-18 21:53:43 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-07-18 21:53:43 +0200
commite607769a8027f9e3bfb675d09fe587d2a1d295e8 (patch)
treed116dac71c35edc7786fe3e0b0fc521fcfdfb2a5 /src
parent65fb2e5e20b47bf0ca9cdadbf4f2bd2bc47d2635 (diff)
downloadglutte-o-matic-e607769a8027f9e3bfb675d09fe587d2a1d295e8.tar.gz
glutte-o-matic-e607769a8027f9e3bfb675d09fe587d2a1d295e8.tar.bz2
glutte-o-matic-e607769a8027f9e3bfb675d09fe587d2a1d295e8.zip
Fix ATTENTE, require additional timing check
Diffstat (limited to 'src')
-rw-r--r--src/common/src/Core/fsm.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/common/src/Core/fsm.c b/src/common/src/Core/fsm.c
index 0fdedb8..660ced8 100644
--- a/src/common/src/Core/fsm.c
+++ b/src/common/src/Core/fsm.c
@@ -244,28 +244,41 @@ void fsm_update() {
fsm_out.tx_on = 1;
fsm_out.modulation = 1;
+ /* Time checks:
+ * We need to check the total TX_ON duration to decide the text to
+ * send. This is done with the first check (delay between OPEN2 and
+ * current state).
+ *
+ * We also need to check if we actually entered the QSO state
+ * recently, otherwise we want to go to ATTENTE. That's why the
+ * check with QSO is needed.
+ */
+
if (fsm_in.sq) {
next_state = FSM_QSO;
}
else if (fsm_current_state_time_s() > 6 &&
- state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 5 &&
- state_delta_ms(FSM_QSO, FSM_ECOUTE) > 1000ul * 5) {
+ state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 5) {
next_state = FSM_ATTENTE;
}
else if (fsm_current_state_time_s() > 5 &&
- state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 5 * 60) {
+ state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 5 * 60 &&
+ state_delta_ms(FSM_QSO, FSM_ECOUTE) < 1000ul * 15) {
next_state = FSM_OISIF;
}
else if (fsm_current_state_time_s() > 5 &&
- state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 10 * 60) {
+ state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 10 * 60 &&
+ state_delta_ms(FSM_QSO, FSM_ECOUTE) < 1000ul * 15) {
next_state = FSM_TEXTE_73;
}
else if (fsm_current_state_time_s() > 5 &&
- state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 15 * 60) {
+ state_delta_ms(FSM_OPEN2, FSM_ECOUTE) < 1000ul * 15 * 60 &&
+ state_delta_ms(FSM_QSO, FSM_ECOUTE) < 1000ul * 15) {
next_state = FSM_TEXTE_HB9G;
}
else if (fsm_current_state_time_s() > 5 &&
- state_delta_ms(FSM_OPEN2, FSM_ECOUTE) >= 1000ul * 15 * 60) {
+ state_delta_ms(FSM_OPEN2, FSM_ECOUTE) >= 1000ul * 15 * 60 &&
+ state_delta_ms(FSM_QSO, FSM_ECOUTE) < 1000ul * 15) {
next_state = FSM_TEXTE_LONG;
}
break;