mISDNuser/include/mISDNlib.h

403 lines
9.4 KiB
C

#ifndef _mISDN_LIB_H
#define _mISDN_LIB_H
/* API library to use with /dev/mISDN */
/* we need somme extentions */
#define _GNU_SOURCE
typedef unsigned short u16;
#include <sys/types.h>
#include <stdio.h>
#include <linux/mISDNif.h>
#define mISDN_INBUFFER_SIZE 0x20000
#define mISDN_HEADER_LEN 16
#define TIMEOUT_1SEC 1000000
#define TIMEOUT_10SEC 10000000
#define TIMEOUT_INFINIT -1
// extern void xxxxxxxxxx(void);
/* Prototypes from device.c */
/* mISDN_open(void)
*
* opens a mISDN device and allocate buffers for it
*
* parameter:
* none
*
* return:
* the file descriptor or -1 on error and the error cause in errno
*/
extern int mISDN_open(void);
/* mISDN_close(int fid)
*
* close the mISDN device and frees related memory.
*
* parameter:
* fid - file descriptor returned by mISDN_open
*
* return:
* 0 on success or -1 on error and the error cause in errno
*
*/
extern int mISDN_close(int fid);
/* mISDN_read(int fid, void *buf, size_t count, int utimeout)
*
* read one message from device or buffer
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* buf - pointer to readbuffer
* count - maximum length of read data
* utimeout - maximum time in microseconds to wait for data, if -1
* wait until some data is ready
*
* return:
* length of read data or -1 on error and the error cause in errno
*
*/
extern int mISDN_read(int fid, void *buf, size_t count, int utimeout);
/* mISDN_read_frame(int fid, void *buf, size_t count, u_int addr,
* u_int msgtype, int utimeout)
*
* read one message for address (addr) and message type (msgtype)
* from device or buffer
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* buf - pointer to readbuffer
* count - maximum length of read data
* addr - address of frame
* msgtype - message type of frame
* utimeout - maximum time in microseconds to wait for data, if -1
* wait until some data is ready
*
* return:
* length of read data or -1 on error and the error cause in errno
*
*/
extern int mISDN_read_frame(int fid, void *buf, size_t count, u_int addr,
u_int msgtype, int utimeout);
/* mISDN_write(int fid, void *buf, size_t count, int utimeout)
*
* write a message to device
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* buf - pointer to data to write
* count - length of data
* utimeout - maximum time in microseconds to wait for device ready to
* accept new data, if -1 wait until device is ready
*
* return:
* length of written data or -1 on error and the error cause in errno
*
*/
extern int mISDN_write(int fid, void *buf, size_t count, int utimeout);
/* mISDN_write_frame(int fid, void *fbuf, u_int addr, u_int msgtype,
* int dinfo, int dlen, void *dbuf, int utimeout)
*
* write a frame to device
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* fbuf - buffer for frame, caller has to provide a big enougth buffer
* count - length of data
* addr - address for frame
* msgtype - message type of frame
* dinfo - data info parameter
* dlen - len of dbuf data, if negativ it is an error code (dbuf len=0)
* dbuf - pointer to frame payload data
* utimeout - maximum time in microseconds to wait for device ready to
* accept new data, if -1 wait until device is ready
*
* return:
* 0 if successfull or -1 on error and the error cause in errno
*
*/
extern int mISDN_write_frame(int fid, void *fbuf, u_int addr, u_int msgtype,
int dinfo, int dlen, void *dbuf, int utimeout);
/* int mISDN_select(int n, fd_set *readfds, fd_set *writefds,
* fd_set *exceptfds, struct timeval *timeout)
*
* select call which handles mISDN readbuffer
*
* parameters and use see man select
*
*/
extern int mISDN_select(int n, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
/* Prototypes from stack.c */
/* mISDN_get_stack_count(int fid)
*
* get number of ISDN stacks
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
*
* return:
* count of ISDN stacks, negativ values for error
*
*/
extern int mISDN_get_stack_count(int fid);
/* mISDN_get_stack_info(int fid, int stack, void *info, size_t max_len)
*
* get the info about ISDN stack
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* stack - ID of the stack
* info - buffer to store info
* max_len - size of above buffer
*
* return:
* length of stored info, negativ values are errors
*
*/
extern int mISDN_get_stack_info(int fid, int stack, void *info, size_t max_len);
/* mISDN_new_stack(int fid, stack_info_t *s_info)
*
* create a new stack
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* s_info - info for the new stack
*
* return:
* stack id or negativ error code
*
*/
extern int mISDN_new_stack(int fid, stack_info_t *s_info);
/* mISDN_set_stack(int fid, int stack, mISDN_pid_t *pid)
*
* setup a stack for the given protocol
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* stack - stack id
* pid - description of the stack protocol
*
* return:
* 0 on sucess other values are errors
*
*/
extern int mISDN_set_stack(int fid, int stack, mISDN_pid_t *pid);
/* mISDN_clear_stack(int fid, int stack)
*
* clear the protocol stack
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* stack - stack id
*
* return:
* 0 on sucess other values are errors
*
*/
extern int mISDN_clear_stack(int fid, int stack);
/* mISDNprint_stack_info(FILE *file, stack_info_t *s_info)
*
* print out the stack_info in readable output
*
* parameter:
* file - stream to print to
* s_info - stack_info
*
* return:
* nothing
*
*/
extern void mISDNprint_stack_info(FILE *file, stack_info_t *s_info);
/* Prototypes from layer.c */
/* mISDN_get_layerid(int fid, int stack, int layer)
*
* get the id of the layer given by stack and layer number
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* stack - ID of the stack
* layer - layer number
*
* return:
* layer id or negativ error code
*
*/
extern int mISDN_get_layerid(int fid, int stack, int layer);
/* mISDN_new_layer(int fid, layer_info_t *l_info)
*
* create a new layer
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* l_info - info for the layer
*
* return:
* layer id or negativ error code
*
*/
extern int mISDN_new_layer(int fid, layer_info_t *l_info);
/* mISDN_connect(int fid, interface_info_t *i_info)
*
* create a new connection
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* i_info - info for the connection
*
* return:
* 0 on success or error code
*
*/
extern int mISDN_connect(int fid, interface_info_t *i_info);
/* mISDN_get_layer_info(int fid, int lid, void *info, size_t max_len)
*
* get the info about ISDN layer
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* lid - ID of the layer
* info - buffer to store info
* max_len - size of above buffer
*
* return:
* length of stored info, negativ values are errors
*
*/
extern int mISDN_get_layer_info(int fid, int lid, void *info, size_t max_len);
/* mISDN_get_interface_info(int fid, interface_info_t *i_info)
*
* get the info about ISDN layer interface
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* i_info - contains the info about layer (i_info->owner) and
* which interface (i_info->stat) and gives requested info back
*
* return:
* 0 on sucess other values are errors
*
*/
extern int mISDN_get_interface_info(int fid, interface_info_t *i_info);
/* Prototypes and defines for status.c */
/* l1 status_info */
typedef struct _status_info_l1 {
int len;
int typ;
int protocol;
int status;
int state;
int Flags;
int T3;
int delay;
int debug;
} status_info_l1_t;
/* State values for l1 state machine (status_info_l1_t state field) */
extern char *strL1SState[];
/* l2 status_info */
typedef struct _laddr {
u_char A;
u_char B;
} laddr_t;
typedef struct _status_info_l2 {
int len;
int typ;
int protocol;
int state;
int sapi;
int tei;
laddr_t addr;
int maxlen;
u_int flag;
u_int vs;
u_int va;
u_int vr;
int rc;
u_int window;
u_int sow;
int T200;
int N200;
int T203;
int len_i_queue;
int len_ui_queue;
int len_d_queue;
int debug;
int tei_state;
int tei_ri;
int T202;
int N202;
int tei_debug;
} status_info_l2_t;
/* State values for l2 state machine (status_info_l2_t state field) */
extern char *strL2State[];
/* mISDN_get_status_info(int fid, int id, void *info, size_t max_len)
*
* get status infos about layer instances in the ISDN stack
*
* parameter:
* fid - FILE descriptor returned by mISDN_open
* id - ID of the instance
* info - buffer to store info
* max_len - size of above buffer
*
* return:
* length of stored info, negativ values are errors
*
*/
extern int mISDN_get_status_info(int fid, int id, void *info, size_t max_len);
/* mISDNprint_status(FILE *file, status_info_t *si)
*
* print out the status in readable output
*
* parameter:
* file - stream to print to
* s_info - status_info
*
* return:
* 0 on success or -1 if no known status_info
*
*/
extern int mISDNprint_status(FILE *file, status_info_t *si);
/* private functions */
extern int set_wrrd_atomic(int fid);
extern int clear_wrrd_atomic(int fid);
#endif