KM3NeT CLB  2.0
KM3NeT CLB v2 Embedded Software
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
errtrack.c
1 /*
2  * KM3NeT CLB v2 Firmware
3  * ----------------------
4  *
5  * Copyright 2012-2017 KM3NeT Collaboration
6  *
7  * All Rights Reserved.
8  *
9  *
10  * File : errtrack.c
11  * Created : 23 jan. 2017
12  * Author : Vincent van Beveren
13  */
14 
15 #include "errtrack.h"
16 #include "util/log.h"
17 
18 LOG_DEF(ErrTrack)
19 
20 
21 uint8_t etCount[ERR_TRACK_BITS];
22 
23 static int bitmaskToPos(int mask) {
24 
25  int pos = 0;
26  while (mask != 0) {
27  switch (mask & 0xF)
28  {
29  case 0x1 : return pos + 0;
30  case 0x2 : return pos + 1;
31  case 0x3 : return pos + 2;
32  case 0x4 : return pos + 3;
33  case 0x0 :
34  break;
35  default:
36  return -1;
37  }
38  pos += 4;
39  mask >>= 4;
40  }
41  return -1;
42 }
43 
44 void etCheckFailure(int sysmask)
45 {
46  int system = bitmaskToPos(sysmask);
47  assert(system >= 0 && system < (1 << ERR_TRACK_BITS));
48  if (errHas())
49  {
50 
51  etCount[system] ++;
52 
53  if (etCount[system] >= ERR_THRESHOLD)
54  {
55  logError("Applying disable mask %02x, too many errors for device", sysmask);
56  etCount[system] = 0;
57  sys.sys_fail |= sysmask;
58  sys.sys_disable |= sysmask;
59  } else {
60  errClear();
61  }
62 
63  } else
64  {
65  etCount[system] = 0;
66  }
67 }
bool errHas()
Returns whether there is an error pending.
Definition: err.c:52
uint8_t sys_fail
Failure bitmask, same bits as SYS_DISABLE.
Definition: vars.h:155
sys_t sys
Provides access to all process variables of subsystem System.
Definition: vars.c:8
uint8_t sys_disable
Disable parts of the system.
Definition: vars.h:146
void errClear()
Clears the current error.
Definition: err.c:46
#define logError(MSG,...)
Format a log message with fatal level.
Definition: log.h:232
#define LOG_DEF(NAME,...)
Define a logger for a module.
Definition: log.h:129
Implements a generic logger facility.