From 660653fc06a609905294f3cdfa7330b02ad0fb61 Mon Sep 17 00:00:00 2001 From: markster Date: Wed, 4 Sep 2002 19:55:34 +0000 Subject: Version 0.3.0 from FTP git-svn-id: http://svn.digium.com/svn/zaptel/trunk@102 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- fxstest.c | 19 +++++++++++++++++++ wcfxs.c | 32 ++++++++++++++++++++++++++++++-- wctdm.c | 32 ++++++++++++++++++++++++++++++-- 3 files changed, 79 insertions(+), 4 deletions(-) diff --git a/fxstest.c b/fxstest.c index 9715a1f..13bb24a 100755 --- a/fxstest.c +++ b/fxstest.c @@ -6,8 +6,17 @@ #include #include #include "zaptel.h" +#include "tonezone.h" #include "wcfxs.h" +static int tones[] = { + ZT_TONE_DIALTONE, + ZT_TONE_BUSY, + ZT_TONE_RINGTONE, + ZT_TONE_CONGESTION, + ZT_TONE_DIALRECALL, +}; + int main(int argc, char *argv[]) { int fd; @@ -18,6 +27,7 @@ int main(int argc, char *argv[]) " where cmd is one of:\n" " stats - reports voltages\n" " regdump - dumps ProSLIC registers\n" + " tones - plays a series of tones\n" " ring - rings phone\n"); exit(1); } @@ -35,6 +45,15 @@ int main(int argc, char *argv[]) } else { fprintf(stderr, "Phone is ringing...\n"); } + } else if (!strcasecmp(argv[2], "tones")) { + int x = 0; + for (;;) { + res = tone_zone_play_tone(fd, tones[x]); + if (res) + fprintf(stderr, "Unable to play tone %d\n", tones[x]); + sleep(3); + x=(x+1) % (sizeof(tones) / sizeof(tones[0])); + } } else if (!strcasecmp(argv[2], "stats")) { struct wcfxs_stats stats; res = ioctl(fd, WCFXS_GET_STATS, &stats); diff --git a/wcfxs.c b/wcfxs.c index 9b33b04..228cfcc 100755 --- a/wcfxs.c +++ b/wcfxs.c @@ -279,6 +279,12 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits) { /* Drop chip select */ int x; + wc->ios |= BIT_SCLK; + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); wc->ios &= ~BIT_CS; outb(wc->ios, wc->ioaddr + WC_AUXD); for (x=0;x<8;x++) { @@ -289,9 +295,13 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits) wc->ios &= ~BIT_SDI; wc->ios &= ~BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); /* Now raise SCLK high again and repeat */ wc->ios |= BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); bits <<= 1; } /* Finally raise CS back high again */ @@ -300,21 +310,29 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits) outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); } static inline unsigned char read_8bits(struct wcfxs *wc) { unsigned char res=0, c; int x; + wc->ios |= BIT_SCLK; + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); /* Drop chip select */ wc->ios &= ~BIT_CS; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); for (x=0;x<8;x++) { res <<= 1; /* Get SCLK */ wc->ios &= ~BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); - + outb(wc->ios, wc->ioaddr + WC_AUXD); /* Read back the value */ c = inb(wc->ioaddr + WC_AUXR); if (c & BIT_SDO) @@ -322,6 +340,9 @@ static inline unsigned char read_8bits(struct wcfxs *wc) /* Now raise SCLK high again */ wc->ios |= BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); } /* Finally raise CS back high again */ wc->ios |= BIT_CS; @@ -329,6 +350,8 @@ static inline unsigned char read_8bits(struct wcfxs *wc) outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); + wc->ios &= ~BIT_SCLK; + outb(wc->ios, wc->ioaddr + WC_AUXD); /* And return our result */ return res; @@ -500,10 +523,12 @@ static int wcfxs_proslic_insane(struct wcfxs *wc, int card) if (debug) printk("ProSLIC on module %d, product %d, version %d\n", card, (blah & 0x30) >> 4, (blah & 0xf)); +#if 0 if ((blah & 0x30) >> 4) { printk("ProSLIC on module %d is not a 3210.\n", card); return -1; } +#endif if ((blah & 0xf) < 3) { printk("ProSLIC 3210 version %d is too old\n", blah & 0xf); return -1; @@ -511,7 +536,7 @@ static int wcfxs_proslic_insane(struct wcfxs *wc, int card) blah = wcfxs_getreg(wc, card, 8); if (blah != 0x2) { - printk("ProSLIC on module %d insane (1)\n", card); + printk("ProSLIC on module %d insane (1) %d should be 2\n", card, blah); return -1; } @@ -1237,3 +1262,6 @@ MODULE_LICENSE("GPL"); module_init(wcfxs_init); module_exit(wcfxs_cleanup); + + + diff --git a/wctdm.c b/wctdm.c index 9b33b04..228cfcc 100755 --- a/wctdm.c +++ b/wctdm.c @@ -279,6 +279,12 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits) { /* Drop chip select */ int x; + wc->ios |= BIT_SCLK; + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); wc->ios &= ~BIT_CS; outb(wc->ios, wc->ioaddr + WC_AUXD); for (x=0;x<8;x++) { @@ -289,9 +295,13 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits) wc->ios &= ~BIT_SDI; wc->ios &= ~BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); /* Now raise SCLK high again and repeat */ wc->ios |= BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); bits <<= 1; } /* Finally raise CS back high again */ @@ -300,21 +310,29 @@ static inline void write_8bits(struct wcfxs *wc, unsigned char bits) outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); } static inline unsigned char read_8bits(struct wcfxs *wc) { unsigned char res=0, c; int x; + wc->ios |= BIT_SCLK; + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); /* Drop chip select */ wc->ios &= ~BIT_CS; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); for (x=0;x<8;x++) { res <<= 1; /* Get SCLK */ wc->ios &= ~BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); - + outb(wc->ios, wc->ioaddr + WC_AUXD); /* Read back the value */ c = inb(wc->ioaddr + WC_AUXR); if (c & BIT_SDO) @@ -322,6 +340,9 @@ static inline unsigned char read_8bits(struct wcfxs *wc) /* Now raise SCLK high again */ wc->ios |= BIT_SCLK; outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); + outb(wc->ios, wc->ioaddr + WC_AUXD); } /* Finally raise CS back high again */ wc->ios |= BIT_CS; @@ -329,6 +350,8 @@ static inline unsigned char read_8bits(struct wcfxs *wc) outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); outb(wc->ios, wc->ioaddr + WC_AUXD); + wc->ios &= ~BIT_SCLK; + outb(wc->ios, wc->ioaddr + WC_AUXD); /* And return our result */ return res; @@ -500,10 +523,12 @@ static int wcfxs_proslic_insane(struct wcfxs *wc, int card) if (debug) printk("ProSLIC on module %d, product %d, version %d\n", card, (blah & 0x30) >> 4, (blah & 0xf)); +#if 0 if ((blah & 0x30) >> 4) { printk("ProSLIC on module %d is not a 3210.\n", card); return -1; } +#endif if ((blah & 0xf) < 3) { printk("ProSLIC 3210 version %d is too old\n", blah & 0xf); return -1; @@ -511,7 +536,7 @@ static int wcfxs_proslic_insane(struct wcfxs *wc, int card) blah = wcfxs_getreg(wc, card, 8); if (blah != 0x2) { - printk("ProSLIC on module %d insane (1)\n", card); + printk("ProSLIC on module %d insane (1) %d should be 2\n", card, blah); return -1; } @@ -1237,3 +1262,6 @@ MODULE_LICENSE("GPL"); module_init(wcfxs_init); module_exit(wcfxs_cleanup); + + + -- cgit v1.2.3