//------------------------------------------------------------------------------ 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; }
//------------------------------------------------------------------------------ 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; }