Compare commits

..

8 Commits
1.4.0 ... 1.3.1

Author SHA1 Message Date
62a3d8c834 Added documenation for enableDisable flag 2025-07-29 11:50:34 +02:00
fd2afa9ec6 Added sleep to stop to make sure at least one poll happens and EPCIS knows the motor is moving 2025-07-29 09:44:26 +02:00
949e9faef3 Fixed various bugs found by the automated tests 2025-07-25 16:53:52 +02:00
5df84d6017 Using fixed 1.3.0 version 2025-07-24 11:32:44 +02:00
08c85129f3 Updated sinqMotor to 1.3.0 2025-07-24 11:16:37 +02:00
a980740fd5 Test timing problem 2025-07-24 09:40:52 +02:00
338b4d61b4 Added sleep after write commands
See comment in writeRead for explanation.
2025-07-24 08:51:38 +02:00
25b832a6e9 Updated sinqMotor to latest version 2025-07-23 09:55:24 +02:00
9 changed files with 73 additions and 51 deletions

View File

@@ -1,24 +0,0 @@
name: Test And Build
on: [push]
jobs:
Lint:
runs-on: linepics
steps:
- name: checkout repo
uses: actions/checkout@v4
- name: cppcheck
run: cppcheck --std=c++17 --addon=cert --addon=misc --error-exitcode=1 src/*.cpp
- name: formatting
run: clang-format --style=file --Werror --dry-run src/*.cpp
Build:
runs-on: linepics
steps:
- name: checkout repo
uses: actions/checkout@v4
with:
submodules: 'true'
- run: |
sed -i 's/ARCH_FILTER=.*/ARCH_FILTER=linux%/' Makefile
echo -e "\nIGNORE_SUBMODULES += sinqmotor" >> Makefile
make install

58
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,58 @@
default:
image: docker.psi.ch:5000/sinqdev/sinqepics:latest
stages:
- lint
- build
- test
cppcheck:
stage: lint
script:
- cppcheck --std=c++17 --addon=cert --addon=misc --error-exitcode=1 src/*.cpp
artifacts:
expire_in: 1 week
tags:
- sinq
formatting:
stage: lint
script:
- clang-format --style=file --Werror --dry-run src/*.cpp
artifacts:
expire_in: 1 week
tags:
- sinq
# clangtidy:
# stage: lint
# script:
# - curl https://docker.psi.ch:5000/v2/_catalog
# # - dnf update -y
# # - dnf install -y clang-tools-extra
# # - clang-tidy sinqEPICSApp/src/*.cpp sinqEPICSApp/src/*.c sinqEPICSApp/src/*.h -checks=cppcoreguidelines-*,cert-*
# # tags:
# # - sinq
build_module:
stage: build
script:
- export SINQMOTOR_VERSION="$(grep 'sinqMotor_VERSION=' Makefile | cut -d= -f2)"
- git clone --depth 1 --branch "${SINQMOTOR_VERSION}" https://gitlab-ci-token:${CI_JOB_TOKEN}@git.psi.ch/sinq-epics-modules/sinqmotor.git
- pushd sinqmotor
- sed -i 's/ARCH_FILTER=.*/ARCH_FILTER=linux%/' Makefile
- echo "LIBVERSION=${SINQMOTOR_VERSION}" >> Makefile
- make install
- popd
- sed -i 's/ARCH_FILTER=.*/ARCH_FILTER=linux%/' Makefile
- echo "LIBVERSION=${CI_COMMIT_TAG:-0.0.1}" >> Makefile
- make install
- cp -rT "/ioc/modules/turboPmac/$(ls -U /ioc/modules/turboPmac/ | head -1)" "./turboPmac-${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}"
artifacts:
name: "turboPmac-${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}"
paths:
- "turboPmac-${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}/*"
expire_in: 1 week
when: always
tags:
- sinq

View File

@@ -34,4 +34,4 @@ TEMPLATES += db/turboPmac.db
DBDS += sinqMotor/src/sinqMotor.dbd
DBDS += src/turboPmac.dbd
USR_CFLAGS += -Wall -Wextra -Weffc++ -Wunused-result -Werror -fvisibility=hidden # -Wpedantic // Does not work because EPICS macros trigger warnings
USR_CFLAGS += -Wall -Wextra -Weffc++ -Wunused-result -Werror # -Wpedantic // Does not work because EPICS macros trigger warnings

View File

@@ -230,7 +230,8 @@ static asynStatus sendPmacGetBuffer(pmacPvt *pPmacPvt, asynUser *pasynUser,
// =============================================================================
int pmacAsynIPPortConfigure(const char *portName, const char *hostInfo) {
epicsShareFunc int pmacAsynIPPortConfigure(const char *portName,
const char *hostInfo) {
asynStatus status = asynSuccess;
asynInterface *int32LowerLevelInterface = NULL;
asynInterface *octetLowerLevelInterface = NULL;

View File

@@ -2,7 +2,6 @@
#define asynInterposePmac_H
#include <epicsExport.h>
#include <macros.h>
#include <shareLib.h>
/*
@@ -26,7 +25,8 @@ extern "C" {
* 172.23.243.156:1025)
* @return status
*/
int HIDDEN pmacAsynIPPortConfigure(const char *portName, const char *hostInfo);
epicsShareFunc int pmacAsynIPPortConfigure(const char *portName,
const char *hostInfo);
#ifdef __cplusplus
}

View File

@@ -4,9 +4,9 @@
#include "turboPmacController.h"
#include <memory>
struct HIDDEN turboPmacAxisImpl;
struct turboPmacAxisImpl;
class HIDDEN turboPmacAxis : public sinqAxis {
class turboPmacAxis : public sinqAxis {
public:
/**
* @brief Construct a new turboPmacAxis

View File

@@ -254,21 +254,9 @@ asynStatus turboPmacController::writeRead(int axisNo, const char *command,
pasynOctetSyncIOipPort(), command, commandLength, response, MAXBUF_,
pTurboPmacC_->comTimeout, &nbytesOut, &nbytesIn, &eomReason);
/*
If sth. is written to the controller, it needs some time to process the
command. However, the controller returns the acknowledgment via
pasynOctetSyncIO->writeRead immediately, signalling to the driver that it is
ready to receive the next command. In practice, this can result in commands
getting discarded on the driver side or in bringing the driver in undefined
states (e.g. stuck in status 1).
To prevent this, we wait for 20 ms after a write command to give the
controller enough time to process everything. A write command can be
identified by looking for the equal sign.
*/
if (strchr(command, '=')) {
usleep(20000);
}
// if (strchr(command, '=')) {
// usleep(20000);
// }
msgPrintControlKey comKey =
msgPrintControlKey(portName, axisNo, __PRETTY_FUNCTION__, __LINE__);

View File

@@ -15,11 +15,11 @@
// Forward declaration of the controller class to resolve the cyclic dependency
// between the controller and the axis .h-file. See
// https://en.cppreference.com/w/cpp/language/class.
class HIDDEN turboPmacAxis;
class turboPmacAxis;
struct HIDDEN turboPmacControllerImpl;
struct turboPmacControllerImpl;
class HIDDEN turboPmacController : public sinqController {
class turboPmacController : public sinqController {
public:
/**
* @brief Construct a new turboPmacController object. This function is meant
@@ -93,8 +93,7 @@ class HIDDEN turboPmacController : public sinqController {
* @return asynStatus
*/
asynStatus writeRead(int axisNo, const char *command, char *response,
int numExpectedResponses)
__attribute__((visibility("hidden")));
int numExpectedResponses);
/**
* @brief Specialized version of sinqController::couldNotParseResponse