• No results found

1* Allow other XT to print messages *1

De timers worden door deze opzet voor ieder dispatcher cyclus verlaagd zodat de gebruiker / PC aan de andere kant van de verbinding de gelegenheid krijgt, indit geval een veelvoud van 500 milliseconden afhankelijk van het nonnale aantal toegestane tijdstikken van

±

0.06 seconden (DOS-timer), om de messages, frames en andere toestandsgegevens op het beeldscherm weer te geven.

4.2 De low-level drivers

De low-level drivers zijn nodig voor de besturing van de hardware die aanwezig is op de MITEL kaarten. De bestaande software maakt gebruik van de DNIC om met beide B-kanalen en het D-kanaal een verbinding op te zetten. Ret D-kanaal wordt echter nog altijd via de ST-bus doorgezonden naar de interne RDLC-transceiver van de SNIC. Dit heeft tot gevolg dat alle interrupts van de SNIC afkomstig zijn. We hoeven de interrupt-services routines niet aan te passen als we de SNIC als ISDN interface gaan gebruiken, de interrupts blijven hetzelfde. Als we de SNIC willen gebruiken moet de bron van het D-kanaal de S-bus worden en de D-phone, die voor het digitale telefooninterface zorgt, moet worden doorverbonden met de SNIC in plaats van de DNIC B-kanalen. Dit kunnen we doen met een initialisatieroutine.

Er moot weI rekening worden gehouden met het activeren van het Sff-interface voordat data over deze bus kan worden verzonden. Ret V-interface van MITEL is daarintegen altijd actief. Ook het doorlopen van het 'link: activation' protocol wordt in de initialisatieroutine verzorgd.

De oude initialisatieroutine van de DNIC en SNIC bestond uit twee losse gedeelten: de verbinding tussen de DNIC en SNIC voor het D-kanaal werd voor het opstarten van de ISDN software eerst met behulp van het IES-programma van MITEL [19] of door een speciaal geschreven initialisatieprogramma [9] opgezet, daarna volgde in de ISDN software de onderstaande initialisatie voor de SNIC.

De bestaande initialisatie van de SNIC is nu op de volgende manier aangepast waarbij men nog weI vooraf met de IES-software de TE of NT mode moet selecteren (toogevoegde of

veranderde programmastructuren zijn vet gedrukt):

1* Program hardware *1

1* Set interrupt vectors *1

1* Program SNIC to generate IRQ signal *1 1* use IRQINDA pin as IRQ.

Note that selection with B2 ofMaster Control Register is as follows:

B2

=

0 selects NDAfunction B2 = I selects IRQfunction.

(MITEL Databook p4-67has been proven wrong on this, with the use ofa logic analyzer) *1

1* #MR new*1

1* use IRQ/NDA pin as IRQ.

#MR comment, New chipset!!!!!!, so IRQ on =0*/

1* Clear HDLC Interrupt Status register *1 1* enable SNIC chip interrupts *1

1* direction ofD-channel port *1 1* #LOcomment# disable transmitter,

enable receiver, no address recognition, transmit to ST-bus, receive from ST-bus, interframe-time-fill=ones

and no HDLC-loopback *1

outportb(Oxb02, 0x58);

#endif

resetRFIFO();

resetTFIFO();

#ijSNIC

outportb(Oxb08, 0x42);

outportb(Oxb08,Ox01);

/* #MR new, D-channel on S-bus port*/

/* #MR new, setup S-bus */

/* deactivate S-bus and clear diagn. reg.

TE/NT-mode*/

/* , set multiframe seq. NT-mode */

winsel(2); /*Print message on screen */

/* 'S-bus still active... '*/

/*and waitfor deactivation */

/*or key to escape*/

clrscr();cprintj(" S-bus still active, waiting for INFO O. "); clreol();

while «!kbhit()) &&«inportb(Oxb09)&Ox80)==Ox80));

while (kbhit()) getch();

gotoxy(l,1); /*S-bus deactivated*/

/*Activated bus by pressing a key*/

/*or waitforactivation signal (INFO)*/

cprintf(" Press any key to activate S-bus or waitfor INFO-signals. ");

clreol();

while «(!kbhit()) &&«inportb(Oxb09)&Ox80)!=OXSO));

while (kbhitO) getch();

/*S-bus is synchronizing*/

/* wait for Activation State*/

gotoxy(l,1); cprintf(" Synchronizing! ...or any key to tenninate. "); clreol();

outportb(Oxb08,Ox02); /*DeactivationRequest

=

0 */

outportb(Oxb08, OxS2); /*ActivationRequest

=

1 */

while «!kbhit()) &&«inportb(Oxb09) & Ox60)!= Ox60));

while (kbhitO) getch();

#endif /*S-bus activated!!*/

enable();

}

Door het gebruik van de zogenaamde compiler-directives '#if <constant>', '#elif

<constant>'en 'Dendi! kunnen we tijdens het compileren van het programma het SNIC of DNIC interface kiezen en hoeven er geen twee los van elkaar staande versies van de ISDN software te worden gemaakt. De instellingen die voor het juiste resultaat zorgen, staan in bijlage 3.

We zien dat in de bovenstaande routine eerst de S-bus interrupts worden geselecteerd.

Vervolgens wordt de HDLC-protocoller geInstrueerd het D-kanaal van de S-bus te gebruiken in plaats van de ST-bus, door het SNIC Master Control Register te programmeren.

Bij de implementatie van het 'Link activation' protocol maken we eerst de S-bus inactief.

We wachten vervolgens tot alle andere terminal(s) de bus hebben vrij gegeven door in het SNIC NTffE mode register de bits ISO en IS 1 te bekijken.

Zodra de bus gedeactiveerd is, kunnen we door het indrukken van een toets de bus weer activeren of wachten op INFO berichten van een andere tenninal. De S-bus is pas bruikbaar als de frames van de S-bus zijn gesynchroniseerd (NTffE mode register, Sync/BA bit). Pas na de synchronisatie kan de ISDN software verder gaan.

De low-level driver van de D-Phone die zorgt voor het leggen van de juiste verbinding op de MITEL kaart, kunnen we snel aanpassen door het toepassen van de volgende data-structuur :

struct mitel {int stream,channel;}

#ifDNIC

1* DNICchannel and stream parameters*1

dnic_d = {7,D}, dnic_c = {7,l}, dnic_bl = {7,2},dnic_b2 = {7,3},

#eli/SNIC

/*#MR new, SNIC channel and stream parameters*/

snic_d

=

{6,O}, snic_c

=

{6,1}, snic_bl

=

{6,2}, snic_b2

=

{6,3},

#endif

/*DPHONEchannel and stream parameters */

dp_c = {7,5},dp_bl = {7,6}, dp_b2 = {7,7}, dp_b3 = {7,B};

Verder moeten een aantal aanroepen van subroutines worden veranderd die gebruik maken van deze data-structuren. Deze bevinden zichinL4_PHONE.C:

#ifDNIC

make B connection(dp bx, dnic bx);- -

-#eli/SNIC

make_B_connection(dp_bx, snic_bx);

#endif en

#ifDNIC

make_B_disconnection(dp_bx, dnic_bx);

#eli/SNIC

make_B_disconnection(dp_bx, dnic_bx);

#endif

waarbij ..bx

=

bi, b2