with UATL_DATA_TYPES; use UATL_DATA_TYPES; package INTERFACE_DATA_TYPES_488 is type BIT_ARRAY is array (INTEGER range <>) of BOOLEAN; pragma PACK(BIT_ARRAY); subtype BIT_ARRAY_32 is BIT_ARRAY(0..31); -- for ID_TYPE'size use 5*bits; -- The only time this must be restricted -- to five bits is when defining the -- PPC_CONFIGURE_ARRAY_ELEMENT, and it is -- restrained to five bits at that time. type DEVICE_RESPONSE_REQUEST is (NO_RESPONSE_NEEDED,GET_RESPONSE); --for DEVICE_RESPONSE_REQUEST'size use 16; type GENERAL_488_HEADER is record LENGTH : INTEGER_16; RESPONSE : DEVICE_RESPONSE_REQUEST := NO_RESPONSE_NEEDED; RECEIVE : INTERFACE_USERS := (others => false); end record; -- for GENERAL_488_HEADER use -- record -- LENGTH at word*0 range 0..15; -- RESPONSE at word*1 range 0..15; -- RECEIVE at word*2 range 0..31; -- end record; type GENERAL_488_MESSAGE(LENGTH : DATA_BYTE_COUNT_TYPE := 1023) is record RESPONSE : DEVICE_RESPONSE_REQUEST := NO_RESPONSE_NEEDED; RECEIVE : INTERFACE_USERS := (others => false); MESSAGE : BYTE_ARRAY(1..LENGTH); end record; -- for GENERAL_488_MESSAGE use -- record -- LENGTH at word*0 range 0..15; -- RESPONSE at word*1 range 0..15; -- RECEIVE at word*2 range 0..31; -- end record; type MESSAGE_LINK; type MESSAGE_POINTER is access MESSAGE_LINK; --% pragma CONTROLLED (MESSAGE_POINTER); type MESSAGE_LINK is record NEXT : MESSAGE_POINTER := null; TIME_OUT : DURATION := 0.5; MESSAGE : GENERAL_488_MESSAGE; end record; subtype STATUS_TYPE is integer_16; OK : constant STATUS_TYPE := 1; type RECEIVE_CALLS is (WAIT, NO_WAIT, TIMED); subtype LINE_NUMBER_TYPE is integer range 0..7; subtype SERVICE_REQUEST_TYPE is INTEGER range -2**5..2**5-1; TRANSMISSION_COMPLETED : constant := -1; MESSAGE_TO_SEND : constant := -2; REQUEST_CONTROL : constant := -3; type SERIAL_POLL_RECORD is record SERVICE : SERVICE_REQUEST_TYPE; REQUESTING_SERVICE : BOOLEAN; end record; -- for SERIAL_POLL_RECORD use -- record -- SERVICE at word*0 range 0..5; -- inconsistant -- REQUESTING_SERVICE at word*0 range 6..6; -- between compilers -- end record; type SP_SERVICE_ARRAY is array(INTEGER_16 range 0..62) of DATA_BYTE; pragma PACK(SP_SERVICE_ARRAY); type SERIAL_POLL_RESULTS_TYPE is array(ID_TYPE) of DATA_BYTE; type IEEE488_PROTOCOL is (SOL,SRQ,UATL); type TERMINATION_TYPE is (LF, EOI, WC); type DEVICE_LIST_RECORD is record ADDRESS : ID_TYPE; PROTOCOL : IEEE488_PROTOCOL := SOL; TERMINATION : TERMINATION_TYPE := LF; end record; type DEVICE_LIST is array (POSITIVE range <>) of DEVICE_LIST_RECORD; type DEVICE_LIST_ACCESS is access DEVICE_LIST; subtype SMALL_ARRAY is BYTE_ARRAY(0..62); type SMALL_MESSAGE is record LENGTH : DATA_BYTE_COUNT_TYPE; DATA : BYTE_ARRAY(1..64); end record; type PPC_CONFIGURE_ARRAY_ELEMENT is record DISABLE : boolean; -- Valid when read from the bus SENSE : boolean; LINE_NUMBER : LINE_NUMBER_TYPE; end record; --for PPC_CONFIGURE_ARRAY_ELEMENT use -- record -- DISABLE at word*0 range 4..4; -- SENSE at word*0 range 3..3; -- LINE_NUMBER at word*0 range 0..2; -- end record; pragma PACK(PPC_CONFIGURE_ARRAY_ELEMENT); type PPC_ARRAY is array(ID_TYPE) of PPC_CONFIGURE_ARRAY_ELEMENT; pragma PACK(PPC_ARRAY); type PPC_ARRAY_ELEMENT is record ID : ID_TYPE; PPC_COMMAND : DATA_BYTE := 16#05#; -- Parallel poll configure CONFIG_BYTE : PPC_CONFIGURE_ARRAY_ELEMENT; end record; --% for PPC_ARRAY_ELEMENT use --% record --% ID at word*0 range 0..4; --% CONFIG_BYTE at word*0 range 5..15; --% end record; pragma PACK(PPC_ARRAY_ELEMENT); type PPC_ARRAY_TYPE is array(ID_TYPE range 0..15) of PPC_ARRAY_ELEMENT; pragma PACK(PPC_ARRAY_TYPE); -- -- Return codes -- type MESSAGE_ID_TYPE is (NO_MESSAGE, -- for a zero SERVICE_REQUEST, ADDRESSED_AS_LISTENER, ADDRESSED_AS_TALKER, DEADDRESSED, ADDRESSED_AS_EXTENDED_LISTENER, ADDRESSED_AS_EXTENED_TALKER, DEVICE_CLEAR, DEVICE_TRIGGER, REMOTE_LOCAL_CHANGE, RECEIVED_CONTROL, PARALLEL_POLL_CONFIGURE, PARALLEL_POLL_UNCONFIGURE, INTERFACE_CLEAR); end INTERFACE_DATA_TYPES_488;