Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 145 | f9daq | 1 | /* This file, vxi11.x, is the amalgamation of vxi11core.rpcl and vxi11intr.rpcl  | 
        
| 2 | * which are part of the asynDriver (R4-5) EPICS module, which, at time of  | 
        ||
| 3 | * writing, is available from:  | 
        ||
| 4 | * http://www.aps.anl.gov/epics/modules/soft/asyn/index.html  | 
        ||
| 5 | * More general information about EPICS is available from:  | 
        ||
| 6 | * http://www.aps.anl.gov/epics/  | 
        ||
| 7 | * This code is open source, and is covered under the copyright notice and  | 
        ||
| 8 | * software license agreement shown below, and also at:  | 
        ||
| 9 | * http://www.aps.anl.gov/epics/license/open.php  | 
        ||
| 10 | *  | 
        ||
| 11 | * In order to comply with section 4.3 of the software license agreement, here  | 
        ||
| 12 | * is a PROMINENT NOTICE OF CHNAGES TO THE SOFTWARE  | 
        ||
| 13 | * ===========================================  | 
        ||
| 14 | * (1) This file, vxi11.x, is the concatenation of the files vxi11core.rpcl and  | 
        ||
| 15 | * vxi11intr.rpcl  | 
        ||
| 16 | * (2) Tab spacing has been tidied up  | 
        ||
| 17 | *  | 
        ||
| 18 | * It is intended as a lightweight base for the vxi11 rpc protocol. If you  | 
        ||
| 19 | * run rpcgen on this file, it will generate C files and headers, from which  | 
        ||
| 20 | * it is relatively simple to write C programs to communicate with a range  | 
        ||
| 21 | * of ethernet-enabled instruments, such as oscilloscopes and function  | 
        ||
| 22 | * generated by manufacturers such as Agilent and Tektronix (amongst many  | 
        ||
| 23 | * others).  | 
        ||
| 24 | *  | 
        ||
| 25 | * For what it's worth, this concatenation was done by Steve Sharples at  | 
        ||
| 26 | * the University of Nottingham, UK, on 1 June 2006.  | 
        ||
| 27 | *  | 
        ||
| 28 | * Copyright notice and software license agreement follow, then the  | 
        ||
| 29 | * original comments from vxi11core.rpcl etc.  | 
        ||
| 30 | *  | 
        ||
| 31 | ******************************************************************************  | 
        ||
| 32 | * Copyright © 2006 <University of Chicago and other copyright holders>. All  | 
        ||
| 33 | * rights reserved.  | 
        ||
| 34 | ******************************************************************************  | 
        ||
| 35 | *  | 
        ||
| 36 | ******************************************************************************  | 
        ||
| 37 | * vxi11.x is distributed subject to the following license conditions:  | 
        ||
| 38 | * SOFTWARE LICENSE AGREEMENT  | 
        ||
| 39 | * Software: vxi11.x  | 
        ||
| 40 | *  | 
        ||
| 41 | * 1. The "Software", below, refers to vxi11.x (in either source code, or  | 
        ||
| 42 | * binary form and accompanying documentation). Each licensee is addressed  | 
        ||
| 43 | * as "you" or "Licensee."  | 
        ||
| 44 | *  | 
        ||
| 45 | * 2. The copyright holders shown above and their third-party licensors hereby  | 
        ||
| 46 | * grant Licensee a royalty-free nonexclusive license, subject to the  | 
        ||
| 47 | * limitations stated herein and U.S. Government license rights.  | 
        ||
| 48 | *  | 
        ||
| 49 | * 3. You may modify and make a copy or copies of the Software for use within  | 
        ||
| 50 | * your organization, if you meet the following conditions:  | 
        ||
| 51 | * 1. Copies in source code must include the copyright notice and this  | 
        ||
| 52 | * Software License Agreement.  | 
        ||
| 53 | * 2. Copies in binary form must include the copyright notice and this  | 
        ||
| 54 | * Software License Agreement in the documentation and/or other  | 
        ||
| 55 | * materials provided with the copy.  | 
        ||
| 56 | *  | 
        ||
| 57 | * 4. You may modify a copy or copies of the Software or any portion of it,  | 
        ||
| 58 | * thus forming a work based on the Software, and distribute copies of such  | 
        ||
| 59 | * work outside your organization, if you meet all of the following  | 
        ||
| 60 | * conditions:  | 
        ||
| 61 | * 1. Copies in source code must include the copyright notice and this  | 
        ||
| 62 | * Software License Agreement;  | 
        ||
| 63 | * 2. Copies in binary form must include the copyright notice and this  | 
        ||
| 64 | * Software License Agreement in the documentation and/or other  | 
        ||
| 65 | * materials provided with the copy;  | 
        ||
| 66 | * 3. Modified copies and works based on the Software must carry  | 
        ||
| 67 | * prominent notices stating that you changed specified portions of  | 
        ||
| 68 | * the Software.  | 
        ||
| 69 | *  | 
        ||
| 70 | * 5. Portions of the Software resulted from work developed under a U.S.  | 
        ||
| 71 | * Government contract and are subject to the following license: the  | 
        ||
| 72 | * Government is granted for itself and others acting on its behalf a  | 
        ||
| 73 | * paid-up, nonexclusive, irrevocable worldwide license in this computer  | 
        ||
| 74 | * software to reproduce, prepare derivative works, and perform publicly  | 
        ||
| 75 | * and display publicly.  | 
        ||
| 76 | *  | 
        ||
| 77 | * 6. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT WARRANTY OF  | 
        ||
| 78 | * ANY KIND. THE COPYRIGHT HOLDERS, THEIR THIRD PARTY LICENSORS, THE UNITED  | 
        ||
| 79 | * STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND THEIR EMPLOYEES: (1)  | 
        ||
| 80 | * DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO  | 
        ||
| 81 | * ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  | 
        ||
| 82 | * PURPOSE, TITLE OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY  | 
        ||
| 83 | * OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF THE  | 
        ||
| 84 | * SOFTWARE, (3) DO NOT REPRESENT THAT USE OF THE SOFTWARE WOULD NOT INFRINGE  | 
        ||
| 85 | * PRIVATELY OWNED RIGHTS, (4) DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION  | 
        ||
| 86 | * UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL BE CORRECTED.  | 
        ||
| 87 | *  | 
        ||
| 88 | * 7. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT HOLDERS, THEIR  | 
        ||
| 89 | * THIRD PARTY LICENSORS, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF  | 
        ||
| 90 | * ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT, INCIDENTAL,  | 
        ||
| 91 | * CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF ANY KIND OR NATURE,  | 
        ||
| 92 | * INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS OR LOSS OF DATA, FOR ANY  | 
        ||
| 93 | * REASON WHATSOEVER, WHETHER SUCH LIABILITY IS ASSERTED ON THE BASIS OF  | 
        ||
| 94 | * CONTRACT, TORT (INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,  | 
        ||
| 95 | * EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE POSSIBILITY OF SUCH  | 
        ||
| 96 | * LOSS OR DAMAGES.  | 
        ||
| 97 | ******************************************************************************  | 
        ||
| 98 | */  | 
        ||
| 99 | |||
| 100 | /******************************************************************************  | 
        ||
| 101 | *  | 
        ||
| 102 | * vxi11core.rpcl  | 
        ||
| 103 | *  | 
        ||
| 104 | * This file is best viewed with a tabwidth of 4  | 
        ||
| 105 | *  | 
        ||
| 106 | ******************************************************************************  | 
        ||
| 107 | *  | 
        ||
| 108 | * TODO:  | 
        ||
| 109 | *  | 
        ||
| 110 | ******************************************************************************  | 
        ||
| 111 | *  | 
        ||
| 112 | * Original Author: someone from VXIbus Consortium  | 
        ||
| 113 | * Current Author: Benjamin Franksen  | 
        ||
| 114 | * Date: 03-06-97  | 
        ||
| 115 | *  | 
        ||
| 116 | * RPCL description of the core- and abort-channel of the TCP/IP Instrument  | 
        ||
| 117 | * Protocol Specification.  | 
        ||
| 118 | *  | 
        ||
| 119 | *  | 
        ||
| 120 | * Modification Log:  | 
        ||
| 121 | * -----------------  | 
        ||
| 122 | * .00 03-06-97 bfr created this file  | 
        ||
| 123 | *  | 
        ||
| 124 | ******************************************************************************  | 
        ||
| 125 | *  | 
        ||
| 126 | * Notes:  | 
        ||
| 127 | *  | 
        ||
| 128 | * This stuff is literally from  | 
        ||
| 129 | *  | 
        ||
| 130 | * VXI-11, Ref 1.0 : TCP/IP Instrument Protocol Specification  | 
        ||
| 131 | *  | 
        ||
| 132 | */  | 
        ||
| 133 | |||
| 134 | typedef long Device_Link;  | 
        ||
| 135 | |||
| 136 | enum Device_AddrFamily  | 
        ||
| 137 | { | 
        ||
| 138 | DEVICE_TCP,  | 
        ||
| 139 | DEVICE_UDP  | 
        ||
| 140 | };  | 
        ||
| 141 | |||
| 142 | typedef long Device_Flags;  | 
        ||
| 143 | |||
| 144 | typedef long Device_ErrorCode;  | 
        ||
| 145 | |||
| 146 | struct Device_Error  | 
        ||
| 147 | { | 
        ||
| 148 | Device_ErrorCode error;  | 
        ||
| 149 | };  | 
        ||
| 150 | |||
| 151 | struct Create_LinkParms  | 
        ||
| 152 | { | 
        ||
| 153 | long clientId; /* implementation specific value */  | 
        ||
| 154 | bool lockDevice; /* attempt to lock the device */  | 
        ||
| 155 | unsigned long lock_timeout; /* time to wait for lock */  | 
        ||
| 156 | string device<>; /* name of device */  | 
        ||
| 157 | };  | 
        ||
| 158 | struct Create_LinkResp  | 
        ||
| 159 | { | 
        ||
| 160 | Device_ErrorCode error;  | 
        ||
| 161 | Device_Link lid;  | 
        ||
| 162 | unsigned short abortPort; /* for the abort RPC */  | 
        ||
| 163 | unsigned long maxRecvSize; /* max # of bytes accepted on write */  | 
        ||
| 164 | };  | 
        ||
| 165 | struct Device_WriteParms  | 
        ||
| 166 | { | 
        ||
| 167 | Device_Link lid; /* link id from create_link */  | 
        ||
| 168 | unsigned long io_timeout; /* time to wait for I/O */  | 
        ||
| 169 | unsigned long lock_timeout; /* time to wait for lock */  | 
        ||
| 170 | Device_Flags flags; /* flags with options */  | 
        ||
| 171 | opaque data<>; /* the data length and the data itself */  | 
        ||
| 172 | };  | 
        ||
| 173 | struct Device_WriteResp  | 
        ||
| 174 | { | 
        ||
| 175 | Device_ErrorCode error;  | 
        ||
| 176 | unsigned long size; /* # of bytes written */  | 
        ||
| 177 | };  | 
        ||
| 178 | struct Device_ReadParms  | 
        ||
| 179 | { | 
        ||
| 180 | Device_Link lid; /* link id from create_link */  | 
        ||
| 181 | unsigned long requestSize; /* # of bytes requested */  | 
        ||
| 182 | unsigned long io_timeout; /* time to wait for I/O */  | 
        ||
| 183 | unsigned long lock_timeout; /* time to wait for lock */  | 
        ||
| 184 | Device_Flags flags; /* flags with options */  | 
        ||
| 185 | char termChar; /* valid if flags & termchrset */  | 
        ||
| 186 | };  | 
        ||
| 187 | struct Device_ReadResp  | 
        ||
| 188 | { | 
        ||
| 189 | Device_ErrorCode error;  | 
        ||
| 190 | long reason; /* why read completed */  | 
        ||
| 191 | opaque data<>; /* the data length and the data itself */  | 
        ||
| 192 | };  | 
        ||
| 193 | struct Device_ReadStbResp  | 
        ||
| 194 | { | 
        ||
| 195 | Device_ErrorCode error;  | 
        ||
| 196 | unsigned char stb; /* the returned status byte */  | 
        ||
| 197 | };  | 
        ||
| 198 | struct Device_GenericParms  | 
        ||
| 199 | { | 
        ||
| 200 | Device_Link lid; /* link id from create_link */  | 
        ||
| 201 | Device_Flags flags; /* flags with options */  | 
        ||
| 202 | unsigned long lock_timeout; /* time to wait for lock */  | 
        ||
| 203 | unsigned long io_timeout; /* time to wait for I/O */  | 
        ||
| 204 | };  | 
        ||
| 205 | struct Device_RemoteFunc  | 
        ||
| 206 | { | 
        ||
| 207 | unsigned long hostAddr; /* host servicing interrupt */  | 
        ||
| 208 | unsigned long hostPort; /* valid port # on client */  | 
        ||
| 209 | unsigned long progNum; /* DEVICE_INTR */  | 
        ||
| 210 | unsigned long progVers; /* DEVICE_INTR_VERSION */  | 
        ||
| 211 | Device_AddrFamily progFamily; /* DEVICE_UDP | DEVICE_TCP */  | 
        ||
| 212 | };  | 
        ||
| 213 | struct Device_EnableSrqParms  | 
        ||
| 214 | { | 
        ||
| 215 | Device_Link lid; /* link id from create_link */  | 
        ||
| 216 | bool enable; /* enable or disable intr's */  | 
        ||
| 217 | opaque handle<40>; /* host specific data */  | 
        ||
| 218 | };  | 
        ||
| 219 | struct Device_LockParms  | 
        ||
| 220 | { | 
        ||
| 221 | Device_Link lid; /* link id from create_link */  | 
        ||
| 222 | Device_Flags flags; /* contains the waitlock flag */  | 
        ||
| 223 | unsigned long lock_timeout; /* time to wait for lock */  | 
        ||
| 224 | };  | 
        ||
| 225 | struct Device_DocmdParms  | 
        ||
| 226 | { | 
        ||
| 227 | Device_Link lid; /* link id from create_link */  | 
        ||
| 228 | Device_Flags flags; /* flags with options */  | 
        ||
| 229 | unsigned long io_timeout; /* time to wait for I/O */  | 
        ||
| 230 | unsigned long lock_timeout; /* time to wait for lock */  | 
        ||
| 231 | long cmd; /* which command to execute */  | 
        ||
| 232 | bool network_order; /* client's byte order */  | 
        ||
| 233 | long datasize; /* size of individual data elements */  | 
        ||
| 234 | opaque data_in<>; /* docmd data parameters */  | 
        ||
| 235 | };  | 
        ||
| 236 | struct Device_DocmdResp  | 
        ||
| 237 | { | 
        ||
| 238 | Device_ErrorCode error;  | 
        ||
| 239 | opaque data_out<>; /* returned data parameters */  | 
        ||
| 240 | };  | 
        ||
| 241 | |||
| 242 | program DEVICE_ASYNC  | 
        ||
| 243 | { | 
        ||
| 244 | version DEVICE_ASYNC_VERSION  | 
        ||
| 245 | 	{ | 
        ||
| 246 | Device_Error device_abort (Device_Link) = 1;  | 
        ||
| 247 | } = 1;  | 
        ||
| 248 | } = 0x0607B0;  | 
        ||
| 249 | |||
| 250 | program DEVICE_CORE  | 
        ||
| 251 | { | 
        ||
| 252 | version DEVICE_CORE_VERSION  | 
        ||
| 253 | 	{ | 
        ||
| 254 | Create_LinkResp create_link (Create_LinkParms) = 10;  | 
        ||
| 255 | Device_WriteResp device_write (Device_WriteParms) = 11;  | 
        ||
| 256 | Device_ReadResp device_read (Device_ReadParms) = 12;  | 
        ||
| 257 | Device_ReadStbResp device_readstb (Device_GenericParms) = 13;  | 
        ||
| 258 | Device_Error device_trigger (Device_GenericParms) = 14;  | 
        ||
| 259 | Device_Error device_clear (Device_GenericParms) = 15;  | 
        ||
| 260 | Device_Error device_remote (Device_GenericParms) = 16;  | 
        ||
| 261 | Device_Error device_local (Device_GenericParms) = 17;  | 
        ||
| 262 | Device_Error device_lock (Device_LockParms) = 18;  | 
        ||
| 263 | Device_Error device_unlock (Device_Link) = 19;  | 
        ||
| 264 | Device_Error device_enable_srq (Device_EnableSrqParms) = 20;  | 
        ||
| 265 | Device_DocmdResp device_docmd (Device_DocmdParms) = 22;  | 
        ||
| 266 | Device_Error destroy_link (Device_Link) = 23;  | 
        ||
| 267 | Device_Error create_intr_chan (Device_RemoteFunc) = 25;  | 
        ||
| 268 | Device_Error destroy_intr_chan (void) = 26;  | 
        ||
| 269 | } = 1;  | 
        ||
| 270 | } = 0x0607AF;  | 
        ||
| 271 | |||
| 272 | /******************************************************************************  | 
        ||
| 273 | *  | 
        ||
| 274 | * vxi11intr.rpcl  | 
        ||
| 275 | *  | 
        ||
| 276 | * This file is best viewed with a tabwidth of 4  | 
        ||
| 277 | *  | 
        ||
| 278 | ******************************************************************************  | 
        ||
| 279 | *  | 
        ||
| 280 | * TODO:  | 
        ||
| 281 | *  | 
        ||
| 282 | ******************************************************************************  | 
        ||
| 283 | *  | 
        ||
| 284 | * Original Author: someone from VXIbus Consortium  | 
        ||
| 285 | * Current Author: Benjamin Franksen  | 
        ||
| 286 | * Date: 03-06-97  | 
        ||
| 287 | *  | 
        ||
| 288 | * RPCL description of the intr-channel of the TCP/IP Instrument Protocol  | 
        ||
| 289 | * Specification.  | 
        ||
| 290 | *  | 
        ||
| 291 | *  | 
        ||
| 292 | * Modification Log:  | 
        ||
| 293 | * -----------------  | 
        ||
| 294 | * .00 03-06-97 bfr created this file  | 
        ||
| 295 | *  | 
        ||
| 296 | ******************************************************************************  | 
        ||
| 297 | *  | 
        ||
| 298 | * Notes:  | 
        ||
| 299 | *  | 
        ||
| 300 | * This stuff is literally from  | 
        ||
| 301 | *  | 
        ||
| 302 | * "VXI-11, Ref 1.0 : TCP/IP Instrument Protocol Specification"  | 
        ||
| 303 | *  | 
        ||
| 304 | */  | 
        ||
| 305 | |||
| 306 | struct Device_SrqParms  | 
        ||
| 307 | { | 
        ||
| 308 | opaque handle<>;  | 
        ||
| 309 | };  | 
        ||
| 310 | |||
| 311 | program DEVICE_INTR  | 
        ||
| 312 | { | 
        ||
| 313 | version DEVICE_INTR_VERSION  | 
        ||
| 314 | 	{ | 
        ||
| 315 | void device_intr_srq (Device_SrqParms) = 30;  | 
        ||
| 316 | } = 1;  | 
        ||
| 317 | } = 0x0607B1;  |