From d7cbc587a4bda464ae9336d6f756055b93cf8cca Mon Sep 17 00:00:00 2001 From: Tzafrir Cohen Date: Wed, 2 Dec 2009 19:45:45 +0000 Subject: patgen and pattest: channel by number Allow pattest and patgen to get the DAHDI channel by number rather than with an explicit device file. git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@7658 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- doc/patgen.8 | 10 +++++---- doc/pattest.8 | 11 ++++----- patgen.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++------------- pattest.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++------------- 4 files changed, 126 insertions(+), 39 deletions(-) diff --git a/doc/patgen.8 b/doc/patgen.8 index 1e5102e..75d9670 100644 --- a/doc/patgen.8 +++ b/doc/patgen.8 @@ -1,4 +1,4 @@ -.TH patgen 8 "2008-01-08" +.TH patgen 8 "2 Dec 2009" .SH NAME patgen \(em Generates a Pattern for a DAHDI Clear Channel Test .SH SYNOPSIS @@ -18,15 +18,17 @@ channel used by Asterisk. .SH OPTIONS .I dahdi-device .RS -A DAHDI device file. +A DAHDI device. Can be either a device number or an explicit device file +name .RE .SH EXAMPLE patgen /dev/dahdi/5 + patgen 305 + .SH BUGS -Will not work with channels whose number > 249 as they don't have device -files. For a simple workaround, see dahdi_diag.c . +Waiting for you to report them at . .SH SEE ALSO pattest(8), dahdi_cfg(8), asterisk(8). diff --git a/doc/pattest.8 b/doc/pattest.8 index 9fbbd36..ca90686 100644 --- a/doc/pattest.8 +++ b/doc/pattest.8 @@ -1,4 +1,4 @@ -.TH pattest 8 "2008-01-08" +.TH pattest 8 "2 Dec 2009" .SH NAME pattest \(em Tests a Pattern for a DAHDI Clear Channel Test .SH SYNOPSIS @@ -22,16 +22,17 @@ output, all is well. Output is an error message. .SH OPTIONS .I dahdi-device .RS -A DAHDI device file. +A DAHDI device. Can be either a device number or an explicit device file +name .RE .SH EXAMPLE pattest /dev/dahdi/5 -.SH BUGS -Will not work with channels whose number > 249 as they don't have device -files. For a simple workaround, see dahdi_diag.c . + pattest 305 +.RE +.SH BUGS Gives way too many errors when does not get any input. .SH SEE ALSO diff --git a/patgen.c b/patgen.c index 9c8ae9f..e816dd9 100644 --- a/patgen.c +++ b/patgen.c @@ -42,6 +42,19 @@ /* #define BLOCK_SIZE 2048 */ #define BLOCK_SIZE 2041 +#define DEVICE "/dev/dahdi/channel" + +static const char rcsid[] = "$Id$"; +char *prog_name; + +static void usage(void) +{ + fprintf(stderr, "Usage: %s \n", prog_name); + fprintf(stderr, " e.g.: %s /dev/dahdi/55\n", prog_name); + fprintf(stderr, " %s 455\n", prog_name); + fprintf(stderr, "%s version %s\n", prog_name, rcsid); + exit(1); +} void print_packet(unsigned char *buf, int len) { @@ -52,31 +65,60 @@ void print_packet(unsigned char *buf, int len) printf("}\n"); } +int channel_open(char *name, int *bs) +{ + int channo; + int fd; + struct dahdi_params tp; + char *dev; + + channo = atoi(name); + /* channo==0: The user passed a file name to be opened. */ + dev = channo ? DEVICE : name; + + fd = open(dev, O_RDWR, 0600); + + if (fd < 0) { + perror(DEVICE); + return -1; + } + + /* If we got a channel number, get it from /dev/dahdi/channel: */ + if(channo && ioctl(fd, DAHDI_SPECIFY, &channo) < 0) { + perror("SPECIFY"); + return -1; + } + if(ioctl(fd, DAHDI_SET_BLOCKSIZE, bs) < 0) { + perror("SET_BLOCKSIZE"); + return -1; + } + + if (ioctl(fd, DAHDI_GET_PARAMS, &tp)) { + fprintf(stderr, "Unable to get channel parameters\n"); + return -1; + } + + return fd; +} + int main(int argc, char *argv[]) { int fd; int res, res1, x; - struct dahdi_params tp; int bs = BLOCK_SIZE; unsigned char c=0; unsigned char outbuf[BLOCK_SIZE]; + + prog_name = argv[0]; + if (argc < 2) { - fprintf(stderr, "Usage: %s \n", argv[0]); - exit(1); - } - fd = open(argv[1], O_RDWR, 0600); - if (fd < 0) { - fprintf(stderr, "Unable to open %s: %s\n", argv[1], strerror(errno)); - exit(1); - } - if (ioctl(fd, DAHDI_SET_BLOCKSIZE, &bs)) { - fprintf(stderr, "Unable to set block size to %d: %s\n", bs, strerror(errno)); - exit(1); + usage(); } - if (ioctl(fd, DAHDI_GET_PARAMS, &tp)) { - fprintf(stderr, "Unable to get channel parameters\n"); + + fd = channel_open(argv[1], &bs); + if (fd < 0) exit(1); - } + ioctl(fd, DAHDI_GETEVENT); #if 0 print_packet(outbuf, res); diff --git a/pattest.c b/pattest.c index dcd16ff..7e33a5c 100644 --- a/pattest.c +++ b/pattest.c @@ -41,6 +41,19 @@ #include "dahdi_tools_version.h" #define BLOCK_SIZE 2039 +#define DEVICE "/dev/dahdi/channel" + +static const char rcsid[] = "$Id$"; +char *prog_name; + +static void usage(void) +{ + fprintf(stderr, "Usage: %s \n", prog_name); + fprintf(stderr, " e.g.: %s /dev/dahdi/55\n", prog_name); + fprintf(stderr, " %s 455\n", prog_name); + fprintf(stderr, "%s version %s\n", prog_name, rcsid); + exit(1); +} void print_packet(unsigned char *buf, int len) { @@ -51,34 +64,63 @@ void print_packet(unsigned char *buf, int len) printf("}\n"); } +int channel_open(char *name, int *bs) +{ + int channo; + int fd; + struct dahdi_params tp; + char *dev; + + channo = atoi(name); + /* channo==0: The user passed a file name to be opened. */ + dev = channo ? DEVICE : name; + + fd = open(dev, O_RDWR, 0600); + + if (fd < 0) { + perror(DEVICE); + return -1; + } + + /* If we got a channel number, get it from /dev/dahdi/channel: */ + if(channo && ioctl(fd, DAHDI_SPECIFY, &channo) < 0) { + perror("SPECIFY"); + return -1; + } + if(ioctl(fd, DAHDI_SET_BLOCKSIZE, bs) < 0) { + perror("SET_BLOCKSIZE"); + return -1; + } + + if (ioctl(fd, DAHDI_GET_PARAMS, &tp)) { + fprintf(stderr, "Unable to get channel parameters\n"); + return -1; + } + + return fd; +} + int main(int argc, char *argv[]) { int fd; int res, x; - struct dahdi_params tp; int bs = BLOCK_SIZE; unsigned char c=0; unsigned char outbuf[BLOCK_SIZE]; int setup=0; int errors=0; int bytes=0; + + prog_name = argv[0]; + if (argc < 2) { - fprintf(stderr, "Usage: %s \n", argv[0]); - exit(1); - } - fd = open(argv[1], O_RDWR, 0600); - if (fd < 0) { - fprintf(stderr, "Unable to open %s: %s\n", argv[1], strerror(errno)); - exit(1); - } - if (ioctl(fd, DAHDI_SET_BLOCKSIZE, &bs)) { - fprintf(stderr, "Unable to set block size to %d: %s\n", bs, strerror(errno)); - exit(1); + usage(); } - if (ioctl(fd, DAHDI_GET_PARAMS, &tp)) { - fprintf(stderr, "Unable to get channel parameters\n"); + + fd = channel_open(argv[1], &bs); + if (fd < 0) exit(1); - } + ioctl(fd, DAHDI_GETEVENT); for(;;) { res = bs; -- cgit v1.2.3