diff --git a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.cpp b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.cpp index 5693ed2..57dfe2e 100644 --- a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.cpp +++ b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.cpp @@ -192,7 +192,7 @@ void ecmcCANOpenSDO::execute() { if(busyCounter_>ECMC_SDO_REPLY_TIMOUT_MS) { // cancel read or write - printf("SDO BUSY timeout!!\n"); + printf("SDO BUSY timeout!! %s\n",name_); memset(tempReadBuffer_,0,ODSize_); readStates_ = READ_IDLE; writeStates_ = WRITE_IDLE; @@ -215,7 +215,7 @@ void ecmcCANOpenSDO::execute() { exeCounter_ =0; readStates_ = READ_REQ_TRANSFER; if(dbgMode_) { - printf("STATE = READ_REQ_TRANSFER\n"); + printf("STATE = READ_REQ_TRANSFER %s\n",name_); } // IMPORTANT!! LOCKLOCK!!!! LOCK all slave trafic while 0x583 and 0x603 for any other trafic while processing //initiate @@ -224,7 +224,7 @@ void ecmcCANOpenSDO::execute() { writeBuffer_->addWriteCAN(&readReqTransferFrame_); if(dbgMode_) { - printf("STATE = READ_WAIT_FOR_CONF\n"); + printf("STATE = READ_WAIT_FOR_CONF %s\n",name_); } } } @@ -263,7 +263,7 @@ int ecmcCANOpenSDO::readDataStateMachine(can_frame *frame) { } readStates_ = READ_WAIT_FOR_DATA; //Next frame should be data! if(dbgMode_) { - printf("STATE = READ_WAIT_FOR_DATA\n"); + printf("STATE = READ_WAIT_FOR_DATA %s\n",name_); } writeBuffer_->addWriteCAN(&readConfReqFrameTg0_); // Send tg0 frame and wait for data, also size must match to go ahead useTg1Frame_ = 1; @@ -300,7 +300,7 @@ int ecmcCANOpenSDO::readDataStateMachine(can_frame *frame) { memcpy(dataBuffer_,tempReadBuffer_,ODSize_); epicsMutexUnlock(dataMutex_); if(dbgMode_) { - printf("STATE = READ_IDLE\n"); + printf("STATE = READ_IDLE %s\n",name_); printf("All data read from slave SDO.\n"); //copy complete data to dataBuffer_ printBuffer(); @@ -317,7 +317,7 @@ int ecmcCANOpenSDO::readDataStateMachine(can_frame *frame) { } int ecmcCANOpenSDO::writeDataStateMachine(can_frame *frame) { - printf("writeDataStateMachine\n"); + printf("writeDataStateMachine %s\n",name_); int bytes = 0; switch(writeStates_) { case WRITE_WAIT_FOR_CONF: @@ -332,7 +332,7 @@ int ecmcCANOpenSDO::writeDataStateMachine(can_frame *frame) { writeNextDataToSlave(useTg1Frame_); writeStates_ = WRITE_DATA; //Next frame should be data! if(dbgMode_) { - printf("STATE = WRITE_DATA\n"); + printf("STATE = WRITE_DATA %s\n",name_); } break; @@ -349,7 +349,7 @@ int ecmcCANOpenSDO::writeDataStateMachine(can_frame *frame) { writeStates_ = WRITE_IDLE; useTg1Frame_ = 0; if(dbgMode_) { - printf("STATE = WRITE_IDLE\n"); + printf("STATE = WRITE_IDLE %s\n",name_); printf("All data written to slave SDO.\n"); printBuffer(); } @@ -457,7 +457,7 @@ void ecmcCANOpenSDO::setValue(uint8_t *data, size_t bytes) { int ecmcCANOpenSDO::writeValue() { // Busy right now! - printf("WRITEVALUE!!\n"); + printf("WRITEVALUE %s\n",name_); if(busy_) { return ECMC_CAN_ERROR_SDO_WRITE_BUSY; @@ -474,14 +474,14 @@ int ecmcCANOpenSDO::writeValue() { writeStates_ = WRITE_REQ_TRANSFER; if(dbgMode_) { - printf("STATE = WRITE_REQ_TRANSFER\n"); + printf("STATE = WRITE_REQ_TRANSFER %s\n",name_); } writeBuffer_->addWriteCAN(&writeReqTransferFrame_); writeStates_ = WRITE_WAIT_FOR_CONF; if(dbgMode_) { - printf("STATE = WRITE_WAIT_FOR_CONF\n"); + printf("STATE = WRITE_WAIT_FOR_CONF %s\n",name_); } return 0; // State machine is now in rx frame() @@ -493,15 +493,15 @@ int ecmcCANOpenSDO::tryLock() { return 0; } - bool gotLock = ptrSdo1Lock_->test_and_set(); - if(!gotLock) { + bool prevLock = ptrSdo1Lock_->test_and_set(); + if(prevLock) { // wait for busy to go down return 0; } - busy_ = gotLock; + busy_ = true; epicsMutexUnlock(getLockMutex_); - return gotLock; + return 1; } int ecmcCANOpenSDO::tryUnlock() { diff --git a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.h b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.h index 8e88fa6..7b59b92 100644 --- a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.h +++ b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenSDO.h @@ -94,8 +94,6 @@ class ecmcCANOpenSDO { epicsMutexId dataMutex_; epicsMutexId getLockMutex_; int busyCounter_; - //std::atomic_flag *ptrSdo1Busy_; - //std::atomic_flag busy_; std::atomic_flag *ptrSdo1Lock_; bool busy_; }; diff --git a/iocsh/pvs.log b/iocsh/pvs.log index 40a302e..3ba0b72 100644 --- a/iocsh/pvs.log +++ b/iocsh/pvs.log @@ -1,12 +1,12 @@ -REQMOD:mcag-trgt-muts--16711:MODULES -REQMOD:mcag-trgt-muts--16711:VERSIONS -REQMOD:mcag-trgt-muts--16711:MOD_VER -REQMOD:mcag-trgt-muts--16711:exit -REQMOD:mcag-trgt-muts--16711:BaseVersion -REQMOD:mcag-trgt-muts--16711:require_VER -REQMOD:mcag-trgt-muts--16711:ecmccfg_VER -REQMOD:mcag-trgt-muts--16711:asyn_VER -REQMOD:mcag-trgt-muts--16711:exprtk_VER -REQMOD:mcag-trgt-muts--16711:motor_VER -REQMOD:mcag-trgt-muts--16711:ecmc_VER -REQMOD:mcag-trgt-muts--16711:ecmc_plugin_socketcan_VER +REQMOD:mcag-trgt-muts--18678:MODULES +REQMOD:mcag-trgt-muts--18678:VERSIONS +REQMOD:mcag-trgt-muts--18678:MOD_VER +REQMOD:mcag-trgt-muts--18678:exit +REQMOD:mcag-trgt-muts--18678:BaseVersion +REQMOD:mcag-trgt-muts--18678:require_VER +REQMOD:mcag-trgt-muts--18678:ecmccfg_VER +REQMOD:mcag-trgt-muts--18678:asyn_VER +REQMOD:mcag-trgt-muts--18678:exprtk_VER +REQMOD:mcag-trgt-muts--18678:motor_VER +REQMOD:mcag-trgt-muts--18678:ecmc_VER +REQMOD:mcag-trgt-muts--18678:ecmc_plugin_socketcan_VER diff --git a/iocsh/test.script b/iocsh/test.script index 8b80fa2..d5de6c1 100644 --- a/iocsh/test.script +++ b/iocsh/test.script @@ -77,7 +77,7 @@ ecmcCANOpenAddDevice("testDevice",3) # : Size of PDO (max 8 bytes). # : Readtimeout in ms. # : Cycle time for write (if <= 0 then only write on change). -ecmcCANOpenAddPDO("status",3,0x183,2,8,10000,0) # READ +ecmcCANOpenAddPDO("status1",3,0x183,2,8,10000,0) # READ # ecmcCANOpenAddSDO -h # Use ecmcCANOpenAddSDO(, ,.....) @@ -91,7 +91,10 @@ ecmcCANOpenAddPDO("status",3,0x183,2,8,10000,0) # READ # : OS Size. # : Readtimeout in ms. # -ecmcCANOpenAddSDO("analogValues",3,0x583,0x603,2,0x2640,0x0,56,7000) # READ +ecmcCANOpenAddSDO("analogValues1",3,0x583,0x603,2,0x2640,0x0,56,7000) # READ +ecmcCANOpenAddSDO("analogValues2",3,0x583,0x603,2,0x2640,0x0,56,7000) # READ +ecmcCANOpenAddSDO("analogValues3",3,0x583,0x603,2,0x2640,0x0,56,7000) # READ +ecmcCANOpenAddSDO("analogValues4",3,0x583,0x603,2,0x2640,0x0,56,7000) # READ ecmcCANOpenAddSDO("basicConfig",3,0x583,0x603,1,0x2690,0x1,7,0) # WRITE ##############################################################################