//$file${.::Mission.c} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: CPF.qm
// File:  ${.::Mission.c}
//
// This code has been generated by QM 4.5.1 (https://www.state-machine.com/qm).
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This program is open source software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
//$endhead${.::Mission.c} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#include "qpcpp.hpp"
#include <iostream>
#include <stdlib.h> // for exit()

using namespace std;
using namespace QP;

enum { BSP_TICKS_PER_SEC = 100 };

extern "C" void Q_onAssert(char const * const module, int loc) {
    cout << "Assertion failed in " << module << ':' << loc << endl;
    exit(-1);
}
void QF::onStartup(void) {}
void QF::onCleanup(void) {}
void QP::QF_onClockTick(void) {
    QF::TICK_X(0U, (void *)0);  // perform the QF clock tick processing
}

enum MissionSignals {
    TIMEOUT_SIG = Q_USER_SIG,
    MAX_SIG
};

//=============== ask QM to declare the Mission class ==================
//$declare${AOs::Mission} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${AOs::Mission} ............................................................
class Mission : public QP::QActive {
protected:
    Q_STATE_DECL(initial);
    Q_STATE_DECL(InitProfile);
    Q_STATE_DECL(FindNeutralBuoyancy);
    Q_STATE_DECL(FNB_CheckDepth);
    Q_STATE_DECL(StartDescend);
    Q_STATE_DECL(EmergencyAscend);
    Q_STATE_DECL(RecoverySurfaceOps);
    Q_STATE_DECL(DownloadRecoverySBD);
    Q_STATE_DECL(BuildRecoverySBD);
    Q_STATE_DECL(DownloadRecSBD);
    Q_STATE_DECL(GetPosition);
    Q_STATE_DECL(InitMission);
    Q_STATE_DECL(Profile);
    Q_STATE_DECL(Park);
    Q_STATE_DECL(ProfileCheckDepthAndTime);
    Q_STATE_DECL(doneSampling);
    Q_STATE_DECL(Anchor);
    Q_STATE_DECL(StartVelocityController);
    Q_STATE_DECL(InitPlatform);
    Q_STATE_DECL(SurfaceOps);
    Q_STATE_DECL(BuildSOSbd);
    Q_STATE_DECL(UploadSO_SBD);
    Q_STATE_DECL(GetPosition);
    Q_STATE_DECL(DownloadRecSBD);
    Q_STATE_DECL(UploadFileActions);
    Q_STATE_DECL(Action1);
    Q_STATE_DECL(Action2);
    Q_STATE_DECL(Action3);
};
//$enddecl${AOs::Mission} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

static Mission l_mission;
QActive * const AO_Mission = &l_mission;

int main() {
    // statically allocate event queue buffer for the Mission AO
    static QEvt const *mission_queueSto[10];

    QF::init(); // initialize the framework
    AO_Mission->start(1U, // priority
                     mission_queueSto, Q_DIM(mission_queueSto),
                     (void *)0, 0U); // no stack
    return QF::run(); // run the QF application
}

//================ ask QM to define the Mission class ==================
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 650U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpcpp version 6.5.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${AOs::Mission} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${AOs::Mission} ............................................................
//${AOs::Mission::SM} ........................................................
Q_STATE_DEF(Mission, initial) {
    //${AOs::Mission::SM::initial}
    return tran(&InitPlatform);
}
//${AOs::Mission::SM::InitProfile} ...........................................
Q_STATE_DEF(Mission, InitProfile) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::InitProfile}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doInitProfileStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::InitProfile}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doInitProfileStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::InitProfile::IPDone}
        case IPDone_SIG: {
            status_ = tran(&FindNeutralBuoyancy);
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::FindNeutralBuoyancy} ...................................
Q_STATE_DEF(Mission, FindNeutralBuoyancy) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::FindNeutralBuoyancy}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doFNBStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::FindNeutralBuoyancy}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doFNBStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::FindNeutralBuoya~::TIMEOUT}
        case TIMEOUT_SIG: {
            status_ = tran(&Profile);
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::FindNeutralBuoya~::FNB_CheckDepth} .....................
Q_STATE_DEF(Mission, FNB_CheckDepth) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::FindNeutralBuoya~::FNB_CheckDepth}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doFNBCheckDepthStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::FindNeutralBuoya~::FNB_CheckDepth}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doBFNBCheckDepthStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::FindNeutralBuoya~::FNB_CheckDepth::Need to descend}
        case Need to descend_SIG: {
            status_ = tran(&StartDescend);
            break;
        }
        //${AOs::Mission::SM::FindNeutralBuoya~::FNB_CheckDepth::FNB_CheckDepthTIMEOUT}
        case FNB_CheckDepthTIMEOUT_SIG: {
            status_ = tran(&FNB_CheckDepth);
            break;
        }
        //${AOs::Mission::SM::FindNeutralBuoya~::FNB_CheckDepth::FoundNeutral}
        case FoundNeutral_SIG: {
            status_ = tran(&Profile);
            break;
        }
        default: {
            status_ = super(&FindNeutralBuoyancy);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::FindNeutralBuoya~::StartDescend} .......................
Q_STATE_DEF(Mission, StartDescend) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::FindNeutralBuoya~::StartDescend::FNBDesending}
        case FNBDesending_SIG: {
            status_ = tran(&FNB_CheckDepth);
            break;
        }
        default: {
            status_ = super(&FindNeutralBuoyancy);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::EmergencyAscend} .......................................
Q_STATE_DEF(Mission, EmergencyAscend) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::EmergencyAscend::atSurfaceRecovery}
        case atSurfaceRecovery_SIG: {
            status_ = tran(&RecoverySurfaceOps);
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::RecoverySurfaceOps} ....................................
Q_STATE_DEF(Mission, RecoverySurfaceOps) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::RecoverySurfaceOps}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doRecoverySOStatEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceOps}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doRecoverySOStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::GotGo}
        case GotGo_SIG: {
            status_ = tran(&InitProfile);
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::RecSO_TIMEOUT}
        case RecSO_TIMEOUT_SIG: {
            status_ = tran(&GetPosition);
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecoverySBD} ................
Q_STATE_DEF(Mission, DownloadRecoverySBD) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecoverySBD}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doDownloadRecoverySBDStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecoverySBD}
        case Q_EXIT_SIG: {
            doStdStateEntry();
            doDownloadIRecoverySBDStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecovery~::RestartMission}
        case RestartMission_SIG: {
            status_ = tran(&InitProfile);
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecovery~::RecGotNewMission}
        case RecGotNewMission_SIG: {
            status_ = tran(&InitMission);
            break;
        }
        default: {
            status_ = super(&RecoverySurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::RecoverySurfaceO~::BuildRecoverySBD} ...................
Q_STATE_DEF(Mission, BuildRecoverySBD) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::RecoverySurfaceO~::BuildRecoverySBD}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doBuildRecSBD();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::BuildRecoverySBD}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doBuildRecSBDStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::BuildRecoverySBD::RecSBDBuilt}
        case RecSBDBuilt_SIG: {
            status_ = tran(&DownloadRecSBD);
            break;
        }
        default: {
            status_ = super(&RecoverySurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecSBD} .....................
Q_STATE_DEF(Mission, DownloadRecSBD) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecSBD}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doUploadRecSBDStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecSBD}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doUploadRecSBDStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::DownloadRecSBD::RecSBDUploaded}
        case RecSBDUploaded_SIG: {
            status_ = tran(&DownloadRecoverySBD);
            break;
        }
        default: {
            status_ = super(&RecoverySurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::RecoverySurfaceO~::GetPosition} ........................
Q_STATE_DEF(Mission, GetPosition) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::RecoverySurfaceO~::GetPosition}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doRecGetPositionStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::GetPosition}
        case Q_EXIT_SIG: {
            doStdSateExit();
            doRecGetPositionStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::RecoverySurfaceO~::GetPosition::GotRecPosition}
        case GotRecPosition_SIG: {
            status_ = tran(&BuildRecoverySBD);
            break;
        }
        default: {
            status_ = super(&RecoverySurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::InitMission} ...........................................
Q_STATE_DEF(Mission, InitMission) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::InitMission}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doInitMissionStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::InitMission}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doInitMissionStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::InitMission::IMDone}
        case IMDone_SIG: {
            status_ = tran(&RecoverySurfaceOps);
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::Profile} ...............................................
Q_STATE_DEF(Mission, Profile) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::Profile}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doDescendStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doDescendStateExit(Descend
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile::TIMEOUT}
        case TIMEOUT_SIG: {
            status_ = tran(&SurfaceOps);
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::Profile::Park} .........................................
Q_STATE_DEF(Mission, Park) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::Profile::Park}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doParkStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile::Park}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doParkStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile::Park::ProfileSampleInstr}
        case ProfileSampleInstr_SIG: {
            status_ = tran(&doneSampling);
            break;
        }
        //${AOs::Mission::SM::Profile::Park::DescParkTIMEOUT}
        case DescParkTIMEOUT_SIG: {
            status_ = tran(&StartVelocityController);
            break;
        }
        //${AOs::Mission::SM::Profile::Park::ParkCheckDandT}
        case ParkCheckDandT_SIG: {
            status_ = tran(&ProfileCheckDepthAndTime);
            break;
        }
        default: {
            status_ = super(&Profile);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::Profile::ProfileCheckDepthAndTime} .....................
Q_STATE_DEF(Mission, ProfileCheckDepthAndTime) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::Profile::ProfileCheckDepthAndTime}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doDescendCheckDepthStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile::ProfileCheckDepthAndTime}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doDescendCheckDepthStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile::ProfileCheckDept~::AtParkPt}
        case AtParkPt_SIG: {
            status_ = tran(&Park);
            break;
        }
        //${AOs::Mission::SM::Profile::ProfileCheckDept~::SampleInstr}
        case SampleInstr_SIG: {
            status_ = tran(&doneSampling);
            break;
        }
        //${AOs::Mission::SM::Profile::ProfileCheckDept~::HitBottom}
        case HitBottom_SIG: {
            status_ = tran(&Anchor);
            break;
        }
        //${AOs::Mission::SM::Profile::ProfileCheckDept~::ProfileDone}
        case ProfileDone_SIG: {
            status_ = tran(&SurfaceOps);
            break;
        }
        default: {
            status_ = super(&Profile);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::Profile::doneSampling} .................................
Q_STATE_DEF(Mission, doneSampling) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::Profile::doneSampling::DoneSampling}
        case DoneSampling_SIG: {
            status_ = tran(&ProfileCheckDepthAndTime);
            break;
        }
        default: {
            status_ = super(&Profile);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::Profile::Anchor} .......................................
Q_STATE_DEF(Mission, Anchor) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::Profile::Anchor}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doAnchorStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile::Anchor}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doAnchorStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::Profile::Anchor::AnchorOffBottom}
        case AnchorOffBottom_SIG: {
            status_ = tran(&StartVelocityController);
            break;
        }
        //${AOs::Mission::SM::Profile::Anchor::AnchorCheckDandT}
        case AnchorCheckDandT_SIG: {
            status_ = tran(&ProfileCheckDepthAndTime);
            break;
        }
        default: {
            status_ = super(&Profile);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::Profile::StartVelocityController} ......................
Q_STATE_DEF(Mission, StartVelocityController) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::Profile::StartVelocityCon~::ProfileVelCtrlrStarted}
        case ProfileVelCtrlrStarted_SIG: {
            status_ = tran(&ProfileCheckDepthAndTime);
            break;
        }
        default: {
            status_ = super(&Profile);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::InitPlatform} ..........................................
Q_STATE_DEF(Mission, InitPlatform) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::InitPlatform}
        case Q_ENTRY_SIG: {
            InitPlatform();
            InitErrorHandler();
            InitGPSDevice();
            IntEngrLogger();
            InitSciLogger();
            InitBellowsPosSensor();
            InitCTDepthSensor();
            InitMSCSensor();
            InitFLBBSensor();
            InitOCRSensor();
            InitOptodeSensor();


            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::InitPlatform}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doInitMissionStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::InitPlatform::IPDone}
        case IPDone_SIG: {
            status_ = tran(&InitMission);
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps} ............................................
Q_STATE_DEF(Mission, SurfaceOps) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doSurfaceOpsStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doSurfaceOpsStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        default: {
            status_ = super(&top);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::BuildSOSbd} ................................
Q_STATE_DEF(Mission, BuildSOSbd) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::BuildSOSbd}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doBuildIridiumMessage();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::BuildSOSbd}
        case Q_EXIT_SIG: {
            doStdStateExit();
            doBuildIridiumMessageStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::BuildSOSbd::SO_SBDBuilt}
        case SO_SBDBuilt_SIG: {
            status_ = tran(&UploadSO_SBD);
            break;
        }
        default: {
            status_ = super(&SurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::UploadSO_SBD} ..............................
Q_STATE_DEF(Mission, UploadSO_SBD) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::UploadSO_SBD}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doUploadIridiumMessageStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::UploadSO_SBD}
        case Q_EXIT_SIG: {
            doStdStateEntry();
            doUploadIridiumMessageStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::UploadSO_SBD::SO_SBDUploaded}
        case SO_SBDUploaded_SIG: {
            status_ = tran(&DownloadRecSBD);
            break;
        }
        default: {
            status_ = super(&SurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::GetPosition} ...............................
Q_STATE_DEF(Mission, GetPosition) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::GetPosition}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doGetPositionStatEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::GetPosition}
        case Q_EXIT_SIG: {
            doStdSateExit();
            soGetPositionStateExit();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::GetPosition::GotSOPosition}
        case GotSOPosition_SIG: {
            status_ = tran(&BuildSOSbd);
            break;
        }
        default: {
            status_ = super(&SurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::DownloadRecSBD} ............................
Q_STATE_DEF(Mission, DownloadRecSBD) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::DownloadRecSBD}
        case Q_ENTRY_SIG: {
            doStdStateEntry();
            doDownloadIridiumMessageStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::DownloadRecSBD}
        case Q_EXIT_SIG: {
            doStdStateEntry();
            doDownloadIridiumMessageStateEntry();
            status_ = Q_RET_HANDLED;
            break;
        }
        //${AOs::Mission::SM::SurfaceOps::DownloadRecSBD::SO_SBDUploaded}
        case SO_SBDUploaded_SIG: {
            status_ = tran(&Action1);
            break;
        }
        default: {
            status_ = super(&SurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::UploadFileActions} .........................
Q_STATE_DEF(Mission, UploadFileActions) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::UploadFileAction~::SOGotNewMission}
        case SOGotNewMission_SIG: {
            status_ = tran(&InitMission);
            break;
        }
        default: {
            status_ = super(&SurfaceOps);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::UploadFileAction~::Action1} ................
Q_STATE_DEF(Mission, Action1) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::UploadFileAction~::Action1::Action1Done}
        case Action1Done_SIG: {
            status_ = tran(&Action2);
            break;
        }
        default: {
            status_ = super(&UploadFileActions);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::UploadFileAction~::Action2} ................
Q_STATE_DEF(Mission, Action2) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::UploadFileAction~::Action2::Action2Done}
        case Action2Done_SIG: {
            status_ = tran(&Action3);
            break;
        }
        default: {
            status_ = super(&UploadFileActions);
            break;
        }
    }
    return status_;
}
//${AOs::Mission::SM::SurfaceOps::UploadFileAction~::Action3} ................
Q_STATE_DEF(Mission, Action3) {
    QP::QState status_;
    switch (e->sig) {
        //${AOs::Mission::SM::SurfaceOps::UploadFileAction~::Action3::SODone}
        case SODone_SIG: {
            status_ = tran(&InitProfile);
            break;
        }
        default: {
            status_ = super(&UploadFileActions);
            break;
        }
    }
    return status_;
}
//$enddef${AOs::Mission} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
