00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ZLOG_H
00011 #define ZLOG_H
00012
00013 #include <stdlib.h>
00014 #include <string>
00015 #include <iostream>
00016
00020 #define DEFAULT_LOG_SIZE 10
00021
00030 class ZLog
00031 {
00032 public:
00033
00036 ZLog();
00037
00042 ZLog(const int logsize);
00043
00046 ~ZLog();
00047
00053 void writeLog(const short value);
00054
00059 short getLog(const int pos) const;
00060
00064 short getLastLog() const;
00065
00070 void setSize(const int size);
00071
00076 void eraseLog();
00077
00083 void setLog(const short value);
00084
00089 void resetLog();
00090
00095 void showLog();
00096
00097 protected:
00098
00099
00100
00101
00102
00103
00104 void detectTorqueSwitch();
00105
00106
00107
00108
00111 short *Log;
00112
00116 int ActPos;
00117
00120 int LogSize;
00121 };
00122
00123
00124
00125
00126
00127
00128 inline void ZLog::writeLog(const short value)
00129 {
00130 if(++ActPos >= LogSize)
00131 ActPos = 0;
00132
00133 Log[ActPos] = value;
00134
00135
00136 detectTorqueSwitch();
00137 }
00138
00139
00140
00141
00142
00143 #if 0
00144 inline void ZLog::setMinMax(const short value)
00145 {
00146 if(value <= MinLog.Value){
00147 MinLog.Value = value;
00148 MinLog.Pos = ActPos;
00149 }
00150
00151 if(value >= MaxLog.Value){
00152 MaxLog.Value = value;
00153 MaxLog.Pos = ActPos;
00154 }
00155 }
00156 #endif
00157 #if 0
00158
00159
00160
00161 inline void ZLog::detectTorqueSwitch()
00162 {
00163 int dummy = ActPos;
00164 int dummy1 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00165
00166 if(((Log[ActPos] - Log[dummy1]) > 3)){
00167 int dummy2 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00168 int dummy3 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00169 int dummy4 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00170
00171 if(Log[dummy1] < Log[dummy2] && Log[dummy2] <= Log[dummy3]){
00172
00173 if((Log[ActPos] < Log[dummy3]) && (Log[dummy3] - Log[dummy1]) > 14 &&
00174 (Log[dummy4] < Log[dummy3])){
00175
00176 std::cout << "****************************** TORQUE SWITCH ACTIVATED?" << std::endl;
00177 showLog();
00178 }
00179 }
00180 else{
00181
00182 if((Log[dummy2] - Log[dummy1]) > 10 &&
00183
00184 (Log[dummy3] < Log[dummy2])){
00185
00186 std::cout << "****************************** TORQUE SWITCH ACTIVATED ELSE?" << std::endl;
00187 showLog();
00188 }
00189 }
00190 }
00191 }
00192 #endif
00193
00194
00195
00196
00197
00198 inline void ZLog::detectTorqueSwitch()
00199 {
00200 int dummy = ActPos;
00201 int dummy1 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00202 int dummy2 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00203
00204 if( (Log[ActPos] - Log[dummy2]) > 6 && abs(Log[dummy1] - Log[ActPos]) > 2){
00205 int dummy3 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00206 int dummy4 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00207 int dummy5 = (--dummy < 0) ? dummy = LogSize-1 : dummy;
00208
00209 if(Log[dummy2] < Log[dummy3] && Log[dummy3] <= Log[dummy4]){
00210 if((Log[dummy4] - Log[dummy2]) > 16 &&
00211 (Log[dummy4] - Log[dummy5]) > 3){
00212 std::cout << "****************************** TORQUE SWITCH ACTIVATED?" << std::endl;
00213 showLog();
00214 }
00215 }
00216 else{
00217 if((Log[dummy3] - Log[dummy2]) > 13 &&
00218
00219 ((Log[dummy3] - Log[dummy4]) >= 3 )){
00220 std::cout << "****************************** TORQUE SWITCH ACTIVATED ELSE?" << std::endl;
00221 showLog();
00222 }
00223 }
00224 }
00225 }
00226
00227
00228
00229
00230
00231
00232 inline short ZLog::getLog(int pos) const
00233 {
00234 if(pos > LogSize)
00235 exit(-100);
00236 else
00237 return Log[pos];
00238 }
00239
00240
00241
00242
00243 inline short ZLog::getLastLog() const
00244 {
00245 return Log[ActPos];
00246 }
00247
00248
00249
00250
00251
00252 inline void ZLog::eraseLog()
00253 {
00254 memset(Log, 0, sizeof(Log));
00255 }
00256
00257
00258
00259
00260
00261 inline void ZLog::setLog(const short value)
00262 {
00263 for(int i = LogSize-1; i >= 0; i--)
00264 Log[i] = value;
00265 }
00266
00267
00268
00269
00270
00271 inline void ZLog::resetLog()
00272 {
00273 ActPos = 0;
00274 }
00275
00276
00277
00278
00279
00280 inline void ZLog::showLog()
00281 {
00282 int pos = ActPos;
00283 std::cout << " ** Log :" << std::endl;
00284 std::cout << " " << Log[pos--] << std::endl;
00285 while(pos != ActPos){
00286 if(pos < 0)
00287 pos = LogSize-1;
00288
00289 std::cout << " " << Log[pos--] << std::endl;
00290 }
00291 }
00292
00293 #endif //ZLOG_H