diff options
-rwxr-xr-x | pciradio.c | 45 | ||||
-rwxr-xr-x | ztcfg.c | 2 |
2 files changed, 20 insertions, 27 deletions
@@ -157,6 +157,7 @@ struct pciradio { int bursttime[NUM_CHANS]; int bursttimer[NUM_CHANS]; unsigned short present_code[NUM_CHANS]; + unsigned short last_code[NUM_CHANS]; unsigned short rxcode[NUM_CHANS][NUM_CODES + 1]; unsigned short rxclass[NUM_CHANS][NUM_CODES + 1]; unsigned short txcode[NUM_CHANS][NUM_CODES + 1];; @@ -629,12 +630,12 @@ unsigned short txcode; } /* get index for tx code. Will be 0 if not receiving a CT */ myindex = 0; - if (ctrx && (rad->present_code[n])) myindex = rad->present_code[n]; + if (rad->gotrx[n] && ctrx && (rad->present_code[n])) myindex = rad->present_code[n]; /* get actual tx code from array */ txcode = rad->txcode[n][myindex]; if (txcode & 0x8000) dcstx = 1; else if (txcode) cttx = 1; if (rad->radmode[n] & RADMODE_NOENCODE) dcstx = cttx = 0; - if (rad->bursttimer[n]) dcstx = cttx = 0; + if ((!rad->gottx[n]) || rad->bursttimer[n]) dcstx = cttx = 0; saudio_ctrl = 0; saudio_setup = 0; if (dcstx && (!dcsrx)) /* if to transmit DCS */ @@ -828,6 +829,11 @@ static void pciradio_interrupt(int irq, void *dev_id, struct pt_regs *regs) rad->gotrxtimer[x] = rad->debouncetime[x]; } rad->gotrx[x] = gotrx; + if (rad->present_code[x] != rad->last_code[x]) + { + _set_encdec(rad,x); + rad->last_code[x] = rad->present_code[x]; + } for(x = 0; x < rad->nchans; x++) { unsigned char mask = 1 << x; @@ -883,7 +889,14 @@ static void pciradio_interrupt(int irq, void *dev_id, struct pt_regs *regs) if (rad->gotrx[x] != rad->gotrx1[x]) { if (rad->gotrx[x]) { - if (debug) printk("Chan %d got rx (ctcss code %d)\n",x + 1,rad->present_code[x]); + if (debug) + { + if (rad->present_code[x]) + printk("Chan %d got rx (ctcss code %d)\n",x + 1, + cttable_rx[rad->rxcode[x][rad->present_code[x]]].code); + else + printk("Chan %d got rx\n",x + 1); + } zt_qevent_lock(&rad->chans[x], ZT_EVENT_RINGOFFHOOK); } else { if (debug) printk("Chan %d lost rx\n",x + 1); @@ -1325,29 +1338,9 @@ int x; byte1 = 0x3f; byte2 = 0x3f; mx828_command(rad,x, MX828_AUD_CTRL, &byte1, &byte2 ); - byte1 = 0x09; - byte2 = 0xD8; - mx828_command(rad,x, MX828_TX_TONE, &byte1, &byte2 ); - byte1 = 0x35; - byte2 = 0xcb; - mx828_command(rad,x, MX828_RX_TONE, &byte1, &byte2 ); - byte1 = 0x47; - byte2 = 0xc0; - mx828_command(rad,x, MX828_RX_TONE, &byte1, &byte2 ); -#if 0 - byte1 = 0x1e; - byte2 = 0x88; - mx828_command(rad,x, MX828_RX_TONE, &byte1, &byte2 ); - byte1 = 0x23; - byte2 = 0xd8; - mx828_command(rad,x, MX828_RX_TONE, &byte1, &byte2 ); - byte1 = 0x34; - byte2 = 0xcb; - mx828_command(rad,x, MX828_RX_TONE, &byte1, &byte2 ); -#endif - byte1 = 0x80; + byte1 = 0; mx828_command(rad,x, MX828_SAUDIO_SETUP, &byte1, &byte2 ); - byte1 = 0xe0; + byte1 = 0; mx828_command(rad,x, MX828_SAUDIO_CTRL, &byte1, &byte2 ); byte1 = 0xc0; mx828_command(rad,x, MX828_GEN_CTRL, &byte1, &byte2); @@ -1451,7 +1444,7 @@ static int __devinit pciradio_init_one(struct pci_dev *pdev, const struct pci_de rad->readdma = rad->writedma + ZT_MAX_CHUNKSIZE * 8; /* in bytes */ if (pciradio_initialize(rad)) { - printk("pciradio: Unable to intialize FXS\n"); + printk("pciradio: Unable to intialize\n"); /* Set Reset Low */ x=inb(rad->ioaddr + RAD_CNTL); outb((~0x1)&x, rad->ioaddr + RAD_CNTL); @@ -906,7 +906,7 @@ static int rad_chanconfig(char *keyword, char *args) } if (txtones[i]) { - p.radpar = ZT_RADPAR_RXTONE; + p.radpar = ZT_RADPAR_TXTONE; p.index = i; p.data = txtones[i]; if (ind_ioctl(x,fd,ZT_RADIO_SETPARAM,&p) == -1) |