top - download
⟦0aeb80c9c⟧ Wang Wps File
Length: 31568 (0x7b50)
Types: Wang Wps File
Notes: CPS/SDS/028
Names: »2039A «
Derivation
└─⟦4e34bac2f⟧ Bits:30006102 8" Wang WCS floppy, CR 0161A
└─ ⟦this⟧ »2039A «
WangText
*…06…)…0b…)…0f…)…02…)
)…06…(…08…(…0b…(…0d…(…00…(…02…( (…06…'…08…'…09…'…0b…'…0e…'…01…'
'…05…'…07…&…09…&…0b…&…0d…&…00…&
&…05…&…07…%…09…%…0b……86…1
…02…
…02… …02…
…02…CPS/SDS/028
…02…820514…02……02…
I/O CONTROL
DETAILED
DESIGN
SPECIFICATION…02……02…CAMPS
4.1.5.6.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
E̲n̲t̲r̲y̲ ̲P̲o̲i̲n̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
B̲a̲s̲i̲c̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
INITIALIZE ̲CONTROLLER 5.1
CLEAN ̲CONTROLLER 5.1
I̲n̲p̲u̲t̲ ̲R̲e̲q̲u̲e̲s̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
ENABLE ̲CONTROL ̲INPUT 5.2
ACK ̲CONTROL ̲INPUT 5.2
O̲u̲t̲p̲u̲t̲ ̲R̲e̲q̲u̲e̲s̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
GET ̲CONTROL ̲BUFFER 5.3
CONTROLLER ̲OUTPUT 5.3
C̲a̲n̲c̲e̲l̲
CANCEL ̲CONTROLLER ̲OPERATION 5.4
O̲U̲T̲P̲U̲T̲T̲E̲R̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
NOTIFY ̲CONTROLLER ̲FIRST ̲OUTPUT ̲BUFFER 5.5
NOTIFY ̲CONTROLLER ̲SUBSEQUENT ̲OUTPUT BUFFER 5.5
CONTROLLER ̲OUTPUT ̲RESULT 5.5
I̲N̲P̲U̲T̲T̲E̲R̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
NOTIFY ̲CONTROLLER ̲INPUT ̲REQUEST ̲BUFFER 5.6
NOTIFY ̲CONTROLLER ̲FIRST ̲INPUT ̲DATA 5.6
NOTIFY ̲CONTROLLER ̲INPUT ̲DATA 5.6
CONTROLLER ̲INPUT ̲RESULT 5.6
P̲R̲O̲T̲ ̲C̲O̲N̲T̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
NOTIFY ̲CONTROLLER ̲PROT ̲CONT ̲BUFFER 5.7
CONTROLLER ̲PROT ̲CONT ̲RESULT 5.7
P̲R̲O̲T̲O̲C̲O̲L̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
NOTIFY ̲CONTROLLER ̲PROTOCOL ̲BUFFER 5.8
CONTROLLER ̲PROTOCOL ̲RESULT 5.8
C̲o̲m̲p̲o̲n̲e̲n̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
I̲n̲p̲u̲t̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
TERMINATE ̲CONTROL ̲INPUT 5.9
RETURN ̲CONTROLLER ̲DATA 5.9
RETURN ̲CONTROLLER ̲INPUT ̲RESULT 5.9
RETURN ̲PROT ̲CONT ̲DATA 5.9
RETURN ̲PROTOCOL ̲DATA 5.9
O̲u̲t̲p̲u̲t̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
RETURN ̲INPUT ̲REQUEST ̲BUFFER 5.10
RETURN ̲PROT ̲CONT ̲BUFFER 5.10
RETURN ̲PROTOCOL ̲BUFFER 5.10
RETURN ̲CONTROL ̲OUTPUT ̲RESULT 5.10
C̲a̲n̲c̲e̲l̲ ̲S̲u̲p̲p̲o̲r̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
EMPTY ̲CONTROLLER ̲DATA ̲Q 5.11
CANCEL ̲CONTROLLER ̲INPUT 5.11
CANCEL ̲CONTROLLER ̲PROT ̲CONT 5.11
CANCEL ̲CONTROLLER ̲PROTOCOL 5.11
CANCEL ̲CONTROLLER ̲OUTPUT 5.11
EMPTY ̲CONTROLLER ̲PROT ̲CONT ̲DATA ̲Q 5.11
EMPTY ̲CONTROLLER ̲PROTOCOL ̲DATA ̲Q 5.11
4.1.5.6.4 D̲a̲t̲a̲
TYPE CONTROLLER ̲DATA = RECORD
INPUT : CONTROLLER ̲INPUT ̲DATA
OUTPUT : CONTROLLER ̲OUTPUT ̲DATA
PROT-̲CONT : CONTROLLER ̲PROT ̲CONT ̲DATA
PROTOCOL : CONTROLLER ̲PROTOCOL ̲DATA
END
TYPE CONTROLLER ̲INPUT ̲DATA = RECORD
STATE: (IDLE,
AWAIT ̲OUTPUT,
AWAIT ̲DATA,
PENDING ̲RESULT,
COMPLETE,
RESULT ̲RETURNED)
REQUEST STATE : ACTIVITY
BUF ̲SIZE : INTEGER
QEL : IO ̲QEL
DATA ̲Q : QD
DATA ̲Q ̲SIZE : INTEGER
PART ̲BUFFER ̲OFFSET: INTEGER
PART ̲BUFFER ̲LENGTH: INTEGER
PART ̲BUFFER ̲RET : BOOLEAN
RESULT : COMPLETION ̲CODE
END
STATE: Gives the state of current input. The AWAIT
̲OUTPUT is in addition to USER ̲INTERFACE states.
For other INPUT parameters ref USER ̲INTERFACE module
section 4.1.5.5.4.
TYPE CONTROLLER ̲OUTPUT ̲DATA = RECORD
STATE: (IDLE,
AWAIT ̲HEADER
FIRST ̲BUFFER,
ACTIVE)
QEL : IO ̲QEL
HEAD : (SUBDEV, LOWER ̲PROTOCOL ̲OUTPUT,
LOWER ̲PROTOCOL ̲OUTPUT ̲INPUT,
EXTERNAL ̲DEVICE ̲INPUT,
EXTERNAL ̲DEVICE ̲OUTPUT)
HEAD ̲BUFFER ̲ENTRY : BUFFER ̲ENTRY
END
STATE Describes current LDU in output. Since the
possible type of TMS output buffers differ
from what the OUTPUTTER requires the CONTROLLER
must itself keep track. (The reason being the
HEAD output)
HEAD, HEAD ̲BUFFER ̲ENTRY.
The HEAD word will always be the first two
bytes TMS outputs for control output.
TYPE CONTROLLER ̲PROT ̲CONT ̲DATA = RECORD
QEL : IO ̲QEL
DATA ̲Q: QD
END
TYPE CONTROLLER ̲PROTOCOL ̲DATA = RECORD
QEL : IO ̲QEL
DATA ̲Q: QD
END
4.1.5.6.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
4.1.5.6.5.1 B̲a̲s̲i̲c̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: INITIALIZE CONTROLLER
CLEAN CONTROLLER
INITIALIZE ̲CONTROLLER (PARAM: OPEN ̲SUBDEVICE ̲PARAM)()
Input data.
P= OWN ̲SDID. CONTROLLER
P. INPUT. STATE = IDLE
P. INPUT. REQ ̲STATE = IDLE
INIT ̲QD (P.INPUT. DATA ̲Q)()
P. INPUT. DATA ̲Q ̲SIZE = 0
P. INPUT. PART ̲BUFFER ̲RET = FALSE
Output data
P. OUTPUT. STATE = IDLE
LOAD HEAD ̲BUFFER ̲ENTRY
PROT ̲CONT data
INIT ̲QD (OWN ̲SDID. CONTROLLER. PROT ̲CONT. DATA.Q)()
PROTOCOL data
INIT ̲QD (OWN ̲SDID. CONTROLLER. PROTOCOL. DATA ̲Q)()
RETURN
Figure 4.1.5.6.5.1-1
CLEAN ̲CONTROLLER ()()
The CONTROLLER is responsible for the DATA ̲Q, a
possible PROT ̲CONT buffer and a PROTOCOL buffer.
EMPTY ̲CONTROLLER ̲DATA ̲Q ()()
EMPTY ̲CONTROLLER ̲PROT ̲CONT ̲DATA ̲Q ()()
EMPTY ̲CONTROLLER ̲PROTOCOL ̲DATA ̲Q ()()
RETURN
Figure 4.1.5.6.5.1-2
4.1.5.6.5.2 I̲n̲p̲u̲t̲ ̲R̲e̲q̲u̲e̲s̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: ENABLE ̲CONTROL ̲INPUT
ACK ̲CONTROL ̲INPUT
ENABLE ̲CONTROL ̲INPUT (PARS: ENABLE ̲PARAM)(CC:COMPLETION
̲CODE)
OWN ̲SDID. CONTROLLER. INPUT. REQ ̲STATE = ACTIVE
OWN ̲SDID. CONTROLLER. INPUT. BUF ̲SIZE = PARS. BUF ̲SIZE
PARS. H ̲OPID = OWN ̲SDID. CONTROLLER. INPUT. QEL
OWN ̲SDID. CONTROLLER. INPUT.
STATE NE IDLE
S̲E̲T̲U̲P̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲I̲N̲P̲U̲T̲ ̲2̲ G̲E̲T̲ ̲N̲E̲X̲T̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲I̲N̲P̲U̲T̲ ̲3̲
RETURN
Figure 4.1.5.6.5-1
S̲E̲T̲U̲P̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲I̲N̲P̲U̲T̲ ̲2̲
QEL = OWN ̲SDID. CONTROLLER. INPUT. QEL
QEL.REQ ̲REF = PARS. OPID
QEL. REQUESTOR = CONTROLLER
OWN ̲SDID. CONTROLLER, INPUT. STATE = AWAIT ̲OUTPUT
CC = REQUEST ̲QUEUE
Figure 4.1.5.6.5.2-2
G̲E̲T̲ ̲N̲E̲X̲T̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲I̲N̲P̲U̲T̲ ̲3̲
External device input is the only input not returned
to the requestor as a result of first request.
I = OWN ̲SDID. CONTROLLER. INPUT
R = OWN ̲SDID. REPLY
Data ?
I. DATA ̲Q ̲SIZE LE ZERO ?
I. STATE NE CC=REQUEST
̲
PENDING ̲RESULT? QUEUED
RETURN ̲CONTROLLER ̲DATA()() RETURN ̲CONTROLLER ̲INPUT
̲RESULT()()
Load return parameters
LOAD ̲BUFFER ̲RETURN (PARS)()
SEND ̲OPERATIONS ̲REPLY ()()
Figure 4.1.5.6.5.2-3
ACK ̲CONTROL ̲INPUT ()()
CASE OWN ̲SDID. CONTROLLER. OUTPUT. HEAD OF
SUBDEV ? A̲C̲K̲ ̲S̲U̲B̲D̲E̲V̲ ̲5̲
LOWER ̲PROTOCOL ? A̲C̲K̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲P̲R̲O̲T̲O̲C̲O̲L̲
̲6̲
EXTERNAL ̲DEVICE ̲INPUT ? A̲C̲K̲ ̲D̲E̲V̲I̲C̲E̲ ̲I̲N̲P̲U̲T̲
̲7̲
OTHER ? PROTOCOL ̲ERROR (CONTROLLER ̲2 ̲4)
END CASE
RETURN
Figure 4.1.5.6.5.2-4.
A̲C̲K̲ ̲S̲U̲B̲D̲E̲V̲ ̲5̲
OWN ̲SDID. CONTROLLER. INPUT. STATE = IDLE
CASE EXTRACT ̲FIRST (OWN ̲SDID. CONTROLLER. PROTOCOL.
DATA ̲Q)
(BUF)
OF
FAIL ? PROTOCOL ̲ERROR (CONTROLLER ̲2 ̲5)
PASS ?
END
RELEASE ̲PROTOCOL ̲BUFFER (BUF)()
Figure 4.1.5.6.5.2-5
A̲C̲K̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲P̲R̲O̲T̲O̲C̲O̲L̲ ̲6̲
OWN ̲SDID. CONTROLLER. INPUT. STATE = IDLE
CASE EXTRACT ̲FIRST (OWN ̲SDID,CONTROLLER.PROT ̲CONT.DATA
̲Q)(BUF)OF
FAIL ? PROTOCOL ̲ERROR (CONTROLLER ̲2 6)
PASS ?
END CASE
RELEASE ̲INPUT ̲BUFFER (BUF)()
Figure 4.1.5.6.5.2-6
A̲C̲K̲ ̲D̲E̲V̲I̲C̲E̲ ̲I̲N̲P̲U̲T̲ ̲7̲
I = OWN ̲SDID. CONTROLLER. INPUT
Was result returned
I. STATE EQ RESULT ̲RETURNED ? I.STATE = IDLE
Was only part buffer returned ?
I. PART ̲BUFFER ̲RET ?
Release buffer
CASE EXTRACT ̲FIRST (I.DATA ̲Q)(BUF) OF
FAIL ? PROTOCOL ̲ERROR (CONTROLLER ̲2 ̲7)
PASS ?
END CASE
I. DATA ̲Q ̲SIZE/1
RELEASE ̲INPUT ̲BUFFER (BUF)()
I. STATE EQ COMPLETE ? I.STATE = IDLE
Figure 4.1.5.6.5.2-7
4.1.5.6.5.3 O̲u̲t̲p̲u̲t̲ ̲R̲e̲q̲u̲e̲s̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: GET ̲CONTROL ̲BUFFER
CONTROLLER ̲OUTPUT
GET ̲CONTROL ̲BUFFER (PARS:GET ̲BUFFER ̲PARAM)(CC:COMPLETION
̲CODE)
OWN ̲SDID. CONTROLLER. OUTPUT ̲STATE
NE IDLE ?
S̲E̲T̲U̲P̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲O̲U̲T̲ ̲2̲ G̲E̲T̲ ̲N̲E̲X̲T̲ ̲C̲O̲N̲T̲R̲O̲L̲
̲B̲U̲F̲F̲E̲R̲ ̲3̲
Figure 4.1.5.6.5.3-1
S̲E̲T̲U̲P̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲O̲U̲T̲ ̲2̲
OWN ̲SDID.CONTROLLER. OUTPUT. QEL.REQ ̲REF = PARS.OPID
OWN ̲SDID. CONTROLLER.OUTPUT. QEL. REQUESTOR = CONTROLLER
OWN ̲SDID. CONTROLLER. OUTPUT. STATE = AWAIT ̲HEADER
Return header as output buffer
PARS. H ̲OPID = OWN ̲SDID. CONTROLLER. OUTPUT. QEL
PARS. BUF ̲SIZE = CONTROL ̲HEADER ̲BYTE ̲SIZE
PARS. PAGE ̲ADDR = OWN ̲SDID. CONTROLLER. OUTPUT. HEAD
̲PAGE ̲ADDR
PARS. BYTE ̲ADDR = OWN ̲SDID. CONTROLLER. OUTPUT: HEAD
̲PAGE ̲OFFSET
CC = OK
Figure 4.1.5.6.5.3-2
G̲E̲T̲ ̲N̲E̲X̲T̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲B̲U̲F̲F̲E̲R̲ ̲3̲
PARS. H ̲OPID = OWN ̲SDID. CONTROLLER. OUTPUT. QEL
OWN ̲SDID. CONTROLLER. OUTPUT. QEL. REQ ̲REF = PARS.OPID
CASE OWN ̲SDID. CONTROLLER. OUTPUT. HEAD OF
SUBDEV ? L̲O̲C̲A̲L̲ ̲B̲U̲F̲F̲E̲R̲ ̲4̲
LOWER ̲PROTOCOL ̲OUTPUT ̲INPUT,
LOWER ̲PROTOCOL ̲OUTPUT ? P̲R̲O̲T̲O̲C̲O̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲5̲
EXTERNAL ̲DEVICE ̲INPUT ? I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲6̲
EXTERNAL ̲DEVICE ̲OUTPUT ? O̲U̲T̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲7̲
OTHER ? PROTOCOL ̲ERROR CONTROLLER ̲3 ̲3)
END CASE
Figure 4.1.5.6.5.3-3
L̲O̲C̲A̲L̲ ̲B̲U̲F̲F̲E̲R̲ ̲4̲
QEL = OWN ̲SDID. CONTROLLER. PROTOCOL ̲QEL
REQUEST ̲PROTOCOL (QEL, CONTROLLER ̲PRIORITY)
(CCP, BUFFER ̲REF)
CCP NE OK ? CC = CCP
RETURN ̲PROTOCOL ̲BUFFER (QEL, BUFFER ̲REF)
LOAD ̲BUFFER ̲RETURN (PARS)()
CC = OK
Figure 4.1.5.6.5.3-4
P̲R̲O̲T̲O̲C̲O̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲5̲
QEL = OWN ̲SDID. CONTROLLER. PROT ̲CONT. QEL
REQUEST ̲PROT ̲CONT (QEL, CONTROLLER ̲PRIORITY)(CCP, BUFFER
̲REF)
CCP NE OK ? CC = CCP
RETURN ̲PROT ̲CONT.BUFFER (QEL, BUFFER ̲REF)()
LOAD ̲BUFFER ̲RETURN (PARS)()
CC = OK
Figure 4.1.5.6.5.3-5
I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲6̲
QEL = OWN ̲SDID. CONTROLLER. INPUT. QEL
REQUEST ̲DATA ̲INPUT (QEL,CONTROLLER ̲PRIORITY)(CCP,BUFFER
̲REF)
CCP NE OK ? CC = CCP
OWN ̲SDID. CONTROLLER. BUFFER ̲ENTRY = BUFFER ̲REF
RETURN ̲INPUT ̲REQUEST ̲BUFFER (QEL, BUFFER ̲REF)()
LOAD ̲BUFFER ̲RETURN (PARS)()
CC = OK
Figure 4.1.5.6.5.3-6
O̲U̲T̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲7̲
OWN ̲SDID. CONTROLLER. OUTPUT. STATE
EQ ACTIVE
F̲I̲R̲S̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲B̲U̲F̲F̲E̲R̲ ̲8̲ N̲E̲X̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲B̲U̲F̲F̲E̲R̲
̲9̲
Figure 4.1.5.6.5.3-7
F̲I̲R̲S̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲B̲U̲F̲F̲E̲R̲ ̲8̲
QEL = OWN ̲SDID. CONTROLLER. OUTPUT.QEL
REQUEST ̲DATA ̲OUTPUT (QEL, CONTROLLER ̲PRIORITY)(CCP,
BUFFER ̲REF)
CCP NE OK ? CC = CCP
RETURN ̲FIRST ̲DATA ̲BUFFER (QEL, BUFFER ̲REF)()
LOAD ̲BUFFER ̲RETURN (PARS)()
CC = OK
Figure 4.1.5.6.5.3-8
N̲E̲X̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲B̲U̲F̲F̲E̲R̲ ̲9
REQUEST ̲NEXT ̲BUFFER () (CCP, BUFFER ̲REF)
CCP NE OK CC = CCP
RETURN ̲NEXT ̲DATA ̲BUFFER (QEL, BUFFER ̲REF)()
LOAD ̲BUFFER ̲RETURN (PARS)()
CC = OK
Figure 4.1.5.6.5.3-9
CONTROLLER ̲OUTPUT (PARMS:INIT ̲OUTPUT ̲PARAM)(CC:COMPLETION
̲CODE)
OWN ̲SDID. CONTROLLER. OUTPUT.
STATE EQ AWAIT ̲HEADER ? H̲E̲A̲D̲E̲R̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲1̲
CASE OWN ̲SDID. CONTROLLER. OUTPUT.
HEAD OF
SUBDEV ? L̲O̲C̲A̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲2̲
̲
LOWER ̲PROTOCOL ̲OUTPUT ̲INPUT ? P̲R̲O̲T̲O̲C̲O̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲
̲1̲3̲
LOWER ̲PROTOCOL ̲OUTPUT ? P̲R̲O̲T̲O̲C̲O̲L̲ ̲O̲U̲T̲P̲U̲T̲
̲1̲4̲
EXTERNAL ̲DEVICE ̲INPUT ? E̲X̲T̲E̲R̲N̲A̲L̲ ̲D̲E̲V̲I̲C̲E̲
̲I̲N̲P̲U̲T̲ ̲1̲5̲
EXTERNAL ̲DEVICE ? E̲X̲T̲E̲R̲N̲A̲L̲ ̲D̲E̲V̲I̲C̲E̲
̲O̲U̲T̲P̲U̲T̲ ̲1̲6̲
OUTPUT
OTHER ? PROTOCOL ̲ERROR (CONTROLLER
̲3 ̲10)
END CASE
RETURN
Figure 4.1.5.6.5.3-10
H̲E̲A̲D̲E̲R̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲1̲
ISTATE = OWN ̲SDID. CONTROLLER. INPUTTER ̲STATE
CASE OWN ̲SDID. CONTROLLER. OUTPUT. HEAD OF
SUBDEV ?
LOWER ̲PROTOCOL ̲OUTPUT ̲INPUT?
EXTERNAL ̲DEVICE ̲INPUT ?
ISTATE EQ AWAIT ̲OUTPUT
?
CHECK=FAIL
CHECK=OK
LOWER ̲PROTOCOL ̲OUTPUT ?
EXTERNAL ̲DEVICE ̲OUTPUT ? ISTATE EQ IDLE?
CHECK=OK
CHECK=FAIL
OTHER ? CHECK=FAIL
END CASE
PARMS.TYPE EQ START ̲OF ̲LDU
AND CHECK EQ OK ? CC = OK
ISTATE EQ IDLE ?
TERMINATE ̲CONTROL ̲INPUT (UNKNOWN ̲CONTROL)()
OWN ̲SDID. CONTROLLER. OUTPUT. STATE = IDLE
CC = UNKNOWN ̲CONTROL
Figure 4.1.5.6.5.3-11
L̲O̲C̲A̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲2̲
PARMS. TYPE NE END ̲OF ̲LDU ? CC= TOO ̲MUCH
̲DATA
OWN ̲SDID. CONTROLLER. INPUT. STATE = AWAIT ̲DATA
LOCAL ̲CONTROL (PARS.BYTE ̲COUNT)(CC)
CC NE OK ?
TERMINATE ̲CONTROL ̲INPUT (CC)()
OWN ̲SDID. CONTROLLER. OUTPUT ̲STATE = IDLE
Figure 4.1.5.6.5.3-12
P̲R̲O̲T̲O̲C̲O̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲1̲3̲
SIZE= PARMS. BYTE ̲COUNT + PROTOCOL ̲COMMAND ̲DATA ̲OFFSET
SEND ̲PROT ̲CONT (TRUE, SIZE)()
OWN ̲SDID. CONTROLLER. OUTPUT ̲STATE = IDLE
CC = OK
Figure 4.1.5.6.5.3-13
L̲O̲W̲E̲R̲ ̲P̲R̲O̲T̲O̲C̲O̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲4̲
SIZE= PARMS. BYTE ̲COUNT + PROTOCOL ̲COMMAND ̲DATA ̲OFFSET
SEND ̲PROT ̲CONT (FALSE, SIZE)()
OWN ̲SDID. CONTROLLER. OUTPUT. STATE = IDLE
CC = OK
Figure 4.1.5.6.5.3-14
E̲X̲T̲E̲R̲N̲A̲L̲ ̲D̲E̲V̲I̲C̲E̲ ̲I̲N̲P̲U̲T̲ ̲1̲5̲
send input request
RBUF = OWN ̲SDID. CONTROLLER. BUFFER ̲ENTRY
BUFFER = RBUF. PAGE ̲START
START ̲RBUF. BUFFER ̲ADDR
Size does not include the size-byte
SIZE = BUFFER (START + INPUT ̲REQUEST ̲DATA ̲OFFSET) +
1
SEND ̲INPUT ̲REQUEST (SIZE)()
OWN ̲SDID. CONTROLLER. OUTPUT. STATE = IDLE
CC = OK
Figure 4.1.5.6.5.3-15
E̲X̲T̲E̲R̲N̲A̲L̲ ̲D̲E̲V̲I̲C̲E̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲6̲
Note that Head will always be start of LDU so type
shall be modified for the outputter.
TYPE = PARMS. BUFFER ̲TYPE
CASE OWN ̲SDID. CONTROLLER. OUTPUT. STATE OF
FIRST ̲BUFFER ? F̲I̲R̲S̲T̲ ̲D̲A̲T̲A̲ ̲1̲6̲ ̲
ACTIVE ? ADD = LDU ̲DATA
̲OFFSET
OTHER ? PROTOCOL ̲ERROR (CONTROLLER ̲3 ̲16)
END CASE
BYTE ̲COUNT = PARMS. BYTE ̲COUNT + ADD
SEND ̲OUTPUT ̲BUFFER (TYPE, BYTE ̲COUNT)()
CC = REQUEST ̲QUEUED
Figure 4.1.5.6.5.3-16
F̲I̲R̲S̲T̲ ̲D̲A̲T̲A̲ ̲1̲7̲
TYPE EQ PART ̲OF ̲LDU ? TYPE = START OF LDU
TYPE = ENTIRE ̲LDU
ADD = START ̲LDU ̲DATA ̲OFFSET
OWN ̲SDID. CONTROLLER: OUTPUT. STATE = ACTIVE
Figure 4.1.5.6.5.3-17
4.1.5.6.5.4 C̲a̲n̲c̲e̲l̲
This is: CANCEL ̲CONTROLLER ̲OPERATION
CANCEL ̲CONTROLLER ̲OPERATION (QEL: IO ̲QEL)()
C = OWN ̲SDID. CONTROLLER
CASE QEL OF
C.INPUT.QEL ? I̲N̲P̲U̲T̲ ̲C̲A̲N̲C̲E̲L̲ ̲2̲
C.OUTPUT.QEL ? O̲U̲T̲P̲U̲T̲ ̲C̲A̲N̲C̲E̲L̲ ̲4̲
OTHER ? PROTOCOL ̲ERROR (CONTROLLER ̲4 ̲1)
END CASE
RETURN
Figure 4.1.5.6.5.4-1
I̲N̲P̲U̲T̲ ̲C̲A̲N̲C̲E̲L̲ ̲2̲
C.INPUT.REQUEST ̲STATE EQ IDLE ?
LOAD ̲CANCEL ̲REPLY()()
SEND ̲OPERATIONS ̲REPLY ()()
C. INPUT. STATE EQ AWAIT ̲OUTPUT ?
C. INPUT. STATE EQ COMPLETE ?
C. INPUT. STATE EQ RESULT ̲RETURNED ?
C. INPUT. STATE = IDLE
CASE C.OUTPUT. HEAD OF
SUBDEV ?
LOWER ̲PROTOCOL ̲OUTPUT ̲INPUT
LOWER ̲PROTOCOL
EXTERNAL ̲DEVICE ̲INPUT ? I̲N̲P̲U̲T̲ ̲3̲
OTHER ? PROTOCOL ̲ERROR (CONTROLLER ̲4 ̲2)
END CASE
C. INPUT. STATE
= IDLE
Figure 4.1.5.6.5.4-2
I̲N̲P̲U̲T̲ ̲3̲
CANCEL ̲CONTROLLER ̲INPUT (C.INPUT.QEL)()
Figure 4.1.5.6.5.4-3
O̲U̲T̲P̲U̲T̲ ̲C̲A̲N̲C̲E̲L̲ ̲4̲
CASE C.OUTPUT. STATE OF
AWAIT ̲HEADER ? H̲E̲A̲D̲E̲R̲ ̲5̲
OTHER ? CASE C.OUTPUT.HEAD OF
SUBDEV? S̲U̲B̲D̲E̲V̲
̲6̲
LOWER ̲PROTOCOL ̲OUTPUT? L̲O̲W̲E̲R̲
̲7̲
LOWER ̲PROTOCOL ̲OUTPUT ̲INPUT?
EXTERNAL ̲DEVICE ̲OUTPUT? E̲X̲T̲
̲D̲E̲V̲
̲O̲U̲T̲
̲8̲
EXTERNAL ̲DEVICE ̲INPUT?
OTHER? PROTOCOL ̲ERROR (CONTROLLER
̲11 ̲4)
END CASE
END CASE
Figure 4.1.5.6.5.4-4
H̲E̲A̲D̲E̲R̲ ̲5̲
C. INPUT. STATE = IDLE
C. INPUT. STATE EQ IDLE ?
TERMINATE ̲CONTROL ̲INPUT (OUT ̲CANCELLED)()
Figure 4.1.5.6.5.4-5
S̲U̲B̲D̲E̲V̲ ̲6̲
CANCEL ̲CONTROLLER ̲PROTOCOL (QEL)()
Figure 4.1.5.6.5.4-6
L̲O̲W̲E̲R̲ ̲7̲
CANCEL ̲CONTROLLER ̲PROT ̲CONT (QEL)()
Figure 4.1.5.6.5.4-7
E̲X̲T̲ ̲D̲E̲V̲ ̲O̲U̲T̲ ̲8̲
CANCEL ̲OUTPUT (QEL)()
Figure 4.1.5.6.5.4-8
4.1.5.6.5.5 O̲U̲T̲P̲U̲T̲T̲E̲R̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: NOTIFY ̲CONTROLLER ̲FIRST ̲OUTPUT
̲BUFFER
NOTIFY ̲CONTROLLER ̲SUBSEQUENT ̲OUTPUT
̲BUFFER
CONTROLLER ̲OUTPUT ̲RESULT
NOTIFY ̲CONTROLLER ̲FIRST ̲OUTPUT ̲BUFFER (QEL: IO ̲QEL,
BUFFER ̲REF:
POINTER)()
RETURN ̲FIRST ̲DATABUFFER (QEL, BUFFER ̲REF)()
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.1.5.6.5.5-1
NOTIFY ̲CONTROLLER ̲SUBSEQUENT ̲OUTPUT ̲BUFFER (QEL: IO
̲QEL,
BUFFER ̲REF:POINTER)()
RETURN ̲NEXT ̲DATABUFFER (QEL,BUFFER ̲REF)()
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.1.5.6.5.5-2
CONTROLLER ̲OUTPUT ̲RESULT (QEL: IO ̲QEL, BUFFER ̲ENTRY:
POINTER)()
QEL. REQUESTOR = NONE
RETURN ̲CONTROL ̲OUTPUT ̲RESULT (QEL, BUFFER ̲ENTRY)()
SEND ̲OPERATIONS ̲REPLY()()
RELEASE ̲INPUT ̲BUFFER (BUFFER ̲ENTRY)()
OWN ̲SDID. CONTROLLER. OUTPUT. STATE = IDLE
RETURN
Figure 4.1.5.6.5.5-3
4.1.5.6.5.6 I̲N̲P̲U̲T̲T̲E̲R̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: NOTIFY ̲CONTROLLER ̲INPUT ̲REQUEST
̲BUFFER
NOTIFY ̲CONTROLLER ̲FIRST ̲INPUT ̲DATA
NOTIFY ̲CONTROLLER ̲INPUT ̲DATA
CONTROLLER ̲INPUT ̲RESULT
NOTIFY ̲CONTROLLER ̲INPUT ̲REQUEST ̲BUFFER (QEL:IO ̲QEL,
BUFFER ̲ENTRY:
POINTER)()
OWN ̲SDID. CONTROLLER. BUFFER ̲ENTRY = BUFFER ̲ENTRY
RETURN ̲INPUT ̲REQUEST ̲BUFFER (QEL, BUFFER ̲REF)()
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.1.5.6.5.6-1
NOTIFY ̲CONTROLLER ̲FIRST ̲INPUT ̲DATA (QEL: IO ̲QEL, BUFFER
̲ENTRY:
POINTER)
NOTIFY ̲CONTROLLER ̲INPUT ̲DATA (QEL, BUFFER ̲ENTRY)()
RETURN
Figure 4.1.5.6.5.6-2
NOTIFY ̲CONTROLLER ̲INPUT ̲DATA (QEL: IO ̲QEL,BUFFER ̲ENTRY:POINTER)()
INSERT (BUFFER ̲ENTRY, OWN.SDID.CONTROLLER.INPUT. DATA
̲Q)()
OWN ̲SDID. CONTROLLER. INPUT. DATA ̲Q ̲SIZE + 1
IS DATA ̲Q ̲SIZE GT 1 ?
NEXT ̲CONTROLLER ̲DATA ̲QEL()()
No request just now
OWN ̲SDID. CONTROLLER. INPUT.
REQUEST ̲STATUS EQ IDLE ?
RETURN ̲CONTROLLER ̲DATA()()
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.1.5.6.5.6-3
CONTROLLER ̲INPUT ̲RESULT (QEL: IO ̲QEL, BUFFER ̲ENTRY:
POINTER)()
QEL. REQUESTOR = NONE
BUFFER = BUFFER ̲ENTRY. PAGE ̲START
START = BUFFER ̲ENTRY. BUFFER ̲ADDR
RESULT = BUFFER (START + RECEPTION ̲STATUS ̲CODE ̲OFFSET)
OWN ̲SDID. CONTROLLER. INPUT. RESULT = RESULT
OWN ̲SDID. CONTROLLER. INPUT.STATE = PENDING ̲RESULT
Data awaited ?
OWN ̲SDID. CONTROLLER. INPUT, DATA ̲Q ̲SIZE GE 1 ?
OWN ̲SDID. CONTROLLER ̲INPUT. No queued request
data
still
REQUEST ̲STATUS EQ IDLE ?
pending
RETURN ̲CONTROLLER ̲INPUT ̲RESULT()()
SEND ̲OPERATIONS ̲REPLY()()
RELEASE ̲INPUT ̲BUFFER (BUFFER ̲ENTRY)()
RETURN
Figure 4.1.5.6.5.6.-4
4.1.5.6.5.7 P̲R̲O̲T̲ ̲C̲O̲N̲T̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲ ̲
These are: NOTIFY ̲CONTROLLER ̲PROT ̲CONT ̲BUFFER
CONTROLLER ̲PROT ̲CONT ̲RESULT
NOTIFY ̲CONTROLLER ̲PROT ̲CONT ̲BUFFER (QEL: IO ̲QEL,BUFFER
̲ENTRY:
POINTER)()
RETURN ̲PROT ̲CONT ̲BUFFER (QEL, BUFFER ̲ENTRY)()
SEND ̲OPERATIONS REPLY()()
RETURN
Figure 4.1.5.6.5.7-1
CONTROLLER ̲PROT ̲CONT ̲RESULT (QEL: IO ̲QEL,BUFFER ̲ENTRY:POINTER)()
The result is always contained in a buffer of type
Entire LDU
and the requestor gets as much as he has requested
RETURN ̲PROT ̲CONT ̲DATA (QEL, BUFFER ̲ENTRY)()
SEND ̲OPERATIONS ̲REPLY()()
INSERT (OWN ̲SDID.CONTROLLER. PROT ̲CONT. DATA ̲Q, BUFFER
̲ENTRY)()
RETURN
Figure 4.1.5.6.5.7-2
4.1.5.6.5.8 P̲R̲O̲T̲O̲C̲O̲L̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: NOTIFY ̲CONTROLLER ̲PROTOCOL ̲BUFFER
CONTROLLER ̲PROTOCOL ̲RESULT
NOTIFY ̲CONTROLLER ̲PROTOCOL ̲BUFFER (QEL:IO-QEL,BUFFER
̲ENTRY:
POINTER)()
RETURN ̲PROTOCOL ̲BUFFER (QEL,BUFFER ̲ENTRY)
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.1.5.6.5.8-1
CONTROLLER ̲PROTOCOL ̲RESULT (QEL: IO ̲QEL,BUFFER ̲ENTRY:POINTER)()
The result is always contained in an Entire LDU
buffer.
RETURN ̲PROTOCOL ̲DATA (QEL, BUFFER ̲ENTRY)()
SEND ̲OPERATIONS ̲REPLY
INSERT (OWN ̲SDID. CONTROLLER.PROTOCOL. DATA ̲Q, BUFFER
̲ENTRY)()
RETURN
Figure 4.1.5.6.5.8-2
4.1.5.6.5.9 I̲n̲p̲u̲t̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: TERMINATE ̲CONTROL ̲INPUT
RETURN ̲CONTROLLER ̲DATA
RETURN ̲CONTROLLER ̲INPUT ̲RESULT
RETURN ̲PROT ̲CONT ̲DATA
RETURN ̲PROTOCOL ̲DATA
TERMINATE ̲CONTROL ̲INPUT (CODE:COMPLETION ̲CODE)()
This is used to terminate pending input where data
has not yet been returned.
OWN ̲SDID. CONTROLLER. INPUT. RESULT = CODE
RETURN ̲CONTROLLER ̲INPUT ̲RESULT()()
OWN ̲SDID. CONTROLLER. INPUT. STATE = RESULT ̲RETURNED
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.1.5.6.5.9-1
RETURN ̲CONTROLLER ̲DATA()()
RBUF = OWN ̲SDID. CONTROLLER. INPUT. DATA ̲Q. EP
BUFFER = RBUF. PAGE ̲START
START = RBUF. BUFFER ̲ADDR
LDU ̲TYPE = BUFFER (START + LDU ̲TYPE ̲OFFSET)
LDU ̲TYPE EQ START ̲OF ̲LDU ?
LDU ̲TYPE EQ ENTIRE ̲LDU ?
Can one return all data ?
OWN ̲SDID. CONTROLLER. INPUT. PART ̲BUFFER ̲SIZE
GT OWN ̲SDID. CONTROLLER. INPUT. BUF ̲SIZE ?
R̲E̲T̲U̲R̲N̲ ̲L̲A̲S̲T̲ ̲D̲A̲T̲A̲ ̲3̲ R̲E̲T̲U̲R̲N̲ ̲M̲I̲D̲ ̲O̲R̲ ̲F̲I̲R̲S̲T̲
̲D̲A̲T̲A̲ ̲4̲
OWN ̲SDID. CONTROLLER. INPUT.
STATE = COMPLETE
OWN ̲SDID. REPLY. RESULT = OK
OWN ̲SDID. REPLY. H ̲OPID = OWN ̲SDID. CONTROLLER. INPUT.
QEL
OWN ̲SDID. REPLY. OPID = OWN ̲SDID.CONTROLLER. INPUT.
QEL. REQ ̲REF
OWN ̲SDID. CONTROLLER. INPUT. REQUEST ̲STATE = IDLE
RETURN
Figure 4.1.5.6.5.9-2
R̲E̲T̲U̲R̲N̲ ̲L̲A̲S̲T̲ ̲D̲A̲T̲A̲ ̲3̲
This includes return of ENTIRE ̲LDU
OWN ̲SDID. REPLY. BUFFER ̲TYPE = LDU ̲TYPE
I = OWN ̲SDID. CONTROLLER. INPUT
OWN ̲SDID. REPLY. PAGE ̲ADDR = I. DATA ̲Q.EP. PAGE ̲ADDR
OWN ̲SDID. REPLY. BYTE ̲ADDR = I. PART ̲BUFFER ̲OFFSET
OWN ̲SDID. REPLY. BYTE ̲COUNT = I. PART ̲BUFFER ̲SIZE
I. PART ̲BUFFER ̲RET = FALSE
OWN ̲SDID. REPLY. RESULT = OK
Figure 4.1.5.6.5.9-3
R̲E̲T̲U̲R̲N̲ ̲M̲I̲D̲ ̲O̲R̲ ̲F̲I̲R̲S̲T̲ ̲D̲A̲T̲A̲ ̲4̲
I= OWN ̲SDID. CONTROLLER. INPUT
R= OWN ̲SDID. REPLY
I. PART ̲BUFFER ̲RET ?
LDU ̲TYPE NE START ̲OF ̲LDU?
TYP= START ̲OF ̲LDU TYP= PART
̲OF ̲LDU
R. BUFFER ̲TYPE = TYP
R. PAGE ̲ADDR = I. DATA ̲Q. EP. PAGE ̲ADDR
R. BYTE ̲ADDR = I. PART ̲BUFFER ̲OFFSET
I. BUF ̲SIZE GE I. PART ̲BUFFER ̲SIZE ?
Return only part of buffer
R. BYTE ̲COUNT = I. BUF ̲SIZE
Reduce size of left-over date
I. PART ̲BUFFER ̲SIZE - I.BUF ̲SIZE
I. PART ̲BUFFER ̲OFFSET + I. BUF ̲SIZE
Mark part buffer returned
I. PART ̲BUFFER ̲RET = TRUE
Return rest of
buffer
R.BYTE ̲COUNT=I.PART
̲BUFFER ̲SIZE
Mark that all buffer
returned
I. PART ̲BUFFER ̲RET
= FALSE
Figure 4.1.5.6.5.9-4
RETURN ̲CONTROLLER ̲INPUT ̲RESULT()()
R = OWN ̲SDID. REPLY
I = OWN ̲SDID. CONTROLLER. INPUT
R. RESULT = I. RESULT
R. BYTE ̲COUNT = ZERO
I. STATE = RESULT ̲RETURNED
R. H ̲OPID = I.QEL
R. OPID = I. QEL. REQ ̲REF
I. REQUEST ̲STATE = IDLE
RETURN
Figure 4.1.5.6.5.9-5
RETURN ̲PROT ̲CONT ̲DATA()()
B = OWN ̲SDID. CONTROLLER. PROT ̲CONT. DATA ̲Q. EP
R = OWN ̲SDID. REPLY
R. PAGE ̲ADDR = B.PAGE ̲ADDR
R. BYTE ̲ADDR = B.BUFFER ̲ADDR + PROTOCOL ̲STATUS ̲DATA
̲OFFSET
R. BYTE ̲COUNT = B.BUFFER ̲SIZE - PROTOCOL ̲STATUS ̲DATA
̲OFFSET
R. BUFFER ̲TYPE = ENTIRE ̲LDU
R. RESULT = OK
QEL = OWN ̲SDID. CONTROLLER. INPUT. QEL
R. H ̲OPID = QEL
R. OPID = QEL. REQ ̲REF
RETURN
Figure 4.1.5.6.5.9-6
RETURN ̲PROTOCOL ̲DATA ()()
B = OWN ̲SDID. CONTROLLER. PROTOCOL. DATA ̲Q ̲EP
R = OWN ̲SDID. REPLY
R. PAGE ̲ADDR = B.PAGE ̲ADDR
R. BYTE ̲ADDR = B.BUFFER ̲ADDR
R. BYTE ̲COUNT = B.BUFFER ̲SIZE
R. RESULT = OK
R. BUFFER ̲TYPE = ENTIRE ̲LDU
QEL = OWN ̲SDID. CONTROLLER. INPUT. QEL
R. OPID = QEL. REQ ̲REF
R. H-OPID = QEL
Figure 4.1.5.6.5.9-7
4.1.5.6.5.10 O̲u̲t̲p̲u̲t̲ ̲H̲a̲n̲d̲l̲i̲n̲g̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: RETURN ̲INPUT ̲REQUEST ̲BUFFER
RETURN ̲PROT ̲CONT ̲BUFFER
RETURN ̲PROTOCOL ̲BUFFER
RETURN ̲CONTROL ̲OUTPUT ̲RESULT
RETURN ̲INPUT ̲REQUEST ̲BUFFER(QEL:IO ̲QEL, BUFFER ̲ENTRY:POINTER)()
OFFSET = INPUT ̲REQUEST ̲DATA ̲OFFSET
RETURN ̲BUFFER (QEL, OFFSET, BUFFER ̲ENTRY)()
RETURN
Figure 4.1.5.6.5.10-1
RETURN ̲PROT ̲CONT ̲BUFFER (QEL: IO ̲QEL, BUFFER ̲ENTRY:
POINTER)()
OFFSET = PROTOCOL ̲COMMAND ̲DATA ̲OFFSET
RETURN ̲BUFFER (QEL, OFFSET, BUFFER ̲ENTRY)()
RETURN
Figure 4.1.5.6.5.10-2
RETURN ̲PROTOCOL ̲BUFFER (QEL: IO ̲QEL, BUFFER ̲ENTRY:
POINTER)()
OFFSET = 0
RETURN ̲BUFFER (QEL, OFFSET, BUFFER ̲ENTRY)()
RETURN
Figure 4.1.5.6.5.10-3
RETURN ̲CONTROL ̲OUTPUT ̲RESULT (QEL: IO ̲QEL, BUFFER ̲ENTRY:POINTER)
R = OWN ̲SDID. REPLY
R. OPID = QEL. REQ ̲REF
R. H ̲OPID = QEL
BUFFER = BUFFER ̲ENTRY. PAGE ̲START
START = BUFFER ̲ENTRY. BUFFER ̲ADDR.
RESULT = BUFFER (START + TRANSMISSION ̲STATUS ̲CODE ̲OFFSET)
R. RESULT = RESULT
RETURN
Figure 4.1.5.6.5.10-4
4.1.5.6.5.11 C̲a̲n̲c̲e̲l̲ ̲S̲u̲p̲p̲o̲r̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are: EMPTY ̲CONTROLLER ̲DATA ̲Q
CANCEL ̲CONTROLLER ̲INPUT
CANCEL ̲CONTROLLER ̲OUTPUT
CANCEL ̲CONTROLLER ̲PROT ̲CONT
CANCEL ̲CONTROLLER ̲PROTOCOL
EMPTY ̲CONTROLLER ̲PROT ̲CONT ̲DATA
̲Q
EMPTY ̲CONTROLLER ̲PROTOCOL ̲DATA
̲Q
EMPTY ̲CONTROLLER ̲DATA ̲Q()()
LOOP
CASE EXTRACT ̲FIRST (OWN ̲SDID.CONTROLLER.INPUT.DATA
̲Q)(BUF) OF
FAIL ?
PASS ? RELEASE ̲INPUT ̲BUFFER (BUF)()
END CASE
END LOOP
OWN ̲SDID. CONTROLLER. INPUT. DATA ̲Q ̲SIZE = 0
RETURN
Figure 4.1.5.6.5.11-1
CANCEL ̲CONTROLLER ̲INPUT (QEL: IO ̲QEL)()
CANCEL ̲INPUT (QEL)()
EMPTY ̲CONTROLLER ̲DATA ̲Q()()
QEL. REQUESTOR = NONE
OWN ̲SDID. CONTROLLER. PART ̲BUFFER ̲RET = FALSE
Pending request ?
OWN ̲SDID. CONTROLLER. INPUT. REQUEST ̲STATE EQ IDLE
?
OWN ̲SDID. CONTROLLER. INPUT. RESULT = CANCELLED
RETURN ̲CONTROL ̲INPUT ̲RESULT ()()
SEND ̲OPERATIONS ̲REPLY()()
OWN ̲SDID. CONTROLLER. INPUT ̲STATE = IDLE
RETURN
Figure 4.1.5.6.5.11-2
CANCEL ̲CONTROLLER ̲OUTPUT (QEL: IO ̲QEL)()
CANCEL ̲OUTPUT (QEL) ()
QEL. REQUESTOR = NONE
QEL. ADDI NE ACTIVE ?
TMS requires response
LOAD ̲CANCEL ̲REPLY (QEL)()
QEL. ADDI = IDLE
SEND ̲OPERATIONS ̲REPLY ()()
OWN ̲SDID.CONTROLLER. OUTPUT. STATE = IDLE
RETURN
Figure 4.1.5.6.5.11-3
CANCEL ̲CONTROLLER ̲PROT ̲CONT (QEL: IO ̲QEL)()
CANCEL ̲PROT ̲CONT (QEL)()
EMPTY ̲CONTROLLER ̲PROT ̲CONT ̲DATA ̲Q()()
OWN ̲SDID. CONTROLLER. INPUT. STATE EQ IDLE ?
TERMINATE ̲CONTROL ̲INPUT (OUT ̲CANCELLED)()
QEL. ADDI NE ACTIVE ?
LOAD ̲CANCEL ̲REPLY (QEL)()
QEL. ADDI = IDLE
SEND ̲OPERATIONS ̲REPLY()()
OWN ̲SDID. CONTROLLER. OUTPUT. STATE = IDLE
RETURN
Figure 4.1.5.6.5.11-4
CANCEL ̲CONTROLLER ̲PROTOCOL (QEL:IO ̲QEL)()
CANCEL ̲PROTOCOL (QEL)()
EMPTY ̲CONTROLLER ̲PROTOCOL ̲DATA ̲Q()()
OWN ̲SDID. CONTROLLER. INPUT ̲STATE. EQ. IDLE ?
TERMINATE ̲CONTROL ̲INPUT (CANCELLED)()
QEL. ADDI NE ACTIVE ?
LOAD ̲CANCEL ̲REPLY (QEL)()
QEL. ADDI = IDLE
SEND ̲OPERATIONS ̲REPLY ()()
OWN ̲SDID. CONTROLLER. OUTPUT. STATE = IDLE
RETURN.
Figure 4.1.5.6.5.11-5
EMPTY ̲CONTROLLER ̲PROT-CONT ̲DATA ̲Q()()
LOOP
CASE EXTRAXT ̲FIRST (OWN ̲SDID. CONTROLLER. PROT ̲CONT.DATA
̲Q)
(BUF)
OF
FAIL ?
PASS ? RELEASE ̲INPUT ̲BUFFER (BUF)()
END CASE
END LOOP
RETURN
Figure 4.1.5.6.5.11-6
EMPTY ̲CONTROLLER ̲PROTOCOL ̲DATA ̲Q()()
LOOP
CASE EXTRACT ̲FIRST (OWN ̲SDID. CONTROLLER. PROTOCOL.DATA
̲Q)
(BUF)
OF
FAIL ?
PASS ? RELEASE ̲INPUT ̲BUFFER (BUF)()
END CASE
END LOOP
RETURN
Figure 4.1.5.6.5.11-7