Skip to content

Commit 7bf26f9

Browse files
committed
Fix #424: return to app mode on port 224 join command
1 parent d4c4a81 commit 7bf26f9

File tree

2 files changed

+16
-40
lines changed

2 files changed

+16
-40
lines changed

src/lmic/lmic_compliance.c

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,9 @@ Name: evDeactivate()
307307
308308
Description:
309309
We report a deactivation event, and re-evaluate the FSM.
310+
We also set a flag so that we're return the appropriate
311+
status from the compliance entry point to the real
312+
application.
310313
311314
Returns:
312315
No explicit result.
@@ -344,8 +347,10 @@ Name: evJoinCommand()
344347
void evJoinCommand(void);
345348
346349
Description:
347-
We report a join-command event, and the kick the FSM. This
348-
will cause the FSM to coordinate sending and the other activities.
350+
We unjoin from the network, and then report a deactivation
351+
of test mode. That will get us out of test mode and back
352+
to the compliance app. The next message send will trigger
353+
a join.
349354
350355
Returns:
351356
No explicit result.
@@ -355,8 +360,8 @@ Name: evJoinCommand()
355360
static void evJoinCommand(
356361
void
357362
) {
358-
LMIC_Compliance.eventflags |= LMIC_COMPLIANCE_EVENT_JOIN_CMD;
359-
fsmEvalDeferred();
363+
LMIC_unjoin();
364+
evDeactivate();
360365
}
361366

362367
/*
@@ -582,8 +587,6 @@ fsmDispatch(
582587
}
583588
if (eventflags_TestAndClear(LMIC_COMPLIANCE_EVENT_DEACTIVATE)) {
584589
newState = LMIC_COMPLIANCE_FSMSTATE_INACTIVE;
585-
} else if (eventflags_TestAndClear(LMIC_COMPLIANCE_EVENT_JOIN_CMD)) {
586-
newState = LMIC_COMPLIANCE_FSMSTATE_JOINING;
587590
} else if (eventflags_TestAndClear(LMIC_COMPLIANCE_EVENT_ECHO_REQUEST)) {
588591
newState = LMIC_COMPLIANCE_FSMSTATE_ECHOING;
589592
} else {
@@ -592,16 +595,6 @@ fsmDispatch(
592595
break;
593596
}
594597

595-
case LMIC_COMPLIANCE_FSMSTATE_JOINING: {
596-
if (fEntry)
597-
acDoJoin();
598-
599-
if (eventflags_TestAndClear(LMIC_COMPLIANCE_EVENT_JOINED)) {
600-
newState = LMIC_COMPLIANCE_FSMSTATE_RECOVERY;
601-
}
602-
break;
603-
}
604-
605598
case LMIC_COMPLIANCE_FSMSTATE_ECHOING: {
606599
if (fEntry)
607600
acSendUplinkBuffer();
@@ -625,8 +618,7 @@ fsmDispatch(
625618
case LMIC_COMPLIANCE_FSMSTATE_RECOVERY: {
626619
if (fEntry) {
627620
if (LMIC_Compliance.eventflags & (LMIC_COMPLIANCE_EVENT_DEACTIVATE |
628-
LMIC_COMPLIANCE_EVENT_ECHO_REQUEST |
629-
LMIC_COMPLIANCE_EVENT_JOIN_CMD)) {
621+
LMIC_COMPLIANCE_EVENT_ECHO_REQUEST)) {
630622
acSetTimer(sec2osticks(1));
631623
} else {
632624
acSetTimer(sec2osticks(5));
@@ -677,10 +669,7 @@ static void lmicEventCb(
677669
}
678670

679671
// if it's a EV_JOINED, or a TXCMOMPLETE, we should tell the FSM.
680-
if (ev == EV_JOINED) {
681-
LMIC_Compliance.eventflags |= LMIC_COMPLIANCE_EVENT_JOINED;
682-
fsmEvalDeferred();
683-
} else if (ev == EV_TXCOMPLETE) {
672+
if ((UINT32_C(1) << ev) & (EV_JOINED | EV_TXCOMPLETE)) {
684673
fsmEvalDeferred();
685674
}
686675
}
@@ -764,13 +753,3 @@ static void acSendUplinkBuffer(void) {
764753
static const char *txSuccessToString(int fSuccess) {
765754
return fSuccess ? "ok" : "failed";
766755
}
767-
768-
static void acDoJoin(void) {
769-
LMIC_COMPLIANCE_PRINTF("acDoJoin\n");
770-
771-
LMIC_Compliance.eventflags &= ~LMIC_COMPLIANCE_EVENT_JOINED;
772-
773-
LMIC_unjoin();
774-
LMIC_Compliance.downlinkCount = 0;
775-
LMIC_startJoining();
776-
}

src/lmic/lmic_compliance.h

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@ enum lmic_compliance_eventflags_e {
5757
LMIC_COMPLIANCE_EVENT_DEACTIVATE = 1u << 1,
5858
LMIC_COMPLIANCE_EVENT_TIMER_EXPIRED = 1u << 2,
5959
LMIC_COMPLIANCE_EVENT_UPLINK_COMPLETE = 1u << 3,
60-
LMIC_COMPLIANCE_EVENT_JOIN_CMD = 1u << 4,
61-
LMIC_COMPLIANCE_EVENT_JOINED = 1u << 5,
62-
LMIC_COMPLIANCE_EVENT_ECHO_REQUEST = 1u << 6,
60+
LMIC_COMPLIANCE_EVENT_ECHO_REQUEST = 1u << 4,
6361
};
6462

6563
typedef uint8_t lmic_compliance_fsmflags_t;
@@ -76,14 +74,13 @@ enum lmic_compliance_fsmstate_e {
7674
LMIC_COMPLIANCE_FSMSTATE_ACTIVE = 2,
7775
LMIC_COMPLIANCE_FSMSTATE_INACTIVE = 3,
7876
LMIC_COMPLIANCE_FSMSTATE_TESTMODE = 4, // sending test uplinks
79-
LMIC_COMPLIANCE_FSMSTATE_JOINING = 5, // joining (under command)
80-
LMIC_COMPLIANCE_FSMSTATE_ECHOING = 6,
81-
LMIC_COMPLIANCE_FSMSTATE_REPORTING = 7,
82-
LMIC_COMPLIANCE_FSMSTATE_RECOVERY = 8,
77+
LMIC_COMPLIANCE_FSMSTATE_ECHOING = 5,
78+
LMIC_COMPLIANCE_FSMSTATE_REPORTING = 6,
79+
LMIC_COMPLIANCE_FSMSTATE_RECOVERY = 7,
8380
};
8481

8582
#define LMIC_COMPLIANCE_FSMSTATE__NAMES \
86-
"INITIAL", "NOCHANGE", "ACTIVE", "INACTIVE", "TESTMODE", "JOINING", \
83+
"INITIAL", "NOCHANGE", "ACTIVE", "INACTIVE", "TESTMODE", \
8784
"ECHOING", "REPORTING", "RECOVERY"
8885

8986
typedef struct lmic_compliance_eventcb_s lmic_compliance_eventcb_t;

0 commit comments

Comments
 (0)