SensorObserver7.cc

Go to the documentation of this file.
00001 //
00002 // Copyright 2003 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 "SensorObserver7.h"
00017 
00018 SensorObserver7::SensorObserver7() : initSensorIndex(false)
00019 {
00020     for (int i = 0; i < NUM_ERS7_SENSORS; i++) ers7idx[i] = -1;
00021 }
00022 
00023 OStatus
00024 SensorObserver7::DoInit(const OSystemEvent& event)
00025 {
00026     NEW_ALL_SUBJECT_AND_OBSERVER;
00027     REGISTER_ALL_ENTRY;
00028     SET_ALL_READY_AND_NOTIFY_ENTRY;
00029     OPENR::SetMotorPower(opowerON);
00030     return oSUCCESS;
00031 }
00032 
00033 OStatus
00034 SensorObserver7::DoStart(const OSystemEvent& event)
00035 {
00036     ENABLE_ALL_SUBJECT;
00037     ASSERT_READY_TO_ALL_OBSERVER;
00038     return oSUCCESS;
00039 }    
00040 
00041 OStatus
00042 SensorObserver7::DoStop(const OSystemEvent& event)
00043 {
00044     DISABLE_ALL_SUBJECT;
00045     DEASSERT_READY_TO_ALL_OBSERVER;
00046     return oSUCCESS;
00047 }
00048 
00049 OStatus
00050 SensorObserver7::DoDestroy(const OSystemEvent& event)
00051 {
00052     DELETE_ALL_SUBJECT_AND_OBSERVER;
00053     return oSUCCESS;
00054 }
00055 
00056 void
00057 SensorObserver7::NotifyERS7(const ONotifyEvent& event)
00058 {
00059     OSensorFrameVectorData* sensorVec = (OSensorFrameVectorData*)event.Data(0);
00060 
00061     if (initSensorIndex == false) {
00062         InitERS7SensorIndex(sensorVec);
00063         initSensorIndex = true;
00064     }
00065 
00066     OSYSPRINT(("ERS-7 numData %d frameNumber %d\n",
00067                sensorVec->vectorInfo.numData, sensorVec->info[0].frameNumber));
00068     
00069     PrintERS7Sensor(sensorVec);
00070     WaitReturnKey();
00071 
00072     observer[event.ObsIndex()]->AssertReady();
00073 }
00074 
00075 void
00076 SensorObserver7::InitERS7SensorIndex(OSensorFrameVectorData* sensorVec)
00077 {
00078     OStatus result;
00079     OPrimitiveID sensorID;
00080     
00081     for (int i = 0; i < NUM_ERS7_SENSORS; i++) {
00082 
00083         result = OPENR::OpenPrimitive(ERS7_SENSOR_LOCATOR[i], &sensorID);
00084         if (result != oSUCCESS) {
00085             OSYSLOG1((osyslogERROR, "%s : %s %d",
00086                       "SensorObserver7::InitERS7SensorIndex()",
00087                       "OPENR::OpenPrimitive() FAILED", result));
00088             continue;
00089         }
00090 
00091         for (int j = 0; j < sensorVec->vectorInfo.numData; j++) {
00092             OSensorFrameInfo* info = sensorVec->GetInfo(j);
00093             if (info->primitiveID == sensorID) {
00094                 ers7idx[i] = j;
00095                 OSYSPRINT(("[%2d] %s\n",
00096                            ers7idx[i], ERS7_SENSOR_LOCATOR[i]));
00097                 break;
00098             }
00099         }
00100     }
00101 }
00102 
00103 void
00104 SensorObserver7::PrintERS7Sensor(OSensorFrameVectorData* sensorVec)
00105 {
00106     PrintSeparator();
00107 
00108     //
00109     // BODY
00110     //
00111     OSYSPRINT(("ACC X      | "));
00112     PrintSensorValue(sensorVec, ers7idx[ACC_X]);
00113 
00114     OSYSPRINT(("ACC Y      | "));
00115     PrintSensorValue(sensorVec, ers7idx[ACC_Y]);
00116 
00117     OSYSPRINT(("ACC Z      | "));
00118     PrintSensorValue(sensorVec, ers7idx[ACC_Z]);
00119 
00120     OSYSPRINT(("BODY PSD   | "));
00121     PrintSensorValue(sensorVec, ers7idx[BODY_PSD]);
00122 
00123     OSYSPRINT(("WLAN SW    | "));
00124     PrintSensorValue(sensorVec, ers7idx[WLAN_SW]);
00125 
00126     OSYSPRINT(("BACK SW F  | "));
00127     PrintSensorValue(sensorVec, ers7idx[BACK_SW_F]);
00128 
00129     OSYSPRINT(("BACK SW M  | "));
00130     PrintSensorValue(sensorVec, ers7idx[BACK_SW_M]);
00131 
00132     OSYSPRINT(("BACK SW R  | "));
00133     PrintSensorValue(sensorVec, ers7idx[BACK_SW_R]);
00134 
00135     //
00136     // HEAD
00137     //
00138     OSYSPRINT(("HEAD SENSOR| "));
00139     PrintSensorValue(sensorVec, ers7idx[HEAD_SENSOR]);
00140 
00141     OSYSPRINT(("CHIN SW    | "));
00142     PrintSensorValue(sensorVec, ers7idx[CHIN_SW]);
00143 
00144     OSYSPRINT(("PSD NEAR   | "));
00145     PrintSensorValue(sensorVec, ers7idx[HEAD_PSD_NEAR]);
00146 
00147     OSYSPRINT(("PSD FAR    | "));
00148     PrintSensorValue(sensorVec, ers7idx[HEAD_PSD_FAR]);
00149 
00150     OSYSPRINT(("HEAD TILT1 | "));
00151     PrintJointValue(sensorVec, ers7idx[HEAD_TILT1]);
00152 
00153     OSYSPRINT(("HEAD PAN   | "));
00154     PrintJointValue(sensorVec, ers7idx[HEAD_PAN]);
00155 
00156     OSYSPRINT(("HEAD TILT2 | "));
00157     PrintJointValue(sensorVec, ers7idx[HEAD_TILT2]);
00158 
00159     OSYSPRINT(("MOUTH      | "));
00160     PrintJointValue(sensorVec, ers7idx[MOUTH]);
00161 
00162     //
00163     // RFLEG
00164     //
00165     OSYSPRINT(("RFLEG J1   | "));
00166     PrintJointValue(sensorVec, ers7idx[RFLEG_J1]);
00167 
00168     OSYSPRINT(("RFLEG J2   | "));
00169     PrintJointValue(sensorVec, ers7idx[RFLEG_J2]);
00170 
00171     OSYSPRINT(("RFLEG J3   | "));
00172     PrintJointValue(sensorVec, ers7idx[RFLEG_J3]);
00173 
00174     OSYSPRINT(("RFLEG SW   | "));
00175     PrintSensorValue(sensorVec, ers7idx[RFLEG_SW]);
00176 
00177     //
00178     // LFLEG
00179     //
00180     OSYSPRINT(("LFLEG J1   | "));
00181     PrintJointValue(sensorVec, ers7idx[LFLEG_J1]);
00182 
00183     OSYSPRINT(("LFLEG J2   | "));
00184     PrintJointValue(sensorVec, ers7idx[LFLEG_J2]);
00185 
00186     OSYSPRINT(("LFLEG J3   | "));
00187     PrintJointValue(sensorVec, ers7idx[LFLEG_J3]);
00188 
00189     OSYSPRINT(("LFLEG SW   | "));
00190     PrintSensorValue(sensorVec, ers7idx[LFLEG_SW]);
00191 
00192     //
00193     // RRLEG
00194     //
00195     OSYSPRINT(("RRLEG J1   | "));
00196     PrintJointValue(sensorVec, ers7idx[RRLEG_J1]);
00197 
00198     OSYSPRINT(("RRLEG J2   | "));
00199     PrintJointValue(sensorVec, ers7idx[RRLEG_J2]);
00200 
00201     OSYSPRINT(("RRLEG J3   | "));
00202     PrintJointValue(sensorVec, ers7idx[RRLEG_J3]);
00203 
00204     OSYSPRINT(("RRLEG SW   | "));
00205     PrintSensorValue(sensorVec, ers7idx[RRLEG_SW]);
00206 
00207     //
00208     // LRLEG
00209     //
00210     OSYSPRINT(("LRLEG J1   | "));
00211     PrintJointValue(sensorVec, ers7idx[LRLEG_J1]);
00212 
00213     OSYSPRINT(("LRLEG J2   | "));
00214     PrintJointValue(sensorVec, ers7idx[LRLEG_J2]);
00215 
00216     OSYSPRINT(("LRLEG J3   | "));
00217     PrintJointValue(sensorVec, ers7idx[LRLEG_J3]);
00218 
00219     OSYSPRINT(("LRLEG SW   | "));
00220     PrintSensorValue(sensorVec, ers7idx[LRLEG_SW]);
00221 
00222     //
00223     // TAIL
00224     //
00225     OSYSPRINT(("TAIL TILT  | "));
00226     PrintJointValue(sensorVec, ers7idx[TAIL_TILT]);
00227 
00228     OSYSPRINT(("TAIL PAN   | "));
00229     PrintJointValue(sensorVec, ers7idx[TAIL_PAN]);
00230 }
00231 
00232 void
00233 SensorObserver7::PrintSensorValue(OSensorFrameVectorData* sensorVec, int index)
00234 {
00235     if (index == -1) {
00236         OSYSPRINT(("[%d] INVALID INDEX\n", index));
00237         PrintSeparator();
00238         return;
00239     }
00240 
00241     OSensorFrameData* data = sensorVec->GetData(index);
00242     OSYSPRINT(("[%2d] val    %d %d %d %d\n",
00243                index,
00244                data->frame[0].value, data->frame[1].value,
00245                data->frame[2].value, data->frame[3].value));
00246 
00247     OSYSPRINT(("           | "));
00248     OSYSPRINT(("     sig    %d %d %d %d\n",
00249                data->frame[0].signal, data->frame[1].signal,
00250                data->frame[2].signal, data->frame[3].signal));
00251 
00252     PrintSeparator();
00253 }
00254 
00255 void
00256 SensorObserver7::PrintJointValue(OSensorFrameVectorData* sensorVec, int index)
00257 {
00258     if (index == -1) {
00259         OSYSPRINT(("[%d] INVALID INDEX\n", index));
00260         PrintSeparator();
00261         return;
00262     }
00263 
00264     OSensorFrameData* data = sensorVec->GetData(index);
00265     OJointValue* jval = (OJointValue*)data->frame;
00266 
00267     OSYSPRINT(("[%2d] val    %d %d %d %d\n",
00268                index,
00269                jval[0].value, jval[1].value,
00270                jval[2].value, jval[3].value));
00271 
00272     OSYSPRINT(("           | "));
00273     OSYSPRINT(("     sig    %d %d %d %d\n",
00274                jval[0].signal, jval[1].signal,
00275                jval[2].signal, jval[3].signal));
00276 
00277     OSYSPRINT(("           | "));
00278     OSYSPRINT(("     pwm    %d %d %d %d\n",
00279                jval[0].pwmDuty, jval[1].pwmDuty,
00280                jval[2].pwmDuty, jval[3].pwmDuty));
00281 
00282     OSYSPRINT(("           | "));
00283     OSYSPRINT(("     refval %d %d %d %d\n",
00284                jval[0].refValue, jval[1].refValue,
00285                jval[2].refValue, jval[3].refValue));
00286 
00287     OSYSPRINT(("           | "));
00288     OSYSPRINT(("     refsig %d %d %d %d\n",
00289                jval[0].refSignal, jval[1].refSignal,
00290                jval[2].refSignal, jval[3].refSignal));
00291 
00292     PrintSeparator();
00293 }
00294 
00295 void
00296 SensorObserver7::PrintSeparator()
00297 {
00298     OSYSPRINT(("-----------+"));
00299     OSYSPRINT(("---------------------------------------------------------\n"));
00300 }
00301 
00302 #ifdef WAIT_RETURN_KEY
00303 #include <stdio.h> // for getchar()
00304 #endif 
00305 
00306 void
00307 SensorObserver7::WaitReturnKey()
00308 {
00309 #ifdef WAIT_RETURN_KEY
00310     OSYSPRINT(("Hit return key> "));
00311     char c = getchar();
00312 #endif
00313 }

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