661 lines
26 KiB
C
661 lines
26 KiB
C
/******************************************************************************//**
|
|
* \file wanpipe_api_hdr.h
|
|
* \brief WANPIPE(tm) Driver API Headers and Defines
|
|
*
|
|
* Authors: Nenad Corbic <ncorbic@sangoma.com>
|
|
* David Rokhvarg <davidr@sangoma.com>
|
|
* Alex Fledman <alex@sangoma.com>
|
|
*
|
|
* Copyright (c) 2007 - 08, Sangoma Technologies
|
|
* All rights reserved.
|
|
*
|
|
* * Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of the Sangoma Technologies nor the
|
|
* names of its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY Sangoma Technologies ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL Sangoma Technologies BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* ===============================================================================
|
|
*/
|
|
|
|
#ifndef __WANPIPE_API_HDR__
|
|
#define __WANPIPE_API_HDR__
|
|
|
|
|
|
#pragma pack(1)
|
|
|
|
/*!
|
|
\def WAN_MAX_EVENT_SZ
|
|
\brief Size of wanpipe api header used in tx/rx
|
|
|
|
The WAN_MAX_HDR_SZ is the size of wp_api_event_t structure
|
|
It can be used to confirm compilation problems.
|
|
if (sizeof(wp_api_event_t) != WAN_MAX_HDR_SZ) ...
|
|
*/
|
|
#define WAN_MAX_EVENT_SZ 64
|
|
#define WAN_MAX_EVENT_SZ_UNION WAN_MAX_EVENT_SZ-(sizeof(u_int8_t)*4)-(sizeof(u_int32_t)*2)
|
|
/*!
|
|
\struct wp_api_event
|
|
\brief Wanpipe API Event Structure
|
|
|
|
\typedef wp_api_event_t
|
|
\brief Wanpipe API Event Structure
|
|
\typedef wp_tdm_api_event_t
|
|
\brief Wanpipe API Event Structure
|
|
*/
|
|
typedef struct wp_api_event
|
|
{
|
|
u_int8_t event_type; /*!< Event Type defined in enum wanpipe_tdm_api_events */
|
|
u_int8_t mode; /*!< Mode (Enable/Disable), WP_TDMAPI_EVENT_DISABLE, WP_TDMAPI_EVENT_ENABLE */
|
|
u_int8_t channel; /*!< TDM channel num, integer from 1 to 32 */
|
|
u_int8_t span; /*!< TDM span num, integer from 1 to 255 */
|
|
u_int32_t time_stamp_sec; /*!< timestamp in sec */
|
|
u_int32_t time_stamp_usec; /*!< timestamp in microseconds */
|
|
union {
|
|
struct {
|
|
u_int32_t alarm; /*!< contains bit map of T1/E1 alarms */
|
|
} te1_alarm;
|
|
struct {
|
|
u_int8_t rbs_bits; /*!< contains bit map of T1/E1 rbs bits */
|
|
} te1_rbs;
|
|
struct {
|
|
u_int8_t state; /*!< contains rx hook state: WP_TDMAPI_EVENT_RXHOOK_OFF, WP_TDMAPI_EVENT_RXHOOK_ON */
|
|
u_int8_t sig; /*!< */
|
|
} rm_hook;
|
|
struct {
|
|
u_int8_t state; /*!< Ring state, WP_TDMAPI_EVENT_RING_PRESENT, WP_TDMAPI_EVENT_RING_STOP */
|
|
} rm_ring;
|
|
struct {
|
|
u_int16_t type; /*!< Ring tone type, enum WP_TDMAPI_EVENT_TONE_xxx */
|
|
} rm_tone;
|
|
struct {
|
|
u_int8_t digit; /*!< DTMF: digit */
|
|
u_int8_t port; /*!< DTMF: SOUT/ROUT */
|
|
u_int8_t type; /*!< DTMF: PRESET/STOP */
|
|
} dtmf;
|
|
struct {
|
|
u_int16_t polarity; /*!< */
|
|
u_int16_t ohttimer; /*!< */
|
|
u_int16_t polarity_reverse; /*!< */
|
|
} rm_common;
|
|
struct {
|
|
int32_t gain;
|
|
}rm_gain;
|
|
struct{
|
|
u_int16_t status; /*!< Link Status (connected/disconnnected) */
|
|
} linkstatus;
|
|
struct {
|
|
u_int32_t status; /*!< Serial Modem Status: DCD/CTS */
|
|
} serial;
|
|
unsigned char reserved[WAN_MAX_EVENT_SZ_UNION]; /*!< Padding up to WAN_MAX_EVENT_SZ */
|
|
};
|
|
|
|
/***************************************************//**
|
|
These defines MUST be used to access wp_api_event_t
|
|
structure. The wp_api_event_t should not be accessed
|
|
directly, in order to keep backward compile compatibility.
|
|
*******************************************************/
|
|
#define wp_api_event_type event_type
|
|
#define wp_api_event_mode mode
|
|
#define wp_api_event_channel channel
|
|
#define wp_api_event_span span
|
|
#define wp_api_event_alarm te1_alarm.alarm
|
|
#define wp_api_event_rbs_bits te1_rbs.rbs_bits
|
|
#define wp_api_event_hook_state rm_hook.state
|
|
#define wp_api_event_hook_sig rm_hook.sig
|
|
#define wp_api_event_ring_state rm_ring.state
|
|
#define wp_api_event_tone_type rm_tone.type
|
|
#define wp_api_event_dtmf_digit dtmf.digit
|
|
#define wp_api_event_dtmf_type dtmf.type
|
|
#define wp_api_event_dtmf_port dtmf.port
|
|
#define wp_api_event_ohttimer rm_common.ohttimer
|
|
#define wp_api_event_polarity rm_common.polarity
|
|
#define wp_api_event_polarity_reverse rm_common.polarity_reverse
|
|
#define wp_api_event_link_status linkstatus.status
|
|
#define wp_api_event_serial_status serial.status
|
|
#define wp_api_event_time_stamp_sec time_stamp_sec
|
|
#define wp_api_event_time_stamp_usec time_stamp_usec
|
|
#define wp_api_event_gain_value rm_gain.gain
|
|
} wp_api_event_t;
|
|
|
|
|
|
/***************************************************//**
|
|
* Wanpipe Rx/Tx API Header Structure
|
|
*
|
|
* This is a UNIFIED common API Header structure for all protocols
|
|
* and all APIs.
|
|
*
|
|
* data_length
|
|
* Windows uses this varialbe for data length,
|
|
* Linux legacy uses this variable as time_stamp
|
|
*******************************************************/
|
|
|
|
/*!
|
|
\def WAN_MAX_HDR_SZ
|
|
\brief Size of wanpipe api header used in tx/rx
|
|
|
|
The WAN_MAX_HDR_SZ is the size of wp_api_event_t structure
|
|
It can be used to confirm compilation problems.
|
|
if (sizeof(wp_api_event_t) != WAN_MAX_HDR_SZ) ...
|
|
*/
|
|
#define WAN_MAX_HDR_SZ 64
|
|
#define WAN_MAX_HDR_SZ_UNION WAN_MAX_HDR_SZ-sizeof(u_int8_t)-sizeof(u_int16_t)-(sizeof(u_int32_t)*2)
|
|
|
|
/*!
|
|
\struct wp_api_hdr
|
|
\brief Wanpipe API Header Structure
|
|
|
|
\typedef wp_api_hdr_t
|
|
\brief Wanpipe API Header Structure
|
|
*/
|
|
typedef struct wp_api_hdr
|
|
{
|
|
u_int8_t operation_status; /*!< Status defined in enum SANG_STATUS_T */
|
|
u_int16_t data_length; /*!< Length of tx/rx data packet */
|
|
u_int32_t time_stamp_sec; /*!< timestamp in seconds */
|
|
u_int32_t time_stamp_usec; /*!< timestamp in miliseconds */
|
|
|
|
union {
|
|
/***********************************************//**
|
|
The rx_h and tx_h are to be used with all AFT Hardware
|
|
****************************************************/
|
|
struct {
|
|
u_int16_t crc; /*!< bit map of possible errors: CRC/ABORT/FRAME/DMA */
|
|
u_int8_t max_rx_queue_length; /*!< max data queue configured */
|
|
u_int8_t current_number_of_frames_in_rx_queue; /*!< current buffers in device rx queue */
|
|
u_int32_t errors; /*!< number of rx errors since driver start */
|
|
}rx_h;
|
|
|
|
struct {
|
|
u_int8_t max_tx_queue_length; /*!< max data queue configured */
|
|
u_int8_t current_number_of_frames_in_tx_queue; /*!< current buffers in device tx queue */
|
|
u_int32_t tx_idle_packets; /*!< number of tx idle packes transmitted */
|
|
u_int32_t errors; /*!< number of tx errors since driver start */
|
|
}tx_h;
|
|
|
|
/***********************************************//**
|
|
Defines below are Deprecated and are for
|
|
backward compability
|
|
****************************************************/
|
|
struct {
|
|
u_int8_t status;
|
|
}serial;
|
|
struct {
|
|
u_int8_t exception;
|
|
u_int8_t pf;
|
|
}lapb;
|
|
struct {
|
|
u_int8_t state;
|
|
u_int8_t address;
|
|
u_int16_t exception;
|
|
}xdlc;
|
|
struct {
|
|
u_int8_t channel;
|
|
u_int8_t direction;
|
|
}bitstrm;
|
|
struct {
|
|
u_int8_t channel;
|
|
u_int8_t status;
|
|
}aft_legacy_rbs;
|
|
struct {
|
|
u_int8_t repeat;
|
|
u_int8_t len;
|
|
u_int8_t data[8];
|
|
}rpt;
|
|
struct {
|
|
u_int8_t type;
|
|
u_int8_t force_tx;
|
|
u_int8_t data[8];
|
|
}ss7_hw;
|
|
u_int8_t reserved[WAN_MAX_HDR_SZ_UNION];
|
|
};
|
|
|
|
|
|
/***************************************************//**
|
|
These defines MUST be used to access wp_api_hdr_t
|
|
structure. The wp_api_hdr_t should not be accessed
|
|
directly, in order to keep backward compile compatibility.
|
|
*******************************************************/
|
|
|
|
#define wp_api_hdr_operation_status operation_status
|
|
#define wp_api_hdr_data_length data_length
|
|
#define wp_api_hdr_time_stamp_sec time_stamp_sec
|
|
#define wp_api_hdr_time_stamp_use time_stamp_usec
|
|
|
|
#define wp_api_legacy_rbs_channel aft_legacy_rbs.channel
|
|
#define wp_api_legacy_rbs_status aft_legacy_rbs.status
|
|
|
|
#define wp_api_rx_hdr_crc rx_h.crc
|
|
#define wp_api_rx_hdr_error_map rx_h.crc
|
|
#define wp_api_rx_hdr_max_queue_length rx_h.max_rx_queue_length
|
|
#define wp_api_rx_hdr_number_of_frames_in_queue rx_h.current_number_of_frames_in_rx_queue
|
|
#define wp_api_rx_hdr_time_stamp_sec time_stamp_sec
|
|
#define wp_api_rx_hdr_time_stamp_use time_stamp_usec
|
|
#define wp_api_rx_hdr_errors rx_h.errors
|
|
|
|
#define wp_api_tx_hdr_max_queue_length tx_h.max_tx_queue_length
|
|
#define wp_api_tx_hdr_number_of_frames_in_queue tx_h.current_number_of_frames_in_tx_queue
|
|
#define wp_api_tx_hdr_tx_idle_packets tx_h.tx_idle_packets
|
|
#define wp_api_tx_hdr_time_stamp_sec time_stamp_sec
|
|
#define wp_api_tx_hdr_time_stamp_use time_stamp_usec
|
|
#define wp_api_tx_hdr_errors tx_h.errors
|
|
|
|
/***********************************************//**
|
|
Defines below are Deprecated and are for
|
|
backward compability
|
|
****************************************************/
|
|
|
|
#if !defined(__WINDOWS__)
|
|
#define wp_api_rx_hdr_error_flag operation_status
|
|
#define wp_api_rx_hdr_station operation_status
|
|
#define wp_api_rx_hdr_time_stamp data_length
|
|
#endif
|
|
|
|
#define wp_api_tx_hdr_hdlc_rpt_len rpt.len
|
|
#define wp_api_tx_hdr_hdlc_rpt_data rpt.data
|
|
#define wp_api_tx_hdr_hdlc_rpt_repeat rpt.repeat
|
|
|
|
#define wp_api_tx_hdr_aft_ss7_type ss7_hw.type
|
|
#define wp_api_tx_hdr_aft_ss7_force_tx ss7_hw.force_tx
|
|
#define wp_api_tx_hdr_aft_ss7_data ss7_hw.data
|
|
|
|
/* XDLC Old backdward comptabile */
|
|
#define wp_api_rx_hdr_xdlc_state xdlc.state
|
|
#define wp_api_rx_hdr_xdlc_address xdlc.address
|
|
#define wp_api_rx_hdr_xdlc_exception xdlc.exception
|
|
|
|
#define wan_hdr_xdlc_state xdlc.state
|
|
#define wan_hdr_xdlc_address xdlc.address
|
|
#define wan_hdr_xdlc_exception xdlc.exception
|
|
|
|
/* CHDLC Old backdward comptabile */
|
|
#define wp_api_rx_hdr_chdlc_error_flag wp_api_rx_hdr_error_flag
|
|
#define wp_api_rx_hdr_chdlc_time_stamp wp_api_rx_hdr_time_stamp
|
|
#define wp_api_rx_hdr_chdlc_time_sec time_stamp_sec
|
|
#define wp_api_rx_hdr_chdlc_time_usec time_stamp_usec
|
|
|
|
#define wan_hdr_chdlc_error_flag wp_api_rx_hdr_chdlc_error_flag
|
|
#define wan_hdr_chdlc_time_stamp wp_api_rx_hdr_chdlc_time_stamp
|
|
#define wan_hdr_chdlc_time_sec wp_api_rx_hdr_chdlc_time_sec
|
|
#define wan_hdr_chdlc_time_usec wp_api_rx_hdr_chdlc_time_usec
|
|
|
|
/* BITSTRM Old backdward comptabile */
|
|
#define wp_api_rx_hdr_bitstrm_error_flag wp_api_rx_hdr_error_flag
|
|
#define wp_api_rx_hdr_bitstrm_time_stamp wp_api_rx_hdr_time_stamp
|
|
#define wp_api_rx_hdr_bitstrm_time_sec time_stamp_sec
|
|
#define wp_api_rx_hdr_bitstrm_time_usec time_stamp_usec
|
|
#define wp_api_rx_hdr_bitstrm_channel bitstrm.channel
|
|
#define wp_api_rx_hdr_bitstrm_direction bitstrm.direction
|
|
|
|
#define wan_hdr_bitstrm_error_flag wp_api_rx_hdr_bitstrm_error_flag
|
|
#define wan_hdr_bitstrm_time_stamp wp_api_rx_hdr_bitstrm_data_length
|
|
#define wan_hdr_bitstrm_time_sec wp_api_rx_hdr_bitstrm_time_sec
|
|
#define wan_hdr_bitstrm_time_usec wp_api_rx_hdr_bitstrm_time_usec
|
|
#define wan_hdr_bitstrm_channel wp_api_rx_hdr_bitstrm_channel
|
|
#define wan_hdr_bitstrm_direction wp_api_rx_hdr_bitstrm_direction
|
|
|
|
/* HDLC Old backdward comptabile */
|
|
#define wp_api_rx_hdr_hdlc_error_flag wp_api_rx_hdr_error_flag
|
|
#define wp_api_rx_hdr_hdlc_time_stamp wp_api_rx_hdr_time_stamp
|
|
#define wp_api_rx_hdr_hdlc_time_sec time_stamp_sec
|
|
#define wp_api_rx_hdr_hdlc_time_usec time_stamp_usec
|
|
|
|
#define wan_hdr_hdlc_error_flag wp_api_rx_hdr_error_flag
|
|
#define wan_hdr_hdlc_time_stamp wp_api_rx_hdr_time_stamp
|
|
|
|
/* LAPBS Old backdward comptabile */
|
|
#define wp_api_rx_hdr_lapb_pf lapb.pf
|
|
#define wp_api_rx_hdr_lapb_exception lapb.exception
|
|
#define wp_api_rx_hdr_lapb_time_sec time_stamp_sec
|
|
#define wp_api_rx_hdr_lapb_time_usec time_stamp_usec
|
|
|
|
#define wan_hdr_lapb_pf wp_api_rx_hdr_lapb_pf
|
|
#define wan_hdr_lapb_exception wp_api_rx_hdr_lapb_exception
|
|
|
|
/* FR Old backdward comptabile */
|
|
#define wp_api_rx_hdr_fr_attr wp_api_rx_hdr_error_flag
|
|
#define wp_api_rx_hdr_fr_time_stamp wp_api_rx_hdr_time_stamp
|
|
#define wp_api_rx_hdr_fr_time_sec time_stamp_sec
|
|
#define wp_api_rx_hdr_fr_time_usec time_stamp_usec
|
|
|
|
#define wan_hdr_fr_attr wp_api_rx_hdr_fr_attr
|
|
#define wan_hdr_fr_time_stamp wp_api_rx_hdr_fr_time_stamp
|
|
#define wan_hdr_fr_time_sec wp_api_rx_hdr_fr_time_sec
|
|
#define wan_hdr_fr_time_usec wp_api_rx_hdr_fr_time_usec
|
|
|
|
/* SS7 Legacy Old backdward comptabile */
|
|
#define wp_api_rx_hdr_ss7_legacy_sio wp_api_rx_hdr_error_flag
|
|
#define wp_api_rx_hdr_ss7_legacy_time_stamp wp_api_rx_hdr_time_stamp
|
|
|
|
#define wp_api_rx_hdr_event_serial_status serial.status
|
|
|
|
} wp_api_hdr_t;
|
|
|
|
|
|
/***********************************************//**
|
|
Wanpipe API Element Structure
|
|
****************************************************/
|
|
|
|
/*!
|
|
\def MAX_NO_DATA_BYTES_IN_FRAME
|
|
\brief Maximum tx/rx data size
|
|
*/
|
|
#define MAX_NO_DATA_BYTES_IN_FRAME 8188
|
|
|
|
|
|
/*!
|
|
\struct wp_api_element
|
|
\brief Wanpipe API Element contains header and data
|
|
|
|
The Element Structures are suppose to be used as
|
|
casts to a memory buffer. Windows uses the full
|
|
size of the element structure to allocate the
|
|
acutal memory buffer used as an element structure
|
|
|
|
\typedef wp_api_element_t
|
|
\brief Wanpipe API Element contains header and data
|
|
*/
|
|
|
|
typedef struct wp_api_element{
|
|
|
|
wp_api_hdr_t hdr; /*!< Header structure */
|
|
unsigned char data[MAX_NO_DATA_BYTES_IN_FRAME]; /*!< Maximum Tx/Rx Data buffer structure */
|
|
|
|
/***************************************************//**
|
|
These defines MUST be used to access wp_api_element_t
|
|
structure. The wp_api_element_t should not be accessed
|
|
directly, in order to keep backward compile compatibility.
|
|
*******************************************************/
|
|
|
|
#define wp_api_el_operation_status hdr.wp_api_hdr_operation_status
|
|
#define wp_api_el_data_length hdr.wp_api_hdr_data_length
|
|
#define wp_api_el_time_stamp_sec hdr.wp_api_hdr_time_stamp_sec
|
|
#define wp_api_el_time_stamp_use hdr.wp_api_hdr_time_stamp_use
|
|
|
|
#define wp_api_rx_el_crc hdr.wp_api_rx_hdr_crc
|
|
#define wp_api_rx_el_max_queue_length hdr.wp_api_rx_hdr_max_queue_length
|
|
#define wp_api_rx_el_number_of_frames_in_queue hdr.wp_api_rx_hdr_number_of_frames_in_queue
|
|
|
|
#define wp_api_tx_el_max_queue_length hdr.wp_api_tx_hdr_max_queue_length
|
|
#define wp_api_tx_el_number_of_frames_in_queue hdr.wp_api_tx_hdr_number_of_frames_in_queue
|
|
|
|
} wp_api_element_t;
|
|
|
|
|
|
#pragma pack()
|
|
|
|
|
|
/**************************************************************
|
|
Sangoma Memory descriptors - passed to/from kernel/user space
|
|
***************************************************************/
|
|
|
|
#pragma pack(1)
|
|
|
|
/*!
|
|
\struct wan_iovec
|
|
\brief Memory Descriptor of a single buffer.
|
|
This structure used internally by libsangoma.
|
|
|
|
\typedef wan_iovec_t
|
|
\brief Memory Descriptor of a single buffer.
|
|
This structure used internally by libsangoma.
|
|
*/
|
|
typedef struct wan_iovec
|
|
{
|
|
u_int32_t iov_len;
|
|
|
|
void * WP_POINTER_64 iov_base;
|
|
#ifndef __x86_64__
|
|
u_int32_t reserved;
|
|
#endif
|
|
}wan_iovec_t;
|
|
|
|
/*!
|
|
\struct wan_iovec_list
|
|
\brief Fixed-length List of Memory Descriptors
|
|
|
|
\typedef wan_iovec_list_t
|
|
\brief Fixed-length List of Memory Descriptors
|
|
*/
|
|
#define WAN_IOVEC_LIST_LEN 5
|
|
typedef struct wan_iovec_list
|
|
{
|
|
wan_iovec_t iovec_list[WAN_IOVEC_LIST_LEN];/*!< in 'iovec_list', only buffers with non-NULL 'iov_base' should be accessed */
|
|
|
|
}wan_iovec_list_t;
|
|
|
|
/*!
|
|
\struct wan_msghdr
|
|
\brief Variable-length List of Memory Descriptors
|
|
|
|
\typedef wan_msghdr_t
|
|
\brief Variable-length List of Memory Descriptors
|
|
*/
|
|
typedef struct wan_msghdr {
|
|
u_int32_t msg_iovlen; /*!< Number of blocks */
|
|
wan_iovec_t * WP_POINTER_64 msg_iov; /*!< Data blocks */
|
|
#ifndef __x86_64__
|
|
u_int32_t reserved;
|
|
#endif
|
|
}wan_msghdr_t;
|
|
|
|
#pragma pack()
|
|
|
|
/****************************************************************/
|
|
|
|
/*!
|
|
\struct _API_POLL_STRUCT
|
|
\brief Windows poll structure used to implement blocking poll for read/write/event
|
|
|
|
This structure is only used by WINDOWS code
|
|
|
|
\typedef API_POLL_STRUCT
|
|
\brief Windows poll structure used to implement blocking poll for read/write/event
|
|
*/
|
|
typedef struct _API_POLL_STRUCT
|
|
{
|
|
unsigned char operation_status; /*!< operation completion status, check on return */
|
|
u_int32_t user_flags_bitmap; /*!< bitmap of events API user is interested to receive */
|
|
u_int32_t poll_events_bitmap; /*!< bitmap of events available for API user */
|
|
}API_POLL_STRUCT;
|
|
|
|
|
|
/*!
|
|
\enum SANG_STATUS
|
|
\brief Wanpipe API Return codes.
|
|
|
|
Extra care should be taken when changing SANG_STATUS_xxx definitions
|
|
to keep compatibility with existing binary files!
|
|
|
|
\typedef SANG_STATUS_T
|
|
\brief Wanpipe API Return codes.
|
|
*/
|
|
typedef enum SANG_STATUS
|
|
{
|
|
|
|
SANG_STATUS_SUCCESS=0, /*!< An operation completed successfully */
|
|
|
|
/*************************************//**
|
|
Return codes specific for data reception:
|
|
******************************************/
|
|
SANG_STATUS_RX_DATA_TIMEOUT, /*!< No data was received. NOT an error. */
|
|
SANG_STATUS_RX_DATA_AVAILABLE, /*!< Data was received. */
|
|
SANG_STATUS_NO_DATA_AVAILABLE, /*!< There is no RX data in API receive queue */
|
|
|
|
/*************************************//**
|
|
Return codes specific for data transmission:
|
|
******************************************/
|
|
SANG_STATUS_TX_TIMEOUT, /*!< Transmit command timed out */
|
|
SANG_STATUS_TX_DATA_TOO_LONG, /*!< Longer than MTU */
|
|
SANG_STATUS_TX_DATA_TOO_SHORT, /*!< Shorter than minimum */
|
|
SANG_STATUS_TX_HDR_TOO_SHORT, /*!< Tx Header is too short */
|
|
|
|
/*************************************//**
|
|
Return codes specific for line status:
|
|
******************************************/
|
|
SANG_STATUS_LINE_DISCONNECTED, /*!< Physical line (T1/E1/Serial) is disconnected. */
|
|
SANG_STATUS_PROTOCOL_DISCONNECTED, /*!< The Communication Protocol (CHDLC/Frame Relay/PPP/LAPD...) is disconnected */
|
|
SANG_STATUS_LINE_CONNECTED, /*!< Physical line (T1/E1/Serial) is connected. */
|
|
SANG_STATUS_PROTOCOL_CONNECTED, /*!< The Communication Protocol (CHDLC/Frame Relay/PPP/LAPD...) is connected */
|
|
|
|
/*************************************//**
|
|
Return codes specific for general errors:
|
|
******************************************/
|
|
|
|
SANG_STATUS_COMMAND_ALREADY_RUNNING, /*!< Two threads attempting to access device at the same time. */
|
|
SANG_STATUS_BUFFER_TOO_SMALL, /*!< Buffer passed to API is too small. */
|
|
SANG_STATUS_FAILED_TO_LOCK_USER_MEMORY, /*!< Kernel error */
|
|
SANG_STATUS_FAILED_ALLOCATE_MEMORY, /*!< Memory allocatin failure */
|
|
SANG_STATUS_INVALID_DEVICE_REQUEST, /*!< Command is invalid for device type. */
|
|
SANG_STATUS_INVALID_PARAMETER, /*!< Invalid parameter */
|
|
SANG_STATUS_GENERAL_ERROR, /*!< General interal error */
|
|
SANG_STATUS_DEVICE_BUSY, /*!< Device is busy */
|
|
SANG_STATUS_INVALID_DEVICE, /*!< Invalid device selected */
|
|
SANG_STATUS_IO_ERROR, /*!< IO error on device */
|
|
SANG_STATUS_UNSUPPORTED_FUNCTION, /*!< Unsupported command or function */
|
|
SANG_STATUS_UNSUPPORTED_PROTOCOL, /*!< Unsupported protocol selected */
|
|
SANG_STATUS_DEVICE_ALREADY_EXIST, /*!< Device already exists */
|
|
SANG_STATUS_DEV_INIT_INCOMPLETE, /*!< Device initialization failed or not done */
|
|
SANG_STATUS_TRACE_QUEUE_EMPTY, /*!< Trace queue empty */
|
|
SANG_STATUS_OPTION_NOT_SUPPORTED, /*!< Unsupported command or option */
|
|
|
|
/*************************************//**
|
|
Wanpipe API Event Available
|
|
******************************************/
|
|
SANG_STATUS_API_EVENT_AVAILABLE, /*!< Wanpipe API Event is available */
|
|
|
|
|
|
/*************************************//**
|
|
API Operation Internal errors
|
|
******************************************/
|
|
SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED, /*!< Failed to stop device, already stopped */
|
|
SANG_STATUS_CAN_NOT_RUN_TWO_PORT_CMDS_AT_THE_SAME_TIME, /*!< Failed to execute command, busy due to collision */
|
|
SANG_STATUS_ASSOCIATED_IRP_SYSTEM_BUFFER_NULL_ERROR, /*!< */
|
|
SANG_STATUS_STRUCTURE_SIZE_MISMATCH_ERROR, /*!< Header size mistmatch between user & driver. Recompilation is necessary */
|
|
|
|
|
|
/*************************************//**
|
|
Windows Specific definitions
|
|
******************************************/
|
|
SANG_STATUS_REGISTRY_ERROR=180, /*!< Windows Registry Error */
|
|
SANG_STATUS_IO_PENDING, /*!< Asynchronous IO */
|
|
SANG_STATUS_APIPOLL_TIMEOUT, /*!< API Poll timeout - no events or data */
|
|
SANG_STATUS_NO_FREE_BUFFERS,
|
|
SANG_STATUS_SHARED_EVENT_INIT_ERROR, /*!< Driver can not use 'shared event' supplied by the API user */
|
|
|
|
/****************************************//**
|
|
For internal API use only.
|
|
Range reserved for internal API use start
|
|
*******************************************/
|
|
SANG_STATUS_DATA_QUEUE_EMPTY=190, /*!< queue empty */
|
|
SANG_STATUS_DATA_QUEUE_FULL, /*!< queue empty full */
|
|
SANG_STATUS_INVALID_IRQL /*!< Driver routine was called at invalid IRQL. */
|
|
|
|
}SANG_STATUS_T;
|
|
|
|
/*!
|
|
\def SDLA_DECODE_SANG_STATUS
|
|
\brief Print decode of Sangoma Return Codes
|
|
|
|
*/
|
|
#define SDLA_DECODE_SANG_STATUS(status) \
|
|
(abs((int)status) == SANG_STATUS_SUCCESS) ? "SANG_STATUS_SUCCESS" :\
|
|
(abs((int)status) == SANG_STATUS_COMMAND_ALREADY_RUNNING) ? "SANG_STATUS_COMMAND_ALREADY_RUNNING":\
|
|
(abs((int)status) == SANG_STATUS_BUFFER_TOO_SMALL) ? "SANG_STATUS_BUFFER_TOO_SMALL":\
|
|
(abs((int)status) == SANG_STATUS_FAILED_TO_LOCK_USER_MEMORY) ? "SANG_STATUS_FAILED_TO_LOCK_USER_MEMORY":\
|
|
(abs((int)status) == SANG_STATUS_FAILED_ALLOCATE_MEMORY) ? "SANG_STATUS_FAILED_ALLOCATE_MEMORY":\
|
|
(abs((int)status) == SANG_STATUS_INVALID_DEVICE_REQUEST) ? "SANG_STATUS_INVALID_DEVICE_REQUEST":\
|
|
(abs((int)status) == SANG_STATUS_INVALID_PARAMETER) ? "SANG_STATUS_INVALID_PARAMETER":\
|
|
(abs((int)status) == SANG_STATUS_DATA_QUEUE_EMPTY) ? "SANG_STATUS_DATA_QUEUE_EMPTY":\
|
|
(abs((int)status) == SANG_STATUS_DATA_QUEUE_FULL) ? "SANG_STATUS_DATA_QUEUE_FULL":\
|
|
(abs((int)status) == SANG_STATUS_RX_DATA_TIMEOUT) ? "SANG_STATUS_RX_DATA_TIMEOUT":\
|
|
(abs((int)status) == SANG_STATUS_RX_DATA_AVAILABLE) ? "SANG_STATUS_RX_DATA_AVAILABLE":\
|
|
(abs((int)status) == SANG_STATUS_TX_TIMEOUT) ? "SANG_STATUS_TX_TIMEOUT":\
|
|
(abs((int)status) == SANG_STATUS_TX_DATA_TOO_LONG) ? "SANG_STATUS_TX_DATA_TOO_LONG":\
|
|
(abs((int)status) == SANG_STATUS_TX_DATA_TOO_SHORT) ? "SANG_STATUS_TX_DATA_TOO_SHORT":\
|
|
(abs((int)status) == SANG_STATUS_LINE_DISCONNECTED) ? "SANG_STATUS_LINE_DISCONNECTED":\
|
|
(abs((int)status) == SANG_STATUS_LINE_CONNECTED) ? "SANG_STATUS_LINE_CONNECTED":\
|
|
(abs((int)status) == SANG_STATUS_PROTOCOL_DISCONNECTED) ? "SANG_STATUS_PROTOCOL_DISCONNECTED":\
|
|
(abs((int)status) == SANG_STATUS_PROTOCOL_CONNECTED) ? "SANG_STATUS_PROTOCOL_CONNECTED":\
|
|
(abs((int)status) == SANG_STATUS_GENERAL_ERROR) ? "SANG_STATUS_GENERAL_ERROR":\
|
|
(abs((int)status) == SANG_STATUS_DEVICE_BUSY) ? "SANG_STATUS_DEVICE_BUSY":\
|
|
(abs((int)status) == SANG_STATUS_INVALID_DEVICE) ? "SANG_STATUS_INVALID_DEVICE":\
|
|
(abs((int)status) == SANG_STATUS_IO_ERROR) ? "SANG_STATUS_IO_ERROR":\
|
|
(abs((int)status) == SANG_STATUS_UNSUPPORTED_FUNCTION) ? "SANG_STATUS_UNSUPPORTED_FUNCTION":\
|
|
(abs((int)status) == SANG_STATUS_UNSUPPORTED_PROTOCOL) ? "SANG_STATUS_UNSUPPORTED_PROTOCOL":\
|
|
(abs((int)status) == SANG_STATUS_DEVICE_ALREADY_EXIST) ? "SANG_STATUS_DEVICE_ALREADY_EXIST":\
|
|
(abs((int)status) == SANG_STATUS_DEV_INIT_INCOMPLETE) ? "SANG_STATUS_DEV_INIT_INCOMPLETE":\
|
|
(abs((int)status) == SANG_STATUS_API_EVENT_AVAILABLE) ? "SANG_STATUS_API_EVENT_AVAILABLE":\
|
|
(abs((int)status) == SANG_STATUS_REGISTRY_ERROR) ? "SANG_STATUS_REGISTRY_ERROR":\
|
|
(abs((int)status) == SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED) ? "SANG_STATUS_CAN_NOT_STOP_DEVICE_WHEN_ALREADY_STOPPED":\
|
|
(abs((int)status) == SANG_STATUS_CAN_NOT_RUN_TWO_PORT_CMDS_AT_THE_SAME_TIME) ? "SANG_STATUS_CAN_NOT_RUN_TWO_PORT_CMDS_AT_THE_SAME_TIME":\
|
|
(abs((int)status) == SANG_STATUS_ASSOCIATED_IRP_SYSTEM_BUFFER_NULL_ERROR) ? "SANG_STATUS_ASSOCIATED_IRP_SYSTEM_BUFFER_NULL_ERROR":\
|
|
(abs((int)status) == SANG_STATUS_STRUCTURE_SIZE_MISMATCH_ERROR) ? "SANG_STATUS_STRUCTURE_SIZE_MISMATCH_ERROR":\
|
|
(abs((int)status) == SANG_STATUS_INVALID_IRQL) ? "SANG_STATUS_INVALID_IRQL":\
|
|
(abs((int)status) == SANG_STATUS_NO_DATA_AVAILABLE) ? "SANG_STATUS_NO_DATA_AVAILABLE":\
|
|
(abs((int)status) == SANG_STATUS_IO_PENDING) ? "SANG_STATUS_IO_PENDING":\
|
|
(abs((int)status) == SANG_STATUS_APIPOLL_TIMEOUT) ? "SANG_STATUS_APIPOLL_TIMEOUT":\
|
|
(abs((int)status) == SANG_STATUS_NO_FREE_BUFFERS) ? "SANG_STATUS_NO_FREE_BUFFERS":\
|
|
(abs((int)status) == SANG_STATUS_OPTION_NOT_SUPPORTED) ? "SANG_STATUS_OPTION_NOT_SUPPORTED":\
|
|
"Status Unknown"
|
|
|
|
#define SANG_SUCCESS(status) (status == SANG_STATUS_SUCCESS)
|
|
#define SANG_ERROR(status) (!SANG_SUCCESS(status))
|
|
|
|
#if defined(__WINDOWS__)
|
|
#if defined(WAN_KERNEL) || defined(USE_SANGOMA_ERRNO)
|
|
/*
|
|
Cross-Platform return codes.
|
|
SOME of these return codes are defined in errno.h, but not ALL of them.
|
|
*/
|
|
# undef EFAULT
|
|
# undef EBUSY
|
|
# undef ENODEV
|
|
# undef EINVAL
|
|
# undef EIO
|
|
# undef EPFNOSUPPORT
|
|
# undef EPROTONOSUPPORT
|
|
# undef ENOMEM
|
|
# undef EEXIST
|
|
# undef ENOBUFS
|
|
# undef EOPNOTSUPP
|
|
# undef ENXIO
|
|
# undef EAGAIN
|
|
# undef EFBIG
|
|
|
|
# define ETIMEDOUT SANG_STATUS_GENERAL_ERROR
|
|
# define EFAULT SANG_STATUS_GENERAL_ERROR
|
|
# define EBUSY SANG_STATUS_DEVICE_BUSY
|
|
# define ENODEV SANG_STATUS_INVALID_DEVICE
|
|
# define EINVAL SANG_STATUS_INVALID_PARAMETER
|
|
# define EIO SANG_STATUS_IO_ERROR
|
|
# define EPFNOSUPPORT SANG_STATUS_UNSUPPORTED_FUNCTION
|
|
# define EPROTONOSUPPORT SANG_STATUS_UNSUPPORTED_PROTOCOL
|
|
# define ENOMEM SANG_STATUS_FAILED_ALLOCATE_MEMORY
|
|
# define EEXIST SANG_STATUS_DEVICE_ALREADY_EXIST
|
|
# define ENOBUFS SANG_STATUS_NO_FREE_BUFFERS /* no free tx or rx buffers */
|
|
# define EOPNOTSUPP SANG_STATUS_OPTION_NOT_SUPPORTED
|
|
# define ENXIO EFAULT
|
|
# define ENETDOWN SANG_STATUS_LINE_DISCONNECTED
|
|
# define EAGAIN SANG_STATUS_DEVICE_BUSY
|
|
# define EFBIG SANG_STATUS_TX_DATA_TOO_LONG
|
|
# define EAFNOSUPPORT SANG_STATUS_UNSUPPORTED_FUNCTION
|
|
#endif
|
|
#endif /* __WINDOWS */
|
|
|
|
#endif/* __WANPIPE_API_HDR__ */
|