fsm: add LOGPFSML to pass explicit logging level

Provide one central LOGPFSML to print FSM information, take the FSM logging
subsystem from the FSM instance but use an explicitly provided log level
instead of the FSM's default level.

Use to replace some, essentially, duplications of the LOGPFSM macro.

In effect, the fsm_test's expected error changes, since the previous code dup
for logging events used round braces to indicate the fi's state, while the
central macro uses curly braces.

Change-Id: If295fdabb3f31a0fd9490d1e0df57794c75ae547
This commit is contained in:
Neels Hofmeyr 2016-12-14 17:37:34 +01:00
parent 886d6fdec6
commit 6a13e7f563
3 changed files with 12 additions and 12 deletions

View File

@ -110,11 +110,14 @@ struct osmo_fsm_inst {
void osmo_fsm_log_addr(bool log_addr);
#define LOGPFSM(fi, fmt, args...) \
LOGP((fi)->fsm->log_subsys, (fi)->log_level, "%s{%s}: " fmt, \
#define LOGPFSML(fi, level, fmt, args...) \
LOGP((fi)->fsm->log_subsys, level, "%s{%s}: " fmt, \
osmo_fsm_inst_name(fi), \
osmo_fsm_state_name((fi)->fsm, (fi)->state), ## args)
#define LOGPFSM(fi, fmt, args...) \
LOGPFSML(fi, (fi)->log_level, fmt, ## args)
int osmo_fsm_register(struct osmo_fsm *fsm);
void osmo_fsm_unregister(struct osmo_fsm *fsm);
struct osmo_fsm_inst *osmo_fsm_inst_alloc(struct osmo_fsm *fsm, void *ctx, void *priv,

View File

@ -311,11 +311,9 @@ int osmo_fsm_inst_state_chg(struct osmo_fsm_inst *fi, uint32_t new_state,
/* validate if new_state is a valid state */
if (!(st->out_state_mask & (1 << new_state))) {
LOGP(fsm->log_subsys, LOGL_ERROR, "%s(%s): transition to "
"state %s not permitted!\n",
osmo_fsm_inst_name(fi),
osmo_fsm_state_name(fsm, fi->state),
osmo_fsm_state_name(fsm, new_state));
LOGPFSML(fi, LOGL_ERROR,
"transition to state %s not permitted!\n",
osmo_fsm_state_name(fsm, new_state));
return -EPERM;
}
@ -376,10 +374,9 @@ int osmo_fsm_inst_dispatch(struct osmo_fsm_inst *fi, uint32_t event, void *data)
}
if (!((1 << event) & fs->in_event_mask)) {
LOGP(fsm->log_subsys, LOGL_ERROR, "%s(%s): Event %s not "
"permitted\n", osmo_fsm_inst_name(fi),
osmo_fsm_state_name(fsm, fi->state),
osmo_fsm_event_name(fsm, event));
LOGPFSML(fi, LOGL_ERROR,
"Event %s not permitted\n",
osmo_fsm_event_name(fsm, event));
return -1;
}
fs->action(fi, event, data);

View File

@ -1,7 +1,7 @@
Checking FSM allocation
Test FSM{NULL}: Allocated
Test FSM{NULL}: Received Event 1
Test FSM(NULL): Event 1 not permitted
Test FSM{NULL}: Event 1 not permitted
Test FSM{NULL}: Received Event 0
Test FSM{NULL}: state_chg to ONE
Test FSM{ONE}: Received Event 1