//------------------------------------------------------------------------------
static tOplkError loopMain(tInstance* pInstance_p)
{
    tOplkError ret = kErrorOk;

    // start processing
    if ((ret = oplk_execNmtCommand(kNmtEventSwReset)) != kErrorOk)
        return ret;

    while (1)
    {
        // do background tasks
        if ((ret = oplk_process()) != kErrorOk)
            break;

        // trigger switch off
        if (pInstance_p->fShutdown != FALSE)
        {
            oplk_execNmtCommand(kNmtEventSwitchOff);

            // reset shutdown flag to generate only one switch off command
            pInstance_p->fShutdown = FALSE;
        }

        // exit loop if NMT is in off state
        if (pInstance_p->fGsOff != FALSE)
            break;
    }

    return ret;
}
//------------------------------------------------------------------------------
void ProcessThread::run()
{
    tOplkError          ret;

    // start process function
    ret = oplk_process();
}
//------------------------------------------------------------------------------
static tOplkError loopMain(tInstance* pInstance_p)
{
    tOplkError    ret = kErrorOk;

    // start processing
    if ((ret = oplk_execNmtCommand(kNmtEventSwReset)) != kErrorOk)
        return ret;

    while (1)
    {
        // do background tasks
        if ((ret = oplk_process()) != kErrorOk)
            break;

        if (oplk_checkKernelStack() == FALSE)
        {
            PRINTF("Kernel stack has gone! Exiting...\n");
            instance_l.fShutdown = TRUE;
        }

        // trigger switch off
        if (pInstance_p->fShutdown != FALSE)
        {
            oplk_execNmtCommand(kNmtEventSwitchOff);

            // reset shutdown flag to generate only one switch off command
            pInstance_p->fShutdown = FALSE;
        }

        // exit loop if NMT is in off state
        if (pInstance_p->fGsOff != FALSE)
            break;

        switch (gpio_getAppInput())
        {
            case 0x01:
                PRINTF("KEY0: SwReset\n");
                lcd_printText("KEY0: SwReset", 2);
                ret = oplk_execNmtCommand(kNmtEventSwReset);
                break;

            case 0x02:
                PRINTF("KEY1: SwitchOff\n");
                lcd_printText("KEY1: SwitchOff", 2);
                ret = oplk_execNmtCommand(kNmtEventSwitchOff);
                break;

            default:
                break;
        }

        while (gpio_getAppInput() != 0);
    }

    return ret;
}
//------------------------------------------------------------------------------
static tOplkError loopMain(tInstance* pInstance_p)
{
    tOplkError  ret = kErrorOk;
    UINT        checkStack = 0;

    // start processing
    if ((ret = oplk_execNmtCommand(kNmtEventSwReset)) != kErrorOk)
        return ret;

    while (1)
    {
        // do background tasks
        if ((ret = oplk_process()) != kErrorOk)
            break;

        // check the kernel part from time to time
        if (checkStack++ >= CHECK_KERNEL_TIMEOUT)
        {
            checkStack = 0;
            if (oplk_checkKernelStack() == FALSE)
            {
                PRINTF("Kernel stack has gone! Exiting...\n");
                instance_l.fShutdown = TRUE;
            }
        }

        // trigger switch off
        if (pInstance_p->fShutdown != FALSE)
        {
            oplk_execNmtCommand(kNmtEventSwitchOff);

            // reset shutdown flag to generate only one switch off command
            pInstance_p->fShutdown = FALSE;
        }

        // exit loop if NMT is in off state
        if (pInstance_p->fGsOff != FALSE)
            break;
    }

    return ret;
}