//------------------------------------------------------------------------------
static tOplkError eventCbPowerlink(tOplkApiEventType EventType_p, tOplkApiEventArg* pEventArg_p, void* pUserArg_p)
{
    tOplkError  ret = kErrorOk;

    UNUSED_PARAMETER(pUserArg_p);

    switch (EventType_p)
    {
        case kOplkApiEventNmtStateChange:
            lcd_printNmtState(pEventArg_p->nmtStateChange.newNmtState);

            switch (pEventArg_p->nmtStateChange.newNmtState)
            {
                case kNmtGsOff:
                    // NMT state machine was shut down
                    ret = kErrorShutdown;

                    // NMT off state is reached
                    instance_l.fGsOff = TRUE;
                    break;

                default:
                    break;
            }
            break;

        default:
            break;
    }
    return ret;
}
//------------------------------------------------------------------------------
static tOplkError eventCbPowerlink(tOplkApiEventType EventType_p,
                                   tOplkApiEventArg* pEventArg_p, void* pUserArg_p)
{
    tOplkError                      ret = kErrorOk;
    tOplkApiEventReceivedNonPlk*    pFrameInfo = &pEventArg_p->receivedEth;

    UNUSED_PARAMETER(pUserArg_p);

    switch (EventType_p)
    {
        case kOplkApiEventNmtStateChange:
            lcd_printNmtState(pEventArg_p->nmtStateChange.newNmtState);

            switch (pEventArg_p->nmtStateChange.newNmtState)
            {
                case kNmtGsOff:
                    // NMT state machine was shut down
                    ret = kErrorShutdown;

                    // NMT off state is reached
                    instance_l.fGsOff = TRUE;
                    break;

                case kNmtCsBasicEthernet:
                    // ARP demo: Send request to MN
                    arp_sendRequest((0xFFFFFF00 & IP_ADDR) | C_ADR_MN_DEF_NODE_ID);
                    break;

                default:
                    break;
            }
            break;

        case kOplkApiEventReceivedNonPlk:
            if (arp_processReceive(pFrameInfo->pFrame, pFrameInfo->frameSize) == 0)
                return kErrorOk;

            // If you get here, the received Ethernet frame is no ARP frame.
            // Here you can call other protocol stacks for processing.

            ret = kErrorOk; // Frame wasn't processed, so simply dump it.
            break;

        case kOplkApiEventDefaultGwChange:
            // ARP demo: Set default gateway and send request
            arp_setDefGateway(pEventArg_p->defaultGwChange.defaultGateway);

            arp_sendRequest(pEventArg_p->defaultGwChange.defaultGateway);
            break;

        default:
            break;
    }
    return ret;
}
//------------------------------------------------------------------------------
static tOplkError processStateChangeEvent(tOplkApiEventType EventType_p,
                                          tOplkApiEventArg* pEventArg_p,
                                          void* pUserArg_p)
{
    tOplkError                  ret = kErrorOk;
    tEventNmtStateChange*       pNmtStateChange = &pEventArg_p->nmtStateChange;

    UNUSED_PARAMETER(EventType_p);
    UNUSED_PARAMETER(pUserArg_p);

    if (pfGsOff_l == NULL)
    {
        PRINTF("Applications event module isn't initialized!\n");
        return kErrorGeneralError;
    }

    lcd_printNmtState(pNmtStateChange->newNmtState);

    switch (pNmtStateChange->newNmtState)
    {
        case kNmtGsOff:
           // NMT state machine was shut down,
            // because of user signal (CTRL-C) or critical POWERLINK stack error
            // -> also shut down oplk_process() and main()
            ret = kErrorShutdown;

            // In off state print error code
            if (errorEvent_l != kErrorOk)
                lcd_printError(errorEvent_l);

            // Reset error code
            errorEvent_l = kErrorOk;

            PRINTF("StateChangeEvent:kNmtGsOff originating event = 0x%X (%s)\n",
                   pNmtStateChange->nmtEvent,
                   debugstr_getNmtEventStr(pNmtStateChange->nmtEvent));

            // signal that stack is off
            *pfGsOff_l = TRUE;
            break;

        case kNmtGsResetCommunication:
#ifndef CONFIG_INCLUDE_CFM
            ret = setDefaultNodeAssignment();
#endif
            PRINTF("StateChangeEvent(0x%X) originating event = 0x%X (%s)\n",
                   pNmtStateChange->newNmtState,
                   pNmtStateChange->nmtEvent,
                   debugstr_getNmtEventStr(pNmtStateChange->nmtEvent));
            break;

        case kNmtGsResetConfiguration:
            PRINTF("StateChangeEvent(0x%X) originating event = 0x%X (%s)\n",
                   pNmtStateChange->newNmtState,
                   pNmtStateChange->nmtEvent,
                   debugstr_getNmtEventStr(pNmtStateChange->nmtEvent));
            break;

        case kNmtGsInitialising:
        case kNmtGsResetApplication:        // Implement
        case kNmtMsNotActive:               // handling of
        case kNmtMsPreOperational1:         // different
        case kNmtMsPreOperational2:         // states here
        case kNmtMsReadyToOperate:
        case kNmtMsOperational:
        case kNmtMsBasicEthernet:           // no break

        default:
            PRINTF("StateChangeEvent(0x%X) originating event = 0x%X (%s)\n",
                   pNmtStateChange->newNmtState,
                   pNmtStateChange->nmtEvent,
                   debugstr_getNmtEventStr(pNmtStateChange->nmtEvent));
            break;
    }

    return ret;
}
Example #4
0
//------------------------------------------------------------------------------
static tOplkError eventCbPowerlink(tOplkApiEventType eventType_p,
                                   tOplkApiEventArg* pEventArg_p, void* pUserArg_p)
{
    tOplkError                      ret = kErrorOk;
    tOplkApiEventReceivedNonPlk*    pFrameInfo = &pEventArg_p->receivedEth;

    UNUSED_PARAMETER(pUserArg_p);

    switch (eventType_p)
    {
        case kOplkApiEventNmtStateChange:
            lcd_printNmtState(pEventArg_p->nmtStateChange.newNmtState);

            switch (pEventArg_p->nmtStateChange.newNmtState)
            {
                case kNmtGsOff:
                    // NMT state machine was shut down
                    ret = kErrorShutdown;

                    // NMT off state is reached
                    instance_l.fGsOff = TRUE;
                    break;

                case kNmtCsBasicEthernet:
                    // ARP demo: Send request to MN
                    arp_sendRequest((0xFFFFFF00 & IP_ADDR) | C_ADR_MN_DEF_NODE_ID);
                    break;

                case kNmtCsPreOperational2:
                     // automatic change to kEplNmtCsReadyToOperate can be
                     // prevented with:
                     // ret = kErrorReject;
                     // As soon as application is ready for OPERATIONAL state,
                     // execute the following function call:
                     // oplk_execNmtCommand(kNmtEventEnterReadyToOperate);
                     break;

                default:
                    break;
            }
            break;

        case kOplkApiEventReceivedNonPlk:
            if (arp_processReceive(pFrameInfo->pFrame, pFrameInfo->frameSize) == 0)
                return kErrorOk;

            // If you get here, the received Ethernet frame is no ARP frame.
            // Here you can call other protocol stacks for processing.

            ret = kErrorOk; // Frame wasn't processed, so simply dump it.
            break;

        case kOplkApiEventDefaultGwChange:
            // ARP demo: Set default gateway and send request
            arp_setDefGateway(pEventArg_p->defaultGwChange.defaultGateway);

            arp_sendRequest(pEventArg_p->defaultGwChange.defaultGateway);
            break;

        default:
            break;
    }
    return ret;
}