Compare commits

...

2 Commits

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; msgPrintControl::~msgPrintControl() = default;
bool msgPrintControl::shouldBePrinted(msgPrintControlKey &key, bool wantToPrint, bool msgPrintControl::shouldBePrinted(msgPrintControlKey &key, bool wantToPrint,

View File

@@ -5,8 +5,15 @@
#define DefaultMaxRepetitions 4 #define DefaultMaxRepetitions 4
#include <asynDriver.h> // The EPICS libaries do not follow -Weffc++
#include <macros.h> #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#include "asynDriver.h"
#include "macros.h"
#pragma GCC diagnostic pop
#include <string.h> #include <string.h>
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
@@ -18,6 +25,17 @@
*/ */
class HIDDEN msgPrintControlKey { class HIDDEN msgPrintControlKey {
public: 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_; std::string controller_;
// -1 indicates a non-axis specific message // -1 indicates a non-axis specific message
@@ -32,17 +50,6 @@ class HIDDEN msgPrintControlKey {
* *
*/ */
size_t maxRepetitions_; 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 { class HIDDEN msgPrintControl {
public: public:
/**
* @brief Construct a new msgPrintControl object
*
*/
msgPrintControl();
/** /**
* @brief Destroy the msgPrintControl object * @brief Destroy the msgPrintControl object
* *

View File

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

View File

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

View File

@@ -120,13 +120,8 @@ sinqController::sinqController(const char *portName,
0, // No additional callback interfaces beyond those in base class 0, // No additional callback interfaces beyond those in base class
ASYN_CANBLOCK | ASYN_MULTIDEVICE, ASYN_CANBLOCK | ASYN_MULTIDEVICE,
1, // autoconnect 1, // autoconnect
0, 0) // Default priority and stack size 0, 0), // Default priority and stack size
{ pSinqC_(std::make_unique<sinqControllerImpl>((sinqControllerImpl){
asynStatus status = asynSuccess;
// The paramLib indices are populated with the calls to createParam
pSinqC_ = std::make_unique<sinqControllerImpl>((sinqControllerImpl){
.outstandingForcedFastPolls = 0, .outstandingForcedFastPolls = 0,
.pasynOctetSyncIOipPort = nullptr, .pasynOctetSyncIOipPort = nullptr,
.msgPrintC = msgPrintControl(), .msgPrintC = msgPrintControl(),
@@ -154,7 +149,9 @@ sinqController::sinqController(const char *portName,
.motorPositionDeadband = 0, .motorPositionDeadband = 0,
.adaptivePolling = 0, .adaptivePolling = 0,
.encoderType = 0, .encoderType = 0,
}); })) {
asynStatus status = asynSuccess;
// Store the poll period information. The poller itself will be started // Store the poll period information. The poller itself will be started
// later (after the IOC is running in epicsInithookFunction) // later (after the IOC is running in epicsInithookFunction)