Compare commits

..

1 Commits

Author SHA1 Message Date
mathis_s cb70054a72 Readded the PMAC driver for HRPT 2025-05-12 16:27:39 +02:00
8 changed files with 61 additions and 233 deletions
-21
View File
@@ -1,21 +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 sinqEPICSApp/src/*.cpp
- name: formatting
run: clang-format --style=file --Werror --dry-run sinqEPICSApp/src/*.cpp sinqEPICSApp/src/*.c sinqEPICSApp/src/*.h
Build:
runs-on: linepics
steps:
- name: checkout repo
uses: actions/checkout@v4
- run: |
sed -i 's/ARCH_FILTER=.*/ARCH_FILTER=linux%/' Makefile.RHEL8
make -f Makefile.RHEL8 install
+51
View File
@@ -0,0 +1,51 @@
default:
image: docker.psi.ch:5000/wall_e/sinqepics:latest
stages:
- test
- build
cppcheck:
stage: test
script:
- cppcheck --std=c++17 --addon=cert --addon=misc --error-exitcode=1 sinqEPICSApp/
allow_failure: true # Long term this needs to be removed
artifacts:
expire_in: 1 week
tags:
- docker
formatting:
stage: test
script:
- clang-format --style=file --Werror --dry-run sinqEPICSApp/src/*.cpp sinqEPICSApp/src/*.c sinqEPICSApp/src/*.h
allow_failure: true # Long term this needs to be removed
artifacts:
expire_in: 1 week
tags:
- docker
# clangtidy:
# stage: test
# 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:
# # - docker
build_module:
stage: build
script:
- sed -i 's/ARCH_FILTER=.*/ARCH_FILTER=linux%/' Makefile.RHEL8
- make -f Makefile.RHEL8 install
- cp -rT "/ioc/modules/sinq/$(ls -U /ioc/modules/sinq/ | head -1)" "./sinq-${CI_COMMIT_SHORT_SHA}"
artifacts:
name: "sinq-${CI_COMMIT_SHORT_SHA}"
paths:
- "sinq-${CI_COMMIT_SHORT_SHA}/*"
expire_in: 1 week
when: always
tags:
- docker
+7 -8
View File
@@ -4,7 +4,7 @@ include /ioc/tools/driver.makefile
MODULE=sinq MODULE=sinq
BUILDCLASSES=Linux BUILDCLASSES=Linux
EPICS_VERSIONS=7.0.7 EPICS_VERSIONS=7.0.7
ARCH_FILTER=RHEL8% ARCH_FILTER=RHEL%
# additional module dependencies # additional module dependencies
REQUIRED+=SynApps REQUIRED+=SynApps
@@ -12,18 +12,17 @@ REQUIRED+=stream
REQUIRED+=scaler REQUIRED+=scaler
REQUIRED+=motorBase REQUIRED+=motorBase
# Release version
LIBVERSION=2025-with-pmac
# DB files to include in the release # DB files to include in the release
TEMPLATES += sinqEPICSApp/Db/dimetix.db TEMPLATES += sinqEPICSApp/Db/dimetix.db
TEMPLATES += sinqEPICSApp/Db/slsvme.db TEMPLATES += sinqEPICSApp/Db/slsvme.db
TEMPLATES += sinqEPICSApp/Db/spsamor.db TEMPLATES += sinqEPICSApp/Db/spsamor.db
TEMPLATES += sinqEPICSApp/Db/el734.db
# DBD files to include in the release # DBD files to include in the release
DBDS += sinqEPICSApp/src/sinq.dbd DBDS += sinqEPICSApp/src/sinq.dbd
# Release version
LIBVERSION=2026
# Source files to build # Source files to build
SOURCES += sinqEPICSApp/src/devScalerEL737.c SOURCES += sinqEPICSApp/src/devScalerEL737.c
SOURCES += sinqEPICSApp/src/SINQController.cpp SOURCES += sinqEPICSApp/src/SINQController.cpp
@@ -33,9 +32,9 @@ SOURCES += sinqEPICSApp/src/NanotecDriver.cpp
SOURCES += sinqEPICSApp/src/stptok.cpp SOURCES += sinqEPICSApp/src/stptok.cpp
SOURCES += sinqEPICSApp/src/PhytronDriver.cpp SOURCES += sinqEPICSApp/src/PhytronDriver.cpp
SOURCES += sinqEPICSApp/src/EuroMoveDriver.cpp SOURCES += sinqEPICSApp/src/EuroMoveDriver.cpp
# SOURCES += sinqEPICSApp/src/pmacAsynIPPort.c SOURCES += sinqEPICSApp/src/pmacAsynIPPort.c
# SOURCES += sinqEPICSApp/src/pmacAxis.cpp SOURCES += sinqEPICSApp/src/pmacAxis.cpp
# SOURCES += sinqEPICSApp/src/pmacController.cpp SOURCES += sinqEPICSApp/src/pmacController.cpp
SOURCES += sinqEPICSApp/src/MasterMACSDriver.cpp SOURCES += sinqEPICSApp/src/MasterMACSDriver.cpp
SOURCES += sinqEPICSApp/src/C804Axis.cpp SOURCES += sinqEPICSApp/src/C804Axis.cpp
SOURCES += sinqEPICSApp/src/C804Controller.cpp SOURCES += sinqEPICSApp/src/C804Controller.cpp
-34
View File
@@ -1,34 +0,0 @@
record(motor,"$(P)$(M)")
{
field(DESC,"$(DESC)")
field(DTYP,"$(DTYP)")
field(DIR,"$(DIR)")
field(VELO,"$(VELO)")
field(HVEL,"$(VELO)")
field(VBAS,"$(VELO)")
field(VMAX, "${VMAX}")
field(ACCL,"$(ACCL)")
field(BDST,"$(BDST)")
field(BVEL,"$(BVEL)")
field(BACC,"$(BACC)")
field(OUT,"@asyn($(PORT),$(ADDR))")
field(MRES,"$(MRES)")
field(PREC,"$(PREC)")
field(EGU,"$(EGU)")
field(DHLM,"$(DHLM)")
field(DLLM,"$(DLLM)")
field(INIT,"$(INIT)")
field(PINI, "NO")
field(TWV,"1")
field(RTRY,"0")
}
# The message text
record(waveform, "$(P)$(M)-MsgTxt") {
field(DTYP, "asynOctetRead")
field(INP, "@asyn($(PORT),$(N),1) MOTOR_MESSAGE_TEXT")
field(FTVL, "CHAR")
field(NELM, "80")
field(SCAN, "I/O Intr")
}
+1 -4
View File
@@ -505,10 +505,7 @@ asynStatus EL734Axis::poll(bool *moving)
// errlogPrintf("Axis %d, reply %s, msr %d, oredmsr = %d, position = %lf\n", // errlogPrintf("Axis %d, reply %s, msr %d, oredmsr = %d, position = %lf\n",
// axisNo_, reply, msr, oredMSR, position); // axisNo_, reply, msr, oredMSR, position);
// Reset the error during each poll. This is necessary because some errors oredMSR |= msr;
// apparently don't get cleared by the controller (especially "lower / higher
// limit hit").
oredMSR = msr;
if ((msr & 0x1) == 0) if ((msr & 0x1) == 0)
{ {
// done: check for trouble // done: check for trouble
-2
View File
@@ -250,8 +250,6 @@ PhytronAxis::PhytronAxis(PhytronController *pC, int axisNo, int enc)
haveBrake = 0; haveBrake = 0;
brakeIO = -1; brakeIO = -1;
next_poll = -1; next_poll = -1;
homing = 0;
homing_direction = 0;
} }
int PhytronAxis::setBrake(int brakeNO) int PhytronAxis::setBrake(int brakeNO)
+2 -2
View File
@@ -5,9 +5,9 @@ registrar(EL734Register)
registrar(PhytronRegister) registrar(PhytronRegister)
registrar(EuroMoveRegister) registrar(EuroMoveRegister)
registrar(NanotecRegister) registrar(NanotecRegister)
# registrar(pmacControllerRegister) registrar(pmacControllerRegister)
registrar(C804ControllerRegister) registrar(C804ControllerRegister)
# registrar(pmacAsynIPPortRegister) registrar(pmacAsynIPPortRegister)
registrar(MasterMACSRegister) registrar(MasterMACSRegister)
registrar(SINQControllerRegister) registrar(SINQControllerRegister)
-162
View File
@@ -1,162 +0,0 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
################################################################################
# This converts the hex form of a wireshark analysis follow to something
# more human readable.
#
# It is only partially implemented!
################################################################################
f_name="${1}"
if [ "$#" -eq 2 ]; then
filt="${2}"
fi
declare -A POSITION_MODE
POSITION_MODE[1]="RELATIVE"
POSITION_MODE[2]="ABSOLUTE"
POSITION_MODE[3]="INTERNAL_REFERANCE"
POSITION_MODE[4]="EXTERNAL_REFERANCE"
declare -A COMMANDS
function to_ord() {
printf "%x" "'$1"
}
function add_char() {
COMMANDS["$(to_ord "$1")"]="$2"
}
function add_ord() {
COMMANDS["$1"]="$2"
}
add_char A Start_Movement
add_char C Get_Position
add_char D Set_Position_And_Clear_Error
add_char d Set_Direction
add_char p Set_Position_Mode
add_char '$' Get_Status
add_char 0 0
add_char 1 1
add_char 2 2
add_char 3 3
add_char 4 4
add_char 5 5
add_char 6 6
add_char 7 7
add_char 8 8
add_char 9 9
add_char '#' '#'
add_ord 00 ''
add_ord 0d '' # '\r'
add_ord 2b '+'
add_ord 2d '-'
while read -r line; do
fields="$( echo "${line}" | sed -e 's/^ *//' -e 's/ /:/' -e 's/ /:/' | tr -s ' ' )"
IFS=' ' bytes=($( echo "${fields}" | cut -d':' -f2))
string="$( echo "${fields}" | cut -d':' -f3)"
parsing_number=-1
num_len=0
is_negative=0
human_readable=()
for byte in "${bytes[@]}"; do
if [[ -v COMMANDS["${byte}"] ]]; then
if [[ "${COMMANDS["${byte}"]}" == Get_Status ]] || [[ "${COMMANDS["${byte}"]}" == Get_Position ]] || [[ "${COMMANDS["${byte}"]}" == Set_Position_Mode ]] || [[ "${COMMANDS["${byte}"]}" == Set_Position_And_Clear_Error ]]; then
parsing_number=0
numlen=0
is_negative=0
elif [[ "${parsing_number}" -ge 0 ]] && ( [[ "${byte}" == 00 ]] || [[ "${byte}" == 0d ]] ); then
if [[ "${num_len}" -ge 1 ]]; then
if [[ "${human_readable[${#human_readable[@]}-1]}" == Get_Status ]]; then
if [[ "$(( parsing_number & 2#0001 ))" -eq 1 ]]; then
human_readable=("${human_readable[@]}" "READY")
fi
if [[ "$(( parsing_number & 2#0010 ))" -eq 1 ]]; then
human_readable=("${human_readable[@]}" "ZERO-POS_REACHED")
fi
if [[ "$(( parsing_number & 2#0100 ))" -eq 1 ]]; then
human_readable=("${human_readable[@]}" "POSITIONING_ERROR")
fi
if [[ "$(( parsing_number & 2#1000 ))" -eq 1 ]]; then
human_readable=("${human_readable[@]}" "SOMETHING?")
fi
elif [[ "${human_readable[${#human_readable[@]}-1]}" == Set_Position_Mode ]]; then
human_readable=("${human_readable[@]}" "${POSITION_MODE[${parsing_number}]}")
else
if [[ "${is_negative}" -eq 1 ]]; then
human_readable=("${human_readable[@]}" "$(( parsing_number * -1))")
else
human_readable=("${human_readable[@]}" "${parsing_number}")
fi
fi
fi
parsing_number=-1
continue
elif [ "${parsing_number}" -ge 0 ]; then
if [[ "${COMMANDS["${byte}"]}" == '-' ]]; then
is_negative=1
elif [[ "${COMMANDS["${byte}"]}" == '+' ]]; then
is_negative=0
else
parsing_number="$(( parsing_number * 10 + "${COMMANDS["${byte}"]}" ))"
fi
num_len=$(( num_len + 1 ))
continue
fi
if [ "${#human_readable[@]}" -gt 0 ]; then
human_readable=("${human_readable[@]}" "${COMMANDS["${byte}"]}")
else
human_readable=("${COMMANDS["${byte}"]}")
fi
else
if [ "${#human_readable[@]}" -gt 0 ]; then
human_readable=("${human_readable[@]}" "${byte}(unknown)")
else
human_readable=("${byte}(unknown)")
fi
fi
done
if [[ "${human_readable[0]}" == '#' ]]; then
if [[ -z "${filt+x}" ]]; then
echo "Sent: ${human_readable[@]}"
else
if [[ "${human_readable[1]}" == "${filt}" ]]; then
echo "Sent: ${human_readable[@]}"
fi
fi
else
# Some commands prefix the response with two 0's (I assume there can be
# more axes)
if [[ "${human_readable[0]}" == 0 ]] && [[ "${human_readable[1]}" == 0 ]]; then
IFS=' ' human_readable=("${human_readable[@]:2}")
fi
if [[ -z "${filt+x}" ]]; then
echo "Received: ${human_readable[@]}"
else
if [[ "${human_readable[0]}" == "${filt}" ]]; then
echo "Received: ${human_readable[@]}"
fi
fi
fi
done < "${f_name}"