After putting a new connector on a cable to carry DS-30s between ENET and the lowest ISM shelf in the MCAM, I installed my EDRAM card into slot 6. The EDRAM is an interesting case of a peripheral on a card, where a single card interfaces directly with a DS-30 on its own, using the shelf it is installed within for power only and mechanical packaging only.
Documentation related to the EDRAM includes the DRAM and EDRAM Guide, the EDRAM Peripheral Module Software Release Document Voice Files, and the EDRAM Peripheral Module Software Release Document.
Slot 6 puts it on the second DS-30 for that ISM shelf, but apparently DS-30 port 1 on one of my 3xDS-512 and 16xDS-30 ENET paddleboards somehow cannot carry a message link. As such, I wired the first DS-30 for the shelf (used for the shelf itself) to port 0, and the second, third, and fourth DS-30s to ports 2 though 4 on the ENET paddleboard.
The EDRAM is classed as a type of trunk module, defined in TMINV.
TMNM FRTYPE FRNO SHPOS FLOOR ROW FRPOS LKDATA EQPEC
LOAD EXECS SCTMLOC
---------------------------------------------------------------------
DTM 0 MCAM 0 19 1 A 4 0 10 2 0 1X80BA
ED16AA07 MTMEX SINGLE_CARD MTM 0 6
With the PM defined, we can start by bringing the link into service in 'MAPCI;MTC;NET;SHELF 0;CARD 10' followed by 'BSY x LINK 2' and 'RTS x LINK 2' for each ENET plane. Then in 'MAPCI;MTC;PM;POST DTM 0' followed by 'BSY', 'LOADPM', and 'RTS'.
Now that we've validated our PM configuration, we will need to 'BSY' the EDRAM back out to do the next round of data fill.
First, our EDRAM card needs a CLLI:
CLLI ADNUM TRKGRSIZ ADMININF
----------------------------------------------------------------
EDRAM0 102 33 EDRAM
The NT1X80BA 17 minute EDRAM uses 1 control and 32 announcement slots, which I believe correspond to the 33 members of the trunk group. Those are defined in the DRAMS table:
DRAMCARD TMTYPE TMNO TMCKT CARDCODE
CARDINFO
----------------------------------------------------------------------------
0 0 DTM 0 0 1X80BA
CTLR EDRAM0
0 1 DTM 0 0 1X80BA
PROM (0) (1) $
0 3 DTM 0 0 1X80BA
RAM (2) $
0 4 DTM 0 0 1X80BA
RAM (3) $
0 5 DTM 0 0 1X80BA
RAM (4) $
0 6 DTM 0 0 1X80BA
RAM (5) $
0 7 DTM 0 0 1X80BA
RAM (6) $
0 8 DTM 0 0 1X80BA
RAM (7) $
0 9 DTM 0 0 1X80BA
RAM (8) $
0 10 DTM 0 0 1X80BA
RAM (9) $
0 11 DTM 0 0 1X80BA
RAM (10) $
0 12 DTM 0 0 1X80BA
RAM (11) $
0 13 DTM 0 0 1X80BA
RAM (12) $
0 14 DTM 0 0 1X80BA
RAM (13) $
0 15 DTM 0 0 1X80BA
RAM (14) $
0 16 DTM 0 0 1X80BA
RAM (15) $
0 17 DTM 0 0 1X80BA
RAM (16) $
0 18 DTM 0 0 1X80BA
RAM (17) $
0 19 DTM 0 0 1X80BA
RAM (18) $
0 20 DTM 0 0 1X80BA
RAM (19) $
0 21 DTM 0 0 1X80BA
RAM (20) $
0 22 DTM 0 0 1X80BA
RAM (21) $
0 23 DTM 0 0 1X80BA
RAM (22) $
0 24 DTM 0 0 1X80BA
RAM (23) $
0 25 DTM 0 0 1X80BA
RAM (24) $
0 26 DTM 0 0 1X80BA
RAM (25) $
0 27 DTM 0 0 1X80BA
RAM (26) $
0 28 DTM 0 0 1X80BA
RAM (27) $
0 29 DTM 0 0 1X80BA
RAM (28) $
0 30 DTM 0 0 1X80BA
RAM (29) $
0 31 DTM 0 0 1X80BA
RAM (30) $
0 32 DTM 0 0 1X80BA
RAM (31) $
I defined the first two virtual slots as PROM as this is the correct type to load stock announcement files. The rest of the card was set as RAM for custom announcements. This can always be changed later if needed, though it may require taking the card out of service to do so.
We can set the announcement sets to be loaded in EDRAMINV:
EDRAMNM TUPINFO
----------------------------------------
DTM 0 1 ANN ESTD0AA
ESTD0AA is actually the Canadian English set, which is what the university was using (although not very much of it). For American English, you would use the ASTD0AA set (and I might switch that at some point).
Anyway, announcement set files also get added to PMLOADS so the switch knows where to find them:
LOADNAME
ACTFILE ACTVOL
BKPFILE BKPVOL UPDACT
------------------------------------------------------------
ESTD0AA
ESTD0AA F02LPMLD
ESTD0AA F17LPMLD N
Now we can work on putting the EDRAM into service. In 'MAPCI;MTC;PM;POST DTM 0' we can 'BSY', 'LOADPM', and finally 'RTS'. Note that the LOADPM may take a while as the announcement set is a couple hundred KB and the transfer rate is pretty abysmal.
We can start setting up the announcement phrases next. The manuals say you should use the 'ASSIGN' command inside DRAMREC to do this. The results go into DRAMPHRS.
DRAM PHRSNAME PHRASENO BLOCK LENGTH RECORDED
----------------------------------------------------
0 ENG1 48 0 1 N
0 ENG2 49 0 1 N
0 ENG3 50 0 1 N
0 ENG4 51 0 1 N
0 ENG5 52 0 1 N
0 ENG6 53 0 1 N
0 ENG7 54 0 1 N
0 ENG8 55 0 1 N
0 ENG9 56 0 1 N
0 ENG0 47 0 1 N
0 SILENCE 0 0 1 N
0 TEST760 1 0 1 N
0 SIT1 8 0 1 N
0 SIT2 9 0 1 N
0 SIT3 10 0 1 N
0 SIT4 11 0 1 N
0 SIT5 12 0 1 N
0 SIT6 13 0 1 N
0 SIT7 14 0 1 N
0 SIT8 15 0 1 N
0 SIT9 16 0 1 N
0 SIT10 17 0 1 N
0 SIT11 18 0 1 N
0 SIT12 19 0 1 N
0 SIT13 20 0 1 N
0 SIT14 21 0 1 N
0 SIT15 22 0 1 N
0 SIT16 23 0 1 N
0 SIT17 24 0 1 N
0 SIT18 25 0 1 N
0 SIT19 26 0 1 N
0 SIT20 27 0 1 N
0 SIT21 28 0 1 N
0 SIT22 29 0 1 N
0 SIT23 30 0 1 N
0 SIT24 31 0 1 N
0 SIT25 32 0 1 N
0 SIT26 33 0 1 N
0 SIT27 34 0 1 N
0 SIT28 35 0 1 N
0 SIT29 36 0 1 N
0 SIT30 37 0 1 N
0 SIT31 38 0 1 N
0 SIT32 39 0 1 N
0 NCA 40 0 9 N
0 ROA 41 0 9 N
0 VCA 42 0 12 N
0 ROH 43 0 13 N
0 VDN 44 0 6 N
0 MCA 45 0 11 N
0 MCL 46 0 10 N
0 PROMPT 2 0 1 N
Before we can define any announcements, we'll have to assign CLLIs for them. As a demonstration, we'll define some announcements that just play everything in the ESTD0AA set.
CLLI ADNUM TRKGRSIZ ADMININF
----------------------------------------------------------------
ALLANNS 106 1 ALL_ANNOUNCEMENTS
ALLANNS2 107 1 ALL_ANNOUNCEMENTS_2
ALLANNS3 108 1 ALL_ANNOUCEMENTS_3
ALLANNS4 109 1 ALL_ANNOUNCEMENTS_4
Then we can define the announcements in ANNS:
CLLI ANNARCH TRAFSNO CYTIME MAXCYC DATA
----------------------------------------------------------------------------
ALLANNS NETWK 0 0 1 STND N 255
ALLANNS2 NETWK 0 0 1 STND N 255
ALLANNS3 NETWK 0 0 1 STND N 255
ALLANNS4 NETWK 0 0 1 STND N 255
We set up four announcements since there is a maximum number of phrases for each announcement, and I want more than that maximum.
Next, we need to assign EDRAM channels to the announcement groups we created by creating announcement members in ANNMEMS.
ANNMEM HDWTYPE CARD
MEMINFO
----------------------------------------------------------------------------
ALLANNS 0 DRAM DRA
( 0 DTM 0 1)$
ALLANNS2 0 DRAM DRA
( 0 DTM 0 2)$
ALLANNS3 0 DRAM DRA
( 0 DTM 0 3)$
ALLANNS4 0 DRAM DRA
( 0 DTM 0 4)$
Finally, each announcement member track gets a phrase list assigned in ANNPHLST.
ANNPHKEY
PHSLIST
----------------------------------------------------------------------------
ALLANNS 0
(SILENCE) (TEST760) (PROMPT) (SIT1) (SIT2) (SIT3) (SIT4) (SIT5) (SIT6)
(SIT7) (SIT8) (SIT9) (SIT10) (SIT11) (SIT12) (SILENCE) $
ALLANNS2 0
(SILENCE) (SIT13) (SIT14) (SIT15) (SIT16) (SIT17) (SIT18) (SIT19) (SIT20)
(SIT21) (SIT22) (SIT23) (SIT24) (SIT25) (SIT26) (SILENCE) $
ALLANNS3 0
(SILENCE) (SIT27) (SIT28) (SIT29) (SIT30) (SIT31) (SIT32) (NCA) (ROA) (VCA)
(ROH) (VDN) (MCA) (MCL) (ENG0) (SILENCE) $
ALLANNS4 0
(SILENCE) (ENG1) (ENG2) (ENG3) (ENG4) (ENG5) (ENG6) (ENG7) (ENG8) (ENG9)
(SILENCE) $
With the announcement members created, they all need to be put in service. This is done in 'MAPCI;TRKS;TTP;POST G clli' where CLLI is the name of the announcement. Then, using 'BSY ALL' and 'RTS ALL' all member can be moved from INB to BSY to in service.
We can use a routelist to string all of our announcements together:
RTE RTELIST
OPTIONS
----------------------------------------------------------------------------
5 (S D ALLANNS) (S D ALLANNS2) (S D ALLANNS3) (S D ALLANNS4) (TRMT DISC)
$
$
We end with the 'DISC' treatment because otherwise the call ends with GNCT treatment when the end of the routelist is hit.
We can point a DN at our route list. In SERVORD, we use the NEWDN command to make a RTE type DN, and then point to OFRT 5. The result is as follows in DNROUTE:
AREACODE OFCCODE STNCODE DNRESULT
----------------------------------------------------------------------------
222 563 1003 T OFRT 5
Since we have the announcements working, it would be nice to set up some treatments using them too. We'll set up the VACT and BLDN treatments. We'll have to create new CLLIs, annoucement groups, announcement members, and annoucement phrase lists. We'll have to move the new announcements into service too, of course.
CLLI:
CLLI ADNUM TRKGRSIZ ADMININF
----------------------------------------------------------------
VACT 110 1 VACANT_CODE_ANNOUNCEMENT
BLDN 111 1 VACANT_DN_ANNOUNCEMENT
ANNS:
CLLI ANNARCH TRAFSNO CYTIME MAXCYC DATA
----------------------------------------------------------------------------
VACT NETWK 0 0 1 STND N 255
BLDN NETWK 0 0 1 STND N 255
ANNMEMS:
ANNMEM HDWTYPE CARD
MEMINFO
----------------------------------------------------------------------------
VACT 0 DRAM DRA
( 0 DTM 0 5)$
BLDN 0 DRAM DRA
( 0 DTM 0 6)$
ANNPHLST:
ANNPHKEY
PHSLIST
----------------------------------------------------------------------------
VACT 0
( SILENCE) ( VCA) ( SILENCE)$
BLDN 0
( SILENCE) ( VDN) ( SILENCE)$
OFFTREAT TMTCNTL.TREAT:
TREATMT LOG FSTRTE
----------------------------
VACT N S VACT
BLDN N S BLDN
OFRT:
RTE RTELIST
OPTIONS
----------------------------------------------------------------------------
6 (S D VACT) (S D LKOUT) $
$
7 (S D BLDN) (S D LKOUT) $
$
LNT TMTCNTL.TREAT:
TREATMT LOG FSTRTE
----------------------------
VACT N T OFRT 6
BLDN N T OFRT 7
That sets up the VACT and BLDN treatments for LNT and OFFTREAT.
If we want our announcements to play over ISDN trunks instead of sending cause codes, we need to use a special option applied to the PRI in LTDATA.
LTDKEY
LTDRSLT
----------------------------------------------------------------------------
PRI 1 SERV
SERV Y N SCREENED ALWAYS $
The only problem there is that announcements go off-hook, and we don't want our treatments to go off-hook on a trunk since that can affect billing (it's possible there's an option somewhere which affects this that I am not aware of). Maybe it's OK since it comes with a cause code too, I think, but in any case we can override the answer supervision using some special fake CLLI codes:
RTE RTELIST
OPTIONS
----------------------------------------------------------------------------
8 (S D ONHKSUP) (S D VACT) $
$
9 (S D ONHKSUP) (S D BLDN) $
$
Then we just reference these new route lists in TMTCNTL.TREAT. I put them in the TITRKGRP TREAT subtable to be more specific to the ISDN trunk than just OFFTREAT.
TREATMT LOG FSTRTE
----------------------------
VACT N T OFRT 8
BLDN N T OFRT 9
If we want to assign a specific DN to a treatment, we can do so for certain treatments using SERVORD when we delete a line. However, that selection is limited. We can make arbitrary treatment definitions if we edit DNROUTE directly and use the 'D' selector.
AREACODE OFCCODE STNCODE DNRESULT
----------------------------------------------------------------------------
222 563 1004 D VACT
In searching through the HDDs, I noticed an old university announcement backup. Unfortunately, I think most of the university announcements were not saved anywhere, so I just have the one file, and it only seems to contain one announcement. Nonetheless, I set up the announcement and created a DN to route it.
The file:
File information for volume F02LPMLD:
{NOTE: 1 BLOCK = 512 BYTES }
--------------------------------------------------------------------------------
FILE NAME O R I O O V FILE MAX NUM OF FILE LAST
R E T P L L CODE REC RECORDS SIZE MODIFY
G C O E D D LEN IN IN DATE
C N FILE BLOCKS
--------------------------------------------------------------------------------
DTM_BK3 O V 0 255 3808 2304 160425
I made a copy called UNIVANN to ensure I didn't accidentally do anything to the original. We'll assign it to virtual card 3 of the EDRAM in EDRAMINV:
EDRAMNM TUPINFO
----------------------------------------
DTM 0 3 ANN UNIVANN
We can list it in PMLOADS too:
LOADNAME
ACTFILE ACTVOL
BKPFILE BKPVOL UPDACT
------------------------------------------------------------
UNIVANN
UNIVANN F02LPMLD
UNIVANN F17LPMLD N
We'll of course need to busy and reload the EDRAM for some of these changes.
I used the DRAMREC 'RECORD' command with a 'FORCE' parameter to assign the announcement phrase number once I found it. That added it to DRAMPHRS. From there, I set up a CLLI, announcement in ANNS, announcement member in ANNMEMS, a phrase list an ANNPHLST, put the announcement group into service, made a routelist, and then pointed 563-1005 at it.
The EDRAM has some additional functionality to let it take the place of milliwatt test tone and receiver off hook tone generators, but I had some trouble with this the first time around and will cover that in a later post instead.