00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "Devices/VCC4.H"
00040 #include "Component/OptionManager.H"
00041 #include "Devices/DeviceOpts.H"
00042 #include "Util/log.H"
00043
00044 #include <cmath>
00045 #include <string.h>
00046
00047
00048 VCC4::VCC4(OptionManager& mgr, const std::string& descrName,
00049 const std::string& tagName) :
00050 ModelComponent(mgr, descrName, tagName),
00051 itsPort(new Serial(mgr)),
00052 itsSerialDevice(&OPT_VCC4serialDevice, this),
00053 itsUnitNo(&OPT_VCC4unitNo, this),
00054 itsPulseRatio(&OPT_VCC4pulseRatio, this),
00055 itsMaxAngle(&OPT_VCC4maxAngle, this)
00056 {
00057
00058 addSubComponent(itsPort);
00059 }
00060
00061
00062 VCC4::~VCC4(void)
00063 { }
00064
00065
00066 void VCC4::start1()
00067 {
00068
00069 itsPort->configure(itsSerialDevice.getVal().c_str(), 9600, "8N1", false, true, 1);
00070 }
00071
00072
00073 void VCC4::stop1()
00074 {
00075 PlainCommand (VCC4_EnterLocalMode);
00076 }
00077
00078
00079 int VCC4::CameraInitialize (bool goHome)
00080 {
00081 int err, init_cmd;
00082
00083
00084 PlainCommand (VCC4_EnterHostMode);
00085 PlainCommand (VCC4_SetCameraPowerON);
00086
00087
00088 if (goHome) init_cmd = VCC4_PTinit1;
00089 else init_cmd = VCC4_PTinit2;
00090
00091 while (true)
00092 {
00093 err = PlainCommand (init_cmd, false);
00094 if ((err & VCC4_MODE_ERR) == 0) break;
00095
00096 usleep (10000);
00097 }
00098
00099
00100 if (itsPulseRatio.getVal() == 0.0F) {
00101 err = PlainCommand (VCC4_GetPanGRatio);
00102 if (err != 0) LERROR("Error in VCC4_GetPanGRatio");
00103 else itsPulseRatio.setVal((float)getAbsNum (4) / 1.0e5F);
00104 }
00105
00106
00107 if (itsMaxAngle.getVal() == 0.0F) {
00108 err = PlainCommand (VCC4_GetAngleRatio2);
00109 if (err != 0)
00110 {
00111 LERROR("Error in VCC4_GetAngleRatio2");
00112 }
00113 else
00114 {
00115 float ang = 0.0F;
00116 err = getOneAngle(ang); itsMaxAngle.setVal(ang);
00117 if (err !=0) LERROR("Error in getOneAngle");
00118 }
00119 }
00120
00121
00122 PlainCommand (VCC4_GetUnitName);
00123 return (err);
00124 }
00125
00126
00127
00128 int VCC4::gotoPosition(float pan, float tilt, bool wait)
00129 {
00130 int err;
00131 float max = 0.0F, min = 0.0F;
00132
00133 PlainCommand (VCC4_GetPTAngle0);
00134 getTwoAngles (min, max);
00135 if (pan < min)
00136 {
00137 LERROR("VCC4: pan angle too small: %f - go to minimum angle %f instead",
00138 pan, min);
00139 pan = min;
00140 }
00141 if (pan > max)
00142 {
00143 LERROR("VCC4: pan angle too large: %f - go to maximum angle %f instead",
00144 pan, max);
00145 pan = max;
00146 }
00147
00148 PlainCommand (VCC4_GetPTAngle1);
00149 getTwoAngles (min, max);
00150 if (tilt < min)
00151 {
00152 LERROR("VCC4: tilt angle too small: %f - go to minimum angle %f instead",
00153 tilt, min);
00154 tilt = min;
00155 }
00156
00157 if (tilt > max)
00158 {
00159 LERROR("VCC4: tilt angle too large: %f - go to maximum angle %f instead",
00160 tilt, max);
00161 tilt = max;
00162 }
00163
00164 err = AngleCommand (VCC4_SetPTAngle2, pan, tilt);
00165 err = err | getPosition (pan, tilt, wait);
00166 return err;
00167 }
00168
00169
00170
00171
00172 int VCC4::getPosition (float& pan, float& tilt, bool wait)
00173 {
00174 int err;
00175 err = PlainCommand (VCC4_GetPTAngle2, wait);
00176 getTwoAngles (pan, tilt);
00177 return err;
00178 }
00179
00180
00181
00182 int VCC4::PlainCommand (int cmdno, bool wait)
00183 {
00184 int i = getIndex (cmdno);
00185 if (i == VCC4_INVALID_COMMAND) return i;
00186 if (command[i].cmdtyp != VCC4_EMBED_NONE) return (VCC4_INVALID_COMMAND);
00187
00188 if (wait) return WaitRawCommand (cmdno);
00189 else return SendRawCommand (cmdno);
00190 }
00191
00192
00193
00194 int VCC4::AbsNumCommand (int cmdno, unsigned int value, bool wait)
00195 {
00196 int i, err;
00197 i = getIndex (cmdno);
00198 if (i == VCC4_INVALID_COMMAND) return i;
00199 if (command[i].cmdtyp != VCC4_EMBED_NUM) return (VCC4_INVALID_COMMAND);
00200
00201 err = intToHexString (value, &(paramString[0]), command[i].cmdparamlen);
00202 if (err != command[i].cmdparamlen) return VCC4_INVALID_NUMBER;
00203
00204 if (wait) return WaitRawCommand (cmdno, &(paramString[0]));
00205 else return SendRawCommand (cmdno, &(paramString[0]));
00206 }
00207
00208
00209
00210 int VCC4::getOneAngle (float& angle)
00211 {
00212 int val;
00213 val = hexStringToInt (&(ReplyString[0]), 4);
00214 if (val < 0) return val;
00215
00216 angle = (float)(val - 0x8000) * itsPulseRatio.getVal();
00217 return VCC4_SUCCESS;
00218 }
00219
00220
00221
00222 int VCC4::getTwoAngles (float& angle1, float& angle2)
00223 {
00224 int val1, val2;
00225 val1 = hexStringToInt (&(ReplyString[0]), 4);
00226 val2 = hexStringToInt (&(ReplyString[4]), 4);
00227 if (val1 < 0) return val1;
00228 if (val2 < 0) return val2;
00229
00230 angle1 = (float)(val1 - 0x8000) * itsPulseRatio.getVal();
00231 angle2 = (float)(val2 - 0x8000) * itsPulseRatio.getVal();
00232
00233 return VCC4_SUCCESS;
00234 }
00235
00236
00237
00238 int VCC4::AngleCommand (int cmdno, float angle1, float angle2, bool wait)
00239 {
00240 unsigned int code1, code2;
00241
00242 int i = getIndex (cmdno);
00243 if (i == VCC4_INVALID_COMMAND) return i;
00244 if (command[i].cmdtyp != VCC4_EMBED_ANG) return (VCC4_INVALID_COMMAND);
00245
00246 if ((fabs(angle1) > itsMaxAngle.getVal()) ||
00247 (fabs(angle2) > itsMaxAngle.getVal()))
00248 return VCC4_INVALID_ANGLE;
00249
00250 code1 = (unsigned int)((int)(angle1 / itsPulseRatio.getVal()) + 0x8000);
00251 code2 = (unsigned int)((int)(angle2 / itsPulseRatio.getVal()) + 0x8000);
00252
00253 intToHexString (code1, &(paramString[0]), 4);
00254 intToHexString (code2, &(paramString[4]), 4);
00255
00256 if (wait) return WaitRawCommand (cmdno, &(paramString[0]));
00257 else return SendRawCommand (cmdno, &(paramString[0]));
00258 }
00259
00260
00261
00262 int VCC4::StringCommand (int cmdno, char* string, bool wait)
00263 {
00264 int i = getIndex (cmdno);
00265 if (i == VCC4_INVALID_COMMAND) return i;
00266 if (command[i].cmdtyp != VCC4_EMBED_STR) return (VCC4_INVALID_COMMAND);
00267
00268 if (wait) return WaitRawCommand (cmdno, string);
00269 else return SendRawCommand (cmdno, string);
00270 }
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280 int VCC4::intToHexString (unsigned int value, char* buf, unsigned int length)
00281 {
00282 int i, j;
00283 unsigned int p;
00284
00285 for ((i = length-1, j = 0); i >= 0; (i--, j++))
00286 {
00287 p = ((0xF << (4*i)) & value) >> (4*i);
00288 buf[j] = (p < 0xA) ? ('0' + p):('A' + p - 0xA);
00289 }
00290
00291 if ((value >> (4*length)) != 0)
00292 return VCC4_NUM_OVERFLOW;
00293 else
00294 return length;
00295 }
00296
00297
00298
00299 int VCC4::hexStringToInt (char* buf, unsigned int length)
00300 {
00301 int i, p;
00302 unsigned int val = 0;
00303
00304 for (i = 0; i < (int)length; i++)
00305 {
00306 if (buf[i] == '\x00') return VCC4_BUF_UNDERFLOW;
00307 p = (int)((buf[i] <= '9') ? (buf[i] - '0'):(buf[i] - 'A' + 0xA));
00308 val = (val << 4) | (p & 0xF);
00309 }
00310 return val;
00311 }
00312
00313
00314
00315 int VCC4::WaitRawCommand (int cmdno, char* param)
00316 {
00317 int err;
00318 while (true)
00319 {
00320 err = SendRawCommand (cmdno, param);
00321 if ((err & VCC4_BUSY_ERR) == 0) break;
00322 if ((err & VCC4_MODE_ERR) != 0) break;
00323
00324 usleep (10000);
00325 }
00326 return err;
00327 }
00328
00329
00330
00331 int VCC4::SendRawCommand (int cmdno, char* param)
00332 {
00333 char cmd_string[30];
00334
00335 int i = getIndex (cmdno);
00336 if (i == VCC4_INVALID_COMMAND)
00337 {
00338 LERROR("VCC4::SendRawCommand - invalid command number: %i", cmdno);
00339 return (i);
00340 }
00341
00342
00343 bzero (cmd_string, sizeof(cmd_string));
00344 memcpy (cmd_string, command[i].cmdstr, command[i].cmdlen);
00345
00346
00347 cmd_string[2] = '0' + (char)(itsUnitNo.getVal());
00348
00349
00350 if (command[i].cmdparamlen > 0)
00351 {
00352 if (param == NULL)
00353 {
00354 LERROR ("VCC4::SendRawCommand - invalid parameter pointer");
00355 return (VCC4_INVALID_PARAM);
00356 }
00357
00358
00359 memcpy (&(cmd_string[command[i].cmdparamstart - 1]), param,
00360 command[i].cmdparamlen);
00361 }
00362
00363
00364 if (!itsPort->write (cmd_string, command[i].cmdlen))
00365 {
00366 LERROR("VCC4::SendRawCommand - error writing to the device");
00367 return (VCC4_IO_ERR);
00368 }
00369 return (getReply());
00370 }
00371
00372
00373
00374
00375
00376 int VCC4::getReply (void)
00377 {
00378 char rep_string[30];
00379 bool endfound = false;
00380 int err, j;
00381
00382 bzero (rep_string, sizeof(rep_string));
00383 bzero (ReplyString, sizeof(ReplyString));
00384
00385 for (j = 0; ((j < (int)sizeof(rep_string)) && !endfound); j++)
00386 {
00387 rep_string[j] = itsPort->read();
00388 endfound = (rep_string[j] == '\xEF');
00389 }
00390
00391 if (!endfound)
00392 {
00393 LERROR("VCC4::getReply - reply string overflow");
00394 return (VCC4_REPLY_ERR);
00395 }
00396
00397 if (j < 6)
00398 {
00399 LERROR("VCC4::getReply - reply string too short: %i", j);
00400 return (VCC4_REPLY_ERR);
00401 }
00402
00403
00404 if (j > 6) memcpy (ReplyString, &(rep_string[5]), (j-6));
00405
00406
00407 err = (((int)(rep_string[3] - '0') & 0xF) << 12)
00408 | (((int)(rep_string[4] - '0') & 0xF) << 8);
00409
00410 return (err);
00411 }
00412
00413
00414
00415 int VCC4::getIndex (int cmdno)
00416 {
00417 int i;
00418 bool found = false;
00419
00420 for (i = 0; ((i < VCC4_CMDMAX) && !found); i++)
00421 if (command[i].cmdno == cmdno) found = true;
00422 i--;
00423 if (!found) i = VCC4_INVALID_COMMAND;
00424 return (i);
00425 }
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441 VCC4CMD VCC4::command[VCC4_CMDMAX] = {
00442 {2,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA0','\x30','\xEF'}},
00443 {3,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA0','\x31','\xEF'}},
00444 {4,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA1','\x30','\xEF'}},
00445 {5,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA1','\x31','\xEF'}},
00446 {6,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA1','\x32','\xEF'}},
00447 {7,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA1','\x33','\xEF'}},
00448 {8,1,10,4,6,{'\xFF','\x30','\x30','\x00','\xB0','*','*','*','*','\xEF'}},
00449 {9,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xB1','\x30','\xEF'}},
00450 {10,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xB1','\x31','\xEF'}},
00451 {11,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA2','\x30','\xEF'}},
00452 {12,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA2','\x31','\xEF'}},
00453 {13,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA2','\x32','\xEF'}},
00454 {14,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA2','\x33','\xEF'}},
00455 {15,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA2','\x34','\xEF'}},
00456 {16,1,8,2,6,{'\xFF','\x30','\x30','\x00','\xA3','*','*','\xEF'}},
00457 {17,0,6,0,6,{'\xFF','\x30','\x30','\x00','\xA4','\xEF'} },
00458 {18,1,10,4,6,{'\xFF','\x30','\x30','\x00','\xB3','*','*','*','*','\xEF'}},
00459 {19,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xB4','\x30','\xEF'}},
00460 {20,1,8,1,6,{'\xFF','\x30','\x30','\x00','\xB4','\x31','*','\xEF'}},
00461 {21,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xB4','\x32','\xEF'}},
00462 {22,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x30','\xEF'}},
00463 {23,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x31','\xEF'}},
00464 {24,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x32','\xEF'}},
00465 {25,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x33','\xEF'}},
00466 {26,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA8','\x30','\xEF'}},
00467 {28,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x36','\xEF'}},
00468 {29,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA8','\x31','\xEF'}},
00469 {30,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA8','\x32','\xEF'}},
00470 {31,1,9,2,6,{'\xFF','\x30','\x30','\x00','\xA5','\x37','*','*','\xEF'}},
00471 {32,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x38','\xEF'}},
00472 {33,1,9,2,6,{'\xFF','\x30','\x30','\x00','\xA5','\x39','*','*','\xEF'}},
00473 {34,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x3A','\xEF'}},
00474 {35,1,9,2,6,{'\xFF','\x30','\x30','\x00','\xA5','\x3B','*','*','\xEF'}},
00475 {36,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x3C','\xEF'}},
00476 {37,1,8,1,6,{'\xFF','\x30','\x30','\x00','\xA5','\x3D','*','\xEF'}},
00477 {38,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x3E','\xEF'}},
00478 {39,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA7','\x32','\xEF'}},
00479 {40,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA7','\x33','\xEF'}},
00480 {41,1,9,2,6,{'\xFF','\x30','\x30','\x00','\xA7','\x34','*','*','\xEF'}},
00481 {42,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA7','\x35','\xEF'}},
00482 {44,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA9','\x30','\xEF'}},
00483 {45,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA9','\x31','\xEF'}},
00484 {46,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA9','\x32','\xEF'}},
00485 {47,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA9','\x33','\xEF'}},
00486 {48,0,6,0,6,{'\xFF','\x30','\x30','\x00','\xAA','\xEF'} },
00487 {49,0,6,0,6,{'\xFF','\x30','\x30','\x00','\xAB','\xEF'} },
00488 {50,0,6,0,6,{'\xFF','\x30','\x30','\x00','\xAC','\xEF'} },
00489 {53,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xB4','\x33','\xEF'}},
00490 {57,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xBE','\x30','\xEF'}},
00491 {58,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xBE','\x31','\xEF'}},
00492 {59,1,9,3,6,{'\xFF','\x30','\x30','\x00','\x50','*','*','*','\xEF'}},
00493 {60,1,9,3,6,{'\xFF','\x30','\x30','\x00','\x51','*','*','*','\xEF'}},
00494 {61,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x52','\x30','\xEF'}},
00495 {62,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x52','\x31','\xEF'}},
00496 {63,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x53','\x30','\xEF'}},
00497 {64,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x53','\x31','\xEF'}},
00498 {65,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x53','\x32','\xEF'}},
00499 {66,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x53','\x33','\xEF'}},
00500 {67,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x53','\x34','\xEF'}},
00501 {69,0,6,0,6,{'\xFF','\x30','\x30','\x00','\x57','\xEF'} },
00502 {70,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x58','\x30','\xEF'}},
00503 {71,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x58','\x31','\xEF'}},
00504 {72,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x59','\x30','\xEF'}},
00505 {73,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x59','\x31','\xEF'}},
00506 {74,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x59','\x32','\xEF'}},
00507 {75,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x59','\x33','\xEF'}},
00508 {76,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x5B','\x30','\xEF'}},
00509 {77,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x5B','\x31','\xEF'}},
00510 {78,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x5C','\x30','\xEF'}},
00511 {79,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x5C','\x31','\xEF'}},
00512 {80,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x5C','\x32','\xEF'}},
00513 {81,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x5C','\x33','\xEF'}},
00514 {82,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x30','\x30','\xEF'}},
00515 {83,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x30','\x31','\xEF'}},
00516 {84,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x30','\x32','\xEF'}},
00517 {85,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x31','\x30','\xEF'}},
00518 {86,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x32','\x30','\xEF'}},
00519 {87,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x31','\x31','\xEF'}},
00520 {88,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x31','\x32','\xEF'}},
00521 {89,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x32','\x31','\xEF'}},
00522 {90,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x60','\x32','\x32','\xEF'}},
00523 {92,2,14,8,6,{'\xFF','\x30','\x30','\x00','\x62','*','*','*','*','*','*','*','*','\xEF'}},
00524 {93,0,6,0,6,{'\xFF','\x30','\x30','\x00','\x63','\xEF'} },
00525 {94,2,15,8,7,{'\xFF','\x30','\x30','\x00','\x64','\x30','*','*','*','*','*','*','*','*','\xEF'}},
00526 {95,2,15,8,7,{'\xFF','\x30','\x30','\x00','\x64','\x31','*','*','*','*','*','*','*','*','\xEF'}},
00527 {96,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x65','\x30','\xEF'}},
00528 {97,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x65','\x31','\xEF'}},
00529 {102,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x80','\x30','\xEF'}},
00530 {103,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x80','\x31','\xEF'}},
00531 {104,0,6,0,6,{'\xFF','\x30','\x30','\x00','\x86','\xEF'}},
00532 {106,0,6,0,6,{'\xFF','\x30','\x30','\x00','\x87','\xEF'}},
00533 {107,0,6,0,6,{'\xFF','\x30','\x30','\x00','\x88','\xEF'}},
00534 {108,1,7,1,6,{'\xFF','\x30','\x30','\x00','\x89','*','\xEF'}},
00535 {109,1,7,1,6,{'\xFF','\x30','\x30','\x00','\x8A','*','\xEF'}},
00536 {110,0,6,0,6,{'\xFF','\x30','\x30','\x00','\x8B','\xEF'}},
00537 {113,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8D','\x30','\xEF'}},
00538 {114,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8D','\x31','\xEF'}},
00539 {118,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8F','\x30','\xEF'}},
00540 {119,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8F','\x31','\xEF'}},
00541 {120,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x90','\x30','\xEF'}},
00542 {121,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x90','\x31','\xEF'}},
00543 {122,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x30','\xEF'}},
00544 {123,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x31','\xEF'}},
00545 {124,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x32','\xEF'}},
00546 {125,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x33','\xEF'}},
00547 {126,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x34','\xEF'}},
00548 {127,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x35','\xEF'}},
00549 {128,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x36','\xEF'}},
00550 {129,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x37','\xEF'}},
00551 {130,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x38','\xEF'}},
00552 {131,0,8,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x30','\x39','\xEF'}},
00553 {132,3,12,5,7,{'\xFF','\x30','\x30','\x00','\x91','\x31','*','*','*','*','*','\xEF'}},
00554 {133,3,10,3,7,{'\xFF','\x30','\x30','\x00','\x91','\x32','*','*','*','\xEF'}},
00555 {134,3,13,6,7,{'\xFF','\x30','\x30','\x00','\x91','\x33','*','*','*','*','*','*','\xEF'}},
00556 {135,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x34','\xEF'}},
00557 {136,3,13,6,7,{'\xFF','\x30','\x30','\x00','\x91','\x35','*','*','*','*','*','*','\xEF'}},
00558 {137,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x91','\x36','\xEF'}},
00559 {138,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x92','\x30','\xEF'}},
00560 {139,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x92','\x31','\xEF'}},
00561 {140,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x93','\x30','\xEF'}},
00562 {147,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x86','\x30','\xEF'}},
00563 {148,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8B','\x30','\xEF'}},
00564 {149,1,9,2,7,{'\xFF','\x30','\x30','\x00','\xA5','\x35','*','*','\xEF'}},
00565 {150,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA7','\x30','\xEF'}},
00566 {151,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xA7','\x31','\xEF'}},
00567 {152,0,7,0,6,{'\xFF','\x30','\x30','\x00','\xB1','\x32','\xEF'}},
00568 {155,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x94','\x30','\xEF'}},
00569 {156,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x94','\x31','\xEF'}},
00570 {157,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x95','\x30','\xEF'}},
00571 {158,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x95','\x31','\xEF'}},
00572 {159,0,8,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x34','\x30','\xEF'}},
00573 {160,0,8,0,6,{'\xFF','\x30','\x30','\x00','\xA5','\x34','\x31','\xEF'}},
00574 {164,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8E','\x30','\xEF'}},
00575 {165,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8E','\x31','\xEF'}},
00576 {166,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8E','\x32','\xEF'}},
00577 {167,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8E','\x33','\xEF'}},
00578 {168,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x8E','\x34','\xEF'}},
00579 {170,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x9A','\x30','\xEF'}},
00580 {171,0,7,0,6,{'\xFF','\x30','\x30','\x00','\x9A','\x31','\xEF'}}
00581 };
00582
00583
00584
00585
00586
00587