Compare commits

..

2 Commits
1.5.4 ... 1.5.6

Author SHA1 Message Date
59a5ba452f Fixed ordering
All checks were successful
Test And Build / Build (push) Successful in 6s
Test And Build / Lint (push) Successful in 5s
2025-09-17 12:37:55 +02:00
6dc2b131f7 Exempt EPICS libraries from -Weffc++
Some checks failed
Test And Build / Build (push) Failing after 6s
Test And Build / Lint (push) Successful in 26s
2025-09-17 12:33:58 +02:00
5 changed files with 77 additions and 63 deletions

View File

@@ -16,6 +16,8 @@ void msgPrintControlKey::format(char *buffer, size_t bufferSize) {
// =============================================================================
msgPrintControl::msgPrintControl() : map_(), suffix_{} {}
msgPrintControl::~msgPrintControl() = default;
bool msgPrintControl::shouldBePrinted(msgPrintControlKey &key, bool wantToPrint,

View File

@@ -5,8 +5,15 @@
#define DefaultMaxRepetitions 4
#include <asynDriver.h>
#include <macros.h>
// The EPICS libaries do not follow -Weffc++
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#include "asynDriver.h"
#include "macros.h"
#pragma GCC diagnostic pop
#include <string.h>
#include <string>
#include <unordered_map>
@@ -18,6 +25,17 @@
*/
class HIDDEN msgPrintControlKey {
public:
msgPrintControlKey(char *controller_, int axisNo, const char *fileName,
int line, size_t maxRepetitions = DefaultMaxRepetitions);
bool operator==(const msgPrintControlKey &other) const {
return axisNo_ == other.axisNo_ && line_ == other.line_ &&
functionName_ == other.functionName_ &&
controller_ == other.controller_;
}
void format(char *buffer, size_t bufferSize);
std::string controller_;
// -1 indicates a non-axis specific message
@@ -32,17 +50,6 @@ class HIDDEN msgPrintControlKey {
*
*/
size_t maxRepetitions_;
msgPrintControlKey(char *controller_, int axisNo, const char *fileName,
int line, size_t maxRepetitions = DefaultMaxRepetitions);
bool operator==(const msgPrintControlKey &other) const {
return axisNo_ == other.axisNo_ && line_ == other.line_ &&
functionName_ == other.functionName_ &&
controller_ == other.controller_;
}
void format(char *buffer, size_t bufferSize);
};
/**
@@ -85,6 +92,12 @@ template <> struct hash<msgPrintControlKey> {
*/
class HIDDEN msgPrintControl {
public:
/**
* @brief Construct a new msgPrintControl object
*
*/
msgPrintControl();
/**
* @brief Destroy the msgPrintControl object
*

View File

@@ -11,9 +11,8 @@
#pragma GCC diagnostic pop
#include "sinqAxis.h"
#include "msgPrintControl.h"
#include "sinqAxis.h"
#include "sinqController.h"
#include <math.h>
#include <unistd.h>
@@ -39,21 +38,22 @@ struct sinqAxisImpl {
};
sinqAxis::sinqAxis(class sinqController *pC, int axisNo)
: asynMotorAxis((asynMotorController *)pC, axisNo), pC_(pC) {
: asynMotorAxis((asynMotorController *)pC, axisNo), pC_(pC), pSinqA_([] {
epicsTimeStamp lastPollTime;
epicsTimeGetCurrent(&lastPollTime);
return std::make_unique<sinqAxisImpl>(sinqAxisImpl{
.expectedArrivalTime = 0,
.offsetMovTimeout = 30,
.scaleMovTimeout = 2.0,
.watchdogMovActive = false,
.targetPosition = 0.0,
.wasMoving = false,
.lastPollTime = lastPollTime,
});
}()) {
asynStatus status = asynSuccess;
epicsTimeStamp lastPollTime;
epicsTimeGetCurrent(&lastPollTime);
pSinqA_ = std::make_unique<sinqAxisImpl>(
(sinqAxisImpl){.expectedArrivalTime = 0,
.offsetMovTimeout = 30,
.scaleMovTimeout = 2.0,
.watchdogMovActive = false,
.targetPosition = 0.0,
.wasMoving = false,
.lastPollTime = lastPollTime});
/*
This check is also done in asynMotorAxis, but there the IOC continues
running even though the configuration is incorrect. When failing this check,

View File

@@ -450,8 +450,10 @@ class HIDDEN sinqAxis : public asynMotorAxis {
void setTargetPosition(double targetPosition);
private:
std::unique_ptr<sinqAxisImpl> pSinqA_;
// Ordering matters because pC_ is initialized before pSinqA_ in the
// constructor
sinqController *pC_;
std::unique_ptr<sinqAxisImpl> pSinqA_;
};
// =============================================================================

View File

@@ -119,43 +119,40 @@ sinqController::sinqController(const char *portName,
0, // No additional interfaces beyond those in base class
0, // No additional callback interfaces beyond those in base class
ASYN_CANBLOCK | ASYN_MULTIDEVICE,
1, // autoconnect
0, 0) // Default priority and stack size
{
1, // autoconnect
0, 0), // Default priority and stack size
pSinqC_(std::make_unique<sinqControllerImpl>((sinqControllerImpl){
.outstandingForcedFastPolls = 0,
.pasynOctetSyncIOipPort = nullptr,
.msgPrintC = msgPrintControl(),
.comTimeoutWindow = 3600,
.maxNumberTimeouts = 60,
.timeoutEvents = {},
.maxSubsequentTimeouts = 10,
.maxSubsequentTimeoutsExceeded = false,
.motorMessageText = 0,
.motorReset = 0,
.motorEnable = 0,
.motorEnableRBV = 0,
.motorCanDisable = 0,
.motorEnableMovWatchdog = 0,
.motorCanSetSpeed = 0,
.motorLimitsOffset = 0,
.motorForceStop = 0,
.motorConnected = 0,
.motorVeloFromDriver = 0,
.motorVbasFromDriver = 0,
.motorVmaxFromDriver = 0,
.motorAcclFromDriver = 0,
.motorHighLimitFromDriver = 0,
.motorLowLimitFromDriver = 0,
.motorPositionDeadband = 0,
.adaptivePolling = 0,
.encoderType = 0,
})) {
asynStatus status = asynSuccess;
// The paramLib indices are populated with the calls to createParam
pSinqC_ = std::make_unique<sinqControllerImpl>((sinqControllerImpl){
.outstandingForcedFastPolls = 0,
.pasynOctetSyncIOipPort = nullptr,
.msgPrintC = msgPrintControl(),
.comTimeoutWindow = 3600,
.maxNumberTimeouts = 60,
.timeoutEvents = {},
.maxSubsequentTimeouts = 10,
.maxSubsequentTimeoutsExceeded = false,
.motorMessageText = 0,
.motorReset = 0,
.motorEnable = 0,
.motorEnableRBV = 0,
.motorCanDisable = 0,
.motorEnableMovWatchdog = 0,
.motorCanSetSpeed = 0,
.motorLimitsOffset = 0,
.motorForceStop = 0,
.motorConnected = 0,
.motorVeloFromDriver = 0,
.motorVbasFromDriver = 0,
.motorVmaxFromDriver = 0,
.motorAcclFromDriver = 0,
.motorHighLimitFromDriver = 0,
.motorLowLimitFromDriver = 0,
.motorPositionDeadband = 0,
.adaptivePolling = 0,
.encoderType = 0,
});
// Store the poll period information. The poller itself will be started
// later (after the IOC is running in epicsInithookFunction)
movingPollPeriod_ = movingPollPeriod;