//------------------------------------------------------------------------------ static tOplkError processStateChangeEvent(tOplkApiEventType EventType_p, tOplkApiEventArg* pEventArg_p, void* pUserArg_p) { tEventNmtStateChange* pNmtStateChange = &pEventArg_p->nmtStateChange; UNUSED_PARAMETER(EventType_p); UNUSED_PARAMETER(pUserArg_p); PRINTF("StateChangeEvent(0x%X) originating event = 0x%X (%s)\n", pNmtStateChange->newNmtState, pNmtStateChange->nmtEvent, debugstr_getNmtEventStr(pNmtStateChange->nmtEvent)); return kErrorOk; }
//------------------------------------------------------------------------------ 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; }
//------------------------------------------------------------------------------ tOplkError ProcessThread::processStateChangeEvent(tOplkApiEventType eventType_p, tOplkApiEventArg* pEventArg_p, void* pUserArg_p) { tOplkError ret = kErrorOk; tEventNmtStateChange* pNmtStateChange = &pEventArg_p->nmtStateChange; #if !defined(CONFIG_INCLUDE_CFM) UINT varLen; #endif QString str; UNUSED_PARAMETER(eventType_p); UNUSED_PARAMETER(pUserArg_p); sigNmtState(pNmtStateChange->newNmtState); sigPrintLog(QString("StateChangeEvent %1: %2 -> %3") .arg(debugstr_getNmtEventStr(pNmtStateChange->nmtEvent)) .arg(debugstr_getNmtStateStr(pNmtStateChange->oldNmtState)) .arg(debugstr_getNmtStateStr(pNmtStateChange->newNmtState))); switch (pNmtStateChange->newNmtState) { case kNmtGsOff: pProcessThread_g->sigOplkStatus(0); // NMT state machine was shut down, // because of user signal (CTRL-C) or critical POWERLINK stack error // -> also shut down oplk_process() ret = kErrorShutdown; // and unblock DataInDataOutThread oplk_freeProcessImage(); //jba do we need it here? reachedNmtStateOff(); break; case kNmtGsResetCommunication: #if !defined(CONFIG_INCLUDE_CFM) ret = setDefaultNodeAssignment(); #endif pProcessThread_g->sigOplkStatus(1); break; case kNmtGsResetConfiguration: #if !defined(CONFIG_INCLUDE_CFM) // Configuration Manager is not available, // so fetch object 0x1006 NMT_CycleLen_U32 from local OD // (in little endian byte order) // for configuration of remote CN varLen = sizeof(UINT32); ret = oplk_readObject(NULL, 0, 0x1006, 0x00, &cycleLen_g, &varLen, kSdoTypeAsnd, NULL); if (ret != kErrorOk) { sigPrintLog(QString(" oplk_readObject() failed with 0x%1\n\"2\"") .arg(ret) .arg(debugstr_getRetValStr(ret))); break; } #endif sigOplkStatus(1); break; case kNmtCsNotActive: case kNmtMsNotActive: case kNmtRmsNotActive: case kNmtGsInitialising: case kNmtGsResetApplication: case kNmtCsPreOperational1: case kNmtMsPreOperational1: case kNmtCsPreOperational2: case kNmtMsPreOperational2: case kNmtCsReadyToOperate: case kNmtMsReadyToOperate: case kNmtCsBasicEthernet: case kNmtMsBasicEthernet: sigOplkStatus(1); break; case kNmtCsOperational: case kNmtMsOperational: sigOplkStatus(2); break; default: sigOplkStatus(-1); break; } return ret; }