diff --git a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.cpp b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.cpp index 8a4cbce..c4a48c6 100644 --- a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.cpp +++ b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.cpp @@ -60,15 +60,6 @@ ecmcSocketCAN::ecmcSocketCAN(char* configStr, socketId_ = -1; connected_ = 0; writeBuffer_ = NULL; - //testSdo_ = NULL; - //testPdo_ = NULL; - //lssPdo_ = NULL; - //syncPdo_ = NULL; - //heartPdo_ = NULL; - //basicConfSdo_ = NULL; - //testDevice_ = NULL; - //testMaster_ = NULL; - //cycleCounter_ = 0; deviceCounter_ = 0; masterDev_ = NULL; for(int i = 0; iaddSDO(0x583, // 0x580 + CobId - // 0x603, // 0x600 + Cobid - // DIR_READ, - // 0x2640, // Object dictionary index - // 0x0, // Object dictionary subindex - // 56, - // 7000, - // "analogValues"); -// - ////testPdo_ = new ecmcCANOpenPDO( writeBuffer_, 0x183,DIR_READ,8,10000,0,exeSampleTimeMs_, cfgDbgMode_); - //testDevice_->addPDO(0x183, - // DIR_READ, - // 8, - // 10000, - // 0, - // "status"); -// -// -// - //testMaster_= new ecmcCANOpenMaster(writeBuffer_,1,exeSampleTimeMs_,1000,1000,1000,"linuxMaster",cfgDbgMode_); - - // Test LSS heartbeat "master" signal. This makes the led on pmu905 to go to "Normal Communication" - // can0 0x7E5 [0] - //lssPdo_ = new ecmcCANOpenPDO( writeBuffer_, 0x7E5,DIR_WRITE,0,0,1000,exeSampleTimeMs_,"lss", cfgDbgMode_); - - - // Test sync signal - // can0 0x80 [0] - //syncPdo_ = new ecmcCANOpenPDO( writeBuffer_, 0x80,DIR_WRITE,0,0,1000,exeSampleTimeMs_,"sync", cfgDbgMode_); - - // Test heartbeat signal - // can0 0x701 [1] 05 - //can_add_write(1793,1,5,0,0,0,0,0,0,0); - //heartPdo_ = new ecmcCANOpenPDO( writeBuffer_, 0x701,DIR_WRITE,1,0,1000,exeSampleTimeMs_,"heartbeat",cfgDbgMode_); - //heartPdo_->setValue(5); - - //basicConfSdo_ = new ecmcCANOpenSDO( writeBuffer_, 0x583,0x603,DIR_WRITE,0x2690,1,7,0,exeSampleTimeMs_,"basicConfiguration" ,cfgDbgMode_); - //byte0 = 0 - //byte1 = 0 - //byte2 = 0 - //byte 3,4 = 5000 - //byte 5 =0 - //byte 6 =0 - //byte 7 =0 - // => 0x1388000 - //uint64_t tempVal = 0x1388000; - //uint8_t * val = (uint8_t*)&tempVal; - //basicConfSdo_->setValue(val,7); - initAsyn(); } ecmcSocketCAN::~ecmcSocketCAN() { @@ -255,42 +194,13 @@ void ecmcSocketCAN::doReadWorker() { } // Wait for new CAN frame - - // TODO MUST CHECK RETRUN VALUE OF READ!!!!! - read(socketId_, &rxmsg_, sizeof(rxmsg_)); -// if(testSdo_) { -// testSdo_->newRxFrame(&rxmsg_); -// } -// if(testPdo_) { -// testPdo_->newRxFrame(&rxmsg_); -// } -// if(lssPdo_) { -// lssPdo_->newRxFrame(&rxmsg_); -// } -// if(syncPdo_) { -// syncPdo_->newRxFrame(&rxmsg_); -// } -// -// if(heartPdo_) { -// heartPdo_->newRxFrame(&rxmsg_); -// } + read(socketId_, &rxmsg_, sizeof(rxmsg_)); // forward all data to devices (also master) for(int i = 0; i < deviceCounter_; i++){ devices_[i]->newRxFrame(&rxmsg_); } -// if(testDevice_) { -// testDevice_->newRxFrame(&rxmsg_); -// } -// if(testMaster_) { -// testMaster_->newRxFrame(&rxmsg_); -// } - - //if(basicConfSdo_) { - // basicConfSdo_->newRxFrame(&rxmsg_); - //} - if(cfgDbgMode_) { // Simulate candump printout printf("r 0x%03X", rxmsg_.can_id); @@ -356,168 +266,13 @@ int ecmcSocketCAN::addWriteCAN(uint32_t canId, void ecmcSocketCAN::execute() { - // if(testSdo_) { - // testSdo_->execute(); - // } - - // if(testPdo_) { - // testPdo_->execute(); - // } - - // if(lssPdo_) { - // lssPdo_->execute(); - // } - - // if(syncPdo_) { - // syncPdo_->execute(); - // } - - // if(heartPdo_) { - // heartPdo_->execute(); - // } - -// if(testMaster_) { -// testMaster_->execute(); -// } -// if(testDevice_) { -// testDevice_->execute(); -// } - for(int i = 0; i < deviceCounter_; i++){ devices_[i]->execute(); } - // cycleCounter_++; - // if(basicConfSdo_) { - // basicConfSdo_->execute(); - // if(cycleCounter_ > 10000) { - // cycleCounter_ = 0; - // printf("################################### TEST WRITE SDO#############\n"); - // basicConfSdo_->writeValue(); - // } - - // } - - return; } -void ecmcSocketCAN::initAsyn() { - - // Add enable "plugin.fft%d.enable" - /*std::string paramName =ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_ENABLE; - - if( createParam(0, paramName.c_str(), asynParamInt32, &asynEnableId_) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter enable"); - } - setIntegerParam(asynEnableId_, cfgEnable_); - - // Add rawdata "plugin.fft%d.rawdata" - paramName =ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_RAWDATA; - - if( createParam(0, paramName.c_str(), asynParamFloat64Array, &asynRawDataId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter rawdata"); - } - doCallbacksFloat64Array(rawDataBuffer_, cfgNfft_, asynRawDataId_,0); - - // Add rawdata "plugin.fft%d.preprocdata" - paramName =ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_PPDATA; - - if( createParam(0, paramName.c_str(), asynParamFloat64Array, &asynPPDataId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter preprocdata"); - } - doCallbacksFloat64Array(prepProcDataBuffer_, cfgNfft_, asynPPDataId_,0); - -n - - // Add fft amplitude "plugin.fft%d.fftamplitude" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_FFT_AMP; - - if( createParam(0, paramName.c_str(), asynParamFloat64Array, &asynFFTAmpId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter fftamplitude"); - } - doCallbacksFloat64Array(fftBufferResultAmp_, cfgNfft_/2+1, asynFFTAmpId_,0); - - // Add fft "plugin.fft%d.mode" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_FFT_MODE; - - if( createParam(0, paramName.c_str(), asynParamInt32, &asynFFTModeId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter mode"); - } - setIntegerParam(asynFFTModeId_, (epicsInt32)cfgMode_); - - // Add fft "plugin.fft%d.status" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_FFT_STAT; - - if( createParam(0, paramName.c_str(), asynParamInt32, &asynFFTStatId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter status"); - } - setIntegerParam(asynFFTStatId_, (epicsInt32)status_); - - // Add fft "plugin.fft%d.source" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_FFT_SOURCE; - - if( createParam(0, paramName.c_str(), asynParamInt8Array, &asynSourceId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter source"); - } - doCallbacksInt8Array(cfgCanIFStr_, strlen(cfgCanIFStr_), asynSourceId_,0); - - // Add fft "plugin.fft%d.trigg" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_FFT_TRIGG; - - if( createParam(0, paramName.c_str(), asynParamInt32, &asynTriggId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter trigg"); - } - setIntegerParam(asynTriggId_, (epicsInt32)triggOnce_); - - // Add fft "plugin.fft%d.fftxaxis" - paramName = ECMC_PLUGIN_nSYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_FFT_X_FREQS; - - if( createParam(0, paramName.c_str(), asynParamFloat64Array, &asynFFTXAxisId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter xaxisfreqs"); - } - doCallbacksFloat64Array(fftBufferXAxis_,cfgNfft_ / 2 + 1, asynFFTXAxisId_,0); - - // Add fft "plugin.fft%d.nfft" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_NFFT; - - if( createParam(0, paramName.c_str(), asynParamInt32, &asynNfftId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter nfft"); - } - setIntegerParam(asynNfftId_, (epicsInt32)cfgNfft_); - - // Add fft "plugin.fft%d.rate" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_RATE; - - if( createParam(0, paramName.c_str(), asynParamFloat64, &asynSRateId_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter rate"); - } - setDoubleParam(asynSRateId_, cfgDataSampleRateHz_); - - // Add fft "plugin.fft%d.buffid" - paramName = ECMC_PLUGIN_ASYN_PREFIX + to_string(objectId_) + - "." + ECMC_PLUGIN_ASYN_BUFF_ID; - - if( createParam(0, paramName.c_str(), asynParamInt32, &asynElementsInBuffer_ ) != asynSuccess ) { - throw std::runtime_error("Failed create asyn parameter trigg"); - } - setIntegerParam(asynElementsInBuffer_, (epicsInt32)elementsInBuffer_); - - // Update integers - callParamCallbacks();*/ -} - // Avoid issues with std:to_string() std::string ecmcSocketCAN::to_string(int value) { std::ostringstream os; @@ -525,112 +280,6 @@ std::string ecmcSocketCAN::to_string(int value) { return os.str(); } -//asynStatus ecmcSocketCAN::writeInt32(asynUser *pasynUser, epicsInt32 value) { -// int function = pasynUser->reason; -// /*if( function == asynEnableId_ ) { -// cfgEnable_ = value; -// return asynSuccess; -// } else if( function == asynFFTModeId_){ -// cfgMode_ = (FFT_MODE)value;// Called from low prio worker thread. Makes the hard work -//void ecmcSocketCAN::doCalcWorker() { -// -// while(true) { -// doCalcEvent_.wait(); -// if(destructs_) { -// break; -// } -// // Pre-process -// removeDCOffset(); // Remove dc on rawdata -// removeLin(); // Remove fitted line -// // Process -// calcFFT(); // FFT cacluation -// // Post-process -// scaleFFT(); // Scale FFT -// calcFFTAmp(); // Calculate amplitude from complex -// calcFFTXAxis(); // Calculate x axis -// -// doCallbacksFloat64Array(rawDataBuffer_, cfgNfft_, asynRawDataId_, 0); -// doCallbacksFloat64Array(prepProcDataBuffer_, cfgNfft_, asynPPDataId_, 0); -// doCallbacksFloat64Array(fftBufferResultAmp_,cfgNfft_/2+1, asynFFTAmpId_, 0); -// doCallbacksFloat64Array(fftBufferXAxis_, cfgNfft_/2+1, asynFFTXAxisId_,0); -// callParamCallbacks(); -// if(cfgDbgMode_){ -// printComplexArray(fftBufferResult_, -// cfgNfft_, -// objectId_); -// printEcDataArray((uint8_t*)rawDataBuffer_, -// cfgNfft_*sizeof(double), -// ECMC_EC_F64, -// objectId_); -// } -// -// clearBuffers(); -// triggOnce_ = 0; // Wait for next trigger if in trigg mode -// setIntegerParam(asynTriggId_,triggOnce_); -// fftWaitingForCalc_ = 0; -// } -//} -// return asynSuccess; -// } -// return asynError;*/ -// return asynSuccess; -//} -// -//asynStatus ecmcSocketCAN::readInt32(asynUser *pasynUser, epicsInt32 *value) { -// int function = pasynUser->reason; -// /*if( function == asynEnableId_ ) { -// *value = cfgEnable_; -// return asynSuccess; -// } else if( function == asynFFTModeId_ ){ -// *value = cfgMode_; -// return asynSuccess; -// } else if( function == asynTriggId_ ){ -// *value = triggOnce_; -// return asynSuccess; -// }else if( function == asynFFTStatId_ ){ -// *value = (epicsInt32)status_; -// return asynSuccess; -// }else if( function == asynNfftId_ ){ -// *value = (epicsInt32)cfgNfft_; -// return asynSuccess; -// }else if( function == asynElementsInBuffer_){ -// *value = (epicsInt32)elementsInBuffer_; -// return asynSuccess; -// } -// return asynError;*/ -// return asynSuccess; -//} -// -//asynStatus ecmcSocketCAN::readInt8Array(asynUser *pasynUser, epicsInt8 *value, -// size_t nElements, size_t *nIn) { -// int function = pasynUser->reason; -// /*if( function == asynSourceId_ ) { -// unsigned int ncopy = strlen(cfgCanIFStr_); -// if(nElements < ncopy) { -// ncopy = nElements; -// } -// memcpy (value, cfgCanIFStr_, ncopy); -// *nIn = ncopy; -// return asynSuccess; -// } -// -// *nIn = 0; -// return asynError;*/ -// return asynSuccess; -//} -// -//asynStatus ecmcSocketCAN::readFloat64(asynUser *pasynUser, epicsFloat64 *value) { -// int function = pasynUser->reason; -// /*if( function == asynSRateId_ ) { -// *value = cfgDataSampleRateHz_; -// return asynSuccess; -// } -// -// return asynError;*/ -// return asynSuccess; -//} -// - void ecmcSocketCAN::addMaster(uint32_t nodeId, const char* name, int lssSampleTimeMs, @@ -745,5 +394,4 @@ void ecmcSocketCAN::addSDO(uint32_t nodeId, if(errorCode > 0) { throw std::runtime_error("AddSDO() failed."); } - } diff --git a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.h b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.h index bfefc05..de5293e 100644 --- a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.h +++ b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcSocketCAN.h @@ -113,7 +113,6 @@ class ecmcSocketCAN { private: void parseConfigStr(char *configStr); - void initAsyn(); static std::string to_string(int value); void connectPrivate(); int writeCAN(can_frame *frame); diff --git a/iocsh/pvs.log b/iocsh/pvs.log index 2cfa54e..90b93bc 100644 --- a/iocsh/pvs.log +++ b/iocsh/pvs.log @@ -1,12 +1,12 @@ -REQMOD:mcag-trgt-muts--6100:MODULES -REQMOD:mcag-trgt-muts--6100:VERSIONS -REQMOD:mcag-trgt-muts--6100:MOD_VER -REQMOD:mcag-trgt-muts--6100:exit -REQMOD:mcag-trgt-muts--6100:BaseVersion -REQMOD:mcag-trgt-muts--6100:require_VER -REQMOD:mcag-trgt-muts--6100:ecmccfg_VER -REQMOD:mcag-trgt-muts--6100:asyn_VER -REQMOD:mcag-trgt-muts--6100:exprtk_VER -REQMOD:mcag-trgt-muts--6100:motor_VER -REQMOD:mcag-trgt-muts--6100:ecmc_VER -REQMOD:mcag-trgt-muts--6100:ecmc_plugin_socketcan_VER +REQMOD:mcag-trgt-muts--7821:MODULES +REQMOD:mcag-trgt-muts--7821:VERSIONS +REQMOD:mcag-trgt-muts--7821:MOD_VER +REQMOD:mcag-trgt-muts--7821:exit +REQMOD:mcag-trgt-muts--7821:BaseVersion +REQMOD:mcag-trgt-muts--7821:require_VER +REQMOD:mcag-trgt-muts--7821:ecmccfg_VER +REQMOD:mcag-trgt-muts--7821:asyn_VER +REQMOD:mcag-trgt-muts--7821:exprtk_VER +REQMOD:mcag-trgt-muts--7821:motor_VER +REQMOD:mcag-trgt-muts--7821:ecmc_VER +REQMOD:mcag-trgt-muts--7821:ecmc_plugin_socketcan_VER diff --git a/iocsh/test.script b/iocsh/test.script index d5de6c1..aeb4182 100644 --- a/iocsh/test.script +++ b/iocsh/test.script @@ -103,3 +103,5 @@ ecmcCANOpenAddSDO("basicConfig",3,0x583,0x603,1,0x2690,0x1,7,0) # WRITE ecmcConfigOrDie "Cfg.SetAppMode(1)" iocInit dbl > pvs.log + +ecmcGrepParam *plugin.can.*