SensorObserver.cc

Go to the documentation of this file.
00001 //
00002 // Copyright 2002 Sony Corporation 
00003 //
00004 // Permission to use, copy, modify, and redistribute this software for
00005 // non-commercial use is hereby granted.
00006 //
00007 // This software is provided "as is" without warranty of any kind,
00008 // either expressed or implied, including but not limited to the
00009 // implied warranties of fitness for a particular purpose.
00010 //
00011 
00012 #include <OPENR/ODataFormats.h>
00013 #include <OPENR/OPENRAPI.h>
00014 #include <OPENR/OSyslog.h>
00015 #include <OPENR/core_macro.h>
00016 #include "SensorObserver.h"
00017 
00018 SensorObserver::SensorObserver() : initSensorIndex(false)
00019 {
00020     for (int i = 0; i < NUM_COMMON_SENSORS; i++) commonidx[i] = -1;
00021     for (int i = 0; i < NUM_ERS210_SENSORS; i++) ers210idx[i] = -1;
00022     for (int i = 0; i < NUM_ERS220_SENSORS; i++) ers220idx[i] = -1;
00023 }
00024 
00025 OStatus
00026 SensorObserver::DoInit(const OSystemEvent& event)
00027 {
00028     NEW_ALL_SUBJECT_AND_OBSERVER;
00029     REGISTER_ALL_ENTRY;
00030     SET_ALL_READY_AND_NOTIFY_ENTRY;
00031     OPENR::SetMotorPower(opowerON);
00032     return oSUCCESS;
00033 }
00034 
00035 OStatus
00036 SensorObserver::DoStart(const OSystemEvent& event)
00037 {
00038     ENABLE_ALL_SUBJECT;
00039     ASSERT_READY_TO_ALL_OBSERVER;
00040     return oSUCCESS;
00041 }    
00042 
00043 OStatus
00044 SensorObserver::DoStop(const OSystemEvent& event)
00045 {
00046     DISABLE_ALL_SUBJECT;
00047     DEASSERT_READY_TO_ALL_OBSERVER;
00048     return oSUCCESS;
00049 }
00050 
00051 OStatus
00052 SensorObserver::DoDestroy(const OSystemEvent& event)
00053 {
00054     DELETE_ALL_SUBJECT_AND_OBSERVER;
00055     return oSUCCESS;
00056 }
00057 
00058 void
00059 SensorObserver::NotifyERS210(const ONotifyEvent& event)
00060 {
00061     OSensorFrameVectorData* sensorVec = (OSensorFrameVectorData*)event.Data(0);
00062 
00063     if (initSensorIndex == false) {
00064         InitCommonSensorIndex(sensorVec);
00065         InitERS210SensorIndex(sensorVec);
00066         initSensorIndex = true;
00067     }
00068 
00069     OSYSPRINT(("ERS-210 numData %d frameNumber %d\n",
00070                sensorVec->vectorInfo.numData, sensorVec->info[0].frameNumber));
00071     
00072     PrintCommonSensor(sensorVec);
00073     PrintERS210Sensor(sensorVec);
00074     WaitReturnKey();
00075 
00076     observer[event.ObsIndex()]->AssertReady();
00077 }
00078 
00079 void
00080 SensorObserver::NotifyERS220(const ONotifyEvent& event)
00081 {
00082     OSensorFrameVectorData* sensorVec = (OSensorFrameVectorData*)event.Data(0);
00083 
00084     if (initSensorIndex == false) {
00085         InitCommonSensorIndex(sensorVec);
00086         InitERS220SensorIndex(sensorVec);
00087         initSensorIndex = true;
00088     }
00089 
00090     OSYSPRINT(("ERS-220 numData %d frameNumber %d\n",
00091                sensorVec->vectorInfo.numData, sensorVec->info[0].frameNumber));
00092 
00093     PrintCommonSensor(sensorVec);
00094     PrintERS220Sensor(sensorVec);
00095     WaitReturnKey();
00096 
00097     observer[event.ObsIndex()]->AssertReady();
00098 }
00099 
00100 void
00101 SensorObserver::InitCommonSensorIndex(OSensorFrameVectorData* sensorVec)
00102 {
00103     OStatus result;
00104     OPrimitiveID sensorID;
00105     
00106     for (int i = 0; i < NUM_COMMON_SENSORS; i++) {
00107 
00108         result = OPENR::OpenPrimitive(COMMON_SENSOR_LOCATOR[i], &sensorID);
00109         if (result != oSUCCESS) {
00110             OSYSLOG1((osyslogERROR, "%s : %s %d",
00111                       "SensorObserver::InitCommonSensorIndex()",
00112                       "OPENR::OpenPrimitive() FAILED", result));
00113             continue;
00114         }
00115 
00116         for (int j = 0; j < sensorVec->vectorInfo.numData; j++) {
00117             OSensorFrameInfo* info = sensorVec->GetInfo(j);
00118             if (info->primitiveID == sensorID) {
00119                 commonidx[i] = j;
00120                 OSYSPRINT(("[%2d] %s\n",
00121                            commonidx[i], COMMON_SENSOR_LOCATOR[i]));
00122                 break;
00123             }
00124         }
00125     }
00126 }
00127 
00128 void
00129 SensorObserver::InitERS210SensorIndex(OSensorFrameVectorData* sensorVec)
00130 {
00131     OStatus result;
00132     OPrimitiveID sensorID;
00133     
00134     for (int i = 0; i < NUM_ERS210_SENSORS; i++) {
00135 
00136         result = OPENR::OpenPrimitive(ERS210_SENSOR_LOCATOR[i], &sensorID);
00137         if (result != oSUCCESS) {
00138             OSYSLOG1((osyslogERROR, "%s : %s %d",
00139                       "SensorObserver::InitERS210SensorIndex()",
00140                       "OPENR::OpenPrimitive() FAILED", result));
00141             continue;
00142         }
00143 
00144         for (int j = 0; j < sensorVec->vectorInfo.numData; j++) {
00145             OSensorFrameInfo* info = sensorVec->GetInfo(j);
00146             if (info->primitiveID == sensorID) {
00147                 ers210idx[i] = j;
00148                 OSYSPRINT(("[%2d] %s\n",
00149                            ers210idx[i], ERS210_SENSOR_LOCATOR[i]));
00150                 break;
00151             }
00152         }
00153     }
00154 }
00155 
00156 void
00157 SensorObserver::InitERS220SensorIndex(OSensorFrameVectorData* sensorVec)
00158 {
00159     OStatus result;
00160     OPrimitiveID sensorID;
00161     
00162     for (int i = 0; i < NUM_ERS220_SENSORS; i++) {
00163 
00164         result = OPENR::OpenPrimitive(ERS220_SENSOR_LOCATOR[i], &sensorID);
00165         if (result != oSUCCESS) {
00166             OSYSLOG1((osyslogERROR, "%s : %s %d",
00167                       "SensorObserver::InitERS220SensorIndex()",
00168                       "OPENR::OpenPrimitive() FAILED", result));
00169             continue;
00170         }
00171 
00172         for (int j = 0; j < sensorVec->vectorInfo.numData; j++) {
00173             OSensorFrameInfo* info = sensorVec->GetInfo(j);
00174             if (info->primitiveID == sensorID) {
00175                 ers220idx[i] = j;
00176                 OSYSPRINT(("[%2d] %s\n",
00177                            ers220idx[i], ERS220_SENSOR_LOCATOR[i]));
00178                 break;
00179             }
00180         }
00181     }
00182 }
00183 
00184 void
00185 SensorObserver::PrintCommonSensor(OSensorFrameVectorData* sensorVec)
00186 {
00187     PrintSeparator();
00188 
00189     //
00190     // BODY CPC
00191     //
00192     OSYSPRINT(("ACC X      | "));
00193     PrintSensorValue(sensorVec, commonidx[ACC_X]);
00194 
00195     OSYSPRINT(("ACC Y      | "));
00196     PrintSensorValue(sensorVec, commonidx[ACC_Y]);
00197 
00198     OSYSPRINT(("ACC Z      | "));
00199     PrintSensorValue(sensorVec, commonidx[ACC_Z]);
00200 
00201     //
00202     // HEAD CPC
00203     //
00204     OSYSPRINT(("TACT FRONT | "));
00205     PrintSensorValue(sensorVec, commonidx[TACT_F]);
00206 
00207     OSYSPRINT(("TACT REAR  | "));
00208     PrintSensorValue(sensorVec, commonidx[TACT_R]);
00209 
00210     OSYSPRINT(("TIN SW     | "));
00211     PrintSensorValue(sensorVec, commonidx[TIN_SW]);
00212 
00213     OSYSPRINT(("PSD        | "));
00214     PrintSensorValue(sensorVec, commonidx[PSD]);
00215 
00216     OSYSPRINT(("HEAD TILT  | "));
00217     PrintJointValue(sensorVec, commonidx[HEAD_TILT]);
00218 
00219     OSYSPRINT(("HEAD PAN   | "));
00220     PrintJointValue(sensorVec, commonidx[HEAD_PAN]);
00221 
00222     OSYSPRINT(("HEAD ROLL  | "));
00223     PrintJointValue(sensorVec, commonidx[HEAD_ROLL]);
00224 
00225     //
00226     // RFLEG CPC
00227     //
00228     OSYSPRINT(("RFLEG J1   | "));
00229     PrintJointValue(sensorVec, commonidx[RFLEG_J1]);
00230 
00231     OSYSPRINT(("RFLEG J2   | "));
00232     PrintJointValue(sensorVec, commonidx[RFLEG_J2]);
00233 
00234     OSYSPRINT(("RFLEG J3   | "));
00235     PrintJointValue(sensorVec, commonidx[RFLEG_J3]);
00236 
00237     OSYSPRINT(("RFLEG SW   | "));
00238     PrintSensorValue(sensorVec, commonidx[RFLEG_SW]);
00239 
00240     //
00241     // LFLEG CPC
00242     //
00243     OSYSPRINT(("LFLEG J1   | "));
00244     PrintJointValue(sensorVec, commonidx[LFLEG_J1]);
00245 
00246     OSYSPRINT(("LFLEG J2   | "));
00247     PrintJointValue(sensorVec, commonidx[LFLEG_J2]);
00248 
00249     OSYSPRINT(("LFLEG J3   | "));
00250     PrintJointValue(sensorVec, commonidx[LFLEG_J3]);
00251 
00252     OSYSPRINT(("LFLEG SW   | "));
00253     PrintSensorValue(sensorVec, commonidx[LFLEG_SW]);
00254 
00255     //
00256     // RRLEG CPC
00257     //
00258     OSYSPRINT(("RRLEG J1   | "));
00259     PrintJointValue(sensorVec, commonidx[RRLEG_J1]);
00260 
00261     OSYSPRINT(("RRLEG J2   | "));
00262     PrintJointValue(sensorVec, commonidx[RRLEG_J2]);
00263 
00264     OSYSPRINT(("RRLEG J3   | "));
00265     PrintJointValue(sensorVec, commonidx[RRLEG_J3]);
00266 
00267     OSYSPRINT(("RRLEG SW   | "));
00268     PrintSensorValue(sensorVec, commonidx[RRLEG_SW]);
00269 
00270     //
00271     // LRLEG CPC
00272     //
00273     OSYSPRINT(("LRLEG J1   | "));
00274     PrintJointValue(sensorVec, commonidx[LRLEG_J1]);
00275 
00276     OSYSPRINT(("LRLEG J2   | "));
00277     PrintJointValue(sensorVec, commonidx[LRLEG_J2]);
00278 
00279     OSYSPRINT(("LRLEG J3   | "));
00280     PrintJointValue(sensorVec, commonidx[LRLEG_J3]);
00281 
00282     OSYSPRINT(("LRLEG SW   | "));
00283     PrintSensorValue(sensorVec, commonidx[LRLEG_SW]);
00284 
00285     //
00286     // TAIL CPC
00287     //
00288     OSYSPRINT(("BACK SW    | "));
00289     PrintSensorValue(sensorVec, commonidx[BACK_SW]);
00290 
00291     OSYSPRINT(("THERMO     | "));
00292     PrintSensorValue(sensorVec, commonidx[THERMO]);
00293 
00294 }
00295 
00296 void
00297 SensorObserver::PrintERS210Sensor(OSensorFrameVectorData* sensorVec)
00298 {
00299     //
00300     // HEAD CPC
00301     //
00302     OSYSPRINT(("MOUTH      | "));
00303     PrintJointValue(sensorVec, ers210idx[MOUTH]);
00304 
00305     //
00306     // TAIL CPC
00307     //
00308     OSYSPRINT(("TAIL PAN   | "));
00309     PrintJointValue(sensorVec, ers210idx[TAIL_PAN]);
00310 
00311     OSYSPRINT(("TAIL TILT  | "));
00312     PrintJointValue(sensorVec, ers210idx[TAIL_TILT]);
00313 }
00314 
00315 void
00316 SensorObserver::PrintERS220Sensor(OSensorFrameVectorData* sensorVec)
00317 {
00318     //
00319     // TAIL CPC 
00320     //
00321     OSYSPRINT(("TAIL SW L  | "));
00322     PrintSensorValue(sensorVec, ers220idx[TAIL_SW_L]);
00323 
00324     OSYSPRINT(("TAIL SW M  | "));
00325     PrintSensorValue(sensorVec, ers220idx[TAIL_SW_M]);
00326 
00327     OSYSPRINT(("TAIL SW R  | "));
00328     PrintSensorValue(sensorVec, ers220idx[TAIL_SW_R]);
00329 }
00330 
00331 void
00332 SensorObserver::PrintSensorValue(OSensorFrameVectorData* sensorVec, int index)
00333 {
00334     if (index == -1) {
00335         OSYSPRINT(("[%d] INVALID INDEX\n", index));
00336         PrintSeparator();
00337         return;
00338     }
00339 
00340     OSensorFrameData* data = sensorVec->GetData(index);
00341     OSYSPRINT(("[%2d] val    %d %d %d %d\n",
00342                index,
00343                data->frame[0].value, data->frame[1].value,
00344                data->frame[2].value, data->frame[3].value));
00345 
00346     OSYSPRINT(("           | "));
00347     OSYSPRINT(("     sig    %d %d %d %d\n",
00348                data->frame[0].signal, data->frame[1].signal,
00349                data->frame[2].signal, data->frame[3].signal));
00350 
00351     PrintSeparator();
00352 }
00353 
00354 void
00355 SensorObserver::PrintJointValue(OSensorFrameVectorData* sensorVec, int index)
00356 {
00357     if (index == -1) {
00358         OSYSPRINT(("[%d] INVALID INDEX\n", index));
00359         PrintSeparator();
00360         return;
00361     }
00362 
00363     OSensorFrameData* data = sensorVec->GetData(index);
00364     OJointValue* jval = (OJointValue*)data->frame;
00365 
00366     OSYSPRINT(("[%2d] val    %d %d %d %d\n",
00367                index,
00368                jval[0].value, jval[1].value,
00369                jval[2].value, jval[3].value));
00370 
00371     OSYSPRINT(("           | "));
00372     OSYSPRINT(("     sig    %d %d %d %d\n",
00373                jval[0].signal, jval[1].signal,
00374                jval[2].signal, jval[3].signal));
00375 
00376     OSYSPRINT(("           | "));
00377     OSYSPRINT(("     pwm    %d %d %d %d\n",
00378                jval[0].pwmDuty, jval[1].pwmDuty,
00379                jval[2].pwmDuty, jval[3].pwmDuty));
00380 
00381     OSYSPRINT(("           | "));
00382     OSYSPRINT(("     refval %d %d %d %d\n",
00383                jval[0].refValue, jval[1].refValue,
00384                jval[2].refValue, jval[3].refValue));
00385 
00386     OSYSPRINT(("           | "));
00387     OSYSPRINT(("     refsig %d %d %d %d\n",
00388                jval[0].refSignal, jval[1].refSignal,
00389                jval[2].refSignal, jval[3].refSignal));
00390 
00391     PrintSeparator();
00392 }
00393 
00394 void
00395 SensorObserver::PrintSeparator()
00396 {
00397     OSYSPRINT(("-----------+"));
00398     OSYSPRINT(("---------------------------------------------------------\n"));
00399 }
00400 
00401 #ifdef WAIT_RETURN_KEY
00402 #include <stdio.h> // for getchar()
00403 #endif 
00404 
00405 void
00406 SensorObserver::WaitReturnKey()
00407 {
00408 #ifdef WAIT_RETURN_KEY
00409     OSYSPRINT(("Hit return key> "));
00410     char c = getchar();
00411 #endif
00412 }

Generated on Sun Dec 2 23:04:30 2007 for openSDK by  doxygen 1.3.9.1