-- GPIB.mesa -- Copyright c 1985 by Xerox Corporation. All rights reserved. -- Created for PostCedar5.2 by Neil Gunther, March 22, 1985 -- Compiled for Cedar 6.0, September 6, 1985 -- Last edited by Neil Gunther, September 26, 1985 11:01:30 am PDT -- Tim Diebert for XDE on a Dicentra: 3-Oct-85 9:23:51 -- -- -- -- This interface defines the IEEE 488 General Purpose Interface Bus (GPIB) standard -- for asynchronous byte serial bit parallel interfacing to instrumentation. It contains -- all the standard commands, both universal and selected, and data transfer PROC's. To -- keep machine-dependent applications organized, this PUBLIC interface is EXPORTED -- by the appropriate driver-level implementation which must be bound into the -- client's configuration. -- -- IEEE 488 Technical Parameters: -- -- o Maximum transmission length = 20 meters/bus; 2m/device; Star or Linear network. -- o Maximum number of devices/bus = 15; 1 talker/14 listeners. -- o Maximum data rate = 1Mbps for short paths; ~300 Kbps typical; device limited. -- o Signals: 8 data/8 control simultaneously active. -- o Data Transfer: byte serial bit parallel, asynchronous, with 3-wire handshake. -- o Only one controller may be active at once. The sytem controller is the master. -- -- For the formal bus specification see: IEEE Standard Digital Interface for Programmable -- Instrumentation, ANSI/IEEE Std 488-1978 and ANSI/IEEE Std 728-1982. -- GPIB: DEFINITIONS = BEGIN -- Types and Constants -- -- Bus Status StatusFlag: TYPE = { DAV, -- Data Valid NRFD, -- Not Ready For Data NDAC, -- NOT Data Accepted IFC, -- Interface Cleared SRQ, -- Service Request REN, -- Remote Enable EOI, -- End or Identify ATN -- Attention [switch Command/Data modes] }; StatusVec: TYPE = ARRAY StatusFlag OF BOOL; SRQLabels: TYPE = ARRAY StatusFlag OF LONG STRING; -- Command Group -- goToLocal: CHAR = 001C; -- GTL selectedDeviceClear: CHAR = 004C; -- SDC parallelPollConfigure: CHAR = 005C; -- PPC groupExecuteTrigger: CHAR = 010C; -- GET takeControl: CHAR = 011C; -- TCT localLockout: CHAR = 021C; -- LLO devicesClear: CHAR = 024C; -- DCL parallelPollUnconfigure: CHAR = 025C; -- PPU serialPollEnable: CHAR = 030C; -- SPE serialPollDisable: CHAR = 031C; -- SPD parallelPollEnable: SecondaryCommand = 140C; -- PPE parallelPollDisable: SecondaryCommand = 160C; -- PPD -- Listen/Talk Address Groups ListenAddress: TYPE = CHAR [040C..077C]; UnListen: ListenAddress = 077C; TalkAddress: TYPE = CHAR [100C..137C]; UnTalk: TalkAddress = 137C; SecondaryCommand: TYPE = CHAR [100C..177C]; FORMAT: TYPE = {F0, F1, F2, F3, F4, F5}; PrimaryAddress: TYPE = CHAR [040C..137C]; DeviceAddr: TYPE = NAT [0..31); -- Bus: CHAR; -- Procedures -- Universal commands (all devices whether addressed or not) Command: PROC [sendMsg: LONG STRING]; DevicesClear: PROC; GoToLocal: PROC; GroupExecuteTrigger: PROC; InterfaceClear: PROC; LocalLockout: PROC; RemoteEnable: PROC; -- Selected Device Commands (only those devices addressed) SelectedDeviceClear: PROC [device: DeviceAddr]; SelectedGoToLocal: PROC [device: DeviceAddr]; SelectedGroupEnableTrigger: PROC [device: DeviceAddr]; SelectedRemoteEnable: PROC [device: DeviceAddr]; -- -- Explicit Polling Routines ParallelPollConfigure: PROC [device: DeviceAddr]; ParallelPollUnconfigure: PROC; SelectedParallelPollConfigure: PROC [device: DeviceAddr]; SelectedParallelPollUnconfigure: PROC [device: DeviceAddr]; -- Read Specific Devices PollDevice: PROC [device: DeviceAddr, labels: SRQLabels]; ReadDevice: PROC [device: DeviceAddr, recvMsg: LONG STRING]; ReadOnInterrupt: PROC [device: DeviceAddr, recvMsg: LONG STRING, labels: SRQLabels]; SelectedReadSerialPoll: PROC [device: DeviceAddr] RETURNS [statusByte: CHAR]; ReadStatusByte: PROC [device: DeviceAddr] RETURNS [char: CHAR]; -- Write Specific Devices WriteDevice: PROC [device: DeviceAddr, sendMsg: LONG STRING]; -- Sends the string as a whole message. WriteDeviceInitial: PROC [device: DeviceAddr, sendMsg: LONG STRING]; -- Sends the string without the EOI. WriteDeviceContinued: PROC [device: DeviceAddr, sendMsg: LONG STRING, last: BOOL]; -- Sends the string without the initial stuff. WriteDeviceBlock: PROC [device: DeviceAddr, lp: LONG POINTER, quadWordCnt: CARDINAL, last: BOOL]; -- Sends the bytes pointed to by lp, the total bytes count must be a multiple of 8. -- Convenience Functions InitializeController: PROC RETURNS [open: BOOL]; FinalizeController: PROC; maxWriteBuffer: NAT = 512+5; maxReadBuffer: NAT = 512+5; END.