PDO: Add mutex

This commit is contained in:
Anders Sandstrom
2021-03-08 17:03:43 +01:00
parent 88c2cb58d5
commit a6456894ae
2 changed files with 11 additions and 0 deletions

View File

@@ -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_);
}

View File

@@ -20,6 +20,7 @@
#include "inttypes.h"
#include <string>
#include "ecmcSocketCANWriteBuffer.h"
#include "epicsMutex.h"
#include <linux/can.h>
#include <linux/can/raw.h>
@@ -58,6 +59,8 @@ class ecmcCANOpenPDO {
void printBuffer();
int dbgMode_;
can_frame writeFrame_;
epicsMutexId dataMutex_;
};
#endif /* ECMC_CANOPEN_PDO_H_ */