Added support for SVP's.

Changed Dial-Command to support MSN's on DSS1-Lines.
This commit is contained in:
Fritz Elfert 1995-04-23 13:40:45 +00:00
parent 3390bb6fbf
commit 9424016328
1 changed files with 41 additions and 13 deletions

View File

@ -3,6 +3,7 @@
* ISDN low-level module for the ICN active ISDN-Card.
*
* Copyright 1994 by Fritz Elfert (fritz@wuemaus.franken.de)
* Copyright 1995 Thinking Objects Software GmbH Wuerzburg
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -19,6 +20,9 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.10 1995/03/25 23:23:24 fritz
* Changed configurable Ports, to allow settings for DIP-Switch Cardversions.
*
* Revision 1.9 1995/03/25 23:17:30 fritz
* Fixed race-condition in pollbchan_send
*
@ -437,7 +441,7 @@ pollcard(unsigned long dummy) {
if (!strncmp(p,"CIF",3)) {
cmd.command = ISDN_STAT_CINF;
cmd.arg = ch-1;
strcpy(cmd.num,p+3);
strncpy(cmd.num,p+3,sizeof(cmd.num)-1);
cmd.driver = dev->myid;
dev->interface.statcallb(&cmd);
continue;
@ -445,7 +449,7 @@ pollcard(unsigned long dummy) {
if (!strncmp(p,"CAU",3)) {
cmd.command = ISDN_STAT_CAUSE;
cmd.arg = ch-1;
strcpy(cmd.num,p+3);
strncpy(cmd.num,p+3,sizeof(cmd.num)-1);
cmd.driver = dev->myid;
dev->interface.statcallb(&cmd);
continue;
@ -454,7 +458,7 @@ pollcard(unsigned long dummy) {
cmd.command = ISDN_STAT_ICALL;
cmd.driver = dev->myid;
cmd.arg = ch-1;
strcpy(cmd.num,p+6);
strncpy(cmd.num,p+6,sizeof(cmd.num)-1);
dev->interface.statcallb(&cmd);
continue;
}
@ -462,7 +466,7 @@ pollcard(unsigned long dummy) {
cmd.command = ISDN_STAT_ICALL;
cmd.driver = dev->myid;
cmd.arg = ch-1;
strcpy(cmd.num,p+6);
strncpy(cmd.num,p+6,sizeof(cmd.num)-1);
dev->interface.statcallb(&cmd);
continue;
}
@ -470,10 +474,23 @@ pollcard(unsigned long dummy) {
cmd.command = ISDN_STAT_NODCH;
cmd.driver = dev->myid;
cmd.arg = ch-1;
strcpy(cmd.num,p+6);
strncpy(cmd.num,p+6,sizeof(cmd.num)-1);
dev->interface.statcallb(&cmd);
continue;
}
} else {
p = dev->imsg;
if (!strncmp(p,"DRV1.00",7)) {
if (!strncmp(p+7,"TC",2)) {
dev->ptype = ICN_TYPE_1TR6;
printk(KERN_INFO "icn: 1TR6-Protocol loaded and running\n");
}
if (!strncmp(p+7,"EC",2)) {
dev->ptype = ICN_TYPE_EURO;
printk(KERN_INFO "icn: Euro-Protocol loaded and running\n");
}
continue;
}
}
} else {
dev->imsg[dev->iptr] = c;
@ -661,7 +678,6 @@ loadproto(u_char *buffer) {
current->timeout = jiffies + ICN_BOOT_TIMEOUT1;
schedule();
} else {
printk(KERN_INFO "icn: Protocol loaded and running\n");
save_flags(flags);
cli();
init_timer(&dev->st_timer);
@ -763,7 +779,7 @@ command (isdn_ctrl *c) {
ulong a;
ulong flags;
int i;
static char cbuf[60];
char cbuf[60];
switch (c->command) {
case ISDN_CMD_IOCTL:
@ -820,16 +836,20 @@ command (isdn_ctrl *c) {
case ISDN_CMD_DIAL:
if ((c->arg & 255)<ICN_BCH) {
char *p = c->num;
char dial[50];
char dcode[4];
a = c->arg;
if (*p == 's' || *p == 'S') {
/* Dial for SPV */
p++;
sprintf(cbuf,"%02d;DSCA_R%s,07,00,%d\n",(int)(a&255)+1,p,
(int)(a>>8));
strcpy(dcode,"SCA");
} else
/* Normal Dial */
sprintf(cbuf,"%02d;DCAL_R%s,07,00,%d\n",(int)(a&255)+1,p,
(int)(a>>8));
strcpy(dcode,"CAL");
strcpy(dial,p);
p = strchr(dial,',');
*p++ = '\0';
sprintf(cbuf,"%02d;D%s_R%s,07,00,%s\n",(int)(a&255)+1,dcode,dial,p);
i = writecmd(cbuf,strlen(cbuf),0);
}
break;
@ -857,14 +877,22 @@ command (isdn_ctrl *c) {
case ISDN_CMD_SETEAZ:
if (c->arg<ICN_BCH) {
a = c->arg+1;
sprintf(cbuf,"%02d;EAZ%s\n",(int)a,c->num);
if (dev->ptype == ICN_TYPE_EURO) {
if (!strlen(c->num))
return 0;
sprintf(cbuf,"%02d;MSN%s\n",(int)a,c->num);
} else
sprintf(cbuf,"%02d;EAZ%s\n",(int)a,c->num[0]?c->num:"0123456789");
i = writecmd(cbuf,strlen(cbuf),0);
}
break;
case ISDN_CMD_CLREAZ:
if (c->arg<ICN_BCH) {
a = c->arg+1;
sprintf(cbuf,"%02d;EAZC\n",(int)a);
if (dev->ptype == ICN_TYPE_EURO)
sprintf(cbuf,"%02d;MSNC\n",(int)a);
else
sprintf(cbuf,"%02d;EAZC\n",(int)a);
i = writecmd(cbuf,strlen(cbuf),0);
}
break;