2 * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
11 * RPM / Speed / Brake Value is determined by the average
13 * @date Apr-08-2013 create
20 /*******************************
21 * AVERAGE SAMPLE SPACE SIZE
22 *******************************/
23 #define D_SAMPLE_SPACE_SPEED 40
24 #define D_SAMPLE_SPACE_RPM 40
25 #define D_SAMPLE_SPACE_BRAKE 20
26 #define D_SAMPLE_SPACE_ACCPEDAL 40
28 /******************************************
30 ******************************************/
34 averageMachine(const short sz);
36 void setSample(double x);
37 double getAvg() const;
38 double getPrevValue() const;
41 short m_posi; // Sample store position
43 short m_sz; // Sample space size
44 double m_n; // Sample space size(double)
45 double* m_x; // Sample store Aarea
46 double m_t; // Sample sum
47 double m_avg; // average
54 inline double averageMachine::getAvg() const
61 * @return previous RPM value
63 inline double averageMachine::getPrevValue() const
68 /******************************************
69 * average Machine Integer
70 ******************************************/
74 iAverageMachine(const short sz);
76 void setSample(int x);
77 double getAvg() const;
79 int getPrevValue() const;
82 short m_posi; // Sample store position
84 short m_sz; // Sample space size
85 int m_n; // Sample space size(double)
86 int* m_x; // Sample store Aarea
87 int m_t; // Sample sum
88 double m_avg; // average
89 int m_iAvg; // average
95 * @return avarege value
97 inline double iAverageMachine::getAvg() const
104 * get average interger
105 * @return avarege value
107 inline int iAverageMachine::getIAvg() const
113 * @brief getPrevValue
114 * @return prev sample value
116 inline int iAverageMachine::getPrevValue() const
121 /******************************************
123 ******************************************/
124 #define D_IDLING_RPM 6.3L
125 #define D_RPM_BOTTOM_BORDER 2.7L
126 #define D_RPM_IGNITION_VALUE 4.1
131 CAvgEngine(const short sz = 0);
133 void ignitionStart(int rpm = -1);
134 void chgThrottle(int throttle);
135 double getRPM() const;
136 double getAvgRPM() const;
137 bool isActive() const;
142 averageMachine m_avgRPM;
149 inline double CAvgEngine::getRPM() const
151 return m_rpm * 100.0l;
157 inline double CAvgEngine::getAvgRPM() const
159 return m_avgRPM.getAvg();
164 * @return true:active / false stop
166 inline bool CAvgEngine::isActive() const
171 /******************************************
173 ******************************************/
174 #define D_LAG_BRAKE 10240
175 #define D_MAX_BRAKE 65534
176 #define D_SOFT_BRAKE_MAX 21000
177 #define D_MIDDLE_BRAKE_MAX 42000
181 CAvgBrake(const short sz = 0);
183 void chgBrake(int brake);
184 bool isOnBrake() const;
185 int getBrakeAvg() const;
186 double getSpeed(double sourceSpeed);
187 int calcPressure(int brakeVal) const;
191 iAverageMachine m_brk;
198 * @return true:on brake false:no brake
200 inline bool CAvgBrake::isOnBrake() const
209 inline int CAvgBrake::getBrakeAvg() const
215 inline int CAvgBrake::calcPressure(int brakeVal) const
217 if (D_LAG_BRAKE >= brakeVal) {
220 int a = brakeVal - D_LAG_BRAKE;
221 int b = D_MAX_BRAKE - D_LAG_BRAKE;
222 double x = ((double)a / (double)b) * 100.0l;
227 /******************************************
229 ******************************************/
231 * TRANSMISSION SHIFT VALUE
232 * 1=1st, 2=2nd, 3=3rd, ..., 64=neutral,
235 #define D_SHIFT_VALUE_CVT 256
236 #define D_SHIFT_VALUE_PARKING 0
237 #define D_SHIFT_VALUE_REVERSE 128
238 #define D_SHIFT_VALUE_NEUTRAL 64
239 #define D_SHIFT_VALUE_SIXTH 6
240 #define D_SHIFT_VALUE_FIFTH 5
241 #define D_SHIFT_VALUE_DRIVE 4
242 #define D_SHIFT_VALUE_THIRD 3
243 #define D_SHIFT_VALUE_SECOND 2
244 #define D_SHIFT_VALUE_FIRST 1
246 * TRANSMISSION SHIFT MODE
247 * 0=normal, 1=sports, 2=eco, 3=oem custom,
250 #define D_SHIFT_MODE_NORMAL 0
251 #define D_SHIFT_MODE_SPOETS 1
252 #define D_SHIFT_MODE_ECO 2
253 #define D_SHIFT_MODE_OEMCUSTOM 3
254 #define D_SHIFT_MODE_OEMCUSTOM2 3
260 * TRANSMISSION SHIFT POSITION
261 * 0=P, 1=R, 2=N, 4=D, 5=L, 6=2, 7=oem
265 E_SHIFT_PARKING = 0, // 0=P
266 E_SHIFT_REVERSE, // 1=R
267 E_SHIFT_NEUTRAL, // 2=N
268 E_SHIFT_DRIVE = 4, // 4=N
269 E_SHIFT_FIRST, // 5=L
270 E_SHIFT_SECOND, // 6=2
271 E_SHIFT_THIRD, // 7=oem
272 E_SHIFT_MT_FIRST = 11,
285 E_AT_GEAR getSelectGear() const;
286 int getValue() const;
288 double getGearRatio(double speed, bool down = false) const;
289 void chgGear(E_AT_GEAR tm);
290 bool isReverse() const;
291 bool isNeutral() const;
292 bool isParking() const;
294 void setShiftMT(E_AT_GEAR tm);
296 bool isReverseLastTime() const;
300 E_AT_GEAR m_transmission;
301 E_AT_GEAR m_transmissionOLD;
302 int m_transmissionValue;
309 inline void CAvgGear::chgGear(E_AT_GEAR tm)
311 m_transmissionOLD = m_transmission;
317 * @return true / false
319 inline bool CAvgGear::isReverse() const
321 if (E_SHIFT_REVERSE == m_transmission) {
329 * @return true / false
331 inline bool CAvgGear::isNeutral() const
333 if (E_SHIFT_NEUTRAL == m_transmission) {
341 * @return true / false
343 inline bool CAvgGear::isParking() const
345 if (E_SHIFT_PARKING == m_transmission) {
352 * @vrief getSelectGear
353 * @return transmission position is amb transmission position
355 inline CAvgGear::E_AT_GEAR CAvgGear::getSelectGear() const
357 return m_transmission;
362 * @return transmission value is amd transmission value
364 inline int CAvgGear::getValue() const
366 return m_transmissionValue;
371 * @return transmission Mode is amd transmission Mode
373 inline int CAvgGear::getMode() const
375 return D_SHIFT_MODE_NORMAL;
379 * @brief Reverse gear last time check
380 * @return true / false
382 inline bool CAvgGear::isReverseLastTime() const
384 if (E_SHIFT_REVERSE == m_transmissionOLD) {
392 * @return transmission old value clear
394 inline void CAvgGear::reset_old()
396 m_transmissionOLD = m_transmission;
399 /******************************************
401 ******************************************/
402 #define D_ACCPEDAL_OPEN 65534
404 class CAvgCar:public CAvgGear
407 CAvgCar(const short RPMsz = 0,
408 const short SPDsz = 0,
409 const short BRKsz = 0);
412 void chgThrottle(int throttle);
413 double getRPM() const;
414 bool isEngineActive() const;
416 void chgBrake(int brakeVal);
417 bool isOnBrake() const;
418 int getBrakeAvg() const;
419 int calcPressure(int brakeVal) const;
422 double getSpeed() const;
423 double getCurrentRun() const;
424 double getTotalRun() const;
425 int calcAccPedalOpen() const;
426 double getTripmeter() const;
427 void tripmeterReset();
436 double m_currentRunMeter;
439 struct timespec m_tp;
440 averageMachine m_speed;
442 iAverageMachine m_accPedalOpen;
453 inline double CAvgCar::getRPM() const
455 return m_engine.getRPM();
459 * @brief isEngineActive
460 * @return true / false
462 inline bool CAvgCar::isEngineActive() const
464 return m_engine.isActive();
469 * @return true / false
471 inline bool CAvgCar::isOnBrake() const
473 return m_brake.isOnBrake();
480 inline double CAvgCar::getSpeed() const
482 return m_speed.getAvg();
486 * @brief getCurrntRun
487 * @return meter run range
489 inline double CAvgCar::getCurrentRun() const
491 return m_currentRunMeter;
496 * @return odo meter value
498 inline double CAvgCar::getTotalRun() const
505 * @return brake avveage valeu
507 inline int CAvgCar::getBrakeAvg() const
509 return m_brake.getBrakeAvg();
513 * @brief calcPressure
516 inline int CAvgCar::calcPressure(int brakeVal) const
518 return m_brake.calcPressure(brakeVal);
522 * @brief calcAccPedalOpen
525 inline int CAvgCar::calcAccPedalOpen() const
527 double x = (double)m_accPedalOpen.getIAvg() / (double)D_ACCPEDAL_OPEN;
528 return (int)(x*100.0);
531 * @brief get Tripmeter
532 * @return trip meter value
534 inline double CAvgCar::getTripmeter() const
539 * @brief tripmeterReset
542 inline void CAvgCar::tripmeterReset()