dtmfascii.c
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:2k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include <sys/ioctl.h>
  5. #include <sys/types.h>
  6. #include <sys/time.h>
  7. #include <signal.h>
  8. #include <unistd.h>
  9. #include <fcntl.h>
  10. #include <asm/errno.h>
  11. #include "ixjuser.h"
  12. void closeall(void);
  13. void getdata(int);
  14. int ixj1, size1, len, cmd;
  15. unsigned long write1;
  16. char buff1[480];
  17. int main(int argc, char *argv[])
  18. {
  19.   char pname1[80], buff1[480];
  20.   int cnt, oflags1, oflags2;
  21.   sprintf(pname1, "/dev/ixj%s", argv[1]);
  22.   ixj1 = open(pname1, O_RDWR);
  23.   atexit(closeall);
  24.   signal(SIGIO, &getdata);
  25.   fcntl(ixj1, F_SETOWN, getpid());
  26.   oflags1 = fcntl(ixj1, F_GETFL);
  27.   fcntl(ixj1, F_SETFL, oflags1 | FASYNC);
  28.   getchar();
  29. }
  30. void closeall(void)
  31. {
  32.   ioctl(ixj1, IXJCTL_DSP_IDLE);
  33.   close(ixj1);
  34. }
  35. void getdata(int x)
  36. {
  37.   fd_set  rfds,wfds,efds;
  38.   struct timeval  tv;
  39.   IXJ_EXCEPTION ixje;
  40.   int nmax, size;
  41.   char buf[480];
  42.   signal(SIGIO, &getdata);
  43. //  nmax = (ixj1 > 0 ? ixj1+1 : 1);
  44.   nmax = ixj1+1;
  45.   FD_ZERO(&rfds);
  46.   FD_ZERO(&wfds);
  47.   FD_ZERO(&efds);
  48.   FD_SET(ixj1, &rfds);
  49.   FD_SET(ixj1, &wfds);
  50.   FD_SET(ixj1, &efds);
  51.   tv.tv_sec = 0;
  52.   tv.tv_usec = 300;
  53.   select(nmax,&rfds, &wfds, &efds, &tv);
  54.   if(FD_ISSET(ixj1,&rfds)) 
  55.   {
  56.     
  57.   }
  58.   if(FD_ISSET(ixj1,&wfds)) 
  59.   {
  60.   }
  61.   if(FD_ISSET(ixj1,&efds)) 
  62.   {
  63.     ixje.bytes = ioctl(ixj1, IXJCTL_EXCEPTION);
  64.     if(ixje.bits.dtmf_ready)
  65.     {
  66.       // Deal with DTMF
  67.       ioctl(ixj1, IXJCTL_CPT_STOP);
  68.       printf("DTMF from card 0 = %cn",ioctl(ixj1, IXJCTL_GET_DTMF_ASCII));
  69.     }
  70.     if(ixje.bits.hookstate)
  71.     {
  72.       if(ioctl(ixj1, IXJCTL_HOOKSTATE))
  73.       {
  74.         ioctl(ixj1, IXJCTL_DIALTONE);
  75.         printf("Off Hookn");
  76.       }
  77.       else
  78.         printf("On Hookn");
  79.     }
  80.     fflush(stdout);
  81.   }
  82. }