00001
00002
00003
00004
00005
00006
00007
00008
00009
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
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
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
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
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
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
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
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
00301
00302 OSYSPRINT(("MOUTH | "));
00303 PrintJointValue(sensorVec, ers210idx[MOUTH]);
00304
00305
00306
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
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>
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 }