From a6456894ae06259a45fa5add55398b11adffb16d Mon Sep 17 00:00:00 2001 From: Anders Sandstrom Date: Mon, 8 Mar 2021 17:03:43 +0100 Subject: [PATCH] PDO: Add mutex --- .../ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.cpp | 8 ++++++++ .../ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.cpp b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.cpp index ed32a3d..c5d258b 100644 --- a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.cpp +++ b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.cpp @@ -58,6 +58,8 @@ ecmcCANOpenPDO::ecmcCANOpenPDO(ecmcSocketCANWriteBuffer* writeBuffer, writeFrame_.data[6] = 0; writeFrame_.data[7] = 0; + dataMutex_ = epicsMutexCreate(); + } ecmcCANOpenPDO::~ecmcCANOpenPDO() { @@ -95,8 +97,10 @@ void ecmcCANOpenPDO::newRxFrame(can_frame *frame) { // Wait for: if(rw_ == DIR_READ) { if(validateFrame(frame)) { + epicsMutexLock(dataMutex_); memset(dataBuffer_,0,ODSize_); memcpy(dataBuffer_, &(frame->data[0]),frame->can_dlc); + epicsMutexUnlock(dataMutex_); errorCode_ = 0; if(dbgMode_) { printBuffer(); @@ -129,12 +133,16 @@ int ecmcCANOpenPDO::validateFrame(can_frame *frame) { } void ecmcCANOpenPDO::setValue(uint64_t data) { + epicsMutexLock(dataMutex_); memcpy(dataBuffer_, &data, ODSize_); + epicsMutexUnlock(dataMutex_); } int ecmcCANOpenPDO::writeValue() { if(writeFrame_.can_dlc > 0) { + epicsMutexLock(dataMutex_); memcpy(&(writeFrame_.data[0]), dataBuffer_ ,writeFrame_.can_dlc); + epicsMutexUnlock(dataMutex_); } return writeBuffer_->addWriteCAN(&writeFrame_); } diff --git a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.h b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.h index b7fb588..c4fb700 100644 --- a/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.h +++ b/ecmc_plugin_socketcan/ecmc_plugin_socketcanApp/src/ecmcCANOpenPDO.h @@ -20,6 +20,7 @@ #include "inttypes.h" #include #include "ecmcSocketCANWriteBuffer.h" +#include "epicsMutex.h" #include #include @@ -58,6 +59,8 @@ class ecmcCANOpenPDO { void printBuffer(); int dbgMode_; can_frame writeFrame_; + epicsMutexId dataMutex_; + }; #endif /* ECMC_CANOPEN_PDO_H_ */