top - download
⟦43d1bf6a6⟧ Wang Wps File
Length: 60427 (0xec0b)
Types: Wang Wps File
Notes: CPS/SDS/028
Names: »2026A «
Derivation
└─⟦4e34bac2f⟧ Bits:30006102 8" Wang WCS floppy, CR 0161A
└─ ⟦this⟧ »2026A «
WangText
G…05…G…07…*…08…*…0a…*…0c…*…0e……14……09……14……0a……14……0c……14……0d……14……0f……14……01……14… …14……05……14……07……13……09……13……0c……13……0e……13……0f……13……01……13…
…13… …13……06……12……08……12……0a……12……0b……12……0d……12……0f……12……01……12……06……11……0a……11……0c……11……0e……11……0f……11……01……11…
…11……05……11……07……10……09……10……0b……10……0d……10……0f……10… …0f……08……0f……0a……0f……86…1
…02…
…02…
…02…
…02…CPS/SDS/028
…02…820514…02……02…
I/O
CONTROL
DETAILED
DESIGN
SPECIFICATION…02……02…CAMPS
CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER (IF
̲PARAM
:
SPI
̲PARAM,
SUBDEV : SUBDEV ̲DATA)
(CC : COMPLETION ̲CODE)
CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER (IF ̲PARAM: SPI ̲PARAM,
SUBDEV:SUBDEV ̲DATA)
(CC:COMPLETION ̲CODE)
RR = IF ̲PARAM.REQ ̲RECORD
CASE RR. WORD 3 OF
CONTROL ? C̲A̲N̲C̲E̲L̲ ̲C̲O̲N̲T̲R̲O̲L̲ ̲(̲F̲i̲g̲ ̲4̲.̲1̲.̲5̲.̲7̲.̲5̲.̲2̲-̲7̲)̲
DATA ? CANCEL ̲SUBDEV ̲OUTPUT (SUBDEV)()
END CASE
CC=OK
RETURN
Fig 4.2.3.4.5.5-7
RELEASE ̲OUTPUT ̲BUFFER (IF ̲PARAM : SPI ̲PARAM,
SUBDEV : SUBDEV ̲DATA)
(CC : COMPLETION ̲CODE)
BREF = IF ̲PARAM. BUFFER ̲ENTRY
BREF EQ OWN ̲SDID. SUBDEVICE ̲ ?
IF.CONTROL ̲BUFFER ̲ENTRY
CANCEL ̲SUBDEV ̲OUTPUT(SUBDEV)() TERMINATE ̲ONGOING ̲CONTROL()()
RETURN
Fig 4.2.3.4.5.5-8…86…1 …02… …02… …02…
TRANSMIT ̲OUTPUT ̲BUFFER (IF ̲PARAM : SPI ̲PARAM,
SUBDEV
:
SUBDEV
̲DATA)
(CC
:
COMPLETION
̲CODE)
BREF = IF ̲PARAM. BUFFER ̲ENTRY
BUFFER = BREF. PAGE ̲START
START = BREF. BUFFER ̲ADDR
SIZE = BREF. BUFFER ̲SIZE
TYPE = BUFFER (START + BUFFER ̲TYPE ̲OFFSET)
TYPE INDICATE CONTROL? C̲O̲N̲T̲R̲O̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲0̲
CASE SUBDEV. PROTOCOL. TYPE OF
DATA? D̲A̲T̲A̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲7̲
LCB? L̲C̲B̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲8̲
ACK? A̲C̲K̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲9̲
OTHER? PROTOCOL ̲ERROR (NT ̲SUBDEVICE ̲IF ̲9)
END CASE
RETURN
Fig. 4.2.3.4.5.5-9…86…1 …02… …02… …02…
C̲O̲N̲T̲R̲O̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲0̲
CONTROL ̲TYPE = BUFFER (START + CONTROL ̲REQUEST ̲OFFSET)
CASE CONTROL ̲TYPE OF
INPUT ̲REQUEST I̲N̲P̲U̲T̲
̲R̲E̲Q̲U̲E̲S̲T̲
̲1̲1̲
CANCEL ̲INPUT ̲REQUEST? C̲A̲N̲C̲E̲L̲
̲I̲N̲P̲U̲T̲
̲R̲E̲Q̲U̲E̲S̲T̲
̲1̲5̲
CANCEL ̲OUTPUT? C̲A̲N̲C̲E̲L̲
̲O̲U̲T̲P̲U̲T̲
̲1̲6̲
OTHER? PROTOCOL ̲ERROR (NT
̲SUBDEVICE ̲IF ̲10)
END CASE
CONTROL ̲COMPLETE EQ FALSE?
NEXT ̲CONTROL () (CCP)
CCP NE OK?
NOTIFY ̲CONTROL ̲BUFFER () ()
Fig. 4.2.3.4.5.5-10…86…1 …02… …02… …02…
I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲1̲1̲
SUBDEV. INPUT ̲QEL, REQUESTOR = SUBDEVICE
Load LDU
SUBDEV. INPUT ̲QEL. REQ ̲REF = BUFFER (START +
INPUT ̲REQUEST ̲LDU
̲OFFSET)
CASE SUBDEV. PROTOCOL. TYPE OF
DATA? D̲A̲T̲A̲ ̲I̲N̲P̲U̲T̲ ̲1̲2̲
LCB? L̲C̲B̲ ̲I̲N̲P̲U̲T̲ ̲1̲3̲
ACK? A̲C̲K̲ ̲I̲N̲P̲U̲T̲ ̲1̲4̲
OTHER? PROTOCOL ERROR (NT ̲SUBDEVICE ̲IF ̲11)
END CASE
Fig. 4.2.3.4.5.5-11…86…1 …02… …02… …02…
D̲A̲T̲A̲ ̲I̲N̲P̲U̲T̲ ̲1̲2̲
REQUEST ̲IN ̲CONV ̲INPUT (SUB. INPUT ̲QEL, SUBDEV. PRIORITY)
()
CONTROL ̲COMPLETE = TRUE
Fig. 4.2.3.4.5.5-12…86…1 …02… …02… …02…
L̲C̲B̲ ̲I̲N̲P̲U̲T̲ ̲1̲3̲
REQUEST ̲DATA ̲INPUT (SUBDEV. INPUT ̲QEL, SUBDEV. PRIORITY)
(CCP, BUFFER ̲REF)
CCP NE OK?
SEND ̲INPUT ̲REQUEST (0) ()
CONTROL ̲COMPLETE = TRUE
Fig. 4.2.3.4.5.5-13…86…1 …02… …02… …02…
A̲C̲K̲ ̲I̲N̲P̲U̲T̲ ̲1̲4̲
This input is not expected but
legal
LOAD CONTROL BUFFER WITH
RECEPTION STATE = NOT ̲EXPECTED
RETURN ̲INPUT ̲DATA (SUBDEV. INPUT ̲QEL, BREF) ()
CONTROL ̲COMPLETE = FALSE
Fig. 4.2.3.4.5.5.14…86…1 …02… …02… …02…
C̲A̲N̲C̲E̲L̲ ̲I̲N̲P̲U̲T̲ ̲R̲E̲Q̲U̲E̲S̲T̲ ̲1̲5̲
LDU = BUFFER (START + CANCEL ̲INPUT ̲LDU ̲OFFSET)
QEL = SUBDEV. INPUT ̲QEL
LDU NE QEL. REQ ̲REF
QEL. REQUESTOR NE SUBDEVICE?
CASE SUBDEV. PROTOCOL. TYPE OF
DATA? CANCEL ̲IN ̲CONV ̲INPUT (QEL) (1)
LCB? CANCEL ̲INPUT (QEL) ()
OTHER? PROTOCOL ̲ ̲ERROR (NT ̲SUBDEVICE
̲14)
END CASE
No responce expected
CONTROL ̲COMPLETE = TRUE
Fig. 4.2.3.4.5.5-15…86…1 …02… …02… …02…
C̲A̲N̲C̲E̲L̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲6̲
Search LDU in QELS
LDU = BUFFER (START + CANCEL ̲OUTPUT ̲LDU ̲OFFSET)
INDEX = 1
LOOP
QEL = SUBDEV. QELS (INDEX)
LDU EQ QEL. REQ ̲REF? FOUND = TRUE
INDEX GE MAX ̲SUBDEV ̲OUTQELS? FOUND
=
FALSE
INDEX + 1
END LOOP
FOUND EQ FALSE?
CASE SUBDEV. PROTOCOL. TYPE OF
DATA? CANCEL ̲OUT ̲CONV ̲OUTPUT (QEL)
()
LCB? CANCEL ̲OUTPUT (QEL) ()
ACK? CANCEL ̲ACK ̲OUTPUT (QEL) ()
OTHER? PROTOCOL ̲ERROR (NT ̲SUBDEVICE
̲16)
END CASE
QEL. REQUESTOR = NONE
INSERT (SUBDEV. OUTPUT ̲EMPTY, QEL) ()
CONTROL ̲COMPLETE = TRUE
Fig. 4.2.3.4.5.5-16…86…1 …02… …02… …02…
D̲A̲T̲A̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲7̲
SEND ̲OUT ̲CONV ̲BUFFER (TYPE, SIZE) ()
TYPE INDICATE END OF DATA ?
SUBDEV.
OUTPUT
̲STATE
=
IDLE
Fig. 4.2.3.4.5.5-17…86…1 …02… …02… …02…
L̲C̲B̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲8̲
TYPE INDICATE START ̲OF ̲LDU?
OR ENTIRE LDU
SIZE 1 = SIZE SETUP ̲FIRST ̲OUTPUT ̲BUFFER
(SIZE)
(SIZE
1)
SEND ̲OUTPUT ̲BUFFER (TYPE, SIZE 1)()
TYPE INDICATE END OF DATA?
SUBDEV.
OUTPUT
̲STATE
=
IDLE
Fig. 4.2.3.4.5.5-18…86…1 …02… …02… …02…
A̲C̲K̲ ̲O̲U̲T̲P̲U̲T̲ ̲1̲9̲
SEND ̲ACK ̲BUFFER (TYPE, SIZE) ()
TYPE INDICATE END OF DATA?
SUBDEV.
OUTPUT
̲STATE
=
IDLE
Fig. 4.2.3.4.5.5-19…86…1 …02… …02… …02…
NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER (QEL : IO ̲QEL,
BREF : POINTER)
QEL. ADDI = OWN ̲SDID. OUT ̲CONV?
NOTIFY
̲OUT
̲CONV
̲OUTPUT
̲BUFFER
(QEL,
BREF)
()
SETUP ̲FIRST ̲OUTPUT ̲BUFFER
(BREF) ()
RETURN ̲OUTPUT ̲BUFFER (QEL) ()
RETURN
Fig. 4.2.3.4.5.5-20…86…1 …02… …02… …02…
NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT ̲BUFFER
(QEL : IO ̲QEL, BUFFER ̲REF : POINTER
All output single LDU
PROTOCOL ̲ERROR (NT ̲SUBDEVICE ̲IF ̲21)
RETURN
Fig. 4.2.3.4.5.5-21…86…1 …02… …02… …02…
SUBDEVICE ̲OUTPUT ̲RESULT (QEL : IO ̲QEL, BUFFER ̲REF : POINTER) ()
QEL. ADDI EQ OWN ̲ SDID. OUTCONV?
OUT
̲CONV
̲OUTPUT
̲RESULT
(QEL,
BREF)
()
Put the subdevice LDU into the result
BUFFER = BUFFER ̲REF. PAGE ̲START
START = BUFFER ̲REF. BUFFER ̲ADDR
BUFFER (START + TRANSMISSION ̲START ̲LDU ̲OFFSET) =
QEL. REQ ̲REF
SUBDEV = QEL. ADDI. SDDREF
INSERT (SUBDEV. OUTPUT ̲EMPTY, QEL) ()
RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF) ()
RETURN
Fig. 4.2.3.4.5.5-22…86…1 …02… …02… …02…
NOTIFY ̲SUBDEVICE ̲INPUT ̲REQUEST ̲BUFFER
(QEL : IO ̲QEL, BREF : POINTER)()
SEND ̲INPUT ̲REQUEST (0) ()
RETURN
Fig. 4.2.3.4.5.5-23…86…1 …02… …02… …02…
NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA (QEL : IO ̲QEL,
BUFFER ̲REF : POINTER)()
BUFFER = BUFFER ̲REF. PAGE ̲START
START = BUFFER ̲REF. BUFFER ̲ADDR
QEL. ADDI EQ OWN ̲SDID. P̲A̲R̲E̲N̲T̲ ̲D̲A̲T̲A̲ ̲2̲6̲
SUBDEVICE ̲IF
D̲A̲T̲A̲ ̲F̲O̲R̲ ̲S̲U̲B̲D̲E̲V̲I̲C̲E̲ ̲2̲5̲
RETURN
Fig. 4.2.3.4.5.5-24…86…1 …02… …02… …02…
D̲A̲T̲A̲ ̲F̲O̲R̲ ̲S̲U̲B̲D̲E̲V̲I̲C̲E̲ ̲2̲5̲ ̲
Copy subdevice data id
BUFFER (START + LDU ̲ ̲HEAD ̲OFFSET) = QEL. REQ ̲REF
RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF) ()
Fig. 4.2.3.4.5.5-25…86…1 …02… …02… …02…
P̲A̲R̲E̲N̲T̲ ̲D̲A̲T̲A̲ ̲2̲6̲
TYPE = BUFFER (START + BUFFER ̲TYPE ̲OFFSET)
TYPE DOES NOT INDICATE
ENTIRE ̲LDU? PROTOCOL ̲ERROR (NT ̲
SUBDEVICE
̲IF
̲)
SEGTYP = BUFFER (START + NT ̲SEGMENT ̲TYPE
OFFSET)
IS = QEL. REQ ̲REF
IS. BUFFER ̲ENTRY. DEVICE ̲BUFFER ̲ID = BUFFER ̲REF
COPY BUFFER ̲REF ADDRESS PARAMETERS TO
IS. BUFFER ̲ENTRY ADDRESS PARAMETERS
SEGTYP EQ LCB?
L̲C̲B̲
̲I̲N̲P̲U̲T̲
̲2̲7̲
NOTIFY ̲IN ̲CONV ̲DATA
(QEL,IS. BUFFER ̲ENTRY)()
Fig. 4.2.3.4.5.5-26…86…1 …02… …02… …02…
L̲C̲B̲ ̲I̲N̲P̲U̲T̲ ̲2̲7̲
BE = IS. BUFFER ̲ENTRY
BE. BUFFER ̲ADDR + 2
BE. BUFFER ̲SIZE-2
BUF = BE. PAGE ̲ADDR
STRT = BE. BUFFER ̲ADDR
BUF (STRT + BUFFER ̲TYPE ̲OFFSET) = DATA, ENTIRE ̲LDU
CASE EXTRACT ̲FIRST (OWN ̲SDID, SUBDEVICE ̲IF. LCB ̲IN ̲REC) (QEL) OF
FAIL? INSERT (OWN ̲SDID, SUBDEVICE ̲IF. LCB ̲IN ̲Q,
BE)
PASS? NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA (QEL, BE)
END CASE
Fig. 4.2.3.4.5.5-27…86…1 …02… …02… …02…
NOTIFY ̲SUBDEVICE ̲INPUT ̲DATA
(QEL : IO ̲QEL, BUFFER ̲REF : POINTER)()
RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF)()
RETURN
Fig. 4.2.3.4.5.5-28…86…1 …02… …02… …02…
SUBDEVICE ̲INPUT ̲RESULT (QEL : IO ̲QEL, BUFFER ̲REF : POINTER) ()
QEL.ADDI. EQ OWN ̲SDID? P̲A̲R̲E̲N̲T̲ ̲D̲A̲T̲A̲ ̲3̲1̲
D̲A̲T̲A̲ ̲F̲O̲R̲ ̲A̲ ̲S̲U̲B̲D̲E̲V̲I̲C̲E̲ ̲3̲0̲ ̲
RETURN
Fig. 4.2.3.4.5.5-29…86…1 …02… …02… …02…
D̲A̲T̲A̲ ̲F̲O̲R̲ ̲A̲ ̲S̲U̲B̲D̲E̲V̲I̲C̲E̲ ̲3̲0̲
BUFFER = BUFFER ̲REF. PAGE ̲START
START = BUFFER ̲REF. BUFFER ̲ADDR
BUFFER (START + RECEPTION ̲STATUS ̲LDU ̲OFFSET) =
QEL. REQ ̲REF
RETURN ̲INPUT ̲DATA (QEL, BUFFER ̲REF) ()
Fig. 4.2.3.4.5.5-30…86…1 …02… …02… …02… …02…
P̲A̲R̲E̲N̲T̲ ̲D̲A̲T̲A̲ ̲3̲1̲
The protocol has failed, the
subdevice is removed by SSC.
RELEASE ̲INPUT ̲BUFFER (BUFFER ̲REF) ( )
Figure 4.2.3.4.5.5-31
CANCEL ̲SUBDEV ̲OUTPUT(SUBDEV:SUBDEV ̲DATA)()
CASE SUBDEV.PROTOCOL.TYPE OF
DATA? D̲A̲T̲A̲ ̲3̲3̲
LCB? L̲C̲B̲ ̲3̲4̲
ACK? A̲C̲K̲ ̲3̲5̲
OTHER? PROTOCOL ̲ERROR (NT ̲SUBDEVICE ̲IF ̲)
END CASE
RETURN
Figure 4.2.3.4.5.5-32
D̲A̲T̲A̲ ̲3̲3̲
QEL = SUBDEV.OUT ̲QEL
SUBDEV.OUTPUT ̲STATE = IDLE
CANCEL ̲OUT ̲CONV ̲OUTPUT (QEL)()
INSERT (SUBDEV.OUTPUT ̲EMPTY, QEL)()
Figure 4.2.5.4.5.5-33
L̲C̲B̲ ̲3̲4̲
QEL = SUBDEV.OUT ̲QEL
SUBDEV.OUTPUT ̲STATE = IDLE
CANCEL ̲OUT ̲CONV ̲OUTPUT (QEL)()
INSERT (SUBDEV.OUTPUT ̲EMPTY, QEL)()
Figure 4.2.5.4.5.5-34
A̲C̲K̲ ̲3̲5̲
QEL = SUBDEV.OUT ̲QEL
SUBDEV.OUTPUT ̲STAT = IDLE
CANCLE ̲ACK ̲OUTPUT(QEL)()
Figure 4.2.3.4.5.5-35
INITIALIZE ̲SUBDEVICE ̲INTERFACE(PARAM:OPEN ̲SUBDEVICE
̲PARAM)()
P = OWN ̲SDID.SUBDEVICE ̲IF
P.CONTROL ̲STATE = IDLE
INIT ̲QD (P.ONGOING ̲CONTROL)()
INIT ̲QD(P.PENDING ̲CONTROL)()
INTI CONTROL ̲BUFFER ̲ENTRY
INIT ̲OUT ̲CONV (PARAM:OPEN ̲SUBDEVICE ̲PARAM)()
INIT ̲IN ̲CONV(PARAM: OPNE ̲SUBDEVICE ̲PARAM)()
INIT ̲IS ̲DATA()()
RETURN
Figure 4.2.3.4.5.5-36
INIT ̲IS ̲DATA ()()
ISP = OWN ̲SDID.SUBDEVICE ̲IF.IS
INDEX = 1
LOOP
IS = ISP(INDEX)
INITIALIZE IS
INSERT (OWN ̲SDID.SUBDEVICE ̲IF.IS ̲EMTPY, IS)()
INDEX GE SUBDEVICE ̲INPUT ̲MAX
INDEX + 1
END LOOP
RETURN
Figure 4.2.3.4.5.5-37
4.2.3.4.6 N̲T̲ ̲S̲P̲I̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.2
4.2.3.4.7 NT ̲EHP module
Refer 4.1.5.1
Modify such that TMS calls to
ENABLE ̲INPUT
GET ̲OUTPUT ̲BUFFER
are returned with CC = NOT ̲IMPLEMENTED
Delete calls to
CANCEL ̲USER ̲OPERATION
USER ̲OUTPUT
ACK ̲DATA ̲INPUT
ENABLE ̲INPUT
GET ̲OUTPUT ̲BUFFER
4.2.3.4.8 N̲T̲ ̲I̲N̲P̲U̲T̲ ̲C̲O̲N̲V̲E̲R̲T̲E̲R̲ ̲m̲o̲d̲u̲l̲e̲
4.2.3.4.8.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The NT INPUT CONVERTER module converts the incoming
NT data into IOC records used internally in CAMPS.
This means put lines into separate IOC records based
on:
- "CR, CR, LF" or "CR, LF" terminates a normal line
and marks the IOC record with LINE ̲FLAG
- More than 69 data characters lead to a termination
of the 69 characters in a record marked DATA ̲FLAG
- Encountered SI, SO are ignored (does not count)
- Other control characters make the record in collection
be terminated with DATA ̲FLAG and the control characters
be collected in a record marked CONTROL ̲FLAG
4.2.3.4.8.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
The module has following functional entries
INIT ̲IN ̲CONV(PARAM: OPEN ̲SUBDEVICE ̲PARAM)( )
CLEAN ̲IN ̲CONV( ) ( )
REQUEST ̲IN ̲CONV ̲INPUT(QEL: IO ̲QEL, PRI: PRIORITY ̲TYPE)(
)
RELEASE ̲IN ̲CONV ̲BUFFER( ) ( )
NOTIFY ̲IN ̲CONV ̲DATA(BREF: POINTER)( )
CANCEL ̲IN ̲CONV ̲INPUT(QEL: IO ̲QEL)( )
The module calls following functional entries of other
modules
NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA(QEL: IO ̲QEL,
BREF: POINTER)( )
NOTIFY ̲SUBDEVICE ̲INPUT ̲DATA(QEL: IO ̲QEL, BREF: POINTER)(
)
SUBDEVICE ̲INPUT ̲RESULT(QEL: IO ̲QEL, BREF: POINTER)(
)
RELEASE ̲INPUT ̲SUPPORT ̲BUFFER(BREF: POINTER)( )
The module shares following procedure with other modules
INIT ̲INPUT ̲CONVERT(STATE: INP ̲CONV ̲STATE)( )
INPUT ̲CONVERT(STATE: INP ̲CONV ̲STATE, BREF1: POINTER,
BREF2: POINTER)( )
4.2.3.4.8.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
B̲a̲s̲i̲c̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
INIT ̲IN ̲CONV
CLEAN ̲IN ̲CONV
R̲e̲q̲u̲e̲s̲t̲o̲r̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
REQUEST ̲IN ̲CONV ̲INPUT
RELEASE ̲IN ̲CONV ̲BUFFER
CANCEL ̲IN ̲CONV ̲INPUT
D̲a̲t̲a̲ ̲N̲o̲t̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
NOTIFY ̲IN ̲CONV ̲DATA
L̲o̲c̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
EMPTY ̲IN ̲CONV ̲DATA ̲Q
NEXT ̲IN ̲CONV
4.2.3.4.8.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
TYPE IN ̲CONV ̲DATA = RECORD
STATE :(IDLE, ACTIVE, CANCELLED)
PENDING : QD
ONGOING : QD
BUFFER ̲ENTRY : BUFFER ̲ENTRY ̲RECORD
BUFFER : ARRAY(1..IN ̲CONV ̲BUF ̲WORD
̲SIZE)
OF INTEGER
DATA ̲Q : QD
CONV : INP ̲CONV ̲STATE
END
4.2.3.4.8.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
INIT ̲IN ̲CONV (PARAM: OPEN ̲SUBDEVICE ̲PARAM)( )
I = OWN ̲SDID.IN ̲CONV
I.STATE = IDLE
INIT ̲QD(I.PENDING)( )
INIT ̲QD(I.ONGOING)( )
MAKE I.BUFFER ̲ENTRY POINT TO I.BUFFER
INIT ̲QD(I.DATA ̲Q)( )
INIT ̲INPUT ̲CONVERT(I.CONV)( )
RETURN
Figure 4.2.3.4.8.5-1
CLEAN ̲IN ̲CONV( )( )
EMPTY ̲IN ̲CONV ̲DATA ̲Q( )( )
RETURN
Figure 4.2.3.4.8.5-2
REQUEST ̲IN ̲CONV ̲INPUT(QEL: IO ̲QEL, PRI: PRIORITY ̲TYPE)(
)
I = OWN ̲SDID.IN ̲CONV
QUEUE ̲PRIORITIZED(I.PENDING, QEL, PRI)( )
I.STATE NE IDLE?
NEXT ̲IN ̲CONV( )(CCP)
RETURN
Figure 4.2.3.4.8.5-3
RELEASE ̲IN ̲CONV ̲BUFFER( )( )
INPUT WAS COMPLETE? NEXT ̲IN ̲CONV( )(CCP)
DATA ̲Q EMPTY?
CONVERT BY CA TO INPUT ̲CONVERT
RETURN
Figure 4.2.3.4.8.5-4
CANCEL ̲IN ̲CONV ̲INPUT(QEL: IO ̲QEL)( )
I = OWN ̲SDID.IN ̲CONV
CASE QEL.QUEUE OF
I.ONGOING? C̲A̲N̲C̲E̲L̲ ̲O̲N̲G̲O̲I̲N̲G̲
I.PENDING? C̲A̲N̲C̲E̲L̲ ̲P̲E̲N̲D̲I̲N̲G̲
OTHER?
END CASE
RETURN
Figure 4.2.3.4.8.5-5
C̲A̲N̲C̲E̲L̲ ̲O̲N̲G̲O̲I̲N̲G̲
I.STATE = CANCELLED
DELETE DATA ̲Q CONTENT
UP UNTIL AND INCLUDING
END OF MESSAGE SEGMENT
COMPLETE MESSAGE DELETE?
I.STATE = IDLE
CASE EXTRACT ̲FIRST(I.ONGOING)(QEL) OF
FAIL? PROTOCOL ̲ERROR(NT ̲IN ̲CONV ̲6)
PASS?
END CASE
I.STATE NE IDLE?
NEXT ̲IN ̲CONV( )(CCP)
Figure 4.2.3.4.8.5-6
C̲A̲N̲C̲E̲L̲ ̲P̲E̲N̲D̲I̲N̲G̲
CASE EXTRACT ̲SPECIFIED(I.PENDING, QEL)( ) OF
FAIL? PROTOCOL ̲ERROR(NT ̲IN ̲CONV ̲7)
PASS?
END CASE
Figure 4.2.3.4.8.5-7
NOTIFY ̲IN ̲CONV ̲DATA(BREF: POINTER)( )
I = OWN ̲SDID.IN ̲CONV
I.STATE EQ CANCELLED?
BUFFER INDICATE END ̲EOM = TRUE
I.STATE EQ IDLE? OF MESSAGE
EOM = FALSE
CONVERT DATA
RELEASE ̲INPUT ̲SUPPORT ̲BUFFER(BREF)(
)
EOM NE TRUE?
I.STATE = IDLE
NEXT ̲IN ̲CONV( )( )
RETURN
Figure 4.2.3.4.8.5-7
EMPTY ̲IN ̲CONV ̲DATA ̲Q( )( )
LOOP
CASE EXTRACT ̲FIRST(OWN ̲SDID.IN ̲CONV.DATA ̲Q)(BUF)
OF
FAIL?
PASS? RELEASE ̲INPUT ̲BUFFER(BUF)( )
END CASE
END LOOP
RETURN
Figure 4.2.3.4.8.5-8
NEXT ̲IN ̲CONV( )(CC = COMPLETION ̲CODE)
I = OWN ̲SDID.INPUTTER
CASE EXTRACT ̲FIRST(I.PENDING)(QEL) OF
FAIL? CC = NO ̲PENDING ̲INPUT
PASS?
END CASE
QUEUE(I.ONGOING, QEL)( )
I.STATE = ACTIVE
IF DATA ̲Q IS NOT EMPTY CONVERT
BY CALL TO INPUT ̲CONVERT
IF BUFFER FULL OR MESSAGE COMPLETE
NOTIFY REQUESTOR OF DATA
CC = OK
RETURN
Figure 4.2.3.4.8.4-8
4.2.3.4.9 N̲T̲ ̲O̲U̲T̲P̲U̲T̲ ̲C̲O̲N̲V̲E̲R̲T̲E̲R̲ ̲M̲o̲d̲u̲l̲e̲
4.2.3.4.9.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This module converts the IOC records received from
the application into segments for transmission over
the NT link.
Segments are generated as entire ̲LDU's and always filled
to the size of 512 bytes except for the last segment
of a message.
4.2.3.4.9.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
The NT ̲OUTPUT ̲CONVERTER module is interfaced via following
calls
INIT ̲OUT ̲CONV(PARAM: OPEN ̲SUBDEVICE ̲PARAM)( )
CLEAN ̲OUT ̲CONV( )( )
REQUEST ̲OUT ̲CONV ̲OUTPUT(QEL: IO ̲QEL, PRI: PRIORITY)
(CC: COMPLETION ̲CODE, BREF: POINTER)
REQUEST ̲NEXT ̲OUT ̲CONV ̲BUFFER( )(CC: COMPLETION ̲CODE,
BREF: POINTER)
SEND ̲OUT ̲CONV ̲BUFFER(TYPE: BUFFER ̲TYPES,
SIZE: INTEGER)( )
CANCEL ̲OUT ̲CONV(QEL: IO ̲QEL)( )
NOTIFY ̲OUT ̲CONV ̲OUTPUT ̲BUFFER(QEL: IO ̲QEL, BREF ̲POINTER)(
)
OUT ̲CONV ̲OUTPUT ̲RESULT(QEL: IO ̲QEL, BREF: POINTER)(
)
The NT ̲OUTPUT ̲CONVERTER module calls following entries
of other modules
REQUEST ̲DATA ̲OUTPUT(QEL: IO ̲QEL, PRI: PRIORITY ̲TYPE)
(CC: COMPLETION ̲CODE, BREF: POINTER)
SEND ̲OUTPUT ̲BUFFER (TYPE: BUFFER ̲TYPES, LENGTH: INTEGER)
4.2.3.4.9.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
B̲a̲s̲i̲c̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
INIT ̲OUT ̲CONV
CLEAN ̲OUT ̲CONV
E̲n̲t̲r̲y̲ ̲P̲o̲i̲n̲t̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
REQUEST ̲OUT ̲CONV ̲OUTPUT
REQUEST ̲NEXT ̲OUT ̲CONV ̲BUFFER
SEND ̲OUT ̲CONV ̲BUFFER
NOTIFY ̲OUT ̲CONV ̲OUTPUT ̲BUFFER
CANCEL ̲OUT ̲CONV ̲OUTPUT
OUT ̲CONV ̲OUTPUT ̲RESULT
L̲o̲c̲a̲l̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
REQUEST ̲OUT ̲CONV ̲BUFFER
RELEASE ̲OUT ̲CONV ̲BUFFER
CANCEL ̲REQUEST ̲OUT ̲CONV ̲BUFFER
4.2.3.4.9.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
TYPE OUT ̲CONV ̲DATA = RECORD
STATE : (IDLE, FIRST ̲BUFFER,
SUBSEQUENT ̲BUFFER,
CANCELLED)
BUFFER ̲STATE : (NO ̲BUF, PENDING ̲RESERVE,
DELIVERED)
PENDING : QD
ONGOING : QD
WAIT ̲COMPLETION : QD
BUFFER ̲ENTRY : POINTER
OUTPUT ̲BUFFER ̲ENTRY : POINTER
BUFFER ̲POOL : OUT ̲CONV ̲BUFFER ̲POOL
CONVERT : OUT ̲CONVERT ̲STATUS
CONVERT ̲STATE : (IDLE, OUT ̲BUFFER
̲FULL,
INPUT ̲BUFFER ̲EMPTY
OUT ̲QELS : ARRAY(1..NT ̲OUT ̲CONV ̲OUT
̲QELS)
OF IO ̲QEL
OUT ̲EMPTY : QD
INPUT ̲BUFFER ̲TYPE: BUFFER ̲TYPES
REQ ̲RECORD : REQ ̲RECORD ̲TYPE
END
TYPE BUF ̲CONV ̲BUFFER ̲POOL = RECORD
REQ ̲Q : QD
EMPTY : QD
BUFFER : ARRAY(1..OUT ̲CONV ̲BUFFER
̲SIZE)
OF BYTES
BUFFER ̲ENTRY : BUFFER ̲ENTRY
END
4.2.3.4.9.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
REQUEST ̲OUT ̲CONV ̲OUTPUT(QEL: IO ̲QEL, PRIORITY: PRIORITY
̲TYPE)
(CC: COMPLETION ̲CODE, BUFFER
̲ REF:POINTER)
QUEUE ̲PRIORITIZED(OWN ̲SDID.OUT ̲CONV.PENDING, PRIORITY,
QEL)( )
OWN ̲SDID.OUT ̲CONV.STATE CC = REQUEST ̲QUEUED
NE IDLE ?
NEXT ̲OUT ̲CONV( )(CCP)
CCP NE OK? CC = REQUEST ̲QUEUED
OWN ̲SDID.OUT ̲CONV.BUFFER ̲STATE = DELIVERED
BUFFER ̲REF = OWN ̲SDID.OUT ̲CONV.BUFFER ̲ENTRY
CC = OK
RETURN
Figure 4.2.3.4.9.5.1
REQUEST ̲NEXT ̲OUT ̲CONV ̲BUFFER( )(CC: COMPLETION ̲CODE,
BUFFER ̲ENTRY: POINTER)
OWN ̲SDID.OUT ̲CONV.BUFFER ̲STATE = PENDING ̲RESERVE
REQUEST ̲OUT ̲CONV ̲BUFFER(OWN ̲SDID.OUT ̲CONV.REQ ̲RECORD)
(CCP, BUFFER ̲REF)
CCP EQ REQUEST ̲QUEUED? CC = REQUEST ̲QUEUED
OWN ̲SDID.OUT ̲CONV.BUFFER ̲ENTRY = BUFFER ̲ENTRY
OWN ̲SDID.OUT ̲CONV.BUFFER ̲STATE = DELIVERED
CC = OK
RETURN
Figure 4.2.3.4.9.5-2
SEND ̲OUT ̲CONV ̲BUFFER(TYPE: BUFFER ̲TYPES, SIZE: INTEGER)
( )
SAVE LDU FOR BUFFERS CONTAINING LDU ̲ID
0 = OWN ̲SDID.OUT ̲CONV
0.INPUT ̲BUFFER ̲TYPE = BUFFER ̲TYPES
0.CONVERT.IN ̲SIZE = SIZE
CONVERT ̲STATE EQ IDLE?
G̲E̲T̲ ̲B̲U̲F̲F̲E̲R̲
NONE ̲AVAILABLE?
0.CONVERT
̲STATE =
AWAIT
̲OUTPUT ̲B
OUTPUT ̲CONVERT(0.BUFFER ̲ENTRY, 0.OUTPUT ̲BUFFER ̲ENTRY,
0.CONVERT, 0.CONVERT ̲STATE)( )
0.CONVERT ̲STATE EQ?
OUT ̲BUFFER ̲FULL OR
IDLE SEND ̲OUTPUT ̲BUFFER(ENTIRE
̲LDU,
0.CONVERT.OUT ̲SIZE)(
)
0.CONVERT ̲STATE EQ INPUT ̲BUFFER ̲ENTRY?
OR IDLE
RELEASE ̲OUT ̲CONV
̲BUFFER(0.
BUFFER ̲ENTRY)(
)
0.INPUT ̲BUFFER ̲TYPE
INDICATE END OF LDU ?
PROC ̲FOR ̲END ̲OF
̲OUT ̲CONV( )( )
RETURN
Figure 4.2.3.4.9.5-3
G̲E̲T̲ ̲B̲U̲F̲F̲E̲R̲
CASE EXTRACT ̲FIRST(0.OUT ̲EMPTY)(QEL) OF
FAIL? PROTOCOL ̲ERROR(NT ̲OUT ̲CONV ̲Y)
PASS?
END CASE
QEL.REQUESTOR = SUBDEVICE ̲IF
QEL.REQ ̲REF = ADDRESS OF OWN ̲SDID.OUT ̲CONV
REQUEST ̲DATA ̲OUTPUT(QEL, SUBDEVICE ̲PRIORITY)
(CCP, BUFREF)
CCP NE OK? NONE ̲AVAILABLE = TRUE
NON ̲AVAILABLE = FALSE
0.OUTPUT ̲BUFFER ̲ENTRY = BUFREF
Figure 4.2.3.4.9.5-4
NOTIFY ̲OUT ̲CONV ̲OUTPUT ̲BUFFER(QEL: IO ̲QEL, BREF: POINTER)(
)
0 = OWN ̲SDID.OUT ̲CONV
0.OUTPUT ̲BUFFER ̲ENTRY = BREF
OUTPUT ̲CONVERT(0.BUFFER ̲ENTRY, 0.OUTPUT ̲BUFFER ̲ENTRY,
0.CONVERT, 0.CONVERT ̲STATE)( )
0.CONVERT ̲STATE EQ OUT ̲BUFFER ̲FULL?
OR IDLE SEND ̲OUTPUT ̲BUFFER
(ENTIRE ̲LDU, 0.CONVERT.OUT
̲SIZE)
0.CONVERT ̲STATE EQ INPUT ̲BUFFER ̲EMP-
TY OR IDLE ?
RELEASE ̲OUT ̲CONV
̲BUFFER
(0.BUFFER ̲ENTRY)(
)
0.INPUT ̲BUFFER ̲TYPE
INDICATE END OF LDU ?
PROC ̲FOR ̲END ̲OF
̲OUT ̲CONV
( )( )
RETURN
Figure 4.2.3.4.9.5-5
CANCEL ̲OUT ̲CONV(QEL: IO ̲QEL)( )
0 = OWN ̲SDID.OUT ̲CONV
CASE QEL.QUEUE OF
0.PENDING? C̲A̲N̲C̲E̲L̲ ̲P̲E̲N̲D̲I̲N̲G̲
0.ONGOING? C̲A̲N̲C̲E̲L̲ ̲O̲N̲G̲O̲I̲N̲G̲
OTHER? PROTOCOL ̲ERROR(NT ̲OUT ̲CONV ̲6)
END CASE
RETURN
Figure 4.2.3.4.9.5-6
C̲A̲N̲C̲E̲L̲ ̲P̲E̲N̲D̲I̲N̲G̲
CASE EXTRACT SPECIFIED(D.PENDING, QEL)( ) OF
FAIL? PROTOCOL ̲ERROR(NT ̲OUT ̲CONV ̲7)
PASS?
END CASE
Figure 4.2.3.4.9.5-7
C̲A̲N̲C̲E̲L̲ ̲O̲N̲G̲O̲I̲N̲G̲
The ongoing can not be cancelled.
Figure 4.2.3.4.9.5-8
REQUEST ̲OUT ̲CONV ̲BUFFER(REQ: REQ ̲RECORD)
(CC: COMPLETION ̲CODE,
BUFFER ̲REF: POINTER)
CASE EXTRACT ̲FIRST(OWN ̲SDID.OUT ̲CONV.BUFFER ̲POOL.EMPTY)(BUF)
OF
FAIL? INSERT(REQ, OWN ̲SDID.OUT ̲CONV.BUFFER ̲POOL.REQ
̲Q)( )
CC = REQUEST ̲QUEUED
PASS? BUFFER ̲REF = BUF
CC = OK
END CASE
RETURN
Figure 4.2.3.4.9.5-9
RELEASE ̲OUT ̲CONV ̲BUFFER(BUF: POINTER)( )
BUF.BUFFER ̲SIZE = OUT ̲CONV ̲BUFFER ̲SIZE
CASE EXTRACT ̲FIRST(OWN ̲SDID.OUT ̲CONV.BUFFER ̲POOL.REQ
̲Q)(REQ) OF
FAIL? INSERT(BUF, OWN ̲SDID.OUT ̲CONV.BUFFER ̲POOL.EMPTY)(
)
PASS? NOTIFY ̲OUT ̲CONV ̲BUFFER(REQ, BUF)
END CASE
RETURN
Figure 4.2.3.4.9.5-10
CANCEL ̲REQUEST ̲OUT ̲CONV ̲BUFFER(REQ: REQ ̲RECORD)( )
CASE EXTRACT ̲SPECIFIED(REQ, OWN ̲SDID.OUT ̲CONV.BUFFER
̲POOL.
REQ ̲Q) ( ) OF
FAIL? PROTOCOL ̲ERROR(NT ̲OUT ̲CONV ̲11)
PASS?
END CASE
RETURN
Figure 4.2.3.4.9.5-11
4.2.3.4.10 N̲T̲ ̲P̲R̲O̲T̲O̲C̲O̲L̲ ̲m̲o̲d̲u̲l̲e̲
4.2.3.4.10.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This module hands an asynchronous report to the SSC.
4.2.3.4.10.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
The module has one functional entry
NOTIFY ̲INTERRUPT (BUFFER ̲ENTRY: POINTER) ( ) and two
for init/delete
INITIALIZE ̲PROTOCOL ̲DATA (PARAM: OPEN ̲SUBDEVICE ̲PARAM)()
CLEAN ̲PROTOCOL ̲DATA\( ) ( )
4.2.3.4.10.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
NOTIFY ̲INTERRUPT
INITIALIZE ̲PROTOCOL ̲DATA
CLEAN ̲PROTOCOL ̲DATA
4.2.3.4.10.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer section 4.2.2.7.1 for NICS ̲TARE level 2 asynchronous
reports (interrupts).
Loads the SDID record STATUS ̲REPORT
4.2.3.4.10.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
NOTIFY ̲INTERRUPT (BUFFER ̲ENTRY: POINTER) ( )
BUFFER = BUFFER ̲ENTRY.PAGE ̲START
START = BUFFER ̲ENTRY.BUFFER ̲ADDR
IT ̲TYP = BUFFER(START + INTERRUPT ̲TYPE ̲OFFSET)
IT ̲TYP EQ LINK ̲FAILURE?
IT ̲TYP EQ EDC ̲FAILURE?
PRI = EXT ̲D ̲STATUS ̲PRI PRI = EXT ̲D ̲FAILURE
̲PRI
ALLOW ̲STATUS ̲REPORT(PRI) (CCP)
CCP NE OK?
S = OWN ̲SDID. STATUS ̲REPORT
EQUIVALENCE (S.INFO, 0 ̲ST: SD ̲OTHER ̲STATUS ̲REC)
CASE IT ̲TYPE OF
LINK ̲FAILURE? S.STATUS
= SD
̲FAILURE
S.INFO ̲SIZE = 1
S.INFO(0) = NT ̲LINK
̲FAIL
EDC ̲FAILURE? S.STATUS
= SD
̲FAILURE
S.INFO ̲SIZE = 1
S.INFO(0) = NT ̲EDC
̲FAIL
MANUAL ̲SYNC S.STATUS = SD ̲OTHER
̲STATUS
S.INFO ̲SIZE = 2
O ̲ST.ACTION ̲TYPE =
DEVICE ̲ACTION
O ̲ST. ACTION ̲SUBTYPE
= NT ̲MAN ̲SYNC
continues
continued
INCOMING ̲RESET? S.STATUS = SD ̲OTHER
̲STATUS
S. INFO ̲SIZE = 2
O ̲ST.ACTION ̲TYPE =
DEVICE ̲ACTION
O ̲ST.ACTION ̲SUBTYPE
= NT ̲INC ̲RESET
OTHER? PROTOCOL ̲ERROR (NT ̲PROTOCOL ̲1)
END CASE
SEND ̲STATUS ̲REPORT ( ) ( )
RELEASE ̲INPUT ̲BUFFER (BUFFER ̲REF) ( )
RETURN
Fig. 4.2.3.4.10.5-1
INITIALIZE ̲PROTOCOL ̲DATA (PARAM: OPEN ̲SUBDEVICE
̲PARAM) ( )
RETURN
CLEAN ̲PROTOCOL ̲DATA ( ) ( )
RETURN
Fig. 4.2.3.4.10.5-2
4.2.3.4.11 N̲T̲ ̲D̲A̲T̲A̲ ̲I̲N̲P̲U̲T̲T̲E̲R̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.3
Delete calls to
CONTROLLER ̲INPUT ̲RESULT
NOTIFY ̲CONTROLLER ̲INPUT ̲REQUEST ̲BUFFER
NOTIFY ̲CONTROLLER ̲FIRST ̲INPUT ̲DATA
NOTIFY ̲CONTROLLER ̲INPUT ̲DATA
and same with "CONTROLLER" "PROTOCOL"
"CONTROLLER" "SUBDEVICE"
4.2.3.4.12 N̲T̲ ̲D̲A̲T̲A̲ ̲O̲U̲T̲P̲U̲T̲T̲E̲R̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.4
Delete calls to
SUBDEVICE ̲OUTPUT ̲RESULT
NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER
NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT ̲BUFFER
and same with "CONTROLLER" and "PROTOCOL"
instead of "SUBDEVICE".
4.2.3.4.13 N̲T̲ ̲D̲A̲T̲A̲ ̲U̲S̲E̲R̲ ̲I̲N̲T̲E̲R̲F̲A̲C̲E̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.5
4.2.3.4.14 N̲T̲ ̲D̲A̲T̲A̲ ̲S̲P̲I̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.2
Delete calls to
CLEAN ̲SUBDEVICES
CLEAN ̲PROT ̲CONT
CLEAN ̲CONTROLLER
CLEAN ̲PROTOCOL ̲DATA
NOTIFY ̲PROT ̲CONT ̲OUTPUT ̲BUFFER
NOTIFY ̲PROT ̲CONT ̲OF ̲RESPONSE
NOTIFY ̲INTERRUPT
INITIALIZE ̲CONTROLLER
INITIALIZE ̲SUBDEVICE ̲INTERFACE
INITIALIZE ̲PROT ̲CONT
INITIALIZE ̲PROTOCOL ̲DATA
RELEASE ̲INPUT ̲B
RESERVE ̲OUTPUT ̲BUFFER
CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER
RELEASE ̲OUTPUT ̲BUFFER
TRANSMIT ̲OUTPUT ̲BUFFER
WANT ̲TO ̲CLOSE
4.2.3.4.15 N̲T̲ ̲D̲A̲T̲A̲ ̲E̲H̲P̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.1
Modify such that calls to
OPEN ̲SUBDEVICE, ENABLE ̲CONTROL ̲INPUT,
GET ̲CONTROL ̲BUFFER are answered with
CC = NOT ̲IMPLEMENTED
Delete calls to
OPEN ̲SUBDEVICE
ENABLE ̲CONTROL ̲INPUT
GET ̲CONTROL ̲BUFFER
ACK ̲CONTROL ̲INPUT
CONTROLLER ̲OUTPUT
CANCEL ̲CONTROLLER ̲OPERATION
4.2.3.4.16 C̲S̲ ̲I̲N̲P̲U̲T̲T̲E̲R̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.3
Delete calls to
SUBDEVICE ̲INPUT ̲RESULT
NOTIFY ̲SUBDEVICE ̲INPUT ̲REQUEST ̲BUFFER
NOTIFY ̲SUBDEVICE ̲FIRST ̲INPUT ̲DATA
NOTIFY ̲SUBDEVICE ̲INPUT ̲DATA
and same with
"SUBDEVICE" "PROTOCOL"
4.2.3.4.17 C̲S̲ ̲O̲U̲T̲P̲U̲T̲T̲E̲R̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.4
Delete calls to
SUBDEVICE ̲OUTPUT ̲RESULT
NOTIFY ̲SUBDEVICE ̲FIRST ̲OUTPUT ̲BUFFER
NOTIFY ̲SUBDEVICE ̲SUBSEQUENT ̲OUTPUT ̲BUFFER
and same with "SUBDEVICE" "PROTOCOL"
4.2.3.4.18 C̲S̲ ̲C̲O̲N̲T̲R̲O̲L̲L̲E̲R̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.6
4.2.3.4.19 C̲S̲ ̲P̲R̲O̲T̲ ̲C̲O̲N̲T̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.8
Delete calls to
SUBDEVICE ̲PROT ̲CONT ̲RESULT
NOTIFY ̲SUBDEVICE ̲PROT ̲CONT ̲BUFFER
4.2.3.4.20 C̲S̲ ̲U̲S̲E̲R̲ ̲I̲N̲T̲E̲R̲F̲A̲C̲E̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.5
Modify so that input and output passes CS ̲INPUT ̲CONVERTER
and CS ̲OUTPUT ̲ CONVERTER modules respectively.
Modify OWN ̲SDID to include
OUT ̲CONV: OUT ̲CONV ̲DAT
IN ̲CONV: IN ̲CONV ̲DATA
Add to USER ̲INPUT ̲DATA
IS: ARRAY (1..USER ̲INPUT ̲MAX)
OF IS ̲ELEMENT
IS ̲EMPTY: QD
Figure 4.2.3.4.20-1
INITIALIZE ̲USER ̲DATA(PARAM:OPEN ̲SUBDEVICE ̲PARAM)()
input
OWN ̲SDID.USER.INPUT.STATE = IDLE
OWN ̲SDID.USER.INPUT.REQ ̲STATE = IDLE
INIT ̲QD(OWN ̲SDID.USER.INPUT.DATA ̲Q)()
OWN ̲SDID.USER.INPUT, DATA ̲G ̲SIZE = 0
OWN ̲SDID.USER.INPUT,PART ̲BUFFER ̲REF = FALSE
output
OWN ̲SDID.USER.OUTPUT.STATE = IDLE
INIT ̲QD (OWN ̲SDID,USER.OUTPUT.EMPTY)()
INDEX = 1
LOOP
INSERT (OWN ̲SDID.USER.OUTPUT.EMPTY
OWN ̲SDID.USER.OUTPUT.QELS(INDEX))()
INDEX GE MAX ̲USER ̲OUTPUTS?
INDEX + 1
END LOOP
INIT ̲IS ̲DATA(PARAM)()
RETURN
Figure 4.2.3.4.20-2
CLEAN ̲USER ̲DATA()()
CLEAN ̲IN ̲CONV ̲DATA()()
RETURN
Figure 4.2.3.4-20-3
ENABLE ̲INPUT(PARS: ENABLE ̲PARAM)(CC:COMPLETION ̲CODE)
TMS only requests are buffer at a time
OWN ̲SDID.USER.INPUT.REQ ̲STATE = ACTIVE
OWN ̲SDID.USER.INPUT.BUF ̲SIZE =
PARS.BUF ̲SIZE
PARS.H ̲OPID = OWN ̲SDID.USER.INPUT.QEL
OWN ̲SDID.USER.INPUT.STATE?
NE IDLE
S̲E̲T̲U̲P̲ ̲I̲N̲P̲U̲T̲ ̲2̲ G̲E̲T̲ ̲N̲E̲X̲T̲ ̲I̲N̲P̲U̲T̲ ̲B̲U̲F̲F̲E̲R̲ ̲3̲
RETURN
Figure 4.2.3.4.20-4
S̲E̲T̲U̲P̲ ̲I̲N̲P̲U̲T̲ ̲5̲
EQUIVALENCE (OWN ̲SDID.USER.INPUT.QEL, QEL: IO ̲QEL)
QEL.REQ ̲REF = PARS.OPID
QEL ̲REQUESTOR = USER
REQEUST ̲N ̲CONV ̲INPUT (QEL, USER ̲PRIORITY)()
CC = REQUEST ̲QUEUED
Figure 4.2.3.4.20-5
G̲E̲T̲ ̲N̲E̲X̲T̲ ̲I̲N̲P̲U̲T̲ ̲B̲U̲F̲F̲E̲R̲
Data?
OWN ̲SDID.USER.INPUT
DATA ̲Q ̲SIZE LE ZERO ? Pending Result?
Put data references OWN ̲SDID.USER.INPUT
CC=REQUEST
in reply STATE NE PENDING ̲RESULT?
̲QUEUED
RETURN ̲DATA()() RETURN ̲RESULT()()
Load return parameters
PARS.BYTE ̲COUNT =
OWN ̲SDID.REPLY.BYTE ̲COUNT
PARS.PAGE ̲ADDR =
OWN ̲SDID.REPLY.PAGE ̲ADDR
PARS.BYTE ̲ADDR =
OWN ̲SDID.REPLY.BYTE ̲ADDR
PARS.BUFFER ̲TYPE =
OWN ̲SDID.REPLY.BUFFER ̲TYPE
CC = OWN ̲SDID.REPLY.RESULT
Figure 4.2.3.4.20-6
ACK ̲DATA ̲INPUT()()
Result returned?
OWN ̲SDID.USER.INPUT.STATE OWN ̲SDID.USER.INPUT.
EQ RESULT ̲RETURNED ? STATE = IDLE
Was only part buffer returned
OWN ̲SDID.USER.INPUT.PART ̲
BUFFER ̲RET?
Release buffer
CASE EXTRACT ̲FIRST(OWN ̲SDID.USER.INPUT.DAT ̲Q)(BUF)
OF
FAIL? PROTOCOL ̲ERROR(USER ̲IF ̲2 ̲4)
PASS?
END CASE
OWN ̲SDID.USER.INPUT.DATA ̲Q ̲SIZE-1
RELEASE ̲IN ̲CONV ̲BUFFER(BUF)()
OWN ̲SDID.USER.INPUT. OWN ̲SDID.USER.
STATE EQ COMPLETE ? INPUT.STATE = IDLE
RETURN
Figure 4.2.3.4.20-7
GET ̲OUTPUT ̲BUFFER(PARS:GET ̲BUFFER ̲PARAM)(CC:COMPLETION
̲CODE)
Only one request at a time, but several completed
outputs may wait for answers
OWN ̲SDID.USER.OUTPUT.STATE ?
NE IDLE
S̲E̲T̲ ̲O̲U̲T̲P̲U̲T̲ R̲E̲Q̲U̲E̲S̲T̲ ̲N̲E̲X̲T̲ ̲B̲U̲F̲F̲E̲R̲ ̲3̲
RETURN
Figure 4.2.3.4.20-8
S̲E̲T̲U̲P̲ ̲O̲U̲T̲P̲U̲T̲ ̲9̲
CASE EXTRACT ̲FIRST(OWN ̲SDID.USER.OUTPUT.EMPTY)(QEL)
OF
FAIL? CC = TOO ̲MANY ̲REQUESTS
PASS?
END CASE
OWN ̲SDID.USER.OUTPUT.STATE = ACTIVE
QEL.ADDI = ACTIVE
QEL.REQ ̲REF = PARS.OPID
QEL ̲REQUESTOR = USER
OWN ̲SDID.USER.OUTPUT.ACTIVE = QEL
REQUEST ̲OUT ̲CONV ̲OUTPUT(QEL,USER ̲PRIORITY)(CCP, BUFFER
̲REF)
CCP NE OK? CC = CCP
RETURN ̲FIRST ̲DATABUFFER(QEL, BUFFER ̲REF)()
QEL.ADDI = IDLE
LOAD ̲BUFFER ̲RETURN(PARS)()
CC = OK
Figure 4.2.3.4.20-9
R̲E̲Q̲U̲E̲S̲T̲ ̲N̲E̲X̲T̲ ̲B̲U̲F̲F̲E̲R̲ ̲1̲0̲
QEL = OWN ̲SDID.USER.OUT3.ACTIVE
QEL.ADDI = ACTIVE
REQUEST ̲NEXT ̲OUT ̲CONV ̲BUFFER()(CCP, BUFFER ̲REF)
CCP NE OK? CC = CCP
RETURN ̲NEXT ̲DATA ̲BUFFER (QEL,BUFFER ̲REF)()
QEL.ADDI = IDLE
LOAD ̲BUFFER ̲RETURN (PARS)()
CC = OK
Figure 4.2.3.4.20-10
USER ̲OUTPUT(PARMS:INIT ̲OUTPUT ̲PARAM)(CC:COMPLETION
̲CODE)
TYPE = PARMS.BUFFER ̲TYPE
TYPE IS ENTIRE ̲LDU
OR ̲START ̲OF ̲LDU ?
ADD = LDU ̲DATA ̲OFFSET ADD = START ̲LDU ̲DATA ̲OFFSET
BYTE ̲COUNT = PARMS ̲BYTE ̲COUNT)()
TYPE INDICATES END OF DATA?
OWN ̲SDID.USER.OUTPUT.STATE
= IDLE
SEND ̲OUT ̲CONV ̲BUFFER (TYPE, BYTE ̲COUNT)()
All responses to outputs are asynchronous
CC = REQUEST ̲QUEUED
OWN ̲SDID.USER.OUTPUT.ACTIVE.ADDI = ACTIVE
RETURN
Figure 4.2.3.4.2-11
NOTIFY ̲USER ̲FIRST ̲OUTPUT ̲BUFFER
(QEL: IO ̲QEL,BUFFER ̲REF:POINTER)()
QEL.ADDI ̲EQ ̲OWN ̲SDID.OUT ̲CONV
NOTIFY ̲BUT ̲CONV ̲OUTPUT
̲BUFFER
RETURN ̲FIRST ̲DATABUFFER (QEL,BREF)()
QEL,BREF)()
QEL.ADDI = IDLE
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.2.3.4.20-12
NOTIFY ̲USER ̲SUBSEQUENT ̲OUTPUT ̲BUFFER
(QEL:IO ̲QEL, BUFFER ̲REF: POINTER)()
QEL.ADDI EQ OWN ̲SDID.OUT ̲CONV?
RETRUN ̲NEXT ̲DATABUFFER(QEL, PROTOCOL ̲ERROR(CS ̲USER
̲)
BUFFER ̲REF)()
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.2.3.4.20-13
USER ̲OUTPUT ̲RESULT (QEL:IO ̲QEL,BUFFER
QEL ̲ADDI EQ OWN ̲SDID, OUT ̲CONV?
OUT ̲CONV ̲OUTPUT ̲RESULT
(QEL,BREF)()
Release queue element
QUEUE (OWN ̲SDID.USER.OUTPUT,EMPTY,QEL)()
QEL.REQUESTOR = NONE
QEL.ADDI = IDLE
RETURN ̲OUTPUT ̲RESULT (QEL, BUFFER ̲ENTRY)
SEND ̲OPERATIONS ̲REPLY()()
RELEASE ̲INPUT ̲BUFFER (BUFFER ̲ENTRY)()
RETURN
4.2.3.4.20-14
NOTIFY ̲USER ̲INPUT ̲REQUEST ̲BUFFER (QEL: IO ̲QEL, BREF:
POINTER)()
SEND ̲INPUT ̲REQUEST (0)()
RETURN
4.2.3.4.20-15
USER ̲INPUT ̲RESULT(QEL:TO ̲QEL, BUFFER ̲REF:POINTER)()
QEL.ADDI EQ OWN ̲SDID.USER P̲A̲R̲E̲N̲T̲ ̲D̲A̲T̲A̲
U̲S̲E̲R̲ ̲D̲A̲T̲A̲
RETURN
Figure 4.2.3.4.20-16
P̲A̲R̲E̲N̲T̲ ̲D̲A̲T̲A̲
The protocol has failed. The Subdevice is removed
by SSC
RELEASE ̲INPUT ̲BUFFER(BUFFER ̲REF)()
Figure 4.2.3.4.20-17
U̲S̲E̲R̲ ̲D̲A̲T̲A̲
QEL.REQUESTOR = NONE
BUFFER = BUFFER ̲ENTRY.PAGE ̲START
START = BUFFER ̲ENTRY.BUFFER ̲ADDR
RESULT = BUFFER (START + RECEPTION ̲START ̲CODE ̲OFFSET)
OWN ̲SDID.USER.INPUT.RESULT = RESULT
OWN ̲SDID.USER.INPUT.STATE = PENDING ̲RESULT
Data awaited?
OWN ̲SDID.USER.INPUT.DATA ̲Q ̲SIZE GE 1?
OWN ̲SDID.USER.INPUT.REQUEST ̲STATUS?
EQ IDLE
No data awaited
RETURN ̲RESULT()()
SEND ̲OPERATION ̲REPLY()()
RELEASE ̲INPUT ̲BUFFER(BUFFER ̲ENTRY)()
Figure 4.2.3.4.20-18
NOTIFY ̲USER ̲FIRST ̲INPUT ̲DATA (QEL: IO ̲QEL,
BUFFER ̲REF: POINTER)()
BUFFER = BUFFER ̲REF.PAGE ̲START
START = BUFFER ̲REF.BUFFER ̲ADDR
QEL.ADDI EQ OWN ̲SDID.USER PARENT DATA 20
USER ̲INPUT ̲DATA(QEL,BUFFER ̲REF)()
Figure 4.2.3.4.20-19
P̲A̲R̲E̲N̲T̲ ̲D̲A̲T̲A̲ ̲2̲0̲
TYPE = BUFFER (START + BFFER ̲TYPE ̲OFFSET)()
TYPE DOES ̲NOT ̲INDICATE
ENTIRE ̲LDU ? PROTOCOL ̲ERROR(RS ̲USER
̲INTERFACE ̲)
IS = QEL ̲REQ ̲REF
IS.BUFFER ̲ENTRY.DEVICE ̲BUFFER ̲ID = BUFFER ̲REF
COPY BUFFER DESCRIPTOR TO IS.BUFFER ̲ENTRY
NOTIFY ̲IN ̲CONV ̲DATA(IS.BUFFER ̲ENTRY)()
Figure 4.2.3.4.20-20
USER ̲INPUT ̲DATA (QEL:IO ̲QEL, BUFFER ̲ENTRY: POINTER)()
INSERT (BUFFER ̲ENTRY, OWN ̲SDID.USER.INPUT.DATA ̲Q)
OWN ̲SDID.USER.INPUT.DATA ̲Q ̲SIZE + 1
IS DATA ̲Q ̲SIZE GT 1?
NEXT ̲DATA ̲QEL()()
No request just now
OWN ̲SDID.USER.INPUT.
REQUEST ̲STATUS EQ IDLE ?
RETURN ̲DATA ()()
SEND ̲OPERATIONS ̲REPLY()()
RETURN
Figure 4.2.3.4.20-21
NOTIFY ̲USER ̲INPUT ̲DATA (QEL: IO ̲QEL,
BUFFER ̲REF: POINTER)()
USER ̲INPUT ̲DATA (QEL, BUFFER ̲REF)()
RETURN
Figure 4.2.3.4.20-22
4.2.3.4.21 C̲S̲ ̲S̲P̲I̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.2
Delete calls to
CLEAN ̲SUBDEVICES
INITIALIZE ̲SUBDEVICE ̲INTERFACE
RELEASE ̲INPUT ̲B
RESERVE ̲OUTPUT ̲BUFFER
CANCEL ̲RESERVE ̲OUTPUT ̲BUFFER
RELEASE ̲OUTPUT ̲BUFFER
TRANSMIT ̲OUTPUT ̲BUFFER
WANT ̲TO ̲CLOSE
4.2.3.4.22 C̲S̲ ̲E̲H̲P̲ ̲m̲o̲d̲u̲l̲e̲
Refer 4.1.5.1
Modify sent that call to
OPEN ̲SUBDEVICE is answered CC = NOT ̲IMPLEMENTED
Delete call to
OPEN ̲SUBDEVICE
4.2.3.4.23 C̲S̲ ̲I̲N̲P̲U̲T̲ ̲C̲O̲N̲V̲E̲R̲T̲E̲R̲ ̲M̲o̲d̲u̲l̲e̲
Refer NT INPUT CONVERTER MODULE 4.2.3.4.8.
Modify interface to access USER INTERFACE instead of
SUBDEVICE INTERFACE
4.2.3.4.24 C̲S̲ ̲O̲U̲T̲P̲U̲T̲ ̲C̲O̲N̲V̲E̲R̲T̲E̲R̲ ̲m̲o̲d̲u̲l̲e̲
Refer NT OUTPUT CONVERTER module 4.2.3.4.9.
Modify interface to USER INTERFACE instead of
SUBDEVICE INTERFACE
4.2.3.4.25 C̲S̲ ̲P̲R̲O̲T̲O̲C̲O̲L̲ ̲M̲o̲d̲u̲l̲e̲
4.2.3.4.25.1 F̲u̲n̲c̲t̲i̲o̲n̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
This module hands an asynchronous report to the SSC.
4.2.3.4.25.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
The module has one functional entry
NOTIFY ̲INTERRUPT (BUFFER ̲ENTRY: POINTER) ( )
and two for init/delete
INITIALIZE ̲PROTOCOL ̲DATA (PARAM: OPEN ̲SUBDEVICE ̲PARAM)(
)
CLEAN ̲PROTOCOL ̲DATA ( ) ( )
4.2.3.4.25.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
NOTIFY ̲INTERRUPT
INITIALIZE ̲PROTOCOL ̲DATA
CLEAN ̲PROTOCOL ̲DATA
4.2.3.4.25.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
Refer section 4.2.2.7.2 for CCIS/SCARS level 2 asynchronous
reports (interrupts)
Loads the SDID record STATUS ̲REPORT
4.2.3.4.25.5 M̲o̲d̲u̲l̲e̲ ̲D̲e̲s̲i̲g̲n̲
NOTIFY ̲INTERRUPT (BUFFER ̲ENTRY : POINTER) ( )
BUFFER = BUFFER ̲ENTRY. PAGE ̲START
START = BUFFER ̲ENTRY. BUFFER ̲ADDR
IT ̲TYPE = BUFFER (START + INTERRUPT ̲TYPE ̲OFFSET)
IT ̲TYPE EQ RX ̲DISC?
IT ̲TYPE EQ TX ̲DISC?
PRI = EXT ̲D ̲STATUS ̲PRI PRI = EXT ̲D ̲FAILURE
̲PRI
ALLOW ̲STATUS ̲REPORT (PRI)(CCP)
CCP NE OK?
S = OWN ̲SDID.STATUS ̲REPORT
EQUIVALENCE (S.INFO, O ̲ST: SD ̲OTHER ̲STATUS ̲REC)
CASE IT ̲TYPE OF
RX ̲DISC? S.INFO (O) = CS ̲RX
̲DISC
TX ̲DISC? S.INFO (O) = CS ̲TX
̲DISC
S.INFO
̲SIZE
= 1
S.STATUS
= SD
̲FAILURE
RX ̲CONN? S.STATUS = SD ̲OTHER
̲STATUS
S. INFO ̲SIZE = 2
O ̲ST.ACTION ̲TYPE = DEVICE ̲ACTION
O ̲ST.ACTION ̲SUBTYPE = CS ̲RX ̲CONN
OTHER? PROTOCOL ̲ERROR (CS ̲PROTOCOL ̲1)
END CASE
SEND ̲STATUS ̲REPORT ( ) ( )
RELEASE ̲INPUT ̲BUFFER (BUFFER ̲REF) ( )
RETURN
Fig. 4.2.3.4.25.5-1
INITIALIZE ̲PROTOCOL ̲DATA (PARAM: OPEN ̲SUBDEVICE
̲PARAM)( )
RETURN
CLEAN ̲PROTOCOL ̲DATA ( ) ( )
RETURN
Fig. 4.2.3.4.25.5-2
4.2.3.5 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲D̲a̲t̲a̲
Refer 4.1.4.3 IOC handler data
4.2.3.6 C̲o̲m̲m̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲P̲r̲o̲c̲e̲d̲u̲r̲e̲s̲
These are
INIT ̲INPUT ̲CONVERT
INPUT ̲CONVERT
INIT ̲OUTPUT ̲CONVERT
OUTPUT ̲CONVERT
4.2.3.6.1 I̲N̲P̲U̲T̲ ̲c̲o̲n̲v̲e̲r̲t̲ ̲r̲o̲u̲t̲i̲n̲e̲s̲
INIT ̲INPUT ̲CONVERT sets up the state initially
INPUT CONVERT converts input data in the
form received over an external protocol
controlled line to IOC record:
- "CR, CR, LF" or "CR, LF" terminates
a normal line and marks the IOC record
with LINE ̲FLAG
- More than N characters (69 or 80)
leads to terminatiuon of the N characters
in a record marked DATA ̲FLAG
- Encountered SI, SO are deleted
- Other control characters are returned
in records marked with CONTROL ̲FLAG.
The data which was in conversion is
marked with DATA ̲FLAG.
4.2.3.6.2 O̲U̲T̲P̲U̲T̲ ̲c̲o̲n̲v̲e̲r̲t̲ ̲r̲o̲u̲t̲i̲n̲e̲s̲
These converts opposite the INPUT convert
routines
(refer 4.2.3.6.1).
4.2.3.7 S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲i̲n̲t̲e̲r̲f̲a̲c̲e̲s̲
The interface is described in separate
sections for
NICS-TARE LTU Functions Subpackage
CCIS-SCARS LTU Functions Subpackage
below.
4.2.3.7.1 L̲T̲U̲ ̲H̲a̲n̲d̲l̲e̲r̲ ̲-̲ ̲N̲I̲C̲S̲ ̲T̲A̲R̲E̲ ̲L̲T̲U̲ ̲F̲u̲n̲c̲t̲i̲o̲n̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲s̲
̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
H̲A̲N̲D̲L̲E̲R̲ ̲-̲ ̲L̲T̲U̲ ̲P̲R̲O̲T̲O̲C̲O̲L̲ ̲S̲O̲F̲T̲W̲A̲R̲E̲ ̲I̲N̲T̲E̲R̲F̲A̲C̲E̲
The interface is via queues
Per NICS TARE channel one LTU-CR80D channel with a
control and a data subchannel is used.
The two Subchannels (Data and Status) are here defined
as Data Channel and as Control Channel and combined
with the direction, they are defined as:
DATA OUT
Direction: Handler
- LTU
CONTROL OUT
DATA IN Direction: LTU - Handler
CONTROL IN
Interfaces are defined according to CSS-MIC/040/FNC/0001.
It is specified by a number of parameters some according
to the common standard, some specific for this interface.
Although some parameters below are directly specified
as numbers, all constant parameters and error codes
are compile time constants with a describing name.
a) I̲n̲p̲u̲t̲ ̲r̲e̲q̲u̲e̲s̲t̲
An input request signals to the LTU, that the handler
is ready to receive a LDU of Data.
b) C̲a̲n̲c̲e̲l̲ ̲i̲n̲p̲u̲t̲ ̲r̲e̲q̲u̲e̲s̲t̲
Cancel specified input requests of DATA if pending.
c) C̲a̲n̲c̲e̲l̲ ̲o̲u̲t̲p̲u̲t̲
If a data buffer is still queued for the protocol
and transmission has not started a cancel shall
be as if the databuffer was never queued and a
response Transmission Cancelled returned.
d) R̲e̲p̲o̲r̲t̲ ̲S̲t̲a̲t̲u̲s̲ ̲r̲e̲q̲u̲e̲s̲t̲
This command is used for command of protocol and
level 1 opening and closing.
Details below.
e) O̲p̲e̲n̲ ̲C̲h̲a̲n̲n̲e̲l̲
Used to enable the CR80-LTU interface. No parameters.
f) C̲l̲o̲s̲e̲ ̲C̲h̲a̲n̲n̲e̲l̲
Used to disable the CR80-LTU interface.
B̲u̲f̲f̲e̲r̲s̲
Buffers for CONTROL and DATA are of the same size,
but the handler only use the part of the buffer specified
in the detailed interface below.
The LTU per channel supplies the handler with 3 buffers.
S̲e̲c̲u̲r̲i̲t̲y̲ ̲r̲e̲q̲u̲i̲r̲e̲m̲e̲n̲t̲s̲ ̲t̲o̲ ̲b̲u̲f̲f̲e̲r̲h̲a̲n̲d̲l̲i̲n̲g̲
The LTU overwrites databuffers for output after a successful
transmission. The LTU overwrites input data buffers
after they are returned to the LTU.
D̲A̲T̲A̲ ̲B̲U̲F̲F̲E̲R̲S̲
The interface data buffers are laid out as follows:
1.byte buffer type as of CSS-MIC/040/FNC/0001
section 3.1.2
bit 0,1 entire LDU
bit 2 transparent data
2.byte LDU sequence number
3.byte Segment-Type
4.byte =0 Spare
5 - 517 Data of one segment.
The length of the data is taken from the buffer-header.
For DATA OUT, the Handler will in most cases of type
Intermediate generate segments of 512 bytes. (For performance
estimates, it can be assumed, that the average length
of these types is at least 450.)
For DATA IN, the Handler accepts any length, but will
assume an average as above of at least 450.
The Segment-Type parameter defining the buffer as a
segment of
Intermediate segment of message = 0
Last segment of message = 1
LCB segment = 2
C̲O̲N̲T̲R̲O̲L̲ ̲B̲U̲F̲F̲E̲R̲S̲
The interface control buffers are laid out as follows:
1.byte Buffer type as of CSS-MIC/040/FNC/0001 section
3.1.2
2.byte Status type
For Control Out as defined in CSS-MIC/040/FNC/0001
section 3.1.2, where code 3: report status
request is reserved for general commands to
the protocol
3.byte through max. Parameters.
D̲e̲t̲a̲i̲l̲e̲d̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
D̲a̲t̲a̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲. The Data interface has already been
defined above except for acknowledge of input segments
(see below).
C̲o̲n̲t̲r̲o̲l̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲
The Control interface is according to CSS-MIC/040/FNC/0001
for the outgoing control types.
Input request, Cancel input request, Cancel output,
Open channel and Close channel.
Commands to the protocol and level 1 are issued as
report status request with corresponding channel state
answers (see below).
For the incoming control types Transmission status
and Reception status the interface is as described
in CSS-MIC/040/FNC/0001. The Asyncronous Reports (interrupt)
are generated when asyncronous events occurs. Channel
Status are responses to commands to the protocol.
C̲o̲m̲m̲a̲n̲d̲s̲ ̲t̲o̲ ̲t̲h̲e̲ ̲p̲r̲o̲t̲o̲c̲o̲l̲ ̲(̲"̲r̲e̲p̲o̲r̲t̲ ̲s̲t̲a̲t̲u̲s̲ ̲r̲e̲q̲u̲e̲s̲t̲"̲)̲
E̲n̲a̲b̲l̲e̲ Level 1 is enabled
Protocol parameters defined
Parameters from handler:
1. - 2.byte Standard
3. byte Identifier
4. byte Command Code = 1 (ENABLE)
5. - 9.byte Level 1 parameters
5. byte Definition Local/Remote
Tare
= 0 Local Tare
= 1 Remote Tare
6. byte Baudrate
Hex 1 through 8 reserved
for 50 - 300 baud
Hex 9 600 baud
Hex A 1200 baud
Hex B 2400 baud
Hex C - Reserved
7. byte Level 1 timeout (Remote
Tare)
Specified in units
of 100 ms. 1 = 100
ms 255 = 25.5 seconds.
8. byte Retry count level 1
(Remote Tare).
Value 0 - 10.
9. byte Spare = 0
10. - 19 byte Level 2 parameters
10. byte Block size
0: 32 bytes
1: 64 bytes
2: 128 bytes
3: 256 bytes
4: 512 bytes
11. byte ACKTO Timeout in steps
of 100 ms
1 = 100 ms 255 = 25.5
seconds
12. byte ACKLTO Timeout in steps
of 100 ms
1 = 100 ms 255 = 25.5
seconds
13. byte Spare = 0
14. byte Max N count 1 - 99
15. byte Max L count 1 - 99
16. byte Max R count 1 - 99
17. - 19.byte Spare = 0
O̲p̲e̲n̲ ̲E̲D̲C̲ Correspond to open specified in SDS/006/section
4.1.3.6.3.4.
1. - 2.byte Standard
3. byte Identifier
4. byte Command Code = 2 (OPEN
̲EDC)
C̲L̲O̲S̲E̲ ̲E̲D̲C̲ Correspond to Close specified in SDS/006/section
4.1.3.6.3.4.
1. - 2. byte Standard
3. byte Identifier
4. byte Command Code = 3 (CLOSE
̲EDC)
R̲E̲D̲E̲F̲I̲N̲E̲ ̲E̲D̲C̲ ̲p̲a̲r̲a̲m̲e̲t̲e̲r̲s̲ Redefines (also during
normal operation) the
EDC parameters.
1. - 2. byte Standard
3. byte Identifier
4. byte Command Code = 4 (REDEF
̲ EDC ̲PARAMS)
5. - 14.byte Correspond to byte
# 10 - 19 of the ENABLE
command.
C̲o̲l̲l̲e̲c̲t̲ ̲S̲t̲a̲t̲i̲s̲t̲i̲c̲s̲
The EDC protocol and Level 1 shall maintain 16 bit
counters for
Number of successfully transmitted message blocks
Number of successfully transmitted LCB's
Number of received message blocks
Number of received LCB's
Number of retransmitted message blocks
Number of retransmitted LCB's
Number of transmitted RR blocks
Number of correctly received RR blocks
Number of sync retries on level 1 (Remote Tare)
Request format
1. - 2. byte Standard
3. byte Identifier
4. byte Command Code = 5 (STATISTICS)
The command shall read and reset the counters above.
P̲r̲o̲t̲o̲c̲o̲l̲ ̲s̲t̲a̲t̲u̲s̲ ̲+̲ ̲L̲e̲v̲e̲l̲ ̲1̲ ̲S̲t̲a̲t̲u̲s̲
This command requests the current state of the Protocol
and of Level 1.
1. - 2. byte Standard
3. byte Identifier
4. byte Command Code = 6 (EDC
̲STATUS)
A̲c̲k̲n̲o̲w̲l̲e̲d̲g̲e̲
The Handler acknowledges segments as received from
the EDC.
1. - 2. byte Standard
3. byte = 0
4. byte Command Code = 7 (Acknowledge)
5. byte LDU number of received
segment
No response on acknowledge.
R̲e̲s̲p̲o̲n̲s̲e̲s̲ ̲t̲o̲ ̲C̲o̲m̲m̲a̲n̲d̲s̲ ̲(̲"̲c̲h̲a̲n̲n̲e̲l̲ ̲s̲t̲a̲t̲u̲s̲"̲)̲
E̲n̲a̲b̲l̲e̲ ̲r̲e̲s̲p̲o̲n̲s̲e̲
1. - 2. byte Standard
3. byte The Identifier given
in enable
4. byte = Enable Command Code
5. byte = 0 Enable OK
0 (Erroneous parameter)
= 5 Unknown Tare type
= 6 Illegal Baud Rate
= 7 Level 1 retry
count out of range
= 8 Blocksize illegal
= 9 N count out range
= 10 L count out range
= 11 R count out range
O̲p̲e̲n̲ ̲E̲D̲C̲ ̲R̲e̲s̲p̲o̲n̲s̲e̲
1. - 2.byte Standard
3. byte The Identifier given
in Open EDC
4. byte Open EDC command code
5. byte = 0 Open EDC OK
0 error
1: Level 1 setup failed
2: Level 1 link failed
3: EDC irrecoverable
error during await
incoming startup
4: Close Command during
Open.
C̲l̲o̲s̲e̲ ̲E̲D̲C̲ ̲R̲e̲s̲p̲o̲n̲s̲e̲
1. - 2. byte Standard
3. byte The Identifier given
in CLOSE ̲EDC
4. byte CLOSE ̲EDC Command Code
5. byte = 0 Close OK.
R̲e̲d̲e̲f̲i̲n̲e̲ ̲E̲D̲C̲ ̲p̲a̲r̲a̲m̲e̲t̲e̲r̲s̲ ̲r̲e̲s̲p̲o̲n̲s̲e̲
1. - 2. byte Standard
3. byte The Identifier
4. byte REDEF ̲EDC ̲PARAMS Command
Code
5. byte Error Code (See Enable
response)
C̲o̲l̲l̲e̲c̲t̲ ̲S̲t̲a̲t̲i̲s̲t̲i̲c̲s̲ ̲r̲e̲s̲p̲o̲n̲s̲e̲
16 bit values are returned with the most significant
byte as higher numbered.
1. - 2. byte Standard
3. byte The Identifier
4. Byte STATISTICS Command
Code
5. - 6. byte = 0
7. - 8. byte Transmitted message
blocks
9. - 10 byte Transmitted LCB's
11. - 12 byte Received message blocks
13. - 14 byte Received LCB's
15. - 16 byte Retransmitted message
blocks
17. - 18 byte Retransmitted LCB's
19. - 20 byte Transmitted RR blocks
21. - 22 byte Received RR blocks
23. - 24 Level 1 retry count
P̲r̲o̲t̲o̲c̲o̲l̲ ̲S̲t̲a̲t̲u̲s̲ ̲+̲ ̲L̲e̲v̲e̲l̲ ̲1̲ ̲S̲t̲a̲t̲u̲s̲ ̲r̲e̲s̲p̲o̲n̲s̲e̲
1. - 2 byte Standard
3. byte The Identifier
4. byte EDC ̲STATUS Command
Code
5. byte = 0
6. byte Level 1 status
State Numbers as of
SDS/006/4.1.3.6.3.2
for Remote Tare with
0: Not enabled
or
State numbers as of
SDS/006/4.1.3.6.3.1
for Local Tare
0: Not enabled
1: Enabled
2: Setting Up
3: Running
4: Clearing Down
7. byte EDC states
0: Disabled
Others as of CPS/SDS/006
section 4.1.3.6.3.4
S̲t̲a̲n̲d̲a̲r̲d̲ ̲r̲e̲s̲p̲o̲n̲s̲e̲s̲
Transmission status
TX-error 2: Link failed
Reception status
1: Input request cancelled
by command
2: Input request cancelled
due to EDC reset or
Close.
A̲s̲y̲n̲c̲r̲o̲n̲o̲u̲s̲ ̲R̲e̲p̲o̲r̲t̲ ̲f̲r̲o̲m̲ ̲E̲D̲C̲ ̲+̲ ̲L̲e̲v̲e̲l̲ ̲1̲
General format
1. byte Standard
2. byte 2: Asyncroneous Report
3. byte Code
2: Link Failure
12: EDC Failure (irrecoverable
error)
13: Manual Sync
14: Incoming reset (Set
B received)
These reports are generated as specified in SDS/006/
section 4.1.3.6.3.1 through 4.1.3.6.3.4.
The Incoming reset is reported in all cases except
open EDC and has the effect that all input requests
for the manual are cleared with code "EDC reset or
Close" cancelled (=2).
4.2.3.7.2 L̲T̲U̲ ̲H̲a̲n̲d̲l̲e̲r̲ ̲S̲u̲b̲p̲a̲c̲k̲a̲g̲e̲ ̲C̲C̲I̲S̲/̲S̲C̲A̲R̲S̲ ̲L̲T̲U̲ ̲F̲U̲N̲C̲T̲I̲O̲N̲
̲S̲U̲B̲P̲A̲C̲K̲A̲G̲E̲
I̲n̲t̲e̲r̲f̲a̲c̲e̲
The CR80 I/F-table is organized like this (see also
CSS-MIC/040/FNC/0001):
Channel 0: Debug communication between
line handler and LTU
Channel 1: General purpose LTU configuration
communication
Channel 3: Logical channel 1
Channel 5: Logical channel 2
The following control commands are implemented:
REOPEN: Change parameters in protocol
SET ̲UP ̲LINK: Connect protocol level 2
DISC ̲LINK: Disconnect protocol level 2
SET ̲UP ̲LINES: Set up statuslines according to X21 bis
DISC ̲LINES: Disconnect statuslines according to X21
bis
SET ̲V24: Set specified circuit on optional V24-connector
(2)
The following status commands are implemented:
READ ̲V24: Read specified circuit on optional V24-connector
(2)
STATISTIC: Read and reset statistic information about
the actual datatransfer in this protocol
All buffers are entire LDU's though there is no control
of this.
The following control commands are accepted:
a) Input request
b) Cancel input request
c) Cancel output
d) Report status request
e) Open channel
The following responses can be returned to CR80:
a) Transmission status
b) Interrupt
c) Channel status
A further description of how the different commands
are interpreted in the LTU and how the responses are
interpreted in the CR80 is given on the next pages.
a) I̲n̲p̲u̲t̲ ̲r̲e̲q̲u̲e̲s̲t̲:̲
No databuffers are sent to level 3 without an "Input
request" is pending. Level 3 do not have more than
7 "Input request"s pending.
b) C̲a̲n̲c̲e̲l̲ ̲i̲n̲p̲u̲t̲ ̲r̲e̲q̲u̲e̲s̲t̲s̲:̲
This will be executed of the mentioned "Input request"
has not already been used.
No response.
c) C̲a̲n̲c̲e̲l̲ ̲o̲u̲t̲p̲u̲t̲:̲
This command will only be executed if the protocol
has not taken the buffer in question (see"Transmission
status"). Response will only be returned if the
cancelling succeeds. This response will be "TX
cancelled".
d) R̲e̲p̲o̲r̲t̲ ̲s̲t̲a̲t̲u̲s̲ ̲r̲e̲q̲u̲e̲s̲t̲:̲
This command is a cover for all the special control
commands and status commands which are implemented
in the protocol. The next pages give a further
description of these.
e) O̲p̲e̲n̲ ̲c̲h̲a̲n̲n̲e̲l̲:̲
This command is the same as "REOPEN" in the "Report
status request"; only will there not be sent any
response to this command and the parameters begin
from the 1 byte after "Control code".
f) I̲n̲t̲e̲r̲r̲u̲p̲t̲
This is sent when the Rx-protocol has changes mode
(disconnected connected) or when the Tx-protocol
without CR80-command gets disconnected.
The "interrupt" will have 1 parameter, which informs
about the direction of mode-transition.
Parameter Current protocol state:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲
0 Rx-protocol connected
1 Rx-protocol disconnected
2 Tx-protocol disconnected
g) T̲r̲a̲n̲s̲m̲i̲s̲s̲i̲o̲n̲ ̲s̲t̲a̲t̲u̲s̲:̲
This is sent when the protocol takes a databuffer
or when a databuffer is cancelled by the "Cancel
output"-command.
When the protocol takes a databuffer, it sends
a "Tx OK" and the buffer cannot be cancelled by
the "Cancel output"-command.
When the databuffer is cancelled by the "Cancel
output"-command, the response is "Tx cancelled".
A "Report status request" - command buffer will look
like this:
1 byte Buffer type
2 byte Control type
3 byte Identifier
4 byte Status type
5 byte Spare
6 byte Parameter 1
Parameter 2
-"- -"-
The response to a "Report status request" will be a
"Channel status", which will look like this:
1 byte Buffer type
2 byte Control type
3 byte The identifier
4 byte Status type
5 byte Error-code
6 byte Parameter 1
Parameter 2
-"- -"-
A response will have the same "Status type" as the
command it is a response to.
R̲E̲O̲P̲E̲N̲:̲
1. Parameter (1 byte): Max. no. of retransmissions
2. Parameter (1 byte): Max. no. of outstanding
frames
3. Parameter (1 byte): Time out time
4. Parameter (1 byte): Baudrate out
The Tx-protocol level 2 shall be disconnected to execute
this command.
If the user does not want to change one or more of
the parameters in the protocol, these must be set to
OFFH.
Parameter Limits Default
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲
Max no.of retransmissions 127 8
Max no.of outstanding frames 7 7
Time out time 200ms-50sec 10sec
Baudrate out 50-48000 4800
Timeout time = Timeout parameter * 200 msec
S̲E̲T̲ ̲U̲P̲ ̲L̲I̲N̲K̲:̲
No parameters
The Tx-protocol level 2 shall be disconnected to execute
this command.
D̲I̲S̲C̲ ̲L̲I̲N̲K̲:̲
No parameters
The Tx-protocol level 2 shall be connected or connecting
and not already be going to disconnected mode to execute
this command.
This command is the only which can result in the errortype
2.
S̲E̲T̲ ̲U̲P̲ ̲L̲I̲N̲E̲S̲
No parameters
The Tx-protocol level 2 shall be disconnected to execute
this command.
D̲I̲S̲C̲ ̲L̲I̲N̲E̲S̲:̲
No parameters.
The protocol level 2 shall be disconnected to execute
this command.
S̲E̲T̲ ̲V̲2̲4̲:̲
1. Parameter (1 byte): Set/reset/no
change of
RTS (IO5)
2. Parameter (1 byte): Set/reset/no
change of
DTR (108/1)
The protocol level 2 shall be disconnected
to execute this command.
Set current Reset curcuit no
change:
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
0CH 03H anything
else
R̲e̲a̲d̲ ̲V̲2̲4̲:̲
1. Parameter (1 byte): Read/no
read of
CTS (106)
2. Parameter (1 byte): Read/no
read of
DSR (107)
This command will always be executed.
Read curcuit No read of
curcuit
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
0C0H anything
else
The response will be:
1. Parameter (1 byte): CTS (106)/not
read
2. Parameter (1 byte): DSR (107)/not
read
Curcuit on Curcuit off Curcuit
not read
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
0CCH 0C3H 00H
S̲T̲A̲T̲I̲S̲T̲I̲C̲:̲
1.Parameter (1 byte): Reset/no reset of no.
of transmissions
2.Parameter (1 byte): Reset/no reset of no.
of retransmissions
3.Parameter (1 byte): Reset/no reset of no.
of received I-frames
without error
4.Parameter (1 byte): Reset/no reset of no.
of CRC-errors
5.Parameter (1 byte): Reset/no reset of no.
of frames too long
6.Parameter (1 byte): Reset/no reset of no.
of frames too short
7.Parameter (1 byte): Reset/no reset of no.
of DCD-drops
Reset No Reset
̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲ ̲
OH anything else
The response will be:
1. Parameter (2 bytes): No. of transmissions
2. Parameter (2 bytes): No. of retransmissions
3. Parameter (2 bytes): No. of received I-frames
without error
4. Parameter (1 byte): No. of CRC-errors
5. Parameter (1 byte): No. of frames too
long
6. Parameter (1 byte): No. of frames too
short
7. Parameter (1 byte): no. of DCD-drops
A 2-byte-parameter has have LSB first.