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
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #include "ESDDevice.h"
00050 #if defined (_WIN32)
00051 #include "../include/ntcan.h"
00052 #endif
00053 #if defined(__LINUX__)
00054 #include "ntcan.h"
00055 #endif
00056 #if defined (__QNX__)
00057 #include "../include/ntcan_qnx.h"
00058 #endif
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 int CESDDevice::getDeviceError(int iErrorState)
00073 {
00074 if(iErrorState == NTCAN_CONTR_BUSY)
00075 {
00076 warning("NTCAN_CONTR_BUSY");
00077 return ERRID_DEV_READERROR;
00078 }
00079 else if(iErrorState == NTCAN_CONTR_OFF_BUS)
00080 {
00081 warning("NTCAN_CONTR_OFF_BUS");
00082 return ERRID_DEV_READERROR;
00083 }
00084 else if(iErrorState == NTCAN_CONTR_WARN)
00085 {
00086 warning("NTCAN_CONTR_WARN");
00087 return ERRID_DEV_READERROR;
00088 }
00089 else if(iErrorState == NTCAN_ID_NOT_ENABLED)
00090 {
00091 warning("NTCAN_ID_NOT_ENABLED");
00092 return ERRID_DEV_READERROR;
00093 }
00094 #if defined(_WIN32)
00095 else if(iErrorState == NTCAN_INVALID_HANDLE)
00096 {
00097 warning("NTCAN_INVALID_HANDLE");
00098 return ERRID_DEV_READERROR;
00099 }
00100 else if(iErrorState == NTCAN_INVALID_HARDWARE)
00101 {
00102 warning("NTCAN_INVALID_HARDWARE");
00103 return ERRID_DEV_READERROR;
00104 }
00105 else if(iErrorState == NTCAN_INVALID_PARAMETER)
00106 {
00107 warning("NTCAN_INVALID_PARAMETER");
00108 return ERRID_DEV_READERROR;
00109 }
00110 else if(iErrorState == NTCAN_NET_NOT_FOUND)
00111 {
00112 warning("NTCAN_NET_NOT_FOUND");
00113 return ERRID_DEV_READERROR;
00114 }
00115 #endif
00116 else if(iErrorState == NTCAN_MESSAGE_LOST)
00117 {
00118 warning("NTCAN_MESSAGE_LOST");
00119 return ERRID_DEV_READERROR;
00120 }
00121 else if(iErrorState == NTCAN_NO_ID_ENABLED)
00122 {
00123 warning("NTCAN_NO_ID_ENABLED");
00124 return ERRID_DEV_READERROR;
00125 }
00126 else if(iErrorState == NTCAN_RX_TIMEOUT)
00127 {
00128 warning("NTCAN_RX_TIMEOUT");
00129 return ERRID_DEV_READTIMEOUT;
00130 }
00131 else if(iErrorState == NTCAN_TX_TIMEOUT)
00132 {
00133 warning("NTCAN_TX_TIMEOUT");
00134 return ERRID_DEV_WRITETIMEOUT;
00135 }
00136 else if(iErrorState == NTCAN_TX_ERROR)
00137 {
00138 warning("NTCAN_TX_ERROR");
00139 return ERRID_DEV_WRITEERROR;
00140 }
00141 return ERRID_DEV_WRITEERROR;
00142 }
00143
00144 int CESDDevice::setBaudRate()
00145 {
00146 int iRetVal = 0;
00147 m_iErrorState = 0;
00148 switch( m_iBaudRate )
00149 {
00150 case 125:
00151 m_uiBaudRate=0x06;
00152 break;
00153 case 250:
00154 m_uiBaudRate=0x04;
00155 break;
00156 case 500:
00157 m_uiBaudRate=0x02;
00158 break;
00159 case 1000:
00160 m_uiBaudRate=0x00;
00161 break;
00162 default:
00163 m_uiBaudRate=0x04;
00164 break;
00165 }
00166
00167 iRetVal = canSetBaudrate(m_hDevice, m_uiBaudRate);
00168 if(iRetVal != NTCAN_SUCCESS)
00169 {
00170 warning("can set baudrate 0x%x failed Errorcode: %d", m_uiBaudRate, iRetVal);
00171 getDeviceError(iRetVal);
00172 m_iErrorState = ERRID_DEV_INITERROR;
00173 return m_iErrorState;
00174 }
00175 iRetVal = canSetBaudrate(m_hSyncDevice, m_uiBaudRate);
00176 if(iRetVal != NTCAN_SUCCESS)
00177 {
00178 warning("can set baudrate 0x%x failed Errorcode: %d", m_uiBaudRate, iRetVal);
00179 getDeviceError(iRetVal);
00180 m_iErrorState = ERRID_DEV_INITERROR;
00181 return m_iErrorState;
00182 }
00183 return m_iErrorState;
00184 }
00185
00186 int CESDDevice::setMessageId(unsigned long uiMessageId)
00187 {
00188 int iRetVal = 0;
00189 m_iErrorState = 0;
00190 iRetVal = canIdAdd(m_hDevice, uiMessageId);
00191 if(iRetVal != NTCAN_SUCCESS)
00192 {
00193 warning("can add ID failed Errorcode: %d", iRetVal);
00194 getDeviceError(iRetVal);
00195 m_iErrorState = ERRID_DEV_INITERROR;
00196 return m_iErrorState;
00197 }
00198 return m_iErrorState;
00199 }
00200
00201 int CESDDevice::clearReadQueue()
00202 {
00203 int iRetVal = 0;
00204 int32_t iNumberOfMessages = 1;
00205 static CMSG clESDProtocolMessage;
00206 m_iErrorState = 0;
00207 do
00208 {
00209 iRetVal = canRead(m_hDevice, &clESDProtocolMessage, &iNumberOfMessages, NULL);
00210 }while( ! ( ( iNumberOfMessages == 0 ) && ( iRetVal == NTCAN_SUCCESS ) ) );
00211
00212 return m_iErrorState;
00213 }
00214
00215 int CESDDevice::reinit(unsigned char ucBaudRateId)
00216 {
00217 int i, iRetVal = 0;
00218 m_iErrorState = 0;
00219 if(!m_bInitFlag)
00220 {
00221 warning("device not initialized");
00222 m_iErrorState = ERRID_DEV_NOTINITIALIZED;
00223 return m_iErrorState;
00224 }
00225 switch(ucBaudRateId)
00226 {
00227 case BAUDRATEID_MOD_CAN_125K:
00228 m_iBaudRate = 125;
00229 break;
00230 case BAUDRATEID_MOD_CAN_250K:
00231 m_iBaudRate = 250;
00232 break;
00233 case BAUDRATEID_MOD_CAN_500K:
00234 m_iBaudRate = 500;
00235 break;
00236 case BAUDRATEID_MOD_CAN_1000K:
00237 m_iBaudRate = 1000;
00238 break;
00239 }
00240 iRetVal = canClose(m_hDevice);
00241 if(iRetVal != NTCAN_SUCCESS)
00242 {
00243 warning("can close failed Errorcode: %d", iRetVal);
00244 getDeviceError(iRetVal);
00245 m_iErrorState = ERRID_DEV_EXITERROR;
00246 }
00247 iRetVal = canClose(m_hSyncDevice);
00248 if(iRetVal != NTCAN_SUCCESS)
00249 {
00250 warning("can close failed Errorcode: %d", iRetVal);
00251 getDeviceError(iRetVal);
00252 m_iErrorState = ERRID_DEV_EXITERROR;
00253 }
00254 m_bInitFlag = false;
00255 iRetVal = canOpen(
00256 m_iDeviceId,
00257 0,
00258 m_uiQueueSize,
00259 m_uiQueueSize,
00260 20*m_uiTimeOut,
00261 m_uiTimeOut,
00262 &m_hDevice);
00263 if(iRetVal != NTCAN_SUCCESS)
00264 {
00265 warning("can open failed Errorcode: %d", iRetVal);
00266 getDeviceError(iRetVal);
00267 m_iErrorState = ERRID_DEV_INITERROR;
00268 return m_iErrorState;
00269 }
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286 m_iErrorState = setBaudRate();
00287 if(m_iErrorState != 0)
00288 return m_iErrorState;
00289
00290 for(i = 0; i <= m_iModuleCountMax; i++)
00291 {
00292 iRetVal = canIdAdd(m_hDevice, (MSGID_ACK + i));
00293 if(iRetVal != NTCAN_SUCCESS)
00294 {
00295 warning("can add ID failed Errorcode: %d", iRetVal);
00296 getDeviceError(iRetVal);
00297 m_iErrorState = ERRID_DEV_INITERROR;
00298 return m_iErrorState;
00299 }
00300 iRetVal = canIdAdd(m_hDevice, (MSGID_STATE + i));
00301 if(iRetVal != NTCAN_SUCCESS)
00302 {
00303 warning("can add ID failed Errorcode: %d", iRetVal);
00304 getDeviceError(iRetVal);
00305 m_iErrorState = ERRID_DEV_INITERROR;
00306 return m_iErrorState;
00307 }
00308 }
00309
00310 for(i = 0; i < MAX_MP55; i++ )
00311 {
00312 iRetVal = canIdAdd(m_hDevice, (MSGID_MP55_RECV + i));
00313 if(iRetVal != NTCAN_SUCCESS)
00314 {
00315 warning("can add ID failed Errorcode: %d", iRetVal);
00316 getDeviceError(iRetVal);
00317 m_iErrorState = ERRID_DEV_INITERROR;
00318 return m_iErrorState;
00319 }
00320
00321 iRetVal = canIdAdd(m_hDevice, (0x180 + i));
00322 if(iRetVal != NTCAN_SUCCESS)
00323 {
00324 warning("can add ID failed Errorcode: %d", iRetVal);
00325 getDeviceError(iRetVal);
00326 m_iErrorState = ERRID_DEV_INITERROR;
00327 return m_iErrorState;
00328 }
00329 }
00330
00331 for(i = 0; i < MAX_SCHUNK; i++ )
00332 {
00333 iRetVal = canIdAdd(m_hDevice, (MSGID_SCHUNK_RECV + i));
00334 if(iRetVal != NTCAN_SUCCESS)
00335 {
00336 warning("can add ID failed Errorcode: %d", iRetVal);
00337 getDeviceError(iRetVal);
00338 m_iErrorState = ERRID_DEV_INITERROR;
00339 return m_iErrorState;
00340 }
00341 }
00342
00343 iRetVal = canIdAdd(m_hSyncDevice, MSGID_ALL);
00344 if(iRetVal != NTCAN_SUCCESS)
00345 {
00346 warning("can add ID failed Errorcode: %d", iRetVal);
00347 getDeviceError(iRetVal);
00348 m_iErrorState = ERRID_DEV_INITERROR;
00349 return m_iErrorState;
00350 }
00351
00352 m_iErrorState = clearReadQueue();
00353 if(m_iErrorState != 0)
00354 return m_iErrorState;
00355
00356 if(m_iErrorState == 0)
00357 m_bInitFlag = true;
00358
00359 updateModuleIdMap();
00360 return m_iErrorState;
00361 }
00362
00363 int CESDDevice::readDevice(CProtocolMessage& rclProtocolMessage)
00364 {
00365 int iRetVal = 0;
00366 int32_t iNumberOfMessages = 1;
00367 CMSG clESDProtocolMessage;
00368 m_iErrorState = 0;
00369
00370 #if defined ( _WIN32 )
00371 float fTimeDiff = 0;
00372 double dFrequency = 0;
00373 LARGE_INTEGER liTime, liTimeStart, liTimeEnd;
00374
00375 QueryPerformanceFrequency( &liTime );
00376 dFrequency = liTime.LowPart;
00377
00378 QueryPerformanceCounter( &liTimeStart );
00379 do
00380 {
00381 iNumberOfMessages = 1;
00382 iRetVal = canTake( m_hDevice, &clESDProtocolMessage, &iNumberOfMessages );
00383 if(iRetVal != NTCAN_SUCCESS)
00384 {
00385 warning("can read failed Errorcode: %d", iRetVal);
00386 m_iErrorState = getDeviceError(iRetVal);
00387 return m_iErrorState;
00388 }
00389 QueryPerformanceCounter( &liTimeEnd );
00390 fTimeDiff = (float)(liTimeEnd.LowPart - liTimeStart.LowPart) / (float)dFrequency * 1000;
00391
00392 if( fTimeDiff >= m_uiTimeOut )
00393 {
00394 m_iErrorState = ERRID_DEV_READTIMEOUT;
00395 return m_iErrorState;
00396 }
00397
00398 } while( iNumberOfMessages == 0 );
00399 #else
00400 iRetVal = canRead(m_hDevice, &clESDProtocolMessage, &iNumberOfMessages, NULL);
00401 if(iRetVal != NTCAN_SUCCESS)
00402 {
00403 warning("can read failed Errorcode: %d", iRetVal);
00404 m_iErrorState = getDeviceError(iRetVal);
00405 return m_iErrorState;
00406 }
00407 #endif
00408
00409 rclProtocolMessage.m_uiMessageId = clESDProtocolMessage.id;
00410 rclProtocolMessage.m_ucMessageLength = clESDProtocolMessage.len;
00411 memcpy(rclProtocolMessage.m_aucMessageData, clESDProtocolMessage.data, rclProtocolMessage.m_ucMessageLength);
00412 printMessage(rclProtocolMessage,READ);
00413
00414 return m_iErrorState;
00415 }
00416
00417 int CESDDevice::writeDevice(CProtocolMessage& rclProtocolMessage)
00418 {
00419 int iRetVal = 0;
00420 int32_t iNumberOfMessages = 1;
00421 CMSG clESDProtocolMessage;
00422 m_iErrorState = 0;
00423
00424
00425
00426 printMessage(rclProtocolMessage,WRITE);
00427 clESDProtocolMessage.id = rclProtocolMessage.m_uiMessageId;
00428 clESDProtocolMessage.len = rclProtocolMessage.m_ucMessageLength;
00429 if(rclProtocolMessage.m_bRTRFlag)
00430 clESDProtocolMessage.len |= 0x10;
00431 memcpy(clESDProtocolMessage.data, rclProtocolMessage.m_aucMessageData, rclProtocolMessage.m_ucMessageLength);
00432 iRetVal = canWrite(m_hDevice, &clESDProtocolMessage, &iNumberOfMessages, NULL);
00433
00434 if(iRetVal != NTCAN_SUCCESS)
00435 {
00436 warning("can send failed Errorcode: %d", iRetVal);
00437 m_iErrorState = getDeviceError(iRetVal);
00438 return m_iErrorState;
00439 }
00440
00441 return m_iErrorState;
00442 }
00443
00444
00445
00446
00447
00448
00449
00450 CESDDevice::CESDDevice() : m_hDevice(0), m_hSyncDevice(0), m_iDeviceId(-1), m_uiBaudRate(0), m_uiQueueSize(128), m_uiTimeOut(3)
00451 {
00452 initMessage("CESDDevice", g_iDebugLevel, g_bDebug, g_bDebugFile);
00453 }
00454
00455 CESDDevice::CESDDevice(const CESDDevice& rclESDDevice)
00456 {
00457 error(-1, "Sorry constructor is not implemented");
00458 }
00459
00460 CESDDevice::~CESDDevice()
00461 {
00462 exit();
00463 }
00464
00465
00466
00467
00468
00469
00470
00471 CESDDevice& CESDDevice::operator=(const CESDDevice& rclESDDevice)
00472 {
00473 error(-1, "Sorry operator= is not implemented");
00474 return *this;
00475 }
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489 void CESDDevice::setQueueSize(unsigned short uiQueueSize)
00490 {
00491 m_uiQueueSize = uiQueueSize;
00492 }
00493
00494 void CESDDevice::setTimeOut(unsigned long uiTimeOut)
00495 {
00496 m_uiTimeOut= uiTimeOut;
00497 }
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511 int CESDDevice::init()
00512 {
00513 return init(m_acInitString);
00514 }
00515
00516 int CESDDevice::init(const char* acInitString)
00517 {
00518 InitializeCriticalSection(&m_csDevice);
00519 int i, iRetVal = 0;
00520 int txTimeOut = 0;
00521 char* pcToken;
00522 char acString[128];
00523 if(m_bInitFlag)
00524 {
00525 warning("device already initialized");
00526 m_iErrorState = ERRID_DEV_ISINITIALIZED;
00527 return m_iErrorState;
00528 }
00529 m_iDeviceId = -1;
00530 m_iErrorState = 0;
00531 strncpy(m_acInitString,acInitString,128);
00532 strncpy(acString,acInitString,128);
00533 pcToken = strtok( acString, ":" );
00534 if( !pcToken )
00535 { m_iErrorState = ERRID_DEV_BADINITSTRING;
00536 return m_iErrorState;
00537 }
00538 if( strcmp( pcToken, "ESD" ) != 0 )
00539 { m_iErrorState = ERRID_DEV_BADINITSTRING;
00540 return m_iErrorState;
00541 }
00542 pcToken = strtok( NULL, "," );
00543 if( !pcToken )
00544 { m_iErrorState = ERRID_DEV_BADINITSTRING;
00545 return m_iErrorState;
00546 }
00547 m_iDeviceId = atoi(pcToken);
00548
00549 pcToken = strtok( NULL, "," );
00550 if( !pcToken )
00551 { m_iErrorState = ERRID_DEV_BADINITSTRING;
00552 return m_iErrorState;
00553 }
00554 m_iBaudRate = atoi(pcToken);
00555
00556 #if defined(__LINUX__)
00557 m_uiTimeOut = 6;
00558 #endif
00559 #if defined (_WIN32)
00560 switch( m_iBaudRate )
00561 {
00562 case 125:
00563 case 250:
00564 m_uiTimeOut = 4;
00565 break;
00566 case 500:
00567 m_uiTimeOut = 3;
00568 break;
00569 case 1000:
00570 m_uiTimeOut = 2;
00571 break;
00572 default:
00573 m_uiTimeOut = 10;
00574 break;
00575 }
00576 #endif
00577
00578 try
00579 {
00580 iRetVal = canOpen(
00581 m_iDeviceId,
00582 0,
00583 m_uiQueueSize,
00584 m_uiQueueSize,
00585 m_uiTimeOut,
00586 m_uiTimeOut,
00587 &m_hDevice);
00588 if(iRetVal != NTCAN_SUCCESS)
00589 {
00590 warning("can open failed Errorcode: %d", iRetVal);
00591 getDeviceError(iRetVal);
00592 m_iErrorState = ERRID_DEV_INITERROR;
00593 return m_iErrorState;
00594 }
00595 iRetVal = canOpen(
00596 m_iDeviceId,
00597 0,
00598 1,
00599 1,
00600 600,
00601 100,
00602 &m_hSyncDevice);
00603 if(iRetVal != NTCAN_SUCCESS)
00604 {
00605 warning("can open failed Errorcode: %d", iRetVal);
00606 getDeviceError(iRetVal);
00607 m_iErrorState = ERRID_DEV_INITERROR;
00608 return m_iErrorState;
00609 }
00610 }
00611 catch(...)
00612 {
00613 warning("init ESD device failed no library found");
00614 m_iErrorState = ERRID_DEV_NOLIBRARY;
00615 return m_iErrorState;
00616 }
00617
00618 for(i = 0; i <= m_iModuleCountMax; i++)
00619 {
00620 iRetVal = canIdAdd(m_hDevice, (MSGID_ACK + i));
00621 if(iRetVal != NTCAN_SUCCESS)
00622 {
00623 warning("can add ID failed Errorcode: %d", iRetVal);
00624 getDeviceError(iRetVal);
00625 m_iErrorState = ERRID_DEV_INITERROR;
00626 return m_iErrorState;
00627 }
00628 iRetVal = canIdAdd(m_hDevice, (MSGID_STATE + i));
00629 if(iRetVal != NTCAN_SUCCESS)
00630 {
00631 warning("can add ID failed Errorcode: %d", iRetVal);
00632 getDeviceError(iRetVal);
00633 m_iErrorState = ERRID_DEV_INITERROR;
00634 return m_iErrorState;
00635 }
00636 }
00637
00638 for(i = 0; i <= MAX_MP55; i++ )
00639 {
00640 iRetVal = canIdAdd(m_hDevice, (MSGID_MP55_RECV + i));
00641 if(iRetVal != NTCAN_SUCCESS)
00642 {
00643 warning("can add ID failed Errorcode: %d", iRetVal);
00644 getDeviceError(iRetVal);
00645 m_iErrorState = ERRID_DEV_INITERROR;
00646 return m_iErrorState;
00647 }
00648
00649 iRetVal = canIdAdd(m_hDevice, (0x180 + i));
00650 if(iRetVal != NTCAN_SUCCESS)
00651 {
00652 warning("can add ID failed Errorcode: %d", iRetVal);
00653 getDeviceError(iRetVal);
00654 m_iErrorState = ERRID_DEV_INITERROR;
00655 return m_iErrorState;
00656 }
00657 iRetVal = canIdAdd(m_hDevice, (0x600 + i));
00658 if(iRetVal != NTCAN_SUCCESS)
00659 {
00660 warning("can add ID failed Errorcode: %d", iRetVal);
00661 getDeviceError(iRetVal);
00662 m_iErrorState = ERRID_DEV_INITERROR;
00663 return m_iErrorState;
00664 }
00665 }
00666
00667 for(i = 0; i < MAX_SCHUNK; i++ )
00668 {
00669 iRetVal = canIdAdd(m_hDevice, (MSGID_SCHUNK_RECV + i));
00670 if(iRetVal != NTCAN_SUCCESS)
00671 {
00672 warning("can add ID failed Errorcode: %d", iRetVal);
00673 getDeviceError(iRetVal);
00674 m_iErrorState = ERRID_DEV_INITERROR;
00675 return m_iErrorState;
00676 }
00677 }
00678
00679 iRetVal = canIdAdd(m_hSyncDevice, MSGID_ALL);
00680 if(iRetVal != NTCAN_SUCCESS)
00681 {
00682 warning("can add ID failed Errorcode: %d", iRetVal);
00683 getDeviceError(iRetVal);
00684 m_iErrorState = ERRID_DEV_INITERROR;
00685 return m_iErrorState;
00686 }
00687
00688 m_iErrorState = setBaudRate();
00689 if(m_iErrorState != 0)
00690 return m_iErrorState;
00691
00692 m_iErrorState = clearReadQueue();
00693 if(m_iErrorState != 0)
00694 return m_iErrorState;
00695
00696 if(m_iErrorState == 0)
00697 m_bInitFlag = true;
00698
00699 updateModuleIdMap();
00700 return m_iErrorState;
00701 }
00702
00703 int CESDDevice::exit()
00704 {
00705 int iRetVal = 0;
00706 m_iErrorState = 0;
00707 if(!m_bInitFlag)
00708 {
00709 warning("device not initialized");
00710 m_iErrorState = ERRID_DEV_NOTINITIALIZED;
00711 return m_iErrorState;
00712 }
00713 EnterCriticalSection(&m_csDevice);
00714 iRetVal = canClose(m_hDevice);
00715 if(iRetVal != NTCAN_SUCCESS)
00716 {
00717 warning("can close failed Errorcode: %d", iRetVal);
00718 getDeviceError(iRetVal);
00719 m_iErrorState = ERRID_DEV_EXITERROR;
00720 }
00721 iRetVal = canClose(m_hSyncDevice);
00722 if(iRetVal != NTCAN_SUCCESS)
00723 {
00724 warning("can close failed Errorcode: %d", iRetVal);
00725 getDeviceError(iRetVal);
00726 m_iErrorState = ERRID_DEV_EXITERROR;
00727 }
00728 m_bInitFlag = false;
00729 LeaveCriticalSection(&m_csDevice);
00730 DeleteCriticalSection(&m_csDevice);
00731 return m_iErrorState;
00732 }
00733
00734 int CESDDevice::waitForStartMotionAll()
00735 {
00736 int iRetVal = 0;
00737 bool bRecieved = false;
00738 int32_t iNumberOfMessages = 1;
00739 CMSG clESDProtocolMessage;
00740 m_iErrorState = 0;
00741
00742 do
00743 {
00744 iRetVal = canRead(m_hSyncDevice, &clESDProtocolMessage, &iNumberOfMessages, NULL);
00745 if(iRetVal != NTCAN_SUCCESS)
00746 {
00747 warning("can read failed Errorcode: %d", iRetVal);
00748 m_iErrorState = getDeviceError(iRetVal);
00749 return m_iErrorState;
00750 }
00751 bRecieved = true;
00752 if(clESDProtocolMessage.id != MSGID_ALL)
00753 {
00754 debug(1, "received CAN-ID %x, expected %x", clESDProtocolMessage.id, MSGID_ALL);
00755 bRecieved = false;
00756 }
00757 if(clESDProtocolMessage.data[0] != CMDID_STARTMOVE)
00758 {
00759 debug(1, "wrong command ID");
00760 bRecieved = false;
00761 }
00762 }
00763 while(!bRecieved);
00764 return m_iErrorState;
00765 }
00766