]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Added logging for error bits. Sergey.
authorhadaq <hadaq>
Fri, 25 Mar 2011 17:24:11 +0000 (17:24 +0000)
committerhadaq <hadaq>
Fri, 25 Mar 2011 17:24:11 +0000 (17:24 +0000)
ebctrl/ioc/ebctrlApp/src/errbitstat.c

index 004857e43aaf76f69cd0dc6f554617659683f0fb..0992af94b218b3b246bce8a0fb9d92eae3059e7a 100644 (file)
 #include <epicsExport.h>
 #include <genSubRecord.h>
 #include <stringinRecord.h>
+#include <syslog.h>
 
 #include "worker.h"
 
 int errbitstatDebug;
 
+#define MAXERRS 11
+
+typedef struct TheErrMsgS {
+  int bit;
+  char msg[200];
+} TheErrMsg;
+
+TheErrMsg errMsgs[] = { 
+  {16, "Event number mismatch"},
+  {17, "Trigger code mismatch"},
+  {18, "Wrong length"},
+  {19, "Answer missing"},
+  {20, "Requested event number does not match stored event number"},
+  {21, "Parts of data are missing"},
+  {22, "Severe problem"},
+  {23, "Single broken event"},
+  {24, "Ethernet link broken"},
+  {26, "Ethernet error"},
+  {27, "Timing trigger error"} };
+
+static void errbit2logger( const uint32_t *errbit )
+{
+  int i;
+  char msg[250];
+  static time_t t0 = 0;
+  time_t t, dT;
+
+  t = time(NULL);
+  dT = t - t0;
+
+  /* ERRBITWAIT = wait time in seconds */
+  if(dT > getenv("ERRBITWAIT")){
+
+    for( i=0; i<MAXERRS; i++ ){
+      
+      if( (*errbit) & (0x00000001 << errMsgs[i].bit) ){
+       sprintf(msg, "<I> errbit: %d msg: %s", errMsgs[i].bit, errMsgs[i].msg);
+       
+       openlog("DAQ", LOG_ODELAY, LOG_LOCAL1);
+       syslog(LOG_INFO, msg);
+       closelog();
+      }   
+    }
+
+    t0 = t;
+  }
+}
+
 long errbitstat_init( struct genSubRecord *pgsub )
 {
   return(0);
@@ -61,6 +110,11 @@ long errbitstat_proc( struct genSubRecord *pgsub )
     else{
       *out[i] = (uint32_t)tmp;
 
+      /* ERRBITLOG = 0/1 (log via syslog (off/on))*/
+      if(getenv("ERRBITLOG")){
+       errbit2logger((uint32_t)tmp);
+      }
+
       if(errbitstatDebug)
        printf("<E> errbitstat.c: %s = %lu\n", name, tmp);
     }