38 static u_int32_t poll_events_bitmap = 0;
50 #define TEST_NUMBER_OF_OBJECTS 1
66 unsigned char rx_rbs_bits = WAN_RBS_SIG_A;
68 int application_termination_flag = 0;
79 int read_data(uint32_t dev_index,
wp_api_hdr_t *rx_hdr,
void *rx_buffer,
int rx_buffer_length);
81 int dtmf_event(
sng_fd_t fd,
unsigned char digit,
unsigned char type,
unsigned char port);
82 int rbs_event(
sng_fd_t fd,
unsigned char rbs_bits);
83 int rxhook_event(
sng_fd_t fd,
unsigned char hook_state);
84 int rxring_event(
sng_fd_t fd,
unsigned char ring_state);
85 int ringtrip_event (
sng_fd_t fd,
unsigned char ring_state);
87 int sangoma_print_stats(
sng_fd_t sangoma_dev);
89 int handle_fe_rw (
void);
108 void print_rxdata(
unsigned char *data,
int datalen,
wp_api_hdr_t *hdr);
109 void print_rxdata(
unsigned char *data,
int datalen,
wp_api_hdr_t *hdr)
114 #ifdef WP_API_FEATURE_RX_TX_ERRS
115 err=hdr->wp_api_rx_hdr_errors;
117 printf(
"Data: (Len=%i,Errs=%i)\n",datalen,err);
118 for(i = 0; i < datalen; i++) {
124 printf(
"%02X ", data[i]);
137 int sangoma_print_stats(
sng_fd_t sangoma_dev)
140 unsigned char firm_ver, cpld_ver;
144 memset(&wp_api,0,
sizeof(wp_api));
149 printf(
"sangoma_get_stats(() failed (err: %d (0x%X))!\n", err, err);
153 printf(
"******* OPERATIONAL_STATS *******\n");
155 printf(
"\trx_packets\t: %u\n", stats->rx_packets);
156 printf(
"\ttx_packets\t: %u\n", stats->tx_packets);
157 printf(
"\trx_bytes\t: %u\n", stats->rx_bytes);
158 printf(
"\ttx_bytes\t: %u\n", stats->tx_bytes);
159 printf(
"\trx_errors\t: %u\n", stats->rx_errors);
160 printf(
"\ttx_errors\t: %u\n", stats->tx_errors);
161 printf(
"\trx_dropped\t: %u\n", stats->rx_dropped);
162 printf(
"\ttx_dropped\t: %u\n", stats->tx_dropped);
163 printf(
"\tmulticast\t: %u\n", stats->multicast);
164 printf(
"\tcollisions\t: %u\n", stats->collisions);
166 printf(
"\trx_length_errors: %u\n", stats->rx_length_errors);
167 printf(
"\trx_over_errors\t: %u\n", stats->rx_over_errors);
168 printf(
"\trx_crc_errors\t: %u\n", stats->rx_crc_errors);
169 printf(
"\trx_frame_errors\t: %u\n", stats->rx_frame_errors);
170 printf(
"\trx_fifo_errors\t: %u\n", stats->rx_fifo_errors);
171 printf(
"\trx_missed_errors: %u\n", stats->rx_missed_errors);
173 printf(
"\ttx_aborted_errors: %u\n", stats->tx_aborted_errors);
174 printf(
"\tTx Idle Data\t: %u\n", stats->tx_carrier_errors);
176 printf(
"\ttx_fifo_errors\t: %u\n", stats->tx_fifo_errors);
177 printf(
"\ttx_heartbeat_errors: %u\n", stats->tx_heartbeat_errors);
178 printf(
"\ttx_window_errors: %u\n", stats->tx_window_errors);
180 printf(
"\n\ttx_packets_in_q: %u\n", stats->current_number_of_frames_in_tx_queue);
181 printf(
"\ttx_queue_size: %u\n", stats->max_tx_queue_length);
183 printf(
"\n\trx_packets_in_q: %u\n", stats->current_number_of_frames_in_rx_queue);
184 printf(
"\trx_queue_size: %u\n", stats->max_rx_queue_length);
186 printf(
"\n\trx_events_in_q: %u\n", stats->current_number_of_events_in_event_queue);
187 printf(
"\trx_event_queue_size: %u\n", stats->max_event_queue_length);
188 printf(
"\trx_events: %u\n", stats->rx_events);
189 printf(
"\trx_events_dropped: %u\n", stats->rx_events_dropped);
191 printf(
"\tHWEC tone (DTMF) events counter: %u\n", stats->rx_events_tone);
192 printf(
"*********************************\n");
199 printf(
"\tDriver Version: %u.%u.%u.%u\n",
200 wp_api.
wp_cmd.version.major,
201 wp_api.
wp_cmd.version.minor,
202 wp_api.
wp_cmd.version.minor1,
203 wp_api.
wp_cmd.version.minor2);
210 printf(
"\tFirmware Version: %X\n",
218 printf(
"\tCPLD Version: %X\n",
233 int read_data(uint32_t dev_index,
wp_api_hdr_t *rx_hdr,
void *rx_buffer,
int rx_buffer_length)
238 static int Rx_count= 0;
241 memset(&tdm_api, 0x00,
sizeof(tdm_api));
253 printf(
"Span: %d, Chan: %d: Error receiving data!\n",
254 chan->spanno, chan->channo);
259 #ifdef WP_API_FEATURE_RX_TX_ERRS
260 if (rx_hdr->wp_api_rx_hdr_error_map) {
261 if (rx_hdr->wp_api_rx_hdr_error_map & 1<<WP_FIFO_ERROR_BIT) {
262 printf(
"Span: %d, Chan: %d rx fifo error 0x%02X\n",chan->spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map);
264 if (rx_hdr->wp_api_rx_hdr_error_map & 1<<WP_CRC_ERROR_BIT) {
265 printf(
"Span: %d, Chan: %d rx crc error 0x%02X\n",chan->spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map);
267 if (rx_hdr->wp_api_rx_hdr_error_map & 1<<WP_ABORT_ERROR_BIT) {
268 printf(
"Span: %d, Chan: %d rx abort error 0x%02X\n",chan->spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map);
270 if (rx_hdr->wp_api_rx_hdr_error_map & 1<<WP_FRAME_ERROR_BIT) {
271 printf(
"Span: %d, Chan: %d rx framing error 0x%02X\n",chan->spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map);
273 if (rx_hdr->wp_api_rx_hdr_error_map & 1<<WP_DMA_ERROR_BIT) {
274 printf(
"Span: %d, Chan: %d rx dma error 0x%02X\n",chan->spanno,chan->channo,rx_hdr->wp_api_rx_hdr_error_map);
283 print_rxdata(rx_buffer, Rx_lgth,rx_hdr);
286 if (stats_period && Rx_count % stats_period == 0) {
287 sangoma_print_stats(dev_fd);
291 if(rbs_events == 1 && (Rx_count % 400) == 0){
297 if(rx_rbs_bits == WAN_RBS_SIG_A){
298 rx_rbs_bits = WAN_RBS_SIG_B;
300 rx_rbs_bits = WAN_RBS_SIG_A;
302 printf(
"Writing RBS bits (0x%X)...\n", rx_rbs_bits);
309 if(files_used & RX_FILE_USED){
330 static int Tx_count = 0;
334 printf(
"Repeating Frame\n");
336 tx_hdr->wp_api_tx_hdr_hdlc_rpt_len=4;
337 memset(tx_hdr->wp_api_tx_hdr_hdlc_rpt_data,Tx_count,4);
350 printf(
"Span: %d, Chan: %d: Failed to send %s!\n",
352 chan->channo, strerror(errno));
358 printf(
"Packet sent: counter: %i, len: %i, errors %i\n", Tx_count, err, tx_hdr->wp_api_tx_hdr_errors);
360 if(Tx_count && (!(Tx_count % 1000))){
361 printf(
"Packet sent: counter: %i, len: %i\n", Tx_count, err);
370 if(tx_cnt && Tx_count >= tx_cnt){
372 printf(
"Disabling POLLOUT...\n");
396 memset(&rxhdr, 0,
sizeof(rxhdr));
399 printf(
"%s(): span: %d, chan: %d\n", __FUNCTION__,
400 sangoma_wait_objects[dev_index].span, sangoma_wait_objects[dev_index].chan);
403 if(flags_out & POLLIN){
412 if( (flags_out & POLLOUT) && write_enable ){
415 static unsigned char tx_test_byte = 2;
417 memset(&txhdr, 0,
sizeof(txhdr));
423 err =
write_data(dev_index, &txhdr, txdata, tx_size);
438 printf(
"%s(): span: %d, chan: %d\n", __FUNCTION__,
439 wp_tdm_api_event->
span, wp_tdm_api_event->
channel);
441 switch(wp_tdm_api_event->wp_api_event_type)
444 printf(
"DTMF Event: Channel: %d, Digit: %c (Port: %s, Type:%s)!\n",
446 wp_tdm_api_event->wp_api_event_dtmf_digit,
447 (wp_tdm_api_event->wp_api_event_dtmf_port == WAN_EC_CHANNEL_PORT_ROUT)?
"ROUT":
"SOUT",
448 (wp_tdm_api_event->wp_api_event_dtmf_type == WAN_EC_TONE_PRESENT)?
"PRESENT":
"STOP");
451 case WP_API_EVENT_RXHOOK:
452 printf(
"RXHOOK Event: Channel: %d, %s! (0x%X)\n",
454 WAN_EVENT_RXHOOK_DECODE(wp_tdm_api_event->wp_api_event_hook_state),
455 wp_tdm_api_event->wp_api_event_hook_state);
458 case WP_API_EVENT_RING_DETECT:
459 printf(
"RING Event: %s! (0x%X)\n",
460 WAN_EVENT_RING_DECODE(wp_tdm_api_event->wp_api_event_ring_state),
461 wp_tdm_api_event->wp_api_event_ring_state);
464 case WP_API_EVENT_RING_TRIP_DETECT:
465 printf(
"RING TRIP Event: %s! (0x%X)\n",
466 WAN_EVENT_RING_TRIP_DECODE(wp_tdm_api_event->wp_api_event_ring_state),
467 wp_tdm_api_event->wp_api_event_ring_state);
471 printf(
"RBS Event: Channel: %d, 0x%X!\n",
473 wp_tdm_api_event->wp_api_event_rbs_bits);
474 printf(
"RX RBS: A:%1d B:%1d C:%1d D:%1d\n",
475 (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_A) ? 1 : 0,
476 (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_B) ? 1 : 0,
477 (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_C) ? 1 : 0,
478 (wp_tdm_api_event->wp_api_event_rbs_bits & WAN_RBS_SIG_D) ? 1 : 0);
481 case WP_API_EVENT_LINK_STATUS:
482 printf(
"Link Status Event: %s! (0x%X)\n",
483 WAN_EVENT_LINK_STATUS_DECODE(wp_tdm_api_event->wp_api_event_link_status),
484 wp_tdm_api_event->wp_api_event_link_status);
487 case WP_API_EVENT_ALARM:
488 printf(
"New Alarm State: %s! (0x%X)\n", (wp_tdm_api_event->wp_api_event_alarm == 0?
"Off":
"On"),
489 wp_tdm_api_event->wp_api_event_alarm);
492 case WP_API_EVENT_POLARITY_REVERSE:
493 printf(
"Polarity Reversal Event : %s! (0x%X)\n",
495 wp_tdm_api_event->wp_api_event_polarity_reverse);
499 printf(
"Unknown TDM API Event: %d\n", wp_tdm_api_event->wp_api_event_type);
519 printf(
"%s(): dev_index: %d, dev_fd: 0x%p\n", __FUNCTION__, dev_index, dev_fd);
522 memset(&tdm_api, 0x00,
sizeof(tdm_api));
533 int handle_fe_rw (
void)
542 fprintf(stderr,
"Error, sangoma_fe_reg_read failed %i\n",err);
546 printf(
"FE READ Reg=0x%04X Data=%02X\n", fe_read_reg,data);
551 printf(
"FE WRITE Reg=0x%04X Data=%02X\n", fe_write_reg,fe_write_data);
555 fprintf(stderr,
"Error, sangoma_fe_reg_write failed %i\n",err);
582 printf(
"\n\nSpan/Chan Handler: RxEnable=%s, TxEnable=%s, TxCnt=%i, TxLen=%i, rx2tx=%s\n",
583 (read_enable?
"Yes":
"No"), (write_enable?
"Yes":
"No"),tx_cnt,tx_size, (rx2tx?
"Yes":
"No"));
585 for (i = 0; i < open_device_counter; i++) {
586 input_flags[i] = poll_events_bitmap;
590 while(!application_termination_flag)
592 iResult = sangoma_waitfor_many(sangoma_wait_objects,
595 open_device_counter ,
603 sangoma_print_stats(dev_fd);
609 for(i = 0; i < open_device_counter; i++){
612 if(output_flags[i] & POLLPRI){
615 printf(
"Error in handle_tdm_event()!\n");
616 application_termination_flag=1;
621 if(output_flags[i] & (POLLIN | POLLOUT)){
624 printf(
"Error in handle_data()!\n");
655 return fwrite(data, 1, data_length, pRxFile);
666 printf(
"\nProcess terminated by user request.\n");
667 application_termination_flag = 1;
681 printf(
"\nProcess terminated by user request.\n");
682 application_termination_flag = 1;
702 sangoma_wait_obj_t *sng_wait_object;
708 sng_wait_object = sangoma_wait_objects[dev_no];
709 if(!sng_wait_object){
713 printf(
"%s(): span: %d, chan: %d ...\n", __FUNCTION__,
718 memset(&tdm_api, 0x00,
sizeof(tdm_api));
720 if(dtmf_enable_octasic == 1){
725 if(dtmf_enable_remora == 1){
730 if(remora_hook == 1){
762 int span, chan, err = 0, open_dev_cnt = 0;
767 span = wanpipe_port_no;
768 chan = wanpipe_if_no;
777 printf(
"Warning: Failed to open span %d, chan %d\n", span , chan);
780 printf(
"Successfuly opened span %d, chan %d\n", span , chan);
783 memset(&tdm_api, 0x00,
sizeof(tdm_api));
787 printf(
"Error: Failed to create 'sangoma_wait_object'!\n");
790 sangoma_channels[open_dev_cnt].channo = chan;
791 sangoma_channels[open_dev_cnt].spanno = span;
792 sangoma_wait_obj_set_context(sangoma_wait_objects[open_dev_cnt], &sangoma_channels[open_dev_cnt]);
799 if(set_codec_slinear){
800 printf(
"Setting SLINEAR codec\n");
807 printf(
"Disabling codec\n");
814 printf(
"Setting user period: %d\n", usr_period);
821 printf(
"Setting rx gain : %f\n", rx_gain);
822 if (sangoma_set_rx_gain(dev_fd,&tdm_api,rx_gain)) {
828 printf(
"Setting tx gain : %f\n", rx_gain);
829 if (sangoma_set_tx_gain(dev_fd,&tdm_api,tx_gain)) {
834 if(set_codec_slinear || usr_period || set_codec_none){
841 if(dtmf_enable_octasic == 1){
842 poll_events_bitmap |= POLLPRI;
849 if(dtmf_enable_remora == 1){
850 poll_events_bitmap |= POLLPRI;
857 if(remora_hook == 1){
858 poll_events_bitmap |= POLLPRI;
865 poll_events_bitmap |= POLLPRI;
870 if (buffer_multiplier) {
871 printf(
"Setting buffer multiplier to %i\n",buffer_multiplier);
877 if (ss7_cfg_status) {
879 printf(
"Getting ss7 cfg status\n");
884 printf(
"SS7 HW Configuratoin\n");
885 printf(
"SS7 hw support = %s\n",ss7_hw_status.ss7_hw_enable?
"Enabled":
"Disabled");
886 printf(
"SS7 hw mode = %s\n",ss7_hw_status.ss7_hw_mode?
"4096":
"128");
887 printf(
"SS7 hw lssu size = %d\n",ss7_hw_status.ss7_hw_lssu_size);
888 printf(
"SS7 driver repeat= %s\n",ss7_hw_status.ss7_driver_repeat?
"Enabled":
"Disabled");
892 sangoma_print_stats(dev_fd);
895 if (flush_stats_test) {
897 sangoma_print_stats(dev_fd);
909 #if defined(__WINDOWS__)
911 started = GetTickCount();
913 struct timeval started, ended;
915 gettimeofday(&started, NULL);
923 printf(
"Error: Bad FE Read 0x00 cnt=%i !!!!!!!!!!! \n",i);
928 printf(
"Error: Bad FE Read Prev Data = 0x%X cnt=%i !!!!!!!!!!!!\n",prev_data,i);
933 #if defined(__WINDOWS__)
934 ended = GetTickCount();
936 gettimeofday(&ended, NULL);
939 #if defined(__WINDOWS__)
940 elapsed = ended - started;
942 elapsed = (((ended.tv_sec * 1000) + ended.tv_usec / 1000) - ((started.tv_sec * 1000) + started.tv_usec / 1000));
945 if (elapsed > 5000) {
946 printf(
"FE Reg 0xF8 = Prev Data = 0x%X int_cnt=%08i tot_cnt %08i\n",prev_data,elapsed_cnt,i);
947 #if defined(__WINDOWS__)
948 started = GetTickCount();
950 gettimeofday(&started, NULL);
959 printf(
"Device Config RxQ=%i TxQ=%i \n",
968 printf(
"Device Config RxQ=%i TxQ=%i \n",
974 sangoma_print_stats(dev_fd);
981 static int sangoma_hardware_rescan(
void)
984 #ifdef WP_API_FEATURE_HARDWARE_RESCAN
987 port_management_struct_t port;
990 printf(
"Hardware Rescan failed to open driver ctrl\n");
994 memset(&port,0,
sizeof(port));
998 printf(
"Hardware Rescan error %i\n",err);
1002 printf(
"Hardware Rescan: Detected Devices %i\n",cnt);
1023 proceed=init_args(argc,argv);
1024 if (proceed != WAN_TRUE){
1029 if (hw_pci_rescan) {
1034 return sangoma_hardware_rescan();
1038 #if defined(__WINDOWS__)
1040 printf(
"ERROR : Unable to register terminate handler ( %d ).\nProcess terminated.\n",
1050 sangoma_wait_objects[i] = NULL;
1053 poll_events_bitmap = 0;
1054 if(read_enable == 1){
1055 poll_events_bitmap |= POLLIN;
1058 if(write_enable == 1 && rx2tx == 1){
1064 if(write_enable == 1){
1065 poll_events_bitmap |= POLLOUT;
1069 poll_events_bitmap |= (POLLHUP | POLLPRI);
1070 #if defined(__WINDOWS__)
1071 printf(
"Enabling Poll Events:\n");
1072 print_poll_event_bitmap(poll_events_bitmap);
1074 printf(
"Connecting to Port/Span: %d, Interface/Chan: %d\n",
1075 wanpipe_port_no, wanpipe_if_no);
1082 printf(
"********************************\n");
1083 printf(
"files_used: 0x%x\n", files_used);
1084 printf(
"********************************\n");
1085 if(files_used & RX_FILE_USED){
1086 pRxFile = fopen( (
const char*)&rx_file[0],
"wb" );
1087 if(pRxFile == NULL){
1088 printf(
"Can't open Rx file: [%s]!!\n", rx_file);
1090 printf(
"Open Rx file: %s. OK.\n", rx_file);
1094 if (fe_read_cmd || fe_write_cmd) {
1105 printf(
"\nSample application exiting.(press any key)\n");
sng_fd_t _LIBSNG_CALL __sangoma_open_api_span_chan(int span, int chan)
Open a Device based on Span/Chan values.
int _LIBSNG_CALL sangoma_tdm_disable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api)
Disable RX HOOK Events (Analog Only)
#define INVALID_HANDLE_VALUE
Invalid file handle value -1, Ported from Windows.
int _LIBSNG_CALL sangoma_flush_stats(sng_fd_t fd, wanpipe_api_t *tdm_api)
Flush/Reset device statistics.
int _LIBSNG_CALL sangoma_get_full_cfg(sng_fd_t fd, wanpipe_api_t *tdm_api)
Read tdm api device configuration.
Wanpipe API Library header for Sangoma AFT T1/E1/Analog/BRI/Serial Hardware -.
#define FALSE
FALSE value is 0, Ported from Windows.
void cleanup(void)
Protperly shutdown single device.
int _LIBSNG_CALL sangoma_get_driver_version(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_driver_version_t *drv_ver)
Get Device Driver Version Number.
int _LIBSNG_CALL sangoma_read_event(sng_fd_t fd, wanpipe_api_t *tdm_api)
Read API Events.
int write_data_to_file(unsigned char *data, unsigned int data_length)
Write data buffer into a file.
int _LIBSNG_CALL sangoma_tdm_enable_rxhook_events(sng_fd_t fd, wanpipe_api_t *tdm_api)
Enable RX HOOK Events (Analog Only)
sng_fd_t _LIBSNG_CALL sangoma_open_driver_ctrl(int port_no)
Open a Global Driver Control Device.
sng_fd_t _LIBSNG_CALL sangoma_wait_obj_get_fd(sangoma_wait_obj_t *sng_wait_obj)
Get fd device file descriptor which was the 'fd' parameter for sangoma_wait_obj_create(), not useful for generic objects.
#define _getch
get character, Ported from Windows
int _LIBSNG_CALL sangoma_set_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size)
Get Tx Queue Size for this channel.
int _LIBSNG_CALL sangoma_writemsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, unsigned short datalen, int flag)
Write Data to device.
int _LIBSNG_CALL sangoma_get_firmware_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver)
Get Hardware/Firmware Version.
int _LIBSNG_CALL sangoma_set_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api, int size)
Get Tx Queue Size for this channel.
int _LIBSNG_CALL sangoma_tdm_enable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api)
Enable DTMF Detection on Octasic chip (if hw supports it)
int _LIBSNG_CALL sangoma_tdm_disable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api)
Disable DTMF Detection on Analog/Remora SLIC Chip.
int sng_fd_t
Windows/Unix file handle abstraction.
int _LIBSNG_CALL sangoma_tdm_set_usr_period(sng_fd_t fd, wanpipe_api_t *tdm_api, int period)
Set Tx/Rx Period in Milliseconds.
#define __cdecl
Ported from Windows.
Sangoma object associated to some device which cannot be signaled (cannot call sangoma_wait_obj_signa...
#define sangoma_msleep(x)
milisecond sleep function
sng_fd_t _LIBSNG_CALL sangoma_open_api_span_chan(int span, int chan)
Open a Device based on Span/Chan values.
int _LIBSNG_CALL sangoma_get_rx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api)
Get Rx Queue Size for this channel.
TDM API channel statistics.
int handle_data(uint32_t dev_index, int flags_out)
Read data buffer from the device and transmit it back down.
int32_t sangoma_status_t
return status from sangoma APIs
#define SDLA_DECODE_SANG_STATUS(status)
Print decode of Sangoma Return Codes.
int _LIBSNG_CALL sangoma_tdm_disable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api)
Disable RBS Events for a device.
int _LIBSNG_CALL sangoma_readmsg(sng_fd_t fd, void *hdrbuf, int hdrlen, void *databuf, int datalen, int flag)
Read Data from device.
int _LIBSNG_CALL sangoma_fe_reg_write(sng_fd_t fd, uint32_t offset, uint8_t data)
Write to a front end register.
int _LIBSNG_CALL sangoma_tdm_write_rbs(sng_fd_t fd, wanpipe_api_t *tdm_api, int channel, unsigned char rbs)
Write RBS Bits on a device.
Wanpipe API Event Structure.
int _LIBSNG_CALL sangoma_tdm_enable_rm_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api)
Enable DTMF Detection on Analog/Remora SLIC Chip.
sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_create(sangoma_wait_obj_t **sangoma_wait_object, sng_fd_t fd, sangoma_wait_obj_type_t object_type)
Create a wait object that will be used with sangoma_waitfor_many() API.
#define SANGOMA_INIT_TDM_API_CMD(_name_)
Initialize the tdm api cmd structure. Set to 0.
int _LIBSNG_CALL sangoma_driver_hw_rescan(sng_fd_t fd, port_management_struct_t *port_mgmnt, int *cnt)
Rescan the pci and usb bus for newly added hardware.
int handle_tdm_event(uint32_t dev_index)
Read Event buffer from the device.
#define WP_API_EVENT_POLARITY_REVERSE_DECODE(polarity_reverse)
Print out the Polarity state.
#define TEST_NUMBER_OF_OBJECTS
Number of wait objects to define in object array.
int __cdecl main(int argc, char *argv[])
Main function that starts the sample code.
int DWORD
DWORD type is int, Ported from Windows.
int open_sangoma_device(void)
Open a single span chan device.
void handle_span_chan(int open_device_counter)
Write data buffer into a file.
int _LIBSNG_CALL sangoma_get_stats(sng_fd_t fd, wanpipe_api_t *tdm_api, wanpipe_chan_stats_t *stats)
Get Device Statistics. Statistics will be available in tdm_api->wp_cmd.stats structure.
int _LIBSNG_CALL sangoma_tdm_set_codec(sng_fd_t fd, wanpipe_api_t *tdm_api, int codec)
Set TDM Codec per chan.
Wanpipe API Command Structure.
sangoma_status_t _LIBSNG_CALL sangoma_wait_obj_delete(sangoma_wait_obj_t **sangoma_wait_object)
De-allocate all resources in a wait object.
void _LIBSNG_CALL sangoma_close(sng_fd_t *fd)
Close device file descriptor.
int _LIBSNG_CALL sangoma_get_tx_queue_sz(sng_fd_t fd, wanpipe_api_t *tdm_api)
Get Tx Queue Size for this channel.
PVOID _LIBSNG_CALL sangoma_wait_obj_get_context(sangoma_wait_obj_t *sng_wait_obj)
Retrieve the user context (if any) that was set via sangoma_wait_obj_set_context. ...
void TerminateHandler(int)
Signal handler for graceful shutdown.
#define TRUE
TRUE value is 1, Ported from Windows.
int _LIBSNG_CALL sangoma_tdm_enable_rbs_events(sng_fd_t fd, wanpipe_api_t *tdm_api, int poll_in_sec)
Enable RBS Events on a device.
Wanpipe API Header Structure.
int write_data(uint32_t dev_index, wp_api_hdr_t *tx_hdr, void *tx_buffer, int tx_len)
Transmit a data buffer to a device.
int _LIBSNG_CALL sangoma_tdm_set_buffer_multiplier(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned int multiplier)
Set voice tx/rx buffer multiplier.
int _LIBSNG_CALL sangoma_fe_reg_read(sng_fd_t fd, uint32_t offset, uint8_t *data)
Read front end register.
#define MAX_NO_DATA_BYTES_IN_FRAME
Maximum tx/rx data size.
int _LIBSNG_CALL sangoma_ss7_get_cfg_status(sng_fd_t fd, wanpipe_api_t *tdm_api, wan_api_ss7_cfg_status_t *ss7_cfg_status)
Get current ss7 hw configuration.
int _LIBSNG_CALL sangoma_get_cpld_version(sng_fd_t fd, wanpipe_api_t *tdm_api, unsigned char *ver)
Get AFT CPLD Version.
int _LIBSNG_CALL sangoma_flush_bufs(sng_fd_t fd, wanpipe_api_t *tdm_api)
Flush all (tx/rx/event) buffers from current channel.
int _LIBSNG_CALL sangoma_tdm_disable_dtmf_events(sng_fd_t fd, wanpipe_api_t *tdm_api)
Disable DTMF Detection on Octasic chip (if hw supports it)