root/src/testanalog.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. test_call
  2. FIO_SIGNAL_CB_FUNCTION
  3. handle_SIGINT
  4. main

   1 #include <stdio.h>
   2 #include <stdlib.h>
   3 #include <string.h>
   4 #include "freetdm.h"
   5 
   6 
   7 static void *test_call(ftdm_thread_t *me, void *obj)
   8 {
   9         ftdm_channel_t *chan = (ftdm_channel_t *) obj;
  10         uint8_t frame[1024];
  11         ftdm_size_t len;
  12         char *number = ftdm_strdup("5551212");
  13 
  14         ftdm_sleep(10 * 1000);
  15         
  16         ftdm_log(FTDM_LOG_DEBUG, "answer call and start echo test\n");
  17 
  18         ftdm_channel_call_answer(chan);
  19         ftdm_channel_command(chan, FTDM_COMMAND_SEND_DTMF, number);
  20 
  21         while (ftdm_channel_call_check_answered(chan)) {
  22                 ftdm_wait_flag_t flags = FTDM_READ;
  23                 
  24                 if (ftdm_channel_wait(chan, &flags, -1) == FTDM_FAIL) {
  25                         break;
  26                 }
  27                 len = sizeof(frame);
  28                 if (flags & FTDM_READ) {
  29                         if (ftdm_channel_read(chan, frame, &len) == FTDM_SUCCESS) {
  30                                 //ftdm_log(FTDM_LOG_DEBUG, "WRITE %d\n", len);
  31                                 ftdm_channel_write(chan, frame, sizeof(frame), &len);
  32                         } else {
  33                                 break;
  34                         }
  35                 }
  36         }
  37         
  38         if (ftdm_channel_call_check_answered(chan)) {
  39                 ftdm_channel_call_indicate(chan, FTDM_CHANNEL_INDICATE_BUSY);
  40         }
  41 
  42         ftdm_log(FTDM_LOG_DEBUG, "call over\n");
  43         ftdm_safe_free(number);
  44         return NULL;
  45 }
  46 
  47 static FIO_SIGNAL_CB_FUNCTION(on_signal)
  48 {
  49         ftdm_log(FTDM_LOG_DEBUG, "got sig [%s]\n", ftdm_signal_event2str(sigmsg->event_id));
  50 
  51         switch(sigmsg->event_id) {
  52         case FTDM_SIGEVENT_START:
  53                 ftdm_channel_call_indicate(sigmsg->channel, FTDM_CHANNEL_INDICATE_RING);
  54                 ftdm_log(FTDM_LOG_DEBUG, "launching thread and indicating ring\n");
  55                 ftdm_thread_create_detached(test_call, sigmsg->channel);
  56                 break;
  57         default:
  58                 break;
  59         }
  60 
  61         return FTDM_SUCCESS;
  62 }
  63 
  64 static int R = 0;
  65 #if 0
  66 static void handle_SIGINT(int sig)
  67 {
  68         if (sig);
  69         R = 0;
  70         return;
  71 }
  72 #endif
  73 
  74 int main(int argc, char *argv[])
  75 {
  76         ftdm_span_t *span;
  77         int span_id;
  78         int digit_timeout = 2000;
  79         int max_dialstr = 11;
  80 
  81         if (argc < 2) {
  82                 printf("usage %s <spanno>\n", argv[0]);
  83                 exit(-1);
  84         }
  85 
  86         span_id = atoi(argv[1]);
  87 
  88         ftdm_global_set_default_logger(FTDM_LOG_LEVEL_DEBUG);
  89 
  90         if (ftdm_global_init() != FTDM_SUCCESS) {
  91                 ftdm_log(FTDM_LOG_ERROR, "Error loading FreeTDM\n");
  92                 exit(-1);
  93         }
  94 
  95         ftdm_log(FTDM_LOG_DEBUG, "FreeTDM loaded\n");
  96 
  97         if (ftdm_span_find(span_id, &span) != FTDM_SUCCESS) {
  98                 ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span\n");
  99                 goto done;
 100         }
 101         
 102 
 103         if (ftdm_configure_span(span, "analog", on_signal, 
 104                                                    "tonemap", "us", 
 105                                                    "digit_timeout", &digit_timeout,
 106                                                    "max_dialstr", &max_dialstr,
 107                                                    FTDM_TAG_END
 108                                                    ) != FTDM_SUCCESS) {
 109                 ftdm_log(FTDM_LOG_ERROR, "Error configuring FreeTDM span\n");
 110                 goto done;
 111         }
 112         ftdm_span_start(span);
 113         
 114         R = 1;
 115 
 116         while(ftdm_running() && R) {
 117                 ftdm_sleep(1 * 1000);
 118         }
 119 
 120 done:
 121 
 122         ftdm_global_destroy();
 123         return 0;
 124 }
 125 
 126 /* For Emacs:
 127  * Local Variables:
 128  * mode:c
 129  * indent-tabs-mode:t
 130  * tab-width:4
 131  * c-basic-offset:4
 132  * End:
 133  * For VIM:
 134  * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
 135  */
 136 

/* [<][>][^][v][top][bottom][index][help] */