KM3NeT CLB  2.0
KM3NeT CLB v2 Embedded Software
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
sub_bse.c
1 /*
2  * KM3NeT CLB v2 Firmware
3  * ----------------------
4  *
5  * Copyright 2013 KM3NeT Collaboration
6  *
7  * All Rights Reserved.
8  *
9  *
10  * File : sub_net.c
11  * Created : 6 jan. 2014
12  * Author : Vincent van Beveren
13  */
14 
15 #include "util/log.h"
16 #include "clbstate.h"
17 #include "pv/vars.h"
18 #include <string.h>
19 
20 #include "drv/uart/edfa-eau.h"
21 #include "drv/uart/bps.h"
22 #include "drv/uart/acdc.h"
23 
24 LOG_DEF(SysBase);
25 
26 void _subsBseExecEvent (ClbEvent event)
27 {
28  switch (event)
29  {
30  case clbEventReset:
31  case clbEventBoot:
32  edfaInit();
33  bpsInit();
34  acdcInit(true);
35  break;
36  default:
37  break;
38  }
39  _clbStateUpdate(clbSys2Idx[CLB_SUB_BSE], event, 0);
40 }
41 
42 
43 
44 
45 
46 static void configureEdfa() {
47  char *returnedString;
48 
49  if(bse.edfa_emi)edfaEmOn();
50  else edfaEmOff();
51 
52  edfaWriteSetpoint(bse.edfa_setp_wr, &returnedString);
53 
54 }
55 
57 {
58  configureEdfa();
59  return true;
60 }
61 
62 bool bseReset()
63 {
64  acdcClearBuffer();
65  // TODO set defaults
66  configureEdfa();
67  return true;
68 }
69 
70 
71 
72 static bool _monitorBps()
73 {
74  BpsRdSensAnsw sens;
75 
76  if (!bpsReadSensor(&sens)) {
77  bse.bps_iback = 0;
78  bse.bps_i12 = 0;
79  bse.bps_v375 = 0;
80  bse.bps_i375 = 0;
81  bse.bps_v5 = 0;
82  bse.bps_alarm = 0;
83  bse.bps_breaker = 0;
84 
85  return false;
86  }
87 
88  bse.bps_iback = sens.mon_i;
89  bse.bps_i12 = sens.mon1_i12;
90  bse.bps_v375 = sens.mon2_v375;
91  bse.bps_i375 = sens.mon3_i375;
92  bse.bps_v5 = sens.mon4_v375;
93  bse.bps_alarm = sens.alarm;
94  bse.bps_breaker = sens.breaker;
95 
96  return true;
97 
98 }
99 
100 static bool _monitorEdfa()
101 {
102 
103  bool emi,start;
104  char *returnedString;
105 
106  if (!edfaReadSerial(&returnedString)) goto failed;
107  memcpy(bse.edfa_sn, returnedString, 32);
108 
109  bse.edfa_oop = edfaOutputPower();
110  bse.edfa_iop = edfaInputPower();
111  bse.edfa_pumpdc = edfaPumpCur();
112  bse.edfa_temp = edfaTemp();
113  bse.edfa_setp_rd = edfaReadSetpoint();
114 
115  if (!edfaReadStatus(&emi,&start)) goto failed;
116  bse.edfa_emi = emi;
117 
118  return true;
119 failed:
120  bse.edfa_oop = 0;
121  bse.edfa_iop = 0;
122  bse.edfa_pumpdc = 0;
123  bse.edfa_temp = 0;
124  bse.edfa_setp_rd = 0;
125  bse.edfa_emi = 0;
126  return false;
127 }
128 
129 static bool _monitorAcdc()
130 {
131  AcdcFrame frame;
132 
133  // get the latest read-out
134  if (!acdcGetNFrames(&frame, 1)) {
135  bse.acdc_cur = 0;
136  bse.acdc_volt = 0;
137  bse.acdc_temp = 0;
138  return false;
139  }
140  // clear RX fifo so we know we have a fresh reading next time.
141  acdcClearBuffer();
142 
143  bse.acdc_cur = frame.current * ISCALE + IOFF;
144  bse.acdc_volt = frame.volt * VSCALE + VOFF;
145  bse.acdc_temp = frame.temp * TSCALE + TOFF;
146 
147  return true;
148 }
149 
150 
151 #define CAROUSEL_MAX 3
152 static int _carousel = 0;
153 static const uint8_t _DEVICES[] = { BSE_INST_FAIL_EDFA, BSE_INST_FAIL_BPS, BSE_INST_FAIL_ACDC};
154 
155 
156 bool _subsBseUpdate(ClbState state, uint32_t time)
157 {
158  bool s = true;
159 
160  // only execute read-out if the device did not fail
161  if ( ( bse.inst_fail & _DEVICES[_carousel] ) == 0) {
162  switch(_carousel) {
163  case 0: s = _monitorEdfa(); break;
164  case 1: s = _monitorBps(); break;
165  case 2: s = _monitorAcdc(); break;
166  default: break;
167  }
168 // logDebug("Device=%d, result=%d", _carousel, s);
169  // otherwise add it to the instrumentation fail register
170  // so it will not be queried again
171  if (!s)
172  {
173  errPrint(true);
174  bse.inst_fail |= _DEVICES[_carousel];
175  }
176  }
177 
178 
179  _carousel++;
180  if (_carousel == CAROUSEL_MAX) _carousel = 0;
181 
182  return true;
183 }
uint16_t bps_i12
Current of 12V line (0 to 1023 ADC raw)
Definition: vars.h:559
uint16_t acdc_cur
ACDC Current, between 0 and 2560A.
Definition: vars.h:580
BPS Uart driver (.
uint8_t inst_fail
Bitmask containing error devices.
Definition: vars.h:593
int8_t acdc_temp
ACDC Temperature in degrees Centigrade.
Definition: vars.h:589
ClbEvent
All state change events.
Definition: clbstate.h:88
bool bseConfigure()
Base Configure event.
Definition: sub_bse.c:56
Provides access to all variables of the various subsystems.
uint8_t edfa_sn[32]
Serial number (Ascii string)
Definition: vars.h:586
#define BSE_INST_FAIL_EDFA
EDFA.
Definition: vars.h:530
bool edfa_emi
Emission.
Definition: vars.h:583
static void edfaInit()
Initializes the EDFA.
Definition: edfa-eau.h:63
f32_t edfa_setp_wr
Settings for Power Setpoint (in dBm)
Definition: vars.h:553
#define BSE_INST_FAIL_BPS
BPS.
Definition: vars.h:531
bool bseReset()
Base Reset event.
Definition: sub_bse.c:62
uint8_t clbSys2Idx[6]
Mapping from subsystem ID to index.
Definition: clbstate.c:59
int32_t edfa_iop
Input Optical Power (in milli dBm)
Definition: vars.h:541
int32_t edfa_temp
Temperature (in milli degrees celsius)
Definition: vars.h:550
ClbState
Various states.
Definition: clbstate.h:59
#define BSE_INST_FAIL_ACDC
ACDC.
Definition: vars.h:532
uint16_t acdc_volt
ACDC Voltage, between 300 and 556.
Definition: vars.h:577
uint16_t bps_v375
Voltage of 375V line (0 to 1023 ADC raw)
Definition: vars.h:562
Undefined =&gt; Idle, for internal use only.
Definition: clbstate.h:91
void errPrint(bool clear)
Prints the last error.
Definition: err.c:79
uint16_t bps_iback
Backbone current (0 to 1023 ADC raw)
Definition: vars.h:556
StandBy =&gt; Idle.
Definition: clbstate.h:99
bool bpsReadSensor(BpsRdSensAnsw *stat)
return sensor values
Definition: bps.c:577
void acdcInit(bool active)
Initializes the ACDC.
Definition: acdc.c:35
ACDC Uart driver (.
#define LOG_DEF(NAME,...)
Define a logger for a module.
Definition: log.h:129
The CLB stare module tracks is responsible for state management of the various sub-systems on the CLB...
int32_t edfa_oop
Output Optical Power (in milli dBm)
Definition: vars.h:544
static void bpsInit()
Initializes the BPS.
Definition: bps.h:87
int32_t edfa_pumpdc
Diode Pump Current (in micro A)
Definition: vars.h:547
uint16_t bps_v5
Voltage of 5V line (0 to 1023 ADC raw)
Definition: vars.h:568
EDFA-EAU (30-C3-20-C) Uart driver.
Implements a generic logger facility.
Definition: acdc.h:37
bse_t bse
Provides access to all process variables of subsystem Base.
Definition: vars.c:294
uint16_t bps_i375
Current of 375V line (0 to 1023 ADC raw)
Definition: vars.h:565
int32_t edfa_setp_rd
Monitored Power Setpoint for APC mode (in milli dBm)
Definition: vars.h:538
void _clbStateUpdate(int idx, ClbEvent event, uint8_t status)
Invoked by the subsystem to indicate a state change has happened.
Definition: clbstate.c:204
uint16_t bps_alarm
Alarm Status.
Definition: vars.h:574
uint16_t bps_breaker
Breaker status.
Definition: vars.h:571