This source file includes following definitions.
- trap
- handle_heartbeat
- 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