KM3NeT CLB  2.0
KM3NeT CLB v2 Embedded Software
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
shell_bps_v3.c
1 /*
2  * KM3NeT CLB v2 Firmware
3  * ----------------------
4  *
5  * Copyright 2015 KM3NeT Collaboration
6  *
7  * All Rights Reserved.
8  *
9  *
10  * File : shell_bps_v3.c
11  * Created : 27 feb. 2015
12  * Author : Riccardo Travaglini
13  * Modified: Jan 2020 by Stefano Mastroianni for BPS_V3
14  */
15 
16 #include <stdbool.h>
17 #include <stdio.h>
18 #include <stdlib.h>
19 
20 #include <util/convert.h>
21 
22 #include <drv/uart/bps_v3.h>
23 
24 #include "kernel/scheduler.h"
25 #include <errorcode.h>
26 #include <kernel/err.h>
27 
28 
29 
30 
31 static const CnvParams _hex = CNV_DEFAULT_HEX;
32 static const CnvParams _int = CNV_DEFAULT;
33 
34 const char cmd_bps_help[] = "BPS - Configure and Read";
35 
36 
37 /*static uint8_t bpshexByte(const char * input)
38 {
39  uint32_t out;
40  CnvParams params = {
41  .base = CNV_BASE_HEX,
42  .len = 2
43  };
44 
45  if (cnvParseU(input, &out, params) != 2) {
46  return 0xff;
47  }
48  return (uint8_t)out;
49 }*/
50 
51 static uint16_t bpshexShort(const char * input)
52 {
53  uint32_t out;
54  CnvParams params = {
55  .base = CNV_BASE_HEX,
56  .len = 4
57  };
58 
59  if (cnvParseU(input, &out, params) != 4) {
60  return 0xff;
61  }
62  return (uint16_t)out;
63 }
64 
65 static uint16_t bpsdecShort(const char * input)
66 {
67  uint32_t out;
68  CnvParams params = CNV_DEFAULT;
69 
70  if (cnvParseU(input, &out, params) <= 0) {
71  return -1;
72  }
73  return (uint16_t)out;
74 }
75 
76 static uint8_t bpsdecByte(const char * input)
77 {
78  uint32_t out;
79  CnvParams params = CNV_DEFAULT;
80 
81  if (cnvParseU(input, &out, params) <= 0) {
82  return -1;
83  }
84  return (uint8_t)out;
85 }
86 
87 
88 bool cmd_bps_exec(int argc, const char *args[])
89 {
90 
91 
92  uint16_t rdata;
93  BspTh wth,rth;
94  BspThV3 rthV3;
95  uint8_t channel;
96  uint8_t val8, rd_val8;
97  uint8_t val16;
98  //uint16_t alarm_val;
99  //uint16_t wsal,rsal;
100  //uint16_t fw;
101  SwCtrlV3 rd_sw_ctrl;
102  BpsAlarmV3 rd_alarm_en, rd_alarm_fired_get;
103  BpsAlarmTimeOutV3 rdTimeOutV3;
104 
105 
106  if (argc < 1 || ((argc == 1) && (strcmp(args[0],"help") == 0))) {
107  puts(" bps sw_control ch val -- switch control channel value");
108  puts(" bps alarm en ch val -- alarm enable channel value");
109  puts(" bps alarm fired_get ch -- alarm fired_get channel");
110  //puts(" bps alarm timeout load|save ch Val -- alarm timeout (load or save) ch value");
111  puts(" bps alarm th load|save ch Val-- Threshold alarm (load or save) analog_ch value");
112  puts(" bps sens_single var -- read sensors single variable");
113  puts(" bps sens_average -- read all sensor average");
114  puts(" bps sens_max -- read all sensor MAX");
115  //puts(" bps sensors -- read sensor values getall");
116  //puts(" bps version -- read bps version");
117  puts(" bps rescue_enable val -- Enable or disable auto-rescue");
118  puts(" bps sensor_maxvalue_reset val -- Reset the max value of one sensor");
119  }
120  //****** rescue_enable **********
121  else if(argc == 2 && strcmp(args[0],"rescue_enable")== 0){
122  val8=bpsdecByte(args[1]);
123  bpsRescueEnable(val8,&rd_val8);
124  printf("RescueEnable RD_Val = %x - %d (dec)\n", rd_val8, rd_val8);
125  }
126  //****** SensorMaxvalueReset **********
127  else if(argc == 2 && strcmp(args[0],"sensor_maxvalue_reset")== 0){
128  val8=bpsdecByte(args[1]);
129  bpsSensorMaxvalueReset(val8);
130  printf("bpsSensorMaxvalueReset ch %d\n",val8);
131  }
132  //****** SINGLE_SENSOR **********
133  else if(argc == 2 && strcmp(args[0],"sens_single") == 0){
134  BpsRdSingleAnswV3 singleV3;
135  val8=bpsdecByte(args[1]);
136  bpsReadSensorSingleV3(val8,&singleV3);
137  printf("single sensors :\n");
138  printf("single_var_num = %d\n", singleV3.single_var_num);
139  printf("single_value = %d\n", singleV3.single_value);
140  printf("single_offset = %d\n", singleV3.single_offset);
141  printf("single_maxval = %d\n", singleV3.single_maxval);
142  printf("single_meanval = %d\n", singleV3.single_meanval);
143  }
144  //****** SENSOR_MAX **********
145  // ==> Required Command
146  else if(argc == 1 && strcmp(args[0],"sens_max") == 0){
147  BpsRdSensAnswV3 sensV3;
148  bpsReadSensorMaxV3(&sensV3);
149  printf("SENSOR_MAX:\n");
150  printf("mon_5V_i = %d\n", sensV3.mon_5V_i);
151  printf("mon_LBL_i = %d\n", sensV3.mon_LBL_i);
152  printf("mon_DU_i = %d\n", sensV3.mon_DU_i);
153  printf("mon_DU_irtn = %d\n", sensV3.mon_DU_irtn);
154  printf("mon_BPS_v = %d\n", sensV3.mon_BPS_v);
155  printf("mon_HYDRO_i = %d\n", sensV3.mon_HYDRO_i);
156  printf("mon_MON_THEATSINK = %d\n", sensV3.mon_MON_THEATSINK);
157  printf("mon_TBOARD = %d\n", sensV3.mon_TBOARD);
158  printf("mon_ALRMPOS1 = %d\n", sensV3.mon_ALRMPOS1);
159  printf("mon_ALRMPOS2 = %d\n", sensV3.mon_ALRMPOS2);
160  printf("mon_ALRMNEG1 = %d\n", sensV3.mon_ALRMNEG1);
161  printf("mon_ALRMNEG2 = %d\n", sensV3.mon_ALRMNEG2);
162 
163  }
164  //****** SENSORS: SENSOR_VALUES_GETALL **********
165  /*
166  else if(argc == 1 && strcmp(args[0],"sensors") == 0){
167  BpsRdSensAnswV3 sensV3;
168  bpsReadSensorV3(&sensV3);
169  printf("mon_5V_i = %d\n", sensV3.mon_5V_i);
170  printf("mon_LBL_i = %d\n", sensV3.mon_LBL_i);
171  printf("mon_DU_i = %d\n", sensV3.mon_DU_i);
172  printf("mon_DU_irtn = %d\n", sensV3.mon_DU_irtn);
173  printf("mon_BPS_v = %d\n", sensV3.mon_BPS_v);
174  printf("mon_HYDRO_i = %d\n", sensV3.mon_HYDRO_i);
175  printf("mon_MON_THEATSINK = %d\n", sensV3.mon_MON_THEATSINK);
176  printf("mon_TBOARD = %d\n", sensV3.mon_TBOARD);
177  printf("mon_ALRMPOS1 = %d\n", sensV3.mon_ALRMPOS1);
178  printf("mon_ALRMPOS2 = %d\n", sensV3.mon_ALRMPOS2);
179  printf("mon_ALRMNEG1 = %d\n", sensV3.mon_ALRMNEG1);
180  printf("mon_ALRMNEG2 = %d\n", sensV3.mon_ALRMNEG2);
181  }
182  */
183  //****** AVERAGE_SENSOR : SENSOR_AVERAGE_GETALL**********
184  // ==> Required Command
185  else if(argc == 1 && strcmp(args[0],"sens_average") == 0){
186  BpsRdSensAverageAnswV3 saverageV3;
187  bpsReadSensorAverageV3(&saverageV3);
188  printf("AVERAGE sensors :\n");//
189  printf("mon_5V_i_M = %d\n", saverageV3.mon_5V_i_M);
190  printf("mon_LBL_i_M = %d\n", saverageV3.mon_LBL_i_M);
191  printf("mon_DU_i_M = %d\n", saverageV3.mon_DU_i_M);
192  printf("mon_DU_irtn_M = %d\n", saverageV3.mon_DU_irtn_M);
193  printf("mon_BPS_v_M = %d\n", saverageV3.mon_BPS_v_M);
194  printf("mon_HYDRO_i_M = %d\n", saverageV3.mon_HYDRO_i_M);
195  printf("mon_MON_THEATSINK_M = %d\n", saverageV3.mon_MON_THEATSINK_M);
196  printf("mon_TBOARD_M = %d\n", saverageV3.mon_TBOARD_M);
197  }
198  //****** VERSION **********
199  /*
200  else if(argc == 1 && strcmp(args[0],"version") == 0){
201  BpsRdVersionV3 verV3;
202  bpsReadVersion(&verV3);
203 
204  printf("version_debug:\n");//--Stefano
205  printf("ver = %d\n", verV3.ver);
206  printf("year = %d\n", verV3.year);
207  printf("month = %d\n", verV3.month);
208  printf("day = %d\n", verV3.day);
209  printf("hour = %d\n", verV3.hour);
210  printf("minute = %d\n", verV3.minute);
211  printf("second = %d\n", verV3.second);
212  }
213  */
214  //****** SWITCH_CONTROL **********
215  // ==> Required Command
216  else if(argc == 3 && strcmp(args[0],"sw_control") == 0){
217  channel=bpsdecByte(args[1]);
218  val8=bpsdecByte(args[2]);
219  bpsSwitchControlV3(channel,val8,&rd_sw_ctrl);
220  printf("sw_ctrl_channel = %x - %d (dec)\n",rd_sw_ctrl.sw_control_ch, rd_sw_ctrl.sw_control_ch );
221  printf("sw_ctrl_value = %x - %d (dec)\n",rd_sw_ctrl.sw_control_val, rd_sw_ctrl.sw_control_val);
222  }
223  /*
224  ******* ALARM *******
225  */
226  else if(argc >= 2 && strcmp(args[0],"alarm") == 0){
227  //****** ENABLE **********
228  if(argc >= 3 && strcmp(args[1],"en")== 0){
229  channel=bpsdecByte(args[2]);
230  val8=bpsdecByte(args[3]);
231  bpsAlarmEnV3(channel,val8,&rd_alarm_en);
232  printf("alarm_en_ch = %x - %d (dec)\n",rd_alarm_en.alarm_ch, rd_alarm_en.alarm_ch );
233  printf("alarm_en_val = %x - %d (dec)\n",rd_alarm_en.alarm_val, rd_alarm_en.alarm_val);
234  }
235  //****** AlarmFiredGet **********
236  else if(argc >= 3 && strcmp(args[1],"fired_get")== 0){
237  channel=bpsdecByte(args[2]);
238  bpsAlarmFiredGetV3(channel,&rd_alarm_fired_get);
239  printf("alarm_fired_get_ch = %x - %d (dec)\n",rd_alarm_fired_get.alarm_ch, rd_alarm_fired_get.alarm_ch );
240  printf("alarm_fired_get_val = %x - %d (dec)\n",rd_alarm_fired_get.alarm_val, rd_alarm_fired_get.alarm_val);
241  }
242  /*
243  // OK BUT DOESN'T FIT THE ROM
244  // ****** TIMEOUT **********
245  else if(argc >= 3 && strcmp(args[1],"timeout")== 0){
246  if(argc == 5 && strcmp(args[2],"save")== 0){
247  channel = bpsdecByte(args[3]);
248  val16 = bpsdecShort(args[4]);
249  bpsAlarmTimeOutSaveV3(channel,val16);
250  }
251  else if(argc == 4 && strcmp(args[2],"load")== 0){
252  channel = bpsdecByte(args[3]);
253  printf(" read channel: %d \n",channel);
254  bpsAlarmTimeOutLoadV3(channel, &rdTimeOutV3);
255  printf("alarm_timeout_ch = %x - %d (dec)\n",rdTimeOutV3.timeout_ch, rdTimeOutV3.timeout_ch );
256  printf("alarm_timeout_val = %x - %d (dec)\n",rdTimeOutV3.timeout_val, rdTimeOutV3.timeout_val );
257  }
258  else return false;
259  }
260  */
261 
262  //****** THRESHOLD **********
263  else if(argc >= 3 && strcmp(args[1],"th")== 0){
264  if(argc == 5 && strcmp(args[2],"save")== 0){
265  channel = bpsdecByte(args[3]);
266  val16 = bpsdecShort(args[4]);
267  bpsAlarmThSaveV3(channel,val16);
268  }
269  else if(argc == 4 && strcmp(args[2],"load")== 0){
270  channel = bpsdecByte(args[3]);
271  printf(" read channel: %d \n",channel);
272  bpsAlarmThLoadV3(channel, &rthV3);
273  }
274  else return false;
275  }
276 
277  /*
278  else if(argc == 2 && strcmp(args[1],"clear")== 0){
279  //printf("%s - ret 0x%x\n",bpsAlarmClearStat(&rdata)?"Done":"Error",rdata);
280  }
281  */
282 
283  else return false;
284  }
285 
286  /*
287  else if(argc == 2 && strcmp(args[0],"toggle") == 0){
288  if(strcmp(args[1],"back") == 0){
289  //printf("%s - ret 0x%x\n",bpsRelayToggleBackBone(&rsal)?"Done":"Error",rsal);
290  }
291  else if(strcmp(args[1],"12v") == 0) {
292  //printf("%s - re 0x%x\n",bpsRelayToggle12V(&rsal)?"Done":"Error",rsal);
293  }
294  else return false;
295  }
296  else if(argc == 1 && strcmp(args[0],"ping") == 0){
297  //printf("%s - ret 0x%x\n",bpsPingDevice(&fw)?"Done":"Error",fw); // Stefano
298  }
299  */
300 
301  else return false;
302 
303 
304  return true;
305 
306 }
307 
308 
bool bpsSwitchControlV3(uint8_t ch, uint8_t val, SwCtrlV3 *sw_rd)
switch control
Definition: bps_v3.c:1014
Definition: bps.h:75
bool bpsReadSensorMaxV3(BpsRdSensAnswV3 *stat)
return all sensors&#39; max values
Definition: bps_v3.c:857
bool bpsRescueEnable(uint8_t set_val, uint8_t *rd_val)
Version.
Definition: bps_v3.c:1106
bool bpsAlarmFiredGetV3(uint8_t ch, BpsAlarmV3 *AlarmFiredGet)
Return flag of one alarm.
Definition: bps_v3.c:1047
int cnvParseU(const char *input, uint32_t *output, CnvParams params)
Parse an unsigned integer.
Definition: convert.c:61
Simple task scheduler for tasks.
bool bpsSensorMaxvalueReset(uint8_t set_val)
SENSOR_MAXVALUE_RESET set_val : Variable number.
Definition: bps_v3.c:1130
#define CNV_BASE_HEX
Base of hex numbers.
Definition: convert.h:32
#define CNV_DEFAULT
Default conversion/formatting parameters (base 10).
Definition: convert.h:47
Manages the global system error.
This structure provides information about formatting and parsing.
Definition: convert.h:37
bool bpsReadSensorAverageV3(BpsRdSensAverageAnswV3 *stat)
return all sensors&#39; mean values
Definition: bps_v3.c:773
This module is responsible for distributing error codes.
uint8_t base
Base of the number to format or parse.
Definition: convert.h:39
BPS Uart driver (.
bool bpsAlarmEnV3(uint8_t ch, uint8_t val, BpsAlarmV3 *AlarmEn_rd)
Return current enable status.
Definition: bps_v3.c:1074
This module implements parsing and formating of strings and integers.
bool bpsReadSensorSingleV3(uint8_t single_var, BpsRdSingleAnswV3 *stat)
return one sensor&#39;s current value, offset, max, mean value
Definition: bps_v3.c:733