summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2002-09-04 19:55:34 +0000
committermarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2002-09-04 19:55:34 +0000
commit660653fc06a609905294f3cdfa7330b02ad0fb61 (patch)
tree9bb82cec50bccb78161fff1674813e7ccae295b2
parentd02d74bf8ef6149dc5da847c7728b38a1d7c3569 (diff)
Version 0.3.0 from FTP
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@102 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rwxr-xr-xfxstest.c19
-rwxr-xr-xwcfxs.c32
-rwxr-xr-xwctdm.c32
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 <unistd.h>
#include <sys/ioctl.h>
#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);
+
+
+