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 "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
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
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
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
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
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
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
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>
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 }