113 lines
2.3 KiB
C
113 lines
2.3 KiB
C
|
#define _GNU_SOURCE
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <signal.h>
|
||
|
#include "../../src/include/private/ftdm_core.h"
|
||
|
|
||
|
static int running = 1;
|
||
|
|
||
|
typedef struct custom_data {
|
||
|
ftdm_timer_t *heartbeat_timer;
|
||
|
int beat;
|
||
|
int counter;
|
||
|
ftdm_sched_callback_t callback;
|
||
|
ftdm_sched_t *sched;
|
||
|
} custom_data_t;
|
||
|
|
||
|
void trap(int signal)
|
||
|
{
|
||
|
running = 0;
|
||
|
}
|
||
|
|
||
|
void handle_heartbeat(void *usrdata)
|
||
|
{
|
||
|
ftdm_status_t status;
|
||
|
custom_data_t *data = usrdata;
|
||
|
|
||
|
printf("beep (elapsed %dms count= %d)\n", data->beat, data->counter);
|
||
|
if (data->beat > 1000) {
|
||
|
data->beat -= 1000;
|
||
|
} else if (data->beat <= 1000 && data->beat > 200) {
|
||
|
data->beat -= 100;
|
||
|
} else if (data->beat <= 200 && data->beat > 100) {
|
||
|
if (!data->counter--) {
|
||
|
data->counter = 5;
|
||
|
data->beat -= 100;
|
||
|
}
|
||
|
} else if (data->beat <= 100 && data->beat > 10) {
|
||
|
if (!data->counter--) {
|
||
|
data->counter = 10;
|
||
|
data->beat -= 10;
|
||
|
if (data->beat == 10) {
|
||
|
data->counter = 200;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
if (!data->counter--) {
|
||
|
data->counter = 5;
|
||
|
data->beat--;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!data->beat) {
|
||
|
printf("beeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeep you're dead!\n");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
data->heartbeat_timer = NULL;
|
||
|
status = ftdm_sched_timer(data->sched, "heartbeat", data->beat, data->callback, data, &data->heartbeat_timer);
|
||
|
if (status != FTDM_SUCCESS) {
|
||
|
fprintf(stderr, "Error creating heartbeat timer\n");
|
||
|
running = 0;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
ftdm_status_t status;
|
||
|
custom_data_t data;
|
||
|
|
||
|
ftdm_sched_t *sched;
|
||
|
signal(SIGINT, trap);
|
||
|
|
||
|
ftdm_global_set_default_logger(FTDM_LOG_LEVEL_DEBUG);
|
||
|
|
||
|
ftdm_cpu_monitor_disable();
|
||
|
|
||
|
if (ftdm_global_init() != FTDM_SUCCESS) {
|
||
|
fprintf(stderr, "Error loading FreeTDM\n");
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
status = ftdm_sched_create(&sched, "testsched");
|
||
|
if (status != FTDM_SUCCESS) {
|
||
|
fprintf(stderr, "Error creating sched\n");
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
data.sched = sched;
|
||
|
data.counter = 10;
|
||
|
data.beat = 5000;
|
||
|
data.callback = handle_heartbeat;
|
||
|
status = ftdm_sched_timer(sched, "heartbeat", data.beat, data.callback, &data, &data.heartbeat_timer);
|
||
|
if (status != FTDM_SUCCESS) {
|
||
|
fprintf(stderr, "Error creating heartbeat timer\n");
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
ftdm_sched_free_run(sched);
|
||
|
|
||
|
while (running) {
|
||
|
ftdm_sleep(10);
|
||
|
}
|
||
|
|
||
|
ftdm_global_destroy();
|
||
|
|
||
|
printf("Done, press any key to die!\n");
|
||
|
|
||
|
getchar();
|
||
|
return 0;
|
||
|
}
|
||
|
|