ITS
ParameterCAN.cpp
Go to the documentation of this file.
1 #include "ParameterCAN.h"
2 
4 {
5  read();
6  readDebug();
7 }
8 
10 {
11  mutex->lock();
12  read();
13  readDebug();
14  mutex->unlock();
15 }
16 
18 {
19 }
20 
21 void ParameterCAN::read()
22 {
23  cfg_opt_t curvature_opts[] =
24  {
25  CFG_INT("curvatureConfidence", CurvatureConfidence_unavailable, CFGF_NONE),
26  CFG_INT("curvatureValue", CurvatureValue_unavailable, CFGF_NONE),
27  CFG_END()
28  };
29 
30  cfg_opt_t lateralAcceleration_opts[] =
31  {
32  CFG_INT("lateralAccelerationConfidence", NULL, CFGF_IGNORE_UNKNOWN),
33  CFG_INT("lateralAccelerationValue", NULL, CFGF_IGNORE_UNKNOWN),
34  CFG_END()
35  };
36 
37  cfg_opt_t longitudinalAcceleration_opts[] =
38  {
39  CFG_INT("longitudinalAccelerationConfidence", AccelerationConfidence_unavailable, CFGF_NONE),
40  CFG_INT("longitudinalAccelerationValue", LongitudinalAccelerationValue_unavailable, CFGF_NONE),
41  CFG_END()
42  };
43 
44  cfg_opt_t steeringWheelAngle_opts[] =
45  {
46  CFG_INT("steeringWheelAngleConfidence", NULL, CFGF_IGNORE_UNKNOWN),
47  CFG_INT("steeringWheelAngleValue", NULL, CFGF_IGNORE_UNKNOWN),
48  CFG_END()
49  };
50 
51  cfg_opt_t verticalAcceleration_opts[] =
52  {
53  CFG_INT("verticalAccelerationConfidence", NULL, CFGF_IGNORE_UNKNOWN),
54  CFG_INT("verticalAccelerationValue", NULL, CFGF_IGNORE_UNKNOWN),
55  CFG_END()
56  };
57 
58  cfg_opt_t yawRate_opts[] =
59  {
60  CFG_INT("yawRateConfidence", YawRateConfidence_unavailable, CFGF_NONE),
61  CFG_INT("yawRateValue", YawRateValue_unavailable, CFGF_NONE),
62  CFG_END()
63  };
64 
65  struct cfg_opt_t opts[] =
66  {
67  CFG_BOOL_LIST("accelerationControl", "", CFGF_NODEFAULT | CFGF_IGNORE_UNKNOWN),
68 
69  CFG_SEC("curvature", curvature_opts, CFGF_NO_TITLE_DUPES),
70 
71  CFG_INT("driveDirection", DriveDirection_unavailable, CFGF_NONE),
72 
73  CFG_BOOL_LIST("exteriorLights", "{false, false, false, false, false, false, false, false}", CFGF_NONE),
74 
75  CFG_INT("externalTemperature", -10000, CFGF_IGNORE_UNKNOWN),
76 
77  CFG_SEC("lateralAcceleration", lateralAcceleration_opts, CFGF_NO_TITLE_DUPES),
78 
79  CFG_BOOL_LIST("lightBarSirenInUse", "{false, false}", CFGF_NONE),
80 
81  CFG_SEC("longitudinalAcceleration", longitudinalAcceleration_opts, CFGF_NO_TITLE_DUPES),
82 
83  CFG_INT("numberOfOccupants", -1, CFGF_IGNORE_UNKNOWN),
84 
85  CFG_INT("positioningSolutionType", -1, CFGF_IGNORE_UNKNOWN),
86 
87  CFG_BOOL_LIST("positionOfOccupants", "{false, false, false, true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true, false}", CFGF_NONE),
88 
89  CFG_SEC("steeringWheelAngle", steeringWheelAngle_opts, CFGF_MULTI),
90 
91  CFG_SEC("verticalAcceleration", verticalAcceleration_opts, CFGF_MULTI),
92 
93  CFG_SEC("yawRate", yawRate_opts, CFGF_NO_TITLE_DUPES),
94 
95  CFG_INT("speed", SpeedValue_unavailable, CFGF_NONE),
96 
97  CFG_END()
98  };
99  cfg_t *cfg;
100  cfg_t *cfg_lateralAcceleration;
101  cfg_t *cfg_longitudinalAcceleration;
102  cfg_t *cfg_steeringWheelAngle;
103  cfg_t *cfg_verticalAcceleration;
104  cfg_t *cfg_yawRate;
105 
106  cfg = cfg_init(opts, CFGF_NONE);
107 
108  cfg_lateralAcceleration = cfg_getsec(cfg, "lateralAcceleration");
109 
110  cfg_longitudinalAcceleration = cfg_getsec(cfg, "longitudinalAcceleration");
111 
112  cfg_steeringWheelAngle = cfg_getsec(cfg, "steeringWheelAngle");
113 
114  cfg_verticalAcceleration = cfg_getsec(cfg, "verticalAcceleration");
115 
116  cfg_yawRate = cfg_getsec(cfg, "yawRate");
117 
118  if(cfg_lateralAcceleration)
119  cfg_set_validate_func(cfg_lateralAcceleration, "lateralAccelerationConfidence", validate_unsigned_int);
120 
121  cfg_set_validate_func(cfg_longitudinalAcceleration, "longitudinalAccelerationConfidence", validate_unsigned_int);
122 
123  cfg_set_validate_func(cfg, "numberOfOccupants", validate_unsigned_int);
124 
125  cfg_set_validate_func(cfg, "positioningSolutionType", validate_unsigned_int);
126 
127  if(cfg_steeringWheelAngle)
128  cfg_set_validate_func(cfg_steeringWheelAngle, "steeringWheelAngleConfidence", validate_unsigned_int);
129 
130  if(cfg_verticalAcceleration)
131  cfg_set_validate_func(cfg_verticalAcceleration, "verticalAccelerationConfidence", validate_unsigned_int);
132 
133  cfg_set_validate_func(cfg_yawRate, "yawRateConfidence", validate_unsigned_int);
134 
135  cfg_add_searchpath(cfg, "/etc/its/config");
136  if(cfg_parse(cfg, "can.conf") == CFG_PARSE_ERROR)
137  printf("PARSE_ERROR\n");
138 
139  if(cfg_size(cfg, "accelerationControl"))
140  {
141  *m_accelerationControl = makeBitString(cfg_size(cfg,"accelerationControl"), cfg, "accelerationControl");
142  //constr_AccelerationControl(m_accelerationControl);
143  }
144  else
146 
147  m_driveDirection = cfg_getint(cfg, "driveDirection");
148 
149  m_exteriorLights = makeBitString(cfg_size(cfg,"exteriorLights"), cfg, "exteriorLights");
150  //constr_ExteriorLights(m_exteriorLights);
151 
152  if(cfg_getint(cfg, "externalTemperature") == -10000)
154  else
155  {
156  m_externalTemperature = (Temperature_t*) calloc(1, sizeof(Temperature_t));
157  *m_externalTemperature = cfg_getint(cfg, "externalTemperature");
158  //constr_ExternalTemperature(m_externalTemperature);
159  }
160 
161  if(cfg_size(cfg, "lateralAcceleration"))
162  {
164  m_lateralAcceleration->lateralAccelerationValue = cfg_getint(cfg_lateralAcceleration, "lateralAccelerationValue");
165  m_lateralAcceleration->lateralAccelerationConfidence = cfg_getint(cfg_lateralAcceleration, "lateralAccelerationConfidence");
166  //constr_LateralAcceleration(m_lateralAcceleration);
167  }
168  else
170 
171  m_lightBarSirenInUse = makeBitString(cfg_size(cfg,"lightBarSirenInUse"), cfg, "lightBarSirenInUse");
172  //constr_LightBarSirenInUse(m_lightBarSirenInUse);
173 
174  m_longitudinalAcceleration.longitudinalAccelerationValue = cfg_getint(cfg_longitudinalAcceleration, "longitudinalAccelerationValue");
175  m_longitudinalAcceleration.longitudinalAccelerationConfidence = cfg_getint(cfg_longitudinalAcceleration, "longitudinalAccelerationConfidence");
176  //constr_LongitudinalAcceleration(m_longitudinalAcceleration);
177 
178  if(cfg_getint(cfg, "numberOfOccupants") == -1)
180  else
181  {
183  *m_numberOfOccupants = cfg_getint(cfg, "numberOfOccupants");
184  //constr_NumberOfOccupants(m_numberOfOccupants);
185  }
186 
187  if(cfg_getint(cfg, "positioningSolutionType") == -1)
189  else
190  {
192  *m_positioningSolution = cfg_getint(cfg, "positioningSolutionType");
193  //constr_PositioningSolution(m_positioningSolution);
194  }
195 
196  m_positionOfOccupants = makeBitString(cfg_size(cfg,"positionOfOccupants"), cfg, "positionOfOccupants");
197  //constr_PositionOfOccupants(&m_positionOfOccupants);
198 
199  if(cfg_size(cfg, "steeringWheelAngle"))
200  {
202  m_steeringWheelAngle->steeringWheelAngleValue = cfg_getint(cfg_steeringWheelAngle, "steeringWheelAngleValue");
203  m_steeringWheelAngle->steeringWheelAngleConfidence = cfg_getint(cfg_steeringWheelAngle, "steeringWheelAngleConfidence");
204  //constr_SteeringWheelAngle(m_steeringWheelAngle);
205  }
206  else
208 
209  if(cfg_size(cfg, "verticalAcceleration"))
210  {
212  m_verticalAcceleration->verticalAccelerationValue = cfg_getint(cfg_verticalAcceleration, "verticalAccelerationValue");
213  m_verticalAcceleration->verticalAccelerationConfidence = cfg_getint(cfg_verticalAcceleration, "verticalAccelerationConfidence");
214  //constr_VerticalAcceleration(m_verticalAcceleration);
215  }
216  else
218 
219  m_yawRate.yawRateConfidence = cfg_getint(cfg_yawRate, "yawRateConfidence");
220  m_yawRate.yawRateValue = cfg_getint(cfg_yawRate, "yawRateValue");
221  //constr_yawRate(m_yawRate);
222 
223  m_speed = cfg_getint(cfg, "speed");
224 
228  {
231  }
232  else
233  {
236  }
237 
238  cfg_free(cfg);
239 }
240 
242 {
243  printf("-----------------------------------------------------------------\n\t\t\tReadCan\n\n");
244  if(m_accelerationControl != 0)
245  {
246  printf("accelerationControl = ");
247  printf("%s", printBitString(*m_accelerationControl).toStdString().c_str());
248  printf("\n\n");
249  }
250 
251  printf("curvature\n{\n\tcurvatureValue = %ld\n\n\tcurvatureConfidence = %ld\n}\n\n", m_curvature.curvatureValue, m_curvature.curvatureConfidence);
252 
253  printf("driveDirection = %ld\n\n", m_driveDirection);
254 
255  printf("exteriorLights = %s\n\n", printBitString(m_exteriorLights).toStdString().c_str());
256 
257  if(m_externalTemperature != 0)
258  {
259  printf("externalTemperature = %ld\n\n", *m_externalTemperature);
260  }
261 
262  if(m_lateralAcceleration != 0)
263  printf("lateralAcceleration\n{\n\tlateralAccelerationValue = %ld\n\n\tlateralAccelerationConfidence = %ld\n}\n\n",m_lateralAcceleration->lateralAccelerationValue, m_lateralAcceleration->lateralAccelerationConfidence);
264 
265  printf("lightBarSirenInUse = %s\n\n", printBitString(m_lightBarSirenInUse).toStdString().c_str());
266 
267  printf("longitudinalAcceleration\n{\n\tlongitudinalAccelerationValue = %ld\n\n\tlongitudinalAccelerationConfidence = %ld\n}\n\n",m_longitudinalAcceleration.longitudinalAccelerationValue, m_longitudinalAcceleration.longitudinalAccelerationConfidence);
268 
269  if(m_numberOfOccupants != 0)
270  {
271  printf("numberOfOccupants = %ld\n\n", *m_numberOfOccupants);
272  }
273 
274  if(m_positioningSolution != 0)
275  {
276  printf("positioningSolutionType = %ld\n\n", *m_positioningSolution);
277  }
278 
279  printf("positionOfOccupants = %s\n\n", printBitString(m_positionOfOccupants).toStdString().c_str());
280 
281  if(m_steeringWheelAngle != 0)
282  printf("steeringWheelAngle\n{\n\tsteeringWheelAngleValue = %ld\n\n\tsteeringWheelAngleConfidence = %ld\n}\n\n",m_steeringWheelAngle->steeringWheelAngleValue, m_steeringWheelAngle->steeringWheelAngleConfidence);
283 
284  if(m_verticalAcceleration != 0)
285  printf("verticalAcceleration\n{\n\tverticalAccelerationValue = %ld\n\n\tverticalAccelerationConfidence = %ld\n}\n\n",m_verticalAcceleration->verticalAccelerationValue, m_verticalAcceleration->verticalAccelerationConfidence);
286 
287  printf("yawRate\n{\n\tyawRateConfidence = %ld\n\n\tyawRateValue = %ld\n}\n\n", m_yawRate.yawRateConfidence, m_yawRate.yawRateValue);
288 }
289 
291 {
292  Curvature_t c;
293 
294  if(m_speed)
296  else
299 
300  return c;
301 }
302 
304 {
305  Curvature_t c;
306 
309 
310  return c;
311 }
312 
314 {
316  this->m_curvature = other.m_curvature;
318  this->m_driveDirection = other.m_driveDirection;
319  this->m_exteriorLights = other.m_exteriorLights;
327  this->m_speed = other.m_speed;
330  this->m_yawRate = other.m_yawRate;
331 
332  return *this;
333 }
Temperature_t * m_externalTemperature
Definition: ParameterCAN.h:30
YawRateValue_t yawRateValue
Definition: YawRate.h:24
~ParameterCAN()
~ParameterCAN ParameterCAN destructor.
Definition: ParameterCAN.cpp:9
ExteriorLights_t m_exteriorLights
Definition: ParameterCAN.h:29
int validate_unsigned_int(cfg_t *cfg, cfg_opt_t *opt)
validate_unsigned_int Check if an option is an unsigned int
Definition: api.cpp:186
Curvature_t curvatureUnavailable()
curvatureUnavailable Set the curvature value to unavailable.
Curvature_t m_curvature
Definition: ParameterCAN.h:26
void read()
read Configuration file reading.
LightBarSirenInUse_t m_lightBarSirenInUse
Definition: ParameterCAN.h:32
AccelerationConfidence_t verticalAccelerationConfidence
SteeringWheelAngleValue_t steeringWheelAngleValue
AccelerationConfidence_t lateralAccelerationConfidence
YawRateConfidence_t yawRateConfidence
Definition: YawRate.h:25
QString printBitString(BIT_STRING_t b)
printBitString Print a BIT_STRING into a QString.
Definition: api.cpp:175
AccelerationControl_t * m_accelerationControl
Definition: ParameterCAN.h:25
NumberOfOccupants_t * m_numberOfOccupants
Definition: ParameterCAN.h:34
ParameterCAN()
ParameterCAN ParameterCAN constructor.
Definition: ParameterCAN.cpp:3
CurvatureCalculationMode_t m_curvatureCalculationMode
Definition: ParameterCAN.h:27
long NumberOfOccupants_t
VerticalAcceleration_t * m_verticalAcceleration
Definition: ParameterCAN.h:39
long Temperature_t
Definition: Temperature.h:28
LongitudinalAccelerationValue_t longitudinalAccelerationValue
BIT_STRING_t makeBitString(int nbits, cfg_t *cfg, const char *opt_name)
makeBitString Generate a BIT_STRING from configuration.
Definition: api.cpp:198
CurvatureConfidence_t curvatureConfidence
Definition: Curvature.h:25
AccelerationConfidence_t longitudinalAccelerationConfidence
Curvature_t calculateCurvatureWithYawRate()
calculateCurvatureWithYawRate Calculate curvature with yaw rate.
SteeringWheelAngle_t * m_steeringWheelAngle
Definition: ParameterCAN.h:38
CurvatureValue_t curvatureValue
Definition: Curvature.h:24
LongitudinalAcceleration_t m_longitudinalAcceleration
Definition: ParameterCAN.h:33
PositioningSolutionType_t * m_positioningSolution
Definition: ParameterCAN.h:35
PositionOfOccupants_t m_positionOfOccupants
Definition: ParameterCAN.h:36
long PositioningSolutionType_t
void readDebug()
readDebug Configuration printing.
SteeringWheelAngleConfidence_t steeringWheelAngleConfidence
DriveDirection_t m_driveDirection
Definition: ParameterCAN.h:28
YawRate_t m_yawRate
Definition: ParameterCAN.h:40
ParameterCAN & operator=(const ParameterCAN &other)
operator= Affectation operator.
SpeedValue_t m_speed
Definition: ParameterCAN.h:37
VerticalAccelerationValue_t verticalAccelerationValue
LateralAccelerationValue_t lateralAccelerationValue
LateralAcceleration_t * m_lateralAcceleration
Definition: ParameterCAN.h:31