|
rllib
1
|
00001 /*************************************************************************** 00002 rlhilschercif.cpp - description 00003 ------------------- 00004 begin : Tue Feb 13 2007 00005 copyright : (C) 2007 by Rainer Lehrig 00006 email : lehrig@t-online.de 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * * 00011 * This library is free software; you can redistribute it and/or modify * 00012 * it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as * 00013 * published by the Free Software Foundation * 00014 * * 00015 ***************************************************************************/ 00016 #include "rlhilschercif.h" 00017 #include <stdio.h> 00018 00019 // On Windows add *dll.lib to Makefile 00020 #ifdef RLUNIX 00021 #include "cif_api.c" 00022 #endif 00023 00024 rlHilscherCIF::rlHilscherCIF() 00025 { 00026 debug = 0; 00027 isOpen = 0; 00028 usBoardNumber = 0; // Board number, 0-3 00029 00030 // Fill in protokoll parameters 00031 aParameter.bScl = 1; /* Interface number */ 00032 aParameter.bRtsControl = 0; /* Bus handling */ 00033 aParameter.bBaudrate = 10; /* Baud rate */ 00034 aParameter.bDataBits = 8; /* Number of data bits */ 00035 aParameter.bStopBits = 1; /* Number of stop bits */ 00036 aParameter.bParityBit = 1; /* Parity */ 00037 aParameter.bMode = 1; /* Interface mode */ 00038 aParameter.bEndMode = 0; /* Stop mod */ 00039 aParameter.bCheckMode = 0; /* Checksum mode */ 00040 aParameter.bCheckArea = 0; /* Checksum area */ 00041 aParameter.bFilterMode = 0; /* Character filter mode */ 00042 aParameter.usFilterCharacter = 0; /* Characters */ 00043 aParameter.usTelTimeout = 1000; /* Telegram timeout */ 00044 aParameter.usStartTimeout = 0; /* Start timeout */ 00045 aParameter.usCharTimeout = 0; /* Character timeout */ 00046 aParameter.bRetries = 0; /* Retray number */ 00047 aParameter.bErrorLed = 1; /* Error LED */ 00048 aParameter.bTelStartLen = 0; /* Length of telegram start */ 00049 aParameter.bTelStart[0] = 0; /* Telegram beginning */ 00050 aParameter.bTelEndLen = 0; /* Length of telegram end */ 00051 aParameter.bTelEnd[0] = 0; /* Telegram end */ 00052 aParameter.bTelAckLen = 0; /* Length of ACK telegram */ 00053 aParameter.bTelAck[0] = 0; /* ACK telegramm */ 00054 aParameter.bTelNackLen = 0; /* Length of NAK telegram */ 00055 aParameter.bTelNack[0] = 0; /* NAK telegram */ 00056 aParameter.bTelDeviceLen = 0; /* Length of the device telegram */ 00057 00058 tMessage.rx = 0x0ff; 00059 } 00060 00061 rlHilscherCIF::~rlHilscherCIF() 00062 { 00063 if(isOpen) close(); 00064 } 00065 00066 int rlHilscherCIF::open() 00067 { 00068 int ret; 00069 isOpen = 1; 00070 if((ret = devOpenDriver()) != DRV_NO_ERROR) return ret; 00071 if((ret = devInitBoard()) != DRV_NO_ERROR) return ret; 00072 if((ret = devGetInfo(GET_FIRMWARE_INFO)) != DRV_NO_ERROR) return ret; 00073 if((ret = devSetHostState(HOST_READY)) != DRV_NO_ERROR) return ret; 00074 if(debug) printFirmwareInfo(); 00075 devPutTaskParameter(); 00076 devReset(); 00077 if(debug) printf("cif.open() success\n"); 00078 return ret; 00079 } 00080 00081 int rlHilscherCIF::close() 00082 { 00083 int ret; 00084 isOpen = 0; 00085 if((ret = devSetHostState(HOST_NOT_READY)) != DRV_NO_ERROR) return ret; 00086 ret = devCloseDriver(); 00087 return ret; 00088 } 00089 00090 int rlHilscherCIF::devOpenDriver() 00091 { 00092 isOpen = 1; 00093 #ifdef RLUNIX 00094 int ret = DevOpenDriver(); 00095 #else 00096 int ret = DevOpenDriver(usBoardNumber); 00097 #endif 00098 if(debug) printf("DevOpenDriver ret=%d\n",ret); 00099 return ret; 00100 } 00101 00102 int rlHilscherCIF::devInitBoard() 00103 { 00104 #ifdef RLUNIX 00105 int ret = DevInitBoard(usBoardNumber); 00106 #else 00107 int ret = DevInitBoard(usBoardNumber,NULL); 00108 #endif 00109 if(debug) printf("DevInitBoard ret=%d\n",ret); 00110 return ret; 00111 } 00112 00113 int rlHilscherCIF::devGetInfo(int info) 00114 { 00115 if(info == GET_FIRMWARE_INFO) 00116 { 00117 int ret = DevGetInfo(usBoardNumber, 00118 GET_FIRMWARE_INFO, 00119 sizeof(FIRMWAREINFO), 00120 &abInfo[0]); 00121 if(debug) printf("DevGetInfo(GET_FIRMWARE_INFO) ret=%d\n", ret); 00122 return ret; 00123 } 00124 if(info == GET_IO_INFO) 00125 { 00126 // Read the mode of the IO-Communication, 0 = MODE UNKNOWN 00127 int ret = DevGetInfo(usBoardNumber, // DeviceNumber 00128 GET_IO_INFO, // InfoArea 00129 sizeof(IOINFO), // Size of bytes to read 00130 &tIoInfo); // Pointer to user buffer 00131 00132 if(debug) 00133 { 00134 printf("DevGetInfo (IOINFO) ret=%d \n", ret); 00135 printf("ExchangeIO information\n" 00136 " IO-Communication mode : %d\n" 00137 " IO-COM bit : %d\n" 00138 " IO-Count : %ld\n", 00139 tIoInfo.bIOExchangeMode, tIoInfo.bComBit, tIoInfo.ulIOExchangeCnt); 00140 if(tIoInfo.bIOExchangeMode == 0) 00141 { 00142 printf( " --- IO-Communication NOT AVAILABLE ---\n"); 00143 } 00144 else 00145 { 00146 printf( " --- IO-Communication AVAILABLE ---\n"); 00147 // Test if IO-Communication is running 00148 if(tIoInfo.bComBit == 0) 00149 { 00150 printf(" IO-Communication is not running, so all function\n" 00151 " returning an error !\n"); 00152 } 00153 } 00154 } 00155 return ret; 00156 } 00157 printf("rlHilscherCIF::devGetInfo() unknown info\n"); 00158 return -1; 00159 } 00160 00161 int rlHilscherCIF::devSetHostState(int mode) 00162 { 00163 int ret = DevSetHostState(usBoardNumber, 00164 mode, 00165 0L); 00166 if(debug) printf("DevSetHostState mode=%d ret=%d\n", mode, ret); 00167 return ret; 00168 } 00169 00170 int rlHilscherCIF::devPutTaskParameter() 00171 { 00172 // Write parameters to communication board 00173 int ret = DevPutTaskParameter(usBoardNumber, // Device number 00174 1, // Protokoll task number 00175 sizeof(aParameter), // Lenght of bytes 00176 &aParameter ); // Pointer to data buffer 00177 if(debug) printf("DevPutTaskParameter ret=%d (Interface number 1)\n", ret); 00178 return ret; 00179 } 00180 00181 int rlHilscherCIF::devReset() 00182 { 00183 // Reset board so it can take the parameters 00184 int ret = DevReset((unsigned char) usBoardNumber, // Device number 00185 (unsigned short) WARMSTART, // Reset mode, Warmstar 00186 (unsigned long) 8000L); // Timeout 8000 ms 00187 if(debug) printf("DevResetBoard ret=%d\n", ret); 00188 return ret; 00189 } 00190 00191 int rlHilscherCIF::devExitBoard() 00192 { 00193 int ret = DevExitBoard(usBoardNumber); 00194 if(debug) printf("DevExitBoard ret=%d \n", ret); 00195 return ret; 00196 } 00197 00198 int rlHilscherCIF::devCloseDriver() 00199 { 00200 isOpen = 0; 00201 #ifdef RLUNIX 00202 int ret = DevCloseDriver(); 00203 #else 00204 int ret = DevCloseDriver(usBoardNumber); 00205 #endif 00206 if(debug) printf( "DevCloseDriver ret=%d\n", ret); 00207 return ret; 00208 } 00209 00210 int rlHilscherCIF::devGetMessage(int timeout) 00211 { 00212 if(isOpen == 0) 00213 { 00214 printf("rlHilscherCIF::devGetMessage ERROR device is not open\n"); 00215 return -1; 00216 } 00217 if(tMessage.rx == 0x0ff) 00218 { 00219 printf("rlHilscherCIF::devGetMessage() ERROR you have to set tMessage first\n"); 00220 return -1; 00221 } 00222 if(debug) printf("rlHilscherCIF::devGetMessage() timeout=%d", timeout); 00223 int ret = DevGetMessage(usBoardNumber, // Device Number 00224 sizeof(tMessage), // Users buffer size 00225 (MSG_STRUC *)&tMessage, // Pointer to user buffer 00226 (long) timeout); // Timeout 00227 if(debug) printf("DevGetMessage ret=%d\n", ret); 00228 if(ret == DRV_NO_ERROR) 00229 { 00230 // Message available 00231 if(debug) printf( " RX: 0x%02X, TX: 0x%02X, LN: 0x%02X, NR: 0x%02X\n", 00232 tMessage.rx, 00233 tMessage.tx, 00234 tMessage.ln, 00235 tMessage.nr); 00236 if(debug) printf( " A: 0x%02X, F: 0x%02X, B: 0x%02X, E: 0x%02X\n", 00237 tMessage.a, 00238 tMessage.f, 00239 tMessage.b, 00240 tMessage.e); 00241 } 00242 return ret; 00243 } 00244 00245 int rlHilscherCIF::devPutMessage(int timeout) 00246 { 00247 if(isOpen == 0) 00248 { 00249 printf("rlHilscherCIF::devPutMessage ERROR device is not open\n"); 00250 return -1; 00251 } 00252 if(debug) printf("rlHilscherCIF::devPutMessage() timeout=%d", timeout); 00253 int ret = DevPutMessage(usBoardNumber, // Device Number 00254 (MSG_STRUC *)&tMessage, // Pointer to user buffer 00255 timeout); // Timeout 00256 if(debug) printf("DevPutMessage ret=%d\n", ret); 00257 return ret; 00258 } 00259 00260 int rlHilscherCIF::devExchangeIO(int sendOffset, int sendSize, unsigned char *sendData, 00261 int receiveOffset, int receiveSize, unsigned char *receiveData, 00262 int timeout) 00263 { 00264 if(isOpen == 0) 00265 { 00266 printf("rlHilscherCIF::devExchangeIO ERROR device is not open\n"); 00267 return -1; 00268 } 00269 // Run ExchangeIO 00270 int ret = DevExchangeIO(usBoardNumber, 00271 (unsigned short) sendOffset, 00272 (unsigned short) sendSize, 00273 sendData, 00274 (unsigned short) receiveOffset, 00275 (unsigned short) receiveSize, 00276 receiveData, 00277 timeout); 00278 if(ret != DRV_NO_ERROR) 00279 { 00280 if(debug) printf("DevExchangeIO ret=%d timeout\n", ret); 00281 } 00282 else 00283 { 00284 // Data exchange is done, print some information 00285 if(debug && sendSize >= 4 && receiveSize >= 4) 00286 { 00287 printf(" ExchangeIO data:\n" 00288 " Send data: Receive data\n"); 00289 printf(" byte 0 : %d byte 0 : %d\n", sendData[0],receiveData[0]); 00290 printf(" byte 1 : %d byte 1 : %d\n", sendData[1],receiveData[1]); 00291 printf(" byte 2 : %d byte 2 : %d\n", sendData[2],receiveData[2]); 00292 printf(" byte 3 : %d byte 3 : %d\n", sendData[3],receiveData[3]); 00293 } 00294 } 00295 return ret; 00296 } 00297 00298 void rlHilscherCIF::printFirmwareInfo() 00299 { 00300 unsigned char abTemp[30]; // Temporary buffer 00301 memcpy(&abTemp, &abInfo[0], 16); 00302 abTemp[16] = 0; 00303 printf("FirmwareName: %s\n",&abTemp[0]); 00304 memcpy(&abTemp, &abInfo[16], 16); 00305 abTemp[16] = 0; 00306 printf("FirmwareVersion: %s\n",&abTemp[0]); 00307 } 00308 00309 //#define TESTING 00310 #ifdef TESTING 00311 int main() 00312 { 00313 rlHilscherCIF cif; 00314 int c = 0; 00315 int i = 0; 00316 unsigned char sendData[512]; 00317 unsigned char receiveData[512]; 00318 00319 cif.debug = 1; 00320 if(cif.open() != DRV_NO_ERROR) return -1; 00321 00322 while(c != 'x') 00323 { 00324 printf("hit RETURN 'x'=end "); 00325 c = getchar(); 00326 00327 // Write test data to Send buffer 00328 sendData[0] = (unsigned char) i++; 00329 sendData[1] = 0xFF; 00330 sendData[2] = 2; 00331 sendData[3] = 3; 00332 cif.devExchangeIO(0,4,sendData, 00333 0,4,receiveData, 00334 1000); 00335 if(i >= 256) i = 0; 00336 } 00337 return 0; 00338 } 00339 00340 int xmain( void ) 00341 { 00342 unsigned short usBoardNumber = 0; /* Board number, 0-3 */ 00343 unsigned short usDevState, usHostState; 00344 00345 unsigned char abTemp[30]; /* Temporary buffer */ 00346 unsigned char abInfo[300]; /* Buffer for various information */ 00347 short sRet; /* Return value */ 00348 00349 /* Protocol parameter definition */ 00350 ASC_PARAMETER aParameter; /* Parameters for ASCII protocolls */ 00351 00352 /* Information structure */ 00353 IOINFO tIoInfo; /* IO information structure */ 00354 00355 /* Data structure for message based communication */ 00356 RCS_MESSAGETELEGRAM_10 tMessage; 00357 00358 /* Data areas for IO based communication */ 00359 unsigned char tIOSendData[512]; /* Buffer for send data */ 00360 unsigned char tIORecvData[512]; /* Buffer for receive data */ 00361 00362 00363 printf( "HILSCHER GmbH - Communication test program \n\n"); 00364 00365 printf( "\n*** Open communication driver ***\n"); 00366 printf( "*** Board number: %d ***\n\n", usBoardNumber); 00367 00368 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00369 /* Open the driver */ 00370 if ( (sRet = DevOpenDriver()) != DRV_NO_ERROR) { 00371 printf( "DevOpenDriver RetWert = %5d \n", sRet ); 00372 00373 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00374 /* Initialize board */ 00375 } else if ( (sRet = DevInitBoard ( usBoardNumber)) != DRV_NO_ERROR) { 00376 printf( "DevInitBoard RetWert = %5d \n", sRet ); 00377 00378 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00379 /* Read Firmware information field */ 00380 } else if ( (sRet = DevGetInfo( usBoardNumber, /* DeviceNumber */ 00381 GET_FIRMWARE_INFO, /* InfoArea */ 00382 sizeof(FIRMWAREINFO), /* Size of bytes to read */ 00383 &abInfo[0])) != DRV_NO_ERROR ) { /* Pointer to user buffer */ 00384 00385 printf( "DevGetInfo (GET_FIRMWARE_INFO) RetWert = %5d \n", sRet ); 00386 00387 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00388 /* Signal board, application is running */ 00389 } else if ( (sRet = DevSetHostState( usBoardNumber, /* DeviceNumber */ 00390 HOST_READY, /* Mode */ 00391 0L)) != DRV_NO_ERROR ) { /* Pointer to user buffer */ 00392 00393 printf( "DevSetHostState (HOST_READY) RetWert = %5d \n", sRet ); 00394 00395 } else { 00396 00397 /* Print firmware information */ 00398 memcpy ( &abTemp, &abInfo[0], 16); 00399 abTemp[16] = 0; 00400 printf( " FirmwareName: %s\n", &abTemp[0] ); 00401 memcpy ( &abTemp, &abInfo[16], 16); 00402 abTemp[16] = 0; 00403 printf( " FirmwareVersion: %s\n", &abTemp[0]); 00404 printf( "\n\n" ); 00405 00406 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00407 /* Read mailbox information */ 00408 if ( (sRet = DevGetMBXState( usBoardNumber, /* DeviceNumber */ 00409 &usDevState, /* Buffer for device state */ 00410 &usHostState)) != DRV_NO_ERROR ) {/* Buffer for host state */ 00411 // function error 00412 printf( "DevGetMBXState RetWert = %5d\n", sRet ); 00413 00414 } else { 00415 00416 // show actual state 00417 printf( "DevGetMBXState device MBX state = %5d (0=empty, 1=full)\n", usDevState); 00418 printf( "DevGetMBXState host MBX state = %5d (0=empty, 1=full)\n", usHostState); 00419 00420 } 00421 00422 00423 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00424 /* Fill in protokoll parameters */ 00425 00426 aParameter.bScl = 1; /* Interface number */ 00427 aParameter.bRtsControl = 0; /* Bus handling */ 00428 aParameter.bBaudrate = 10; /* Baud rate */ 00429 aParameter.bDataBits = 8; /* Number of data bits */ 00430 aParameter.bStopBits = 1; /* Number of stop bits */ 00431 aParameter.bParityBit = 1; /* Parity */ 00432 aParameter.bMode = 1; /* Interface mode */ 00433 aParameter.bEndMode = 0; /* Stop mod */ 00434 aParameter.bCheckMode = 0; /* Checksum mode */ 00435 aParameter.bCheckArea = 0; /* Checksum area */ 00436 aParameter.bFilterMode = 0; /* Character filter mode */ 00437 aParameter.usFilterCharacter = 0; /* Characters */ 00438 aParameter.usTelTimeout = 1000; /* Telegram timeout */ 00439 aParameter.usStartTimeout = 0; /* Start timeout */ 00440 aParameter.usCharTimeout = 0; /* Character timeout */ 00441 aParameter.bRetries = 0; /* Retray number */ 00442 aParameter.bErrorLed = 1; /* Error LED */ 00443 aParameter.bTelStartLen = 0; /* Length of telegram start */ 00444 aParameter.bTelStart[0] = 0; /* Telegram beginning */ 00445 aParameter.bTelEndLen = 0; /* Length of telegram end */ 00446 aParameter.bTelEnd[0] = 0; /* Telegram end */ 00447 aParameter.bTelAckLen = 0; /* Length of ACK telegram */ 00448 aParameter.bTelAck[0] = 0; /* ACK telegramm */ 00449 aParameter.bTelNackLen = 0; /* Length of NAK telegram */ 00450 aParameter.bTelNack[0] = 0; /* NAK telegram */ 00451 aParameter.bTelDeviceLen = 0; /* Length of the device telegram */ 00452 00453 /* Write parameters to communication board */ 00454 sRet = DevPutTaskParameter( usBoardNumber, /* Device number */ 00455 1, /* Protokoll task number */ 00456 sizeof(aParameter), /* Lenght of bytes */ 00457 &aParameter ); /* Pointer to data buffer */ 00458 printf( "DevPutTaskParameter RetWert = %5d (Interface number 1)\n", sRet ); 00459 00460 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00461 /* Reset board so it can take the parameters */ 00462 00463 sRet = DevReset( (unsigned char) usBoardNumber, /* Device number */ 00464 (unsigned short) WARMSTART, /* Reset mode, Warmstart */ 00465 (unsigned long) 8000L); /* Timeout 8000 ms */ 00466 printf( "DevResetBoard RetWert = %5d \n", sRet ); 00467 00468 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00469 /* Wait for user response */ 00470 printf( "\nPress RETURN to continue .... \n"); 00471 getchar(); 00472 00473 /* ========================================================================= */ 00474 /* Test Message transfer */ 00475 /* ========================================================================= */ 00476 00477 printf( "\n*** Test for message transfer ***\n\n"); 00478 00479 /* Tray to read a message */ 00480 printf( " DevGetMessage Wait for a maximum of %ld ms\n", 5000L ); 00481 00482 sRet = DevGetMessage ( usBoardNumber, /* Device Number */ 00483 sizeof(tMessage), /* Users buffer size */ 00484 (MSG_STRUC *)&tMessage, /* Pointer to user buffer */ 00485 5000L ); /* Timeout */ 00486 printf( " DevGetMessage RetWert = %5d \n", sRet ); 00487 00488 00489 /*===========================================================================*/ 00490 /* Test message transfer */ 00491 /*===========================================================================*/ 00492 /* Build a message */ 00493 tMessage.rx = 0x01; 00494 tMessage.tx = 0x10; 00495 tMessage.ln = 12; 00496 tMessage.nr = 1; 00497 tMessage.a = 0; 00498 tMessage.f = 0; 00499 tMessage.b = 17; 00500 tMessage.e = 0x00; 00501 tMessage.device_adr = 0; 00502 tMessage.data_area = 0; 00503 tMessage.data_adr = 0; 00504 tMessage.data_idx = 0; 00505 tMessage.data_cnt = 4; 00506 tMessage.data_type = 10; 00507 tMessage.function = 2; 00508 tMessage.d[0] = 1; /* Some user data */ 00509 tMessage.d[1] = 2; /* Some user data */ 00510 tMessage.d[2] = 3; /* Some user data */ 00511 tMessage.d[3] = 4; /* Some user data */ 00512 00513 sRet = DevPutMessage ( usBoardNumber, /* Device Number */ 00514 (MSG_STRUC *)&tMessage, /* Pointer to user buffer */ 00515 5000L ); /* Timeout */ 00516 printf( " DevPutMessage RetWert = %5d \n", sRet ); 00517 00518 00519 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00520 /* Wait for user response */ 00521 printf( "\nPress RETURN to continue .... \n"); 00522 getchar(); 00523 00524 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00525 /* Tray to read a message */ 00526 printf( " DevGetMessage Wait for a maximum of %ld ms\n", 20000L ); 00527 00528 sRet = DevGetMessage ( 0, /* Device Number */ 00529 sizeof(tMessage), /* Users buffer size */ 00530 (MSG_STRUC *)&tMessage, /* Pointer to user buffer */ 00531 20000L ); /* Timeout */ 00532 printf( " DevGetMessage RetWert = %5d \n", sRet ); 00533 00534 if ( sRet == DRV_NO_ERROR) { 00535 /* Message available */ 00536 printf( " RX: 0x%02X, TX: 0x%02X, LN: 0x%02X, NR: 0x%02X \n", 00537 tMessage.rx, 00538 tMessage.tx, 00539 tMessage.ln, 00540 tMessage.nr ); 00541 printf( " A: 0x%02X, F: 0x%02X, B: 0x%02X, E: 0x%02X \n", 00542 tMessage.a, 00543 tMessage.f, 00544 tMessage.b, 00545 tMessage.e ); 00546 } /* endif */ 00547 00548 00549 /* ========================================================================= */ 00550 /* Test for ExchangeIO */ 00551 /* ========================================================================= */ 00552 00553 /* ========================================================================= */ 00554 /* Test for ExchangeIO */ 00555 /* ========================================================================= */ 00556 /* Test if IO-Communication is available */ 00557 00558 printf( "\n\n*** Test for ExchangeIO functions ***\n\n"); 00559 00560 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00561 /* Read the mode of the IO-Communication, 0 = MODE UNKNOWN */ 00562 sRet = DevGetInfo( usBoardNumber, /* DeviceNumber */ 00563 GET_IO_INFO, /* InfoArea */ 00564 sizeof(IOINFO), /* Size of bytes to read */ 00565 &tIoInfo); /* Pointer to user buffer */ 00566 00567 printf( " DevGetInfo (IOINFO) RetWert = %5d \n", sRet ); 00568 00569 /* Print IO information */ 00570 printf( " ExchangeIO information\n" 00571 " IO-Communication mode : %d\n" 00572 " IO-COM bit : %d\n" 00573 " IO-Count : %ld\n", 00574 tIoInfo.bIOExchangeMode, tIoInfo.bComBit, tIoInfo.ulIOExchangeCnt); 00575 00576 if ( tIoInfo.bIOExchangeMode == 0) { 00577 00578 /* No IO-Communication available */ 00579 printf( " --- IO-Communication NOT AVAILABLE ---\n"); 00580 00581 } else { 00582 00583 /* IO-Communication is available */ 00584 printf( " --- IO-Communication AVAILABLE ---\n"); 00585 00586 /* Test if IO-Communication is running */ 00587 if ( tIoInfo.bComBit == 0) { 00588 /* No Communication is running */ 00589 printf( " IO-Communication is not running, so all function\n" 00590 " returning an error !.\n"); 00591 00592 } 00593 00594 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00595 /* Read the hole send area to update internal data */ 00596 if ( (sRet = DevGetInfo( usBoardNumber, /* DeviceNumber */ 00597 GET_IO_SEND_DATA, /* InfoArea */ 00598 sizeof(tIOSendData), /* Size of bytes to read */ 00599 (void*)&tIOSendData[0])) != DRV_NO_ERROR ) {/* Pointer to user buffer */ 00600 00601 printf( " DevGetInfo (IO_SEND_DATA) RetWert = %5d \n", sRet ); 00602 00603 } else { 00604 00605 /* Write test data to Send buffer */ 00606 tIOSendData[0] = 0xC7; 00607 tIOSendData[1] = 0xFF; 00608 tIOSendData[2] = 2; 00609 tIOSendData[3] = 3; 00610 00611 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00612 /* Run ExchangeIO */ 00613 if ( (sRet = DevExchangeIO ( usBoardNumber, 00614 0, /* usSendOffset */ 00615 4, /* usSendSize */ 00616 &tIOSendData[0], /* *pvSendData */ 00617 0, /* usReceiveOffset */ 00618 4, /* usReceiveSize */ 00619 &tIORecvData[0], /* *pvReceiveData */ 00620 100L )) != DRV_NO_ERROR ) { /* ulTimeout */ 00621 00622 printf( "DevExchangeIO RetWert = %5d \n", sRet ); 00623 00624 } else { 00625 00626 /* Data exchange is done, print some information */ 00627 printf( " ExchangeIO data:\n" 00628 " Send data: Receive data\n"); 00629 printf( " byte 0 : %d byte 0 : %d\n", tIOSendData[0],tIORecvData[0]); 00630 printf( " byte 1 : %d byte 1 : %d\n", tIOSendData[1],tIORecvData[1]); 00631 printf( " byte 2 : %d byte 2 : %d\n", tIOSendData[2],tIORecvData[2]); 00632 printf( " byte 3 : %d byte 3 : %d\n", tIOSendData[3],tIORecvData[3]); 00633 } 00634 } 00635 } 00636 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00637 /* Wait for user response */ 00638 printf( "\nPress RETURN to continue .... \n"); 00639 getchar(); 00640 00641 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00642 /* Signal board, application is not running */ 00643 if ( (sRet = DevSetHostState( usBoardNumber, /* DeviceNumber */ 00644 HOST_NOT_READY, /* Mode */ 00645 0L)) != DRV_NO_ERROR ) { /* Pointer to user buffer */ 00646 00647 printf( "DevSetHostState (HOST_NOT_READY) RetWert = %5d \n", sRet ); 00648 } 00649 00650 printf( "\n*** Close communication driver ***\n\n"); 00651 00652 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00653 /* Close communication */ 00654 00655 sRet = DevExitBoard( usBoardNumber); /* Device number */ 00656 printf( "DevExitBoard RetWert = %5d \n", sRet ); 00657 00658 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 00659 /* Close Driver */ 00660 00661 sRet = DevCloseDriver(); 00662 printf( "DevCloseDriver RetWert = %5d \n", sRet ); 00663 } 00664 00665 return(0); 00666 } 00667 00668 #endif
1.7.5.1