Initial version of sinqMotor

This commit is contained in:
2024-11-12 15:13:12 +01:00
parent 611cde365f
commit af182bb73b
6 changed files with 603 additions and 0 deletions

124
src/sinqController.cpp Normal file
View File

@@ -0,0 +1,124 @@
/*
This class contains the necessary changes to have an additional text fields
for messages with each axis.
Code lifted from Torsten Boegershausen ESS code.
Mark Koennecke, March 2017
Added code to manage an interMessageSleep
Mark Koennecke, February 2024
*/
#include "sinqController.h"
#include "asynMotorController.h"
#include "epicsExport.h"
#include "iocsh.h"
#include <errlog.h>
sinqController::sinqController(const char *portName, const char *SINQPortName,
int numAxes, const int &extraParams)
: asynMotorController(
portName, numAxes + 1, NUM_MOTOR_DRIVER_PARAMS + extraParams,
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
{
createParam(motorMessageIsFromDriverString, asynParamInt32,
&motorMessageIsFromDriver_);
createParam(motorMessageTextString, asynParamOctet, &motorMessageText_);
}
asynStatus sinqController::errMsgCouldNotParseResponse(const char *command,
const char *response,
int axisNo_,
const char *functionName,
int lineNumber) {
asynPrint(lowLevelPortUser_, ASYN_TRACE_ERROR,
"%s => line %d:\n Could not interpret response %s for "
"command %s.\n",
functionName, lineNumber, response, command);
setStringParam(motorMessageText_,
"Could not interpret MCU response. Please "
"call the software support");
setIntegerParam(motorStatusCommsError_, 1);
return asynError;
}
asynStatus sinqController::paramLibAccessFailed(asynStatus status,
const char *parameter,
const char *functionName,
int lineNumber) {
if (status != asynSuccess) {
// Log the error message and try to propagate it
asynPrint(lowLevelPortUser_, ASYN_TRACE_ERROR,
"%s => line %d:\n Accessing the parameter library failed for "
"parameter %s",
functionName, lineNumber, parameter);
setStringParam(
motorMessageText_,
"Accessing paramLib failed. Please call the software support.");
}
return status;
}
// Static pointers (valid for the entire lifetime of the IOC). The number behind
// the strings gives the integer number of each variant (see also method
// stringifyAsynStatus)
static char *asynSuccessStringified = "success"; // 0
static char *asynTimeoutStringified = "timeout"; // 1
static char *asynOverflowStringified = "overflow"; // 2
static char *asynErrorStringified = "error"; // 3
static char *asynDisconnectedStringified = "disconnected"; // 4
static char *asynDisabledStringified = "disabled"; // 5
static char *asynParamAlreadyExistsStringified =
"parameter already exists"; // 6
static char *asynParamNotFoundStringified = "parameter not found"; // 7
static char *asynParamWrongTypeStringified = "wrong type"; // 8
static char *asynParamBadIndexStringified = "bad index"; // 9
static char *asynParamUndefinedStringified = "parameter undefined"; // 10
static char *asynParamInvalidListStringified = "invalid list"; // 11
char *sinqController::stringifyAsynStatus(asynStatus status) {
// See
// https://github.com/epics-modules/asyn/blob/master/asyn/asynDriver/asynDriver.h
// and
// https://github.com/epics-modules/asyn/blob/master/asyn/asynPortDriver/paramErrors.h
// for the definition of the error codes
switch (status) {
case asynSuccess:
return asynSuccessStringified;
case asynTimeout:
return asynTimeoutStringified;
case asynOverflow:
return asynOverflowStringified;
case asynError:
return asynErrorStringified;
case asynDisconnected:
return asynDisconnectedStringified;
case asynDisabled:
return asynDisabledStringified;
case asynParamAlreadyExists:
return asynParamAlreadyExistsStringified;
case asynParamNotFound:
return asynParamNotFoundStringified;
case asynParamWrongType:
return asynParamWrongTypeStringified;
case asynParamBadIndex:
return asynParamBadIndexStringified;
case asynParamUndefined:
return asynParamUndefinedStringified;
case asynParamInvalidList:
return asynParamInvalidListStringified;
}
errlogPrintf("%s => line %d:\nReached unreachable code.",
__PRETTY_FUNCTION__, __LINE__);
return "unreachable code reached";
}