#include <rlhilschercif.h>

Public Member Functions | |
| rlHilscherCIF () | |
| virtual | ~rlHilscherCIF () |
| int | open () |
| int | close () |
| int | devGetMessage (int timeout) |
| int | devPutMessage (int timeout) |
| int | devExchangeIO (int sendOffset, int sendSize, unsigned char *sendData, int receiveOffset, int receiveSize, unsigned char *receiveData, int timeout) |
| int | devOpenDriver () |
| int | devInitBoard () |
| int | devGetInfo (int info) |
| int | devSetHostState (int mode) |
| int | devPutTaskParameter () |
| int | devReset () |
| int | devExitBoard () |
| int | devCloseDriver () |
| void | printFirmwareInfo () |
Public Attributes | |
| int | debug |
| unsigned short | usBoardNumber |
| unsigned short | usDevState |
| unsigned short | usHostState |
| unsigned char | abInfo [300] |
| ASC_PARAMETER | aParameter |
| IOINFO | tIoInfo |
| RCS_MESSAGETELEGRAM_10 | tMessage |
| rlMutex | mutex |
Private Attributes | |
| int | isOpen |
This class is for data access to Hilscher CIF cards like PROFIBUS ... It uses the driver provided by Hilscher and has access to it's dual ported RAM.
Attention: In order to use this class on Linux as normal user you have to set chmod ugoa+rw /dev/cif
Definition at line 38 of file rlhilschercif.h.
| rlHilscherCIF::rlHilscherCIF | ( | ) |
Definition at line 24 of file rlhilschercif.cpp.
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 }
| rlHilscherCIF::~rlHilscherCIF | ( | ) | [virtual] |
Definition at line 61 of file rlhilschercif.cpp.
| int rlHilscherCIF::close | ( | ) |
Definition at line 81 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devCloseDriver | ( | ) |
Definition at line 198 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devExchangeIO | ( | int | sendOffset, | |
| int | sendSize, | |||
| unsigned char * | sendData, | |||
| int | receiveOffset, | |||
| int | receiveSize, | |||
| unsigned char * | receiveData, | |||
| int | timeout | |||
| ) |
Definition at line 260 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devExitBoard | ( | ) |
Definition at line 191 of file rlhilschercif.cpp.
00192 { 00193 int ret = DevExitBoard(usBoardNumber); 00194 if(debug) printf("DevExitBoard ret=%d \n", ret); 00195 return ret; 00196 }
| int rlHilscherCIF::devGetInfo | ( | int | info | ) |
Definition at line 113 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devGetMessage | ( | int | timeout | ) |
Definition at line 210 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devInitBoard | ( | ) |
Definition at line 102 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devOpenDriver | ( | ) |
Definition at line 90 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devPutMessage | ( | int | timeout | ) |
Definition at line 245 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devPutTaskParameter | ( | ) |
Definition at line 170 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devReset | ( | ) |
Definition at line 181 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::devSetHostState | ( | int | mode | ) |
Definition at line 161 of file rlhilschercif.cpp.
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 }
| int rlHilscherCIF::open | ( | ) |
Definition at line 66 of file rlhilschercif.cpp.
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 }
| void rlHilscherCIF::printFirmwareInfo | ( | ) |
Definition at line 298 of file rlhilschercif.cpp.
| unsigned char rlHilscherCIF::abInfo[300] |
Definition at line 66 of file rlhilschercif.h.
| ASC_PARAMETER rlHilscherCIF::aParameter |
Definition at line 67 of file rlhilschercif.h.
Definition at line 43 of file rlhilschercif.h.
int rlHilscherCIF::isOpen [private] |
Definition at line 74 of file rlhilschercif.h.
Definition at line 71 of file rlhilschercif.h.
| IOINFO rlHilscherCIF::tIoInfo |
Definition at line 68 of file rlhilschercif.h.
| RCS_MESSAGETELEGRAM_10 rlHilscherCIF::tMessage |
Definition at line 69 of file rlhilschercif.h.
| unsigned short rlHilscherCIF::usBoardNumber |
Definition at line 64 of file rlhilschercif.h.
| unsigned short rlHilscherCIF::usDevState |
Definition at line 65 of file rlhilschercif.h.
| unsigned short rlHilscherCIF::usHostState |
Definition at line 65 of file rlhilschercif.h.
1.6.3