freeswitch/libs/freetdm/src/testanalog.c

88 lines
1.7 KiB
C
Raw Normal View History

#include "openzap.h"
#include "zap_analog.h"
static void *test_call(zap_thread_t *me, void *obj)
{
zap_channel_t *chan = (zap_channel_t *) obj;
uint8_t frame[1024];
zap_size_t len;
sleep(5);
printf("answer call\n");
zap_set_state_locked(chan, ZAP_CHANNEL_STATE_UP);
while (chan->state == ZAP_CHANNEL_STATE_UP) {
zap_wait_flag_t flags = ZAP_READ;
if (zap_channel_wait(chan, &flags, -1) == ZAP_FAIL) {
break;
}
len = sizeof(frame);
if (flags & ZAP_READ) {
if (zap_channel_read(chan, frame, &len) == ZAP_SUCCESS) {
//printf("WRITE %d\n", len);
zap_channel_write(chan, frame, &len);
} else {
break;
}
}
}
if (chan->state == ZAP_CHANNEL_STATE_UP) {
zap_set_state_locked(chan, ZAP_CHANNEL_STATE_BUSY);
}
printf("call over\n");
}
static ZIO_SIGNAL_CB_FUNCTION(on_signal)
{
printf("got sig [%s]\n", zap_signal_event2str(sigmsg->event_id));
switch(sigmsg->event_id) {
case ZAP_SIGEVENT_START:
zap_set_state_locked(sigmsg->channel, ZAP_CHANNEL_STATE_RING);
printf("launching thread and indicating ring\n");
zap_thread_create_detached(test_call, sigmsg->channel);
break;
default:
break;
}
return ZAP_SUCCESS;
}
int main(int argc, char *argv[])
{
zap_span_t *span;
zap_global_set_default_logger(ZAP_LOG_LEVEL_DEBUG);
if (zap_global_init() != ZAP_SUCCESS) {
fprintf(stderr, "Error loading OpenZAP\n");
exit(-1);
}
printf("OpenZAP loaded\n");
if (zap_span_find("wanpipe", 1, &span) != ZAP_SUCCESS) {
fprintf(stderr, "Error finding OpenZAP span\n");
}
zap_analog_configure_span(span, "us", 2000, 11, on_signal);
zap_analog_start(span);
while(zap_test_flag(span->analog_data, ZAP_ANALOG_RUNNING)) {
sleep(1);
}
zap_global_destroy();
}