Draft Stream Device Rewrite of Counterbox Driver
This commit is contained in:
60
src/counterbox.cpp
Normal file
60
src/counterbox.cpp
Normal file
@ -0,0 +1,60 @@
|
||||
#include <epicsExport.h>
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
#include <stringinRecord.h>
|
||||
|
||||
#define update_val(prec, new_val) \
|
||||
{ \
|
||||
static_assert(std::char_traits<char>::length((new_val)) < MAX_SIZE, \
|
||||
"New Val Exceeds Max String Length"); \
|
||||
strncpy((prec)->val, (new_val), MAX_SIZE); \
|
||||
}
|
||||
|
||||
static long map_raw_failure_message(struct stringinRecord *prec) {
|
||||
const uint8_t MAX_SIZE = 40; // including null terminator
|
||||
|
||||
if (strcmp(prec->val, "?OF") == 0) {
|
||||
update_val(prec, "?OF: Configuration Error");
|
||||
} else if (strcmp(prec->val, "?OV") == 0) {
|
||||
update_val(prec, "?OV: Overflow");
|
||||
} else if (strcmp(prec->val, "?1") == 0) {
|
||||
update_val(prec, "?1: Parameter out of range");
|
||||
} else if (strcmp(prec->val, "?2") == 0) {
|
||||
update_val(prec, "?2: Bad command");
|
||||
} else if (strcmp(prec->val, "?3") == 0) {
|
||||
update_val(prec, "?3: Bad parameter");
|
||||
} else if (strcmp(prec->val, "?4") == 0) {
|
||||
update_val(prec, "?4: Bad counter");
|
||||
} else if (strcmp(prec->val, "?5") == 0) {
|
||||
update_val(prec, "?5: Parameter missing");
|
||||
} else if (strcmp(prec->val, "?6") == 0) {
|
||||
update_val(prec, "?6: Too many counts");
|
||||
} else if (strcmp(prec->val, "?91") == 0) {
|
||||
update_val(prec, "?91: Start Failure");
|
||||
} else if (strcmp(prec->val, "?92") == 0) {
|
||||
update_val(prec, "?92: Failure while counting");
|
||||
} else if (strcmp(prec->val, "?93") == 0) {
|
||||
update_val(prec, "?93: Read Failure");
|
||||
} else if (strstr(prec->val, "?") != NULL) {
|
||||
char val_copy[40] = {0};
|
||||
strncpy(val_copy, prec->val, MAX_SIZE);
|
||||
snprintf(prec->val, MAX_SIZE - 1, "%s: HW error", val_copy);
|
||||
} else {
|
||||
// Leave the message as is
|
||||
}
|
||||
|
||||
return 0; // returns: (-1,0)=>(failure,success)
|
||||
}
|
||||
|
||||
struct {
|
||||
long number;
|
||||
DEVSUPFUN report;
|
||||
DEVSUPFUN init;
|
||||
DEVSUPFUN init_record;
|
||||
DEVSUPFUN get_ioint_info;
|
||||
DEVSUPFUN read_ai;
|
||||
DEVSUPFUN special_linconv;
|
||||
} devCounterBoxStringError = {
|
||||
6, NULL, NULL, NULL, NULL, (DEVSUPFUN)map_raw_failure_message, NULL};
|
||||
|
||||
epicsExportAddress(dset, devCounterBoxStringError);
|
5
src/counterbox.dbd
Normal file
5
src/counterbox.dbd
Normal file
@ -0,0 +1,5 @@
|
||||
#---------------------------------------------
|
||||
# Counterbox specific DB definitions
|
||||
#---------------------------------------------
|
||||
|
||||
device(stringin,INST_IO,devCounterBoxStringError,"devCounterBoxStringError")
|
Reference in New Issue
Block a user