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,20 +38,21 @@ struct sinqAxisImpl {
};
sinqAxis::sinqAxis(class sinqController *pC, int axisNo)
: asynMotorAxis((asynMotorController *)pC, axisNo), pC_(pC) {
asynStatus status = asynSuccess;
: asynMotorAxis((asynMotorController *)pC, axisNo), pC_(pC), pSinqA_([] {
epicsTimeStamp lastPollTime;
epicsTimeGetCurrent(&lastPollTime);
pSinqA_ = std::make_unique<sinqAxisImpl>(
(sinqAxisImpl){.expectedArrivalTime = 0,
return std::make_unique<sinqAxisImpl>(sinqAxisImpl{
.expectedArrivalTime = 0,
.offsetMovTimeout = 30,
.scaleMovTimeout = 2.0,
.watchdogMovActive = false,
.targetPosition = 0.0,
.wasMoving = false,
.lastPollTime = lastPollTime});
.lastPollTime = lastPollTime,
});
}()) {
asynStatus status = asynSuccess;
/*
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);
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

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