diff --git a/epicsadapter.c b/epicsadapter.c index 204c21a..990bd9a 100644 --- a/epicsadapter.c +++ b/epicsadapter.c @@ -15,6 +15,13 @@ #include #include +/* +One of those: alarmString.h cannot be doubly included into the +same application +*/ +/*#include */ +extern char *epicsAlarmConditionStrings[]; + /* * we have a SICS tasks which polls EPICS regularly. */ @@ -428,7 +435,24 @@ static hdbCallbackReturn EPICSWriteCallback(pHdb currentNode, /*============================================================================================== SICS Hydraulics ================================================================================================*/ + static int EpicsConvertAlarm(pSICSOBJ ccmd, SConnection * con, + Hdb * cmdNode, Hdb * par[], int nPar) + { + pHdb node = NULL; + char value[256]; + if(nPar < 1){ + SCWrite(con,"ERROR: need alarm code to convert", eError); + return 0; + } + + snprintf(value,sizeof(value),"%s", epicsAlarmConditionStrings[par[0]->value.v.intValue]); + SCWrite(con,value,eValue); + return 1; + } + + +/*----------------------------------------------------------------------------------------------*/ int MakeEpicsAdapter(SConnection * con, SicsInterp * sics, void *object, int argc, char *argv[]) { @@ -449,6 +473,10 @@ int MakeEpicsAdapter(SConnection * con, SicsInterp * sics, AddSICSHdbPar(child, "node", usMugger, MakeHdbText("")); AddSICSHdbPar(child, "pvname", usMugger, MakeHdbText("")); + child = AddSICSHdbPar(self->objectNode, + "convertalarm", usSpy, MakeSICSFunc(EpicsConvertAlarm)); + AddSICSHdbPar(child, "stat", usSpy, MakeHdbInt(1.)); + AddCommand(pServ->pSics, "epicsadapter", InterInvokeSICSOBJ, KillSICSOBJ, self); return 1; }