urgCheckVersion.cpp

00001 /*
00002   バージョン情報を読み出してドライバの情報を更新
00003   Satofumi KAMIMURA
00004   $Id$
00005 */
00006 
00007 #include "urgCtrl.h"
00008 
00009 enum {
00010   VersionLines = 8,
00011 };
00012 
00013 
00014 int URGCtrl::getVersionInfo(char lines[][LineLength]) {
00015   if (!isConnected()) {
00016     throw URG_Exception("URG is not connected");
00017   }
00018 
00019   // SCIP1.0 だと TMx コマンドが使えないので、SCIP2.0 に変更する
00020   con->send("SCIP2.0\r", 8);
00021   char buffer[8];
00022   con->recv(buffer, 8, 130);
00023   skipReply(2);
00024 
00025   con->send("VV\r", 3);
00026   for (int i = 0; i < VersionLines; ++i) {
00027     if ((con->recv_line(lines[i], LineLength, 150) <= 0) &&
00028         (i < (VersionLines-1))) {
00029       return -1;
00030     }
00031   }
00032   return 0;
00033 }
00034 
00035 
00036 void URGCtrl::checkVersion(void) {
00037 
00038   enableTimestamp = false;
00039   enableOver4096 = false;
00040   eachDataByte = 2;
00041 
00042   // バージョン情報の読み出し
00043   char lines[VersionLines][LineLength];
00044   if (getVersionInfo(lines) < 0) {
00045     return;
00046   }
00047 
00048   // タイムスタンプモードが利用可能かの判定
00049   //if (! strcmp("PROD:SOKUIKI Sensor TOP-URG UTM-X001S;E", lines[PROD])) {
00050   enableTimestamp = true;
00051   if (con) {
00052     con->setTimestampMode(true);
00053   }
00054   //}
00055 
00056   // 受信モードを変更できるかの判定
00057   if (!strcmp("PROD:SOKUIKI Sensor URG-X003", lines[PROD])) {
00058     enableOver4096 = true;
00059 
00060     // 現在の受信モード時のバイト数を判定
00061     if (strncmp("PROT:00003,(SCIP1.0z", lines[PROT], 20)) {
00062       eachDataByte = 3;
00063     }
00064   }
00065 
00066 #if 0
00067   // レーザ出力を On にする
00068   // 本来は、専用コマンドか capture() で処理すべきだが、保留。次の実装で対応?
00069   con->send("L1\r", 3);
00070 
00071   char buffer[7];
00072   con->recv(buffer, 7, 230);
00073 #endif
00074 }
00075 

Generated on Mon Apr 13 22:52:04 2009 by  doxygen 1.5.7.1