Example #1
0
/** 
 * @param pState
 * @param pFsm
 * @param pEvt
 * 
 * @return int
 */
static int
StateHandlerTest1_s(const FsmState* pState,
                    Test1Fsm* pFsm,
                    const FsmEvent* pEvt)
{
    switch (pEvt->evtId) {
    case kFsmEventEnterScope:
        break;
    case kFsmEventExitScope:
        break;

    case kFsmEventBegin: {
        /// Initial transition to s1
        FsmBeginTransition((FsmMachine*)pFsm, (FsmState*)&pFsm->s1);
        return TRUE;
    }
    break;

    case Test1Fsm::kSig_pressure: {
        /// Transition to s2
        FsmBeginTransition((FsmMachine*)pFsm, (FsmState*)&pFsm->s2);
        return TRUE;
    }
    break;

    }

    return FALSE;
}
Example #2
0
/** ========================================================================
 * =========================================================================
 */
void
psl_sme_begin_transition(PslSmeMachineBase* const pFsm,
                         PslSmeStateBase*   const pTargetState,
                         const void*        const beginEvtArg,
                         size_t             const beginEvtArgSize,
                         const char*        const requesterFuncName)
{
    PSL_ASSERT(pFsm);
    PSL_ASSERT(pTargetState);

    if (!pFsm->inEvtDispatch) {
        PSL_LOG_FATAL("%s (fsm=%p/%s): FATAL ERROR: %s() requested transition " \
                      "to state=%s from non-event-handler scope",
                      __func__, pFsm, FsmDbgPeekMachineName(&pFsm->base),
                      requesterFuncName,
                      FsmDbgPeekStateName(&pTargetState->base));
        PSL_ASSERT(pFsm->inEvtDispatch);
    }

    if (pFsm->beginEvtData_.reqArgSize) {
        PSL_LOG_FATAL(
            "%s (fsm=%p/%s): ERROR: Prior kFsmEventBegin arg not " \
            "reaped: prior targetState=%s, arg size=%zd, " \
            "requester=%s",
            __func__, pFsm, FsmDbgPeekMachineName(&pFsm->base),
            (pFsm->beginEvtData_.reqTargetState
             ? FsmDbgPeekStateName(&pFsm->beginEvtData_.reqTargetState->base)
             : "(NULL)"),
            pFsm->beginEvtData_.reqArgSize,
            pFsm->beginEvtData_.requesterFuncName);
        PSL_ASSERT(!pFsm->beginEvtData_.reqArgSize);
    }

    if (beginEvtArg) {
        PSL_ASSERT(beginEvtArgSize > 0 &&
                   beginEvtArgSize <= pFsm->beginEvtData_.beginArgBufSize);
        pFsm->beginEvtData_.reqTargetState = pTargetState;
        pFsm->beginEvtData_.reqArgSize = beginEvtArgSize;
        pFsm->beginEvtData_.requesterFuncName = requesterFuncName;
        memcpy(pFsm->beginEvtData_.beginRequestArgBuf, beginEvtArg,
               beginEvtArgSize);
    }

    FsmBeginTransition(&pFsm->base, &pTargetState->base);
}