00001
00002
00003
00004
00005 #ifndef INCLUDED_ERS2xxInfo_h
00006 #define INCLUDED_ERS2xxInfo_h
00007
00008 #include <math.h>
00009 #ifndef PLATFORM_APERIOS
00010 typedef unsigned short word;
00011 #else
00012 #include <Types.h>
00013 #endif
00014
00015 #include "CommonInfo.h"
00016 using namespace RobotInfo;
00017
00018
00019
00020
00021
00022 namespace ERS2xxInfo {
00023
00024
00025
00026
00027
00028
00029 const unsigned int FrameTime=8;
00030 const unsigned int NumFrames=4;
00031 const unsigned int SlowFrameTime=128;
00032 const unsigned int NumSlowFrames=1;
00033 const unsigned int SoundBufferTime=32;
00034
00035
00036
00037
00038 const unsigned JointsPerLeg = 3;
00039 const unsigned NumLegs = 4;
00040 const unsigned NumLegJoints = JointsPerLeg*NumLegs;
00041 const unsigned NumHeadJoints = 3;
00042 const unsigned NumTailJoints = 2;
00043 const unsigned NumMouthJoints = 1;
00044 const unsigned NumEarJoints = 2;
00045 const unsigned NumButtons = 11;
00046 const unsigned NumSensors = 1+3+1+5;
00047 const unsigned NumLEDs = 22;
00048
00049 const unsigned NumPIDJoints = NumLegJoints+NumHeadJoints+NumTailJoints+NumMouthJoints;
00050 const unsigned NumBinJoints = NumEarJoints;
00051 const unsigned NumOutputs = NumPIDJoints + NumBinJoints + NumLEDs;
00052 const unsigned NumReferenceFrames = NumOutputs + 1 + NumLegs + 1 + 1;
00053
00054 const float CameraHorizFOV=57.6/180*M_PI;
00055 const float CameraVertFOV=47.8/180*M_PI;
00056 const float CameraFOV=CameraHorizFOV;
00057 const unsigned int CameraResolutionX=176;
00058 const unsigned int CameraResolutionY=144;
00059
00060 const bool IsFastOutput[NumOutputs] = {
00061
00062 true, true, true,
00063 true, true, true,
00064 true, true, true,
00065 true, true, true,
00066 true, true, true,
00067 true, true,
00068 true,
00069
00070 true, true, true,
00071 true, true, true,
00072 true,
00073 true, true, true,
00074 true, true, true,
00075 true, true, true,
00076 true, true, true,
00077 true,
00078 true, true,
00079
00080 false, false
00081 };
00082
00083
00084 const bool IsRealERS210[NumOutputs] = {
00085
00086 true, true, true,
00087 true, true, true,
00088 true, true, true,
00089 true, true, true,
00090 true, true, true,
00091 true, true,
00092 true,
00093
00094 true, true, true,
00095 true, true, true,
00096 true,
00097 false, false, false,
00098 false, false, false,
00099 false, false, false,
00100 false, false, false,
00101 false,
00102 true, true,
00103
00104 true, true
00105 };
00106
00107
00108 const bool IsRealERS220[NumOutputs] = {
00109
00110 true, true, true,
00111 true, true, true,
00112 true, true, true,
00113 true, true, true,
00114 true, true, true,
00115 false, false,
00116 false,
00117
00118 true, true, true,
00119 true, true, true,
00120 true,
00121 true, true, true,
00122 true, true, true,
00123 true, true, true,
00124 true, true, true,
00125 true,
00126 false, false,
00127
00128 false, false
00129 };
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 const unsigned PIDJointOffset = 0;
00140 const unsigned LegOffset = PIDJointOffset;
00141 const unsigned HeadOffset = LegOffset+NumLegJoints;
00142 const unsigned TailOffset = HeadOffset+NumHeadJoints;
00143 const unsigned MouthOffset = TailOffset+NumTailJoints;
00144
00145 const unsigned LEDOffset = PIDJointOffset + NumPIDJoints;
00146
00147 const unsigned BinJointOffset = LEDOffset+NumLEDs;
00148 const unsigned EarOffset = BinJointOffset;
00149
00150 const unsigned BaseFrameOffset = NumOutputs;
00151 const unsigned PawFrameOffset = BaseFrameOffset+1;
00152 const unsigned CameraFrameOffset = PawFrameOffset+NumLegs;
00153 const unsigned IRFrameOffset = CameraFrameOffset+1;
00154
00155
00156 enum LegOffset_t {
00157 LFrLegOffset = LegOffset+LFrLegOrder*JointsPerLeg,
00158 RFrLegOffset = LegOffset+RFrLegOrder*JointsPerLeg,
00159 LBkLegOffset = LegOffset+LBkLegOrder*JointsPerLeg,
00160 RBkLegOffset = LegOffset+RBkLegOrder*JointsPerLeg
00161 };
00162
00163
00164
00165
00166 enum LEDOffset_t {
00167 FaceFrontLeftLEDOffset = LEDOffset,
00168 FaceFrontRightLEDOffset,
00169 FaceCenterLeftLEDOffset,
00170 FaceCenterRightLEDOffset,
00171 FaceBackLeftLEDOffset,
00172 FaceBackRightLEDOffset,
00173 ModeLEDOffset,
00174 BackLeft1LEDOffset,
00175 BackLeft2LEDOffset,
00176 BackLeft3LEDOffset,
00177 BackRight3LEDOffset,
00178 BackRight2LEDOffset,
00179 BackRight1LEDOffset,
00180 TailLeftLEDOffset,
00181 TailCenterLEDOffset,
00182 TailRightLEDOffset,
00183 FaceFrontBLEDOffset,
00184 FaceFrontALEDOffset,
00185 FaceFrontCLEDOffset,
00186 RetractableHeadLEDOffset,
00187
00188 TlBluLEDOffset,
00189 TlRedLEDOffset,
00190
00191
00192 BotLLEDOffset = FaceFrontLeftLEDOffset,
00193 BotRLEDOffset = FaceFrontRightLEDOffset,
00194 MidLLEDOffset = FaceCenterLeftLEDOffset,
00195 MidRLEDOffset = FaceCenterRightLEDOffset,
00196 TopLLEDOffset = FaceBackLeftLEDOffset,
00197 TopRLEDOffset = FaceBackRightLEDOffset,
00198 TopBrLEDOffset = ModeLEDOffset,
00199 };
00200
00201
00202
00203 typedef unsigned int LEDBitMask_t;
00204 const LEDBitMask_t FaceFrontLeftLEDMask = 1<<(FaceFrontLeftLEDOffset-LEDOffset);
00205 const LEDBitMask_t FaceFrontRightLEDMask = 1<<(FaceFrontRightLEDOffset-LEDOffset);
00206 const LEDBitMask_t FaceCenterLeftLEDMask = 1<<(FaceCenterLeftLEDOffset-LEDOffset);
00207 const LEDBitMask_t FaceCenterRightLEDMask = 1<<(FaceCenterRightLEDOffset-LEDOffset);
00208 const LEDBitMask_t FaceBackLeftLEDMask = 1<<(FaceBackLeftLEDOffset-LEDOffset);
00209 const LEDBitMask_t FaceBackRightLEDMask = 1<<(FaceBackRightLEDOffset-LEDOffset);
00210 const LEDBitMask_t ModeLEDMask = 1<<(ModeLEDOffset-LEDOffset);
00211 const LEDBitMask_t BackLeft1LEDMask = 1<<(BackLeft1LEDOffset-LEDOffset);
00212 const LEDBitMask_t BackLeft2LEDMask = 1<<(BackLeft2LEDOffset-LEDOffset);
00213 const LEDBitMask_t BackLeft3LEDMask = 1<<(BackLeft3LEDOffset-LEDOffset);
00214 const LEDBitMask_t BackRight3LEDMask = 1<<(BackRight3LEDOffset-LEDOffset);
00215 const LEDBitMask_t BackRight2LEDMask = 1<<(BackRight2LEDOffset-LEDOffset);
00216 const LEDBitMask_t BackRight1LEDMask = 1<<(BackRight1LEDOffset-LEDOffset);
00217 const LEDBitMask_t TailLeftLEDMask = 1<<(TailLeftLEDOffset-LEDOffset);
00218 const LEDBitMask_t TailCenterLEDMask = 1<<(TailCenterLEDOffset-LEDOffset);
00219 const LEDBitMask_t TailRightLEDMask = 1<<(TailRightLEDOffset-LEDOffset);
00220 const LEDBitMask_t FaceFrontBLEDMask = 1<<(FaceFrontBLEDOffset-LEDOffset);
00221 const LEDBitMask_t FaceFrontALEDMask = 1<<(FaceFrontALEDOffset-LEDOffset);
00222 const LEDBitMask_t FaceFrontCLEDMask = 1<<(FaceFrontCLEDOffset-LEDOffset);
00223 const LEDBitMask_t RetractableHeadLEDMask = 1<<(RetractableHeadLEDOffset-LEDOffset);
00224
00225 const LEDBitMask_t TlRedLEDMask= 1<<(TlRedLEDOffset-LEDOffset);
00226 const LEDBitMask_t TlBluLEDMask= 1<<(TlBluLEDOffset-LEDOffset);
00227
00228
00229 const LEDBitMask_t BotLLEDMask = 1<<(BotLLEDOffset-LEDOffset);
00230 const LEDBitMask_t BotRLEDMask = 1<<(BotRLEDOffset-LEDOffset);
00231 const LEDBitMask_t MidLLEDMask = 1<<(MidLLEDOffset-LEDOffset);
00232 const LEDBitMask_t MidRLEDMask = 1<<(MidRLEDOffset-LEDOffset);
00233 const LEDBitMask_t TopLLEDMask = 1<<(TopLLEDOffset-LEDOffset);
00234 const LEDBitMask_t TopRLEDMask = 1<<(TopRLEDOffset-LEDOffset);
00235 const LEDBitMask_t TopBrLEDMask= 1<<(TopBrLEDOffset-LEDOffset);
00236
00237 const LEDBitMask_t FaceLEDMask
00238 = FaceFrontLeftLEDMask
00239 | FaceFrontRightLEDMask
00240 | FaceCenterLeftLEDMask
00241 | FaceCenterRightLEDMask
00242 | FaceBackLeftLEDMask
00243 | FaceBackRightLEDMask
00244 | FaceFrontALEDMask
00245 | FaceFrontBLEDMask
00246 | FaceFrontCLEDMask
00247 | ModeLEDMask;
00248
00249 const LEDBitMask_t HeadLEDMask
00250 = FaceLEDMask
00251 | RetractableHeadLEDMask;
00252
00253 const LEDBitMask_t BackLEDMask
00254 = BackLeft1LEDMask
00255 | BackLeft2LEDMask
00256 | BackLeft3LEDMask
00257 | BackRight1LEDMask
00258 | BackRight2LEDMask
00259 | BackRight3LEDMask;
00260
00261 const LEDBitMask_t TailLEDMask
00262 = TailLeftLEDMask
00263 | TailCenterLEDMask
00264 | TailRightLEDMask
00265 | TlRedLEDMask
00266 | TlBluLEDMask;
00267
00268 const LEDBitMask_t AllLEDMask = (LEDBitMask_t)~0;
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289 enum ButtonOffset_t {
00290 LFrPawOffset = LFrLegOrder,
00291 RFrPawOffset = RFrLegOrder,
00292 LBkPawOffset = LBkLegOrder,
00293 RBkPawOffset = RBkLegOrder,
00294 ChinButOffset= 4,
00295 BackButOffset,
00296 HeadFrButOffset,
00297 HeadBkButOffset,
00298 TailLeftButOffset,
00299 TailCenterButOffset,
00300 TailRightButOffset,
00301 };
00302
00303
00304 const char* const buttonNames[NumButtons] = {
00305 "LFrPaw","RFrPaw","LBkPaw","RBkPaw",
00306 "ChinBut","BackBut","HeadFrBut","HeadBkBut",
00307 "TailLeftBut","TailCenterBut","TailRightBut"
00308 };
00309
00310
00311
00312 enum SensorOffset_t {
00313 IRDistOffset = 0,
00314 BAccelOffset,
00315 LAccelOffset,
00316 DAccelOffset,
00317 ThermoOffset,
00318 PowerRemainOffset,
00319 PowerThermoOffset,
00320 PowerCapacityOffset,
00321 PowerVoltageOffset,
00322 PowerCurrentOffset
00323 };
00324
00325
00326 const char* const sensorNames[NumSensors] = {
00327 "IRDist",
00328 "BAccel","LAccel","DAccel",
00329 "Thermo",
00330 "PowerRemain","PowerThermo","PowerCapacity","PowerVoltage","PowerCurrent"
00331 };
00332
00333
00334
00335
00336
00337 const unsigned outputNameLen = 9;
00338
00339 const char* const outputNames[NumOutputs] = {
00340 "LFr:rotor",
00341 "LFr:elvtr",
00342 "LFr:knee~",
00343 "RFr:rotor",
00344 "RFr:elvtr",
00345 "RFr:knee~",
00346 "LBk:rotor",
00347 "LBk:elvtr",
00348 "LBk:knee~",
00349 "RBk:rotor",
00350 "RBk:elvtr",
00351 "RBk:knee~",
00352
00353 "NECK:tilt",
00354 "NECK:pan~",
00355 "NECK:roll",
00356
00357 "TAIL:tilt",
00358 "TAIL:pan~",
00359
00360 "MOUTH~~~~",
00361
00362 "LED:botL~",
00363 "LED:botR~",
00364 "LED:midL~",
00365 "LED:midR~",
00366 "LED:topL~",
00367 "LED:topR~",
00368 "LED:topBr",
00369
00370 "LED:bkL1~",
00371 "LED:bkL2~",
00372 "LED:bkL3~",
00373 "LED:bkR3~",
00374 "LED:bkR2~",
00375 "LED:bkR1~",
00376 "LED:tailL",
00377 "LED:tailC",
00378 "LED:tailR",
00379 "LED:faceB",
00380 "LED:faceA",
00381 "LED:faceC",
00382 "LED:light",
00383
00384 "LED:tlRed",
00385 "LED:tlBlu",
00386
00387 "EAR:left~",
00388 "EAR:right"
00389 };
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402 const char* const PrimitiveName [NumOutputs] = {
00403 "PRM:/r2/c1-Joint2:j1",
00404 "PRM:/r2/c1/c2-Joint2:j2",
00405 "PRM:/r2/c1/c2/c3-Joint2:j3",
00406 "PRM:/r4/c1-Joint2:j1",
00407 "PRM:/r4/c1/c2-Joint2:j2",
00408 "PRM:/r4/c1/c2/c3-Joint2:j3",
00409
00410 "PRM:/r3/c1-Joint2:j1",
00411 "PRM:/r3/c1/c2-Joint2:j2",
00412 "PRM:/r3/c1/c2/c3-Joint2:j3",
00413 "PRM:/r5/c1-Joint2:j1",
00414 "PRM:/r5/c1/c2-Joint2:j2",
00415 "PRM:/r5/c1/c2/c3-Joint2:j3",
00416
00417 "PRM:/r1/c1-Joint2:j1",
00418 "PRM:/r1/c1/c2-Joint2:j2",
00419 "PRM:/r1/c1/c2/c3-Joint2:j3",
00420
00421 "PRM:/r6/c2-Joint2:j2",
00422 "PRM:/r6/c1-Joint2:j1",
00423
00424 "PRM:/r1/c1/c2/c3/c4-Joint2:j4",
00425
00426 "PRM:/r1/c1/c2/c3/l1-LED2:l1",
00427 "PRM:/r1/c1/c2/c3/l4-LED2:l4",
00428 "PRM:/r1/c1/c2/c3/l2-LED2:l2",
00429 "PRM:/r1/c1/c2/c3/l5-LED2:l5",
00430 "PRM:/r1/c1/c2/c3/l3-LED2:l3",
00431 "PRM:/r1/c1/c2/c3/l6-LED2:l6",
00432 "PRM:/r1/c1/c2/c3/l7-LED2:l7",
00433
00434 "PRM:/r6/l1-LED2:l1",
00435 "PRM:/r6/l2-LED2:l2",
00436 "PRM:/r6/l3-LED2:l3",
00437 "PRM:/r6/l4-LED2:l4",
00438 "PRM:/r6/l5-LED2:l5",
00439 "PRM:/r6/l6-LED2:l6",
00440
00441 "PRM:/r6/l9-LED2:l9",
00442 "PRM:/r6/l7-LED2:l7",
00443 "PRM:/r6/l8-LED2:l8",
00444
00445 "PRM:/r1/c1/c2/c3/l8-LED2:l8",
00446 "PRM:/r1/c1/c2/c3/l9-LED2:l9",
00447 "PRM:/r1/c1/c2/c3/la-LED2:la",
00448 "PRM:/r1/c1/c2/c3/lb-LED2:lb",
00449
00450 "PRM:/r6/l2-LED2:l2",
00451 "PRM:/r6/l1-LED2:l1",
00452
00453 "PRM:/r1/c1/c2/c3/e1-Joint3:j5",
00454 "PRM:/r1/c1/c2/c3/e2-Joint3:j6"
00455 };
00456
00457
00458 const char* const SpeakerLocator="PRM:/r1/c1/c2/c3/s1-Speaker:S1";
00459
00460
00461 const char* const CameraLocator="PRM:/r1/c1/c2/c3/i1-FbkImageSensor:F1";
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489 const float DefaultPIDs[NumPIDJoints][3] =
00490 {
00491 { 0x16/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x08/(double)(1<<(16-0xF)) },
00492 { 0x14/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x06/(double)(1<<(16-0xF)) },
00493 { 0x23/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x05/(double)(1<<(16-0xF)) },
00494 { 0x16/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x08/(double)(1<<(16-0xF)) },
00495 { 0x14/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x06/(double)(1<<(16-0xF)) },
00496 { 0x23/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x05/(double)(1<<(16-0xF)) },
00497 { 0x16/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x08/(double)(1<<(16-0xF)) },
00498 { 0x14/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x06/(double)(1<<(16-0xF)) },
00499 { 0x23/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x05/(double)(1<<(16-0xF)) },
00500 { 0x16/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x08/(double)(1<<(16-0xF)) },
00501 { 0x14/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x06/(double)(1<<(16-0xF)) },
00502 { 0x23/(double)(1<<(16-0xE)), 0x04/(double)(1<<(16-0x2)), 0x05/(double)(1<<(16-0xF)) },
00503
00504 { 0x0A/(double)(1<<(16-0xE)), 0x08/(double)(1<<(16-0x2)), 0x0C/(double)(1<<(16-0xF)) },
00505 { 0x0D/(double)(1<<(16-0xE)), 0x08/(double)(1<<(16-0x2)), 0x0B/(double)(1<<(16-0xF)) },
00506 { 0x0A/(double)(1<<(16-0xE)), 0x08/(double)(1<<(16-0x2)), 0x0C/(double)(1<<(16-0xF)) },
00507
00508 { 0x0A/(double)(1<<(16-0xE)), 0x00/(double)(1<<(16-0x2)), 0x18/(double)(1<<(16-0xF)) },
00509 { 0x07/(double)(1<<(16-0xE)), 0x00/(double)(1<<(16-0x2)), 0x11/(double)(1<<(16-0xF)) },
00510
00511 { 0x0E/(double)(1<<(16-0xE)), 0x08/(double)(1<<(16-0x2)), 0x10/(double)(1<<(16-0xF)) }
00512 };
00513
00514
00515 const unsigned char DefaultPIDShifts[3] = {0x0E, 0x02, 0x0F};
00516
00517
00518
00519
00520
00521
00522 const float MaxOutputSpeed[NumOutputs] = {
00523 2.8143434e-03,
00524 2.4980025e-03,
00525 2.8361600e-03,
00526 2.8143434e-03,
00527 2.4980025e-03,
00528 2.8361600e-03,
00529 2.8143434e-03,
00530 2.4980025e-03,
00531 2.8361600e-03,
00532 2.8143434e-03,
00533 2.4980025e-03,
00534 2.8361600e-03,
00535
00536 2.1053034e-03,
00537 3.0106930e-03,
00538 3.0106930e-03,
00539
00540 4.4724062e-03,
00541 4.4724062e-03,
00542
00543 4.3742314e-03,
00544
00545 0,0,0,
00546 0,0,0,
00547 0,
00548 0,0,0,
00549 0,0,0,
00550 0,0,0,
00551 0,0,0,
00552 0,
00553 0,0,
00554
00555 0,0
00556 };
00557
00558 #ifndef RAD
00559
00560 #define RAD(deg) (((deg) * M_PI ) / 180.0)
00561
00562 #define __RI_RAD_FLAG
00563 #endif
00564
00565
00566 enum MinMaxRange_t { MinRange,MaxRange };
00567
00568
00569 const double outputRanges[NumOutputs][2] =
00570 {
00571 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00572 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00573 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00574 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00575
00576 { RAD(-82),RAD(43) },{ RAD(-89.6),RAD(89.6) },{ RAD(-29),RAD(29) },
00577
00578 { RAD(-22),RAD(22) },{ RAD(-22),RAD(22) },
00579
00580 { RAD(-47),RAD(-3) },
00581
00582 {0,1},{0,1},{0,1},
00583 {0,1},{0,1},{0,1},
00584 {0,1},
00585 {0,1},{0,1},{0,1},
00586 {0,1},{0,1},{0,1},
00587 {0,1},{0,1},{0,1},
00588 {0,1},{0,1},{0,1},
00589 {0,1},
00590 {0,1},{0,1},
00591
00592 {0,1},{0,1}
00593 };
00594
00595
00596 const double mechanicalLimits[NumOutputs][2] =
00597 {
00598 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00599 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00600 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00601 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00602
00603 { RAD(-85),RAD(46) },{ RAD(-92.6),RAD(92.6) },{ RAD(-32),RAD(32) },
00604
00605 { RAD(-25),RAD(25) },{ RAD(-25),RAD(25) },
00606
00607 { RAD(-50),RAD(0) },
00608
00609 {0,1},{0,1},{0,1},
00610 {0,1},{0,1},{0,1},
00611 {0,1},
00612 {0,1},{0,1},{0,1},
00613 {0,1},{0,1},{0,1},
00614 {0,1},{0,1},{0,1},
00615 {0,1},{0,1},{0,1},
00616 {0,1},
00617 {0,1},{0,1},
00618
00619 {0,1},{0,1}
00620 };
00621
00622 #ifdef __RI_RAD_FLAG
00623 #undef RAD
00624 #undef __RI_RAD_FLAG
00625 #endif
00626
00627 }
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640 #endif