root/sample/sched/ftdmsched.c

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

DEFINITIONS

This source file includes following definitions.
  1. trap
  2. handle_heartbeat
  3. main

   1 #define _GNU_SOURCE
   2 #include <stdio.h>
   3 #include <stdlib.h>
   4 #include <signal.h>
   5 #include "../../src/include/private/ftdm_core.h"
   6 
   7 static int running = 1;
   8 
   9 typedef struct custom_data {
  10         ftdm_timer_t *heartbeat_timer;
  11         int beat;
  12         int counter;
  13         ftdm_sched_callback_t callback;
  14         ftdm_sched_t *sched;
  15 } custom_data_t;
  16 
  17 void trap(int signal)
  18 {
  19         running = 0;
  20 }
  21 
  22 void handle_heartbeat(void *usrdata)
  23 {
  24         ftdm_status_t status;
  25         custom_data_t *data = usrdata;
  26 
  27         printf("beep (elapsed %dms count= %d)\n", data->beat, data->counter);
  28         if (data->beat > 1000) {
  29                 data->beat -= 1000;
  30         } else if (data->beat <= 1000 && data->beat > 200) {
  31                 data->beat -= 100;
  32         } else if (data->beat <= 200 && data->beat > 100) {
  33                 if (!data->counter--) {
  34                         data->counter = 5;
  35                         data->beat -= 100;
  36                 }
  37         } else if (data->beat <= 100 && data->beat > 10) {
  38                 if (!data->counter--) {
  39                         data->counter = 10;
  40                         data->beat -= 10;
  41                         if (data->beat == 10) {
  42                                 data->counter = 200;
  43                         }
  44                 }
  45         } else {
  46                 if (!data->counter--) {
  47                         data->counter = 5;
  48                         data->beat--;
  49                 }
  50         }
  51 
  52         if (!data->beat) {
  53                 printf("beeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeep you're dead!\n");
  54                 return;
  55         }
  56 
  57         data->heartbeat_timer = NULL;
  58         status = ftdm_sched_timer(data->sched, "heartbeat", data->beat, data->callback, data, &data->heartbeat_timer);
  59         if (status != FTDM_SUCCESS) {
  60                 fprintf(stderr, "Error creating heartbeat timer\n");
  61                 running = 0;
  62                 return;
  63         }
  64 }
  65 
  66 int main(int argc, char *argv[])
  67 {
  68         ftdm_status_t status;
  69         custom_data_t data;
  70 
  71         ftdm_sched_t *sched;
  72         signal(SIGINT, trap);
  73         
  74         ftdm_global_set_default_logger(FTDM_LOG_LEVEL_DEBUG);
  75 
  76         if (ftdm_global_init() != FTDM_SUCCESS) {
  77                 fprintf(stderr, "Error loading FreeTDM\n");
  78                 exit(-1);
  79         }
  80 
  81         status = ftdm_sched_create(&sched, "testsched");
  82         if (status != FTDM_SUCCESS) {
  83                 fprintf(stderr, "Error creating sched\n");
  84                 exit(-1);
  85         }
  86 
  87         data.sched = sched;
  88         data.counter = 10;
  89         data.beat = 5000;
  90         data.callback = handle_heartbeat;
  91         status = ftdm_sched_timer(sched, "heartbeat", data.beat, data.callback, &data, &data.heartbeat_timer);
  92         if (status != FTDM_SUCCESS) {
  93                 fprintf(stderr, "Error creating heartbeat timer\n");
  94                 exit(-1);
  95         }
  96 
  97         ftdm_sched_free_run(sched);
  98 
  99         while (running) {
 100                 ftdm_sleep(10);
 101         }
 102 
 103         ftdm_global_destroy();
 104 
 105         printf("Done, press any key to die!\n");
 106 
 107         getchar();
 108         return 0;
 109 }
 110 

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