dtmfread.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.   printf("Sync Mode %dn", ioctl(ixj1, IXJCTL_GET_DTMFSYNCMODE));
  25.   signal(SIGIO, &getdata);
  26.   fcntl(ixj1, F_SETOWN, getpid());
  27.   oflags1 = fcntl(ixj1, F_GETFL);
  28.   fcntl(ixj1, F_SETFL, oflags1 | FASYNC);
  29.   while(!ioctl(ixj1, IXJCTL_HOOKSTATE))
  30.   {
  31.     printf("On Hookr");
  32.   }
  33.   printf("n");
  34.   cnt = -1;
  35.   while(ioctl(ixj1, IXJCTL_HOOKSTATE))
  36.   {
  37.     cmd = ioctl(ixj1, IXJCTL_DTMF_READY);
  38.     if(cmd)
  39.     {
  40.       printf("nDTMF READY = %x", cmd);
  41.       fflush(stdout);
  42.     }
  43.     usleep(40);
  44.   }
  45.   printf("n");
  46.   printf("On Hookn");
  47.   fflush(stdout);
  48. //  getchar();
  49. }
  50. void closeall(void)
  51. {
  52.   ioctl(ixj1, IXJCTL_AEC_STOP);
  53.   close(ixj1);
  54. }
  55. void getdata(int x)
  56. {
  57.   fd_set  rfds,wfds,efds;
  58.   struct timeval  tv;
  59.   int nmax, size;
  60.   char buf[480];
  61.   signal(SIGIO, &getdata);
  62. //  nmax = (ixj1 > 0 ? ixj1+1 : 1);
  63.   nmax = ixj1+1;
  64.   FD_ZERO(&rfds);
  65.   FD_ZERO(&wfds);
  66.   FD_ZERO(&efds);
  67.   FD_SET(ixj1, &rfds);
  68.   FD_SET(ixj1, &wfds);
  69.   FD_SET(ixj1, &efds);
  70.   tv.tv_sec = 0;
  71.   tv.tv_usec = 300;
  72.   select(nmax,&rfds, &wfds, &efds, &tv);
  73.   if(FD_ISSET(ixj1,&rfds)) 
  74.   {
  75.     
  76.   }
  77.   if(FD_ISSET(ixj1,&wfds)) 
  78.   {
  79.   }
  80.   if(FD_ISSET(ixj1,&efds)) 
  81.   {
  82.     // Deal with DTMF
  83.     printf("nDTMF from card 0 = %x",ioctl(ixj1, IXJCTL_GET_DTMF));
  84.     fflush(stdout);
  85.   }
  86. }