summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-12-02 19:45:45 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-12-02 19:45:45 +0000
commitd7cbc587a4bda464ae9336d6f756055b93cf8cca (patch)
treeb62769a8a68dc889b1f91b9cf5e8b0faad0f1255
parent39fb6f44d7f137a6a9625b1afed557f69e438b9a (diff)
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
-rw-r--r--doc/patgen.810
-rw-r--r--doc/pattest.811
-rw-r--r--patgen.c72
-rw-r--r--pattest.c72
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 <http://issues.asterisk.org> .
.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 <dahdi_chan>\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 <DAHDI device>\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 <dahdi_chan>\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 <DAHDI device>\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;