Fix up some doxygen issues.
[asterisk/asterisk.git] / channels / misdn / isdn_lib.h
1 /*
2  * Chan_Misdn -- Channel Driver for Asterisk
3  *
4  * Interface to mISDN
5  *
6  * Copyright (C) 2004, Christian Richter
7  *
8  * Christian Richter <crich@beronet.com>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 /*! \file 
15  * \brief Interface to mISDN
16  *
17  * \author Christian Richter <crich@beronet.com>
18  */
19
20 #ifndef TE_LIB
21 #define TE_LIB
22
23 #include <mISDNuser/suppserv.h>
24
25 /** For initialization usage **/
26 /* typedef int ie_nothing_t ;*/
27 /** end of init usage **/
28
29
30 /* 
31  * uncomment the following to make chan_misdn create
32  * record files in /tmp/misdn-{rx|tx}-PortChannel format 
33  * */
34
35 /*#define MISDN_SAVE_DATA*/
36
37 #ifdef WITH_BEROEC
38 typedef int beroec_t;
39
40
41 enum beroec_type {
42         BEROEC_FULLBAND=0,
43         BEROEC_SUBBAND,
44         BEROEC_FASTSUBBAND
45 };
46
47 void beroec_init(void);
48 void beroec_exit(void);
49 beroec_t *beroec_new(int tail, enum beroec_type type, int anti_howl,
50                      int tonedisable, int zerocoeff, int adapt, int nlp);
51
52 void beroec_destroy(beroec_t *ec);
53 int beroec_cancel_alaw_chunk(beroec_t *ec, 
54         char *send, 
55         char *receive , 
56         int len);
57
58 int beroec_version(void);
59 #endif
60
61
62
63 enum tone_e {
64         TONE_NONE=0,
65         TONE_DIAL,
66         TONE_ALERTING,
67         TONE_FAR_ALERTING,
68         TONE_BUSY,
69         TONE_HANGUP,
70         TONE_CUSTOM,
71         TONE_FILE
72 };
73
74
75
76 #define MAX_BCHANS 31
77
78 enum bchannel_state {
79         BCHAN_CLEANED=0,
80         BCHAN_EMPTY,
81         BCHAN_SETUP,
82         BCHAN_SETUPED,
83         BCHAN_ACTIVE,
84         BCHAN_ACTIVATED,
85         BCHAN_BRIDGE,
86         BCHAN_BRIDGED,
87         BCHAN_RELEASE,
88         BCHAN_RELEASED,
89         BCHAN_CLEAN,
90         BCHAN_CLEAN_REQUEST,
91         BCHAN_ERROR
92 };
93
94
95 enum misdn_err_e {
96         ENOCHAN=1
97 };
98
99
100 enum mISDN_NUMBER_PLAN {
101         NUMPLAN_UNINITIALIZED=-1,
102         NUMPLAN_INTERNATIONAL=0x1,
103         NUMPLAN_NATIONAL=0x2,
104         NUMPLAN_SUBSCRIBER=0x4,
105         NUMPLAN_UNKNOWN=0x0
106 }; 
107
108
109 enum event_response_e {
110         RESPONSE_IGNORE_SETUP_WITHOUT_CLOSE,
111         RESPONSE_IGNORE_SETUP,
112         RESPONSE_RELEASE_SETUP,
113         RESPONSE_ERR,
114         RESPONSE_OK
115 };
116
117
118 enum event_e {
119         EVENT_NOTHING,
120         EVENT_TONE_GENERATE,
121         EVENT_BCHAN_DATA,
122         EVENT_BCHAN_ACTIVATED,
123         EVENT_BCHAN_ERROR,
124         EVENT_CLEANUP,
125         EVENT_PROCEEDING,
126         EVENT_PROGRESS,
127         EVENT_SETUP,
128         EVENT_ALERTING,
129         EVENT_CONNECT,
130         EVENT_SETUP_ACKNOWLEDGE,
131         EVENT_CONNECT_ACKNOWLEDGE ,
132         EVENT_USER_INFORMATION,
133         EVENT_SUSPEND_REJECT,
134         EVENT_RESUME_REJECT,
135         EVENT_HOLD,
136         EVENT_SUSPEND,
137         EVENT_RESUME,
138         EVENT_HOLD_ACKNOWLEDGE,
139         EVENT_SUSPEND_ACKNOWLEDGE,
140         EVENT_RESUME_ACKNOWLEDGE,
141         EVENT_HOLD_REJECT,
142         EVENT_RETRIEVE,
143         EVENT_RETRIEVE_ACKNOWLEDGE,
144         EVENT_RETRIEVE_REJECT,
145         EVENT_DISCONNECT,
146         EVENT_RESTART,
147         EVENT_RELEASE,
148         EVENT_RELEASE_COMPLETE,
149         EVENT_FACILITY,
150         EVENT_NOTIFY,
151         EVENT_STATUS_ENQUIRY,
152         EVENT_INFORMATION,
153         EVENT_STATUS,
154         EVENT_TIMEOUT,
155         EVENT_DTMF_TONE,
156         EVENT_NEW_L3ID,
157         EVENT_NEW_BC,
158         EVENT_PORT_ALARM,
159         EVENT_NEW_CHANNEL,
160         EVENT_UNKNOWN
161 }; 
162
163
164 enum ie_name_e {
165         IE_DUMMY,
166         IE_LAST
167 };
168
169 enum { /* bearer capability */
170         INFO_CAPABILITY_SPEECH=0,
171         INFO_CAPABILITY_AUDIO_3_1K=0x10 ,
172         INFO_CAPABILITY_AUDIO_7K=0x11 ,
173         INFO_CAPABILITY_VIDEO =0x18,
174         INFO_CAPABILITY_DIGITAL_UNRESTRICTED =0x8,
175         INFO_CAPABILITY_DIGITAL_RESTRICTED =0x09,
176         INFO_CAPABILITY_DIGITAL_UNRESTRICTED_TONES
177 };
178
179 enum { /* progress indicators */
180         INFO_PI_CALL_NOT_E2E_ISDN =0x01,
181         INFO_PI_CALLED_NOT_ISDN =0x02,
182         INFO_PI_CALLER_NOT_ISDN =0x03,
183         INFO_PI_CALLER_RETURNED_TO_ISDN =0x04,
184         INFO_PI_INBAND_AVAILABLE =0x08,
185         INFO_PI_DELAY_AT_INTERF =0x0a,
186         INFO_PI_INTERWORKING_WITH_PUBLIC =0x10,
187         INFO_PI_INTERWORKING_NO_RELEASE =0x11,
188         INFO_PI_INTERWORKING_NO_RELEASE_PRE_ANSWER =0x12,
189         INFO_PI_INTERWORKING_NO_RELEASE_POST_ANSWER =0x13
190 };
191
192 enum { /*CODECS*/
193         INFO_CODEC_ULAW=2,
194         INFO_CODEC_ALAW=3
195 }; 
196
197
198 enum layer_e {
199         L3,
200         L2,
201         L1,
202         UNKNOWN
203 }; 
204
205
206
207 struct misdn_bchannel {
208         struct send_lock *send_lock;
209
210         int dummy;
211
212         int nt;
213         int pri;
214
215         int port;
216         /** init stuff **/
217         int b_stid;
218         /* int b_addr; */
219         int layer_id;
220
221         int layer;
222         
223         /*state stuff*/
224         int need_disconnect;
225         int need_release;
226         int need_release_complete;
227
228         int dec;
229         /** var stuff**/
230         int l3_id;
231         int pid;
232         int ces;
233
234         int restart_channel;
235         int channel;
236         int channel_preselected;
237         
238         int in_use;
239         int cw;
240         int addr;
241
242         char * bframe;
243         int bframe_len;
244         int time_usec;
245         
246         
247         void *astbuf;
248
249         void *misdnbuf;
250
251         int te_choose_channel;
252         int early_bconnect;
253         
254         /* dtmf digit */
255         int dtmf;
256         int send_dtmf;
257
258         /* get setup ack */
259         int need_more_infos;
260
261         /* may there be more infos ?*/
262         int sending_complete;
263
264
265         /* wether we should use jollys dsp or not */
266         int nodsp;
267         
268         /* wether we should use our jitter buf system or not */
269         int nojitter;
270         
271         enum mISDN_NUMBER_PLAN dnumplan;
272         enum mISDN_NUMBER_PLAN rnumplan;
273         enum mISDN_NUMBER_PLAN onumplan;
274         enum mISDN_NUMBER_PLAN cpnnumplan;
275
276         int progress_coding;
277         int progress_location;
278         int progress_indicator;
279
280         struct FacParm fac_in;
281         struct FacParm fac_out;
282
283         /* storing the current AOCD info here */
284         enum FacFunction AOCDtype;
285         union {
286                 struct FacAOCDCurrency currency;
287                 struct FacAOCDChargingUnit chargingUnit;
288         } AOCD;
289         int AOCD_need_export;
290         
291         enum event_e evq;
292         
293         /*** CRYPTING STUFF ***/
294         
295         int crypt;
296         int curprx;
297         int curptx; 
298         char crypt_key[255];
299   
300         int crypt_state;
301     
302         /*char ast_dtmf_buf[255];
303           char misdn_dtmf_buf[255]; */
304   
305         /*** CRYPTING STUFF END***/
306   
307         int active;
308         int upset;
309
310         int generate_tone;
311         int tone_cnt;
312  
313         enum bchannel_state bc_state;
314         enum bchannel_state next_bc_state;
315
316         int conf_id;
317         
318         int holded;
319         int stack_holder;
320
321         int pres;
322         int screen;
323         
324         int capability;
325         int law;
326         /** V110 Stuff **/
327         int rate;
328         int mode;
329
330         int user1;
331         int urate;
332         int hdlc;
333         /* V110 */
334   
335         char display[84];
336         char msn[32];
337         char oad[32];
338         char rad[32];
339         char dad[32];
340         char cad[32];
341         char orig_dad[32];
342         char keypad[32];
343
344         char info_dad[64];
345         char infos_pending[64];
346
347 /*      unsigned char info_keypad[32]; */
348 /*      unsigned char clisub[24]; */
349 /*      unsigned char cldsub[24]; */
350
351         char uu[256];
352         int uulen;
353   
354         int cause;
355         int out_cause;
356   
357         /* struct misdn_bchannel hold_bc; */
358   
359         /** list stuf **/
360
361 #ifdef MISDN_1_2
362         char pipeline[128];
363 #else
364         int ec_enable;
365         int ec_deftaps;
366 #endif
367         
368         int channel_found;
369         
370         int orig;
371
372         int txgain;
373         int rxgain;
374   
375         struct misdn_bchannel *next;
376 };
377
378
379 enum event_response_e (*cb_event) (enum event_e event, struct misdn_bchannel *bc, void *user_data);
380 void (*cb_log) (int level, int port, char *tmpl, ...);
381 int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
382
383 struct misdn_lib_iface {
384         enum event_response_e (*cb_event)(enum event_e event, struct misdn_bchannel *bc, void *user_data);
385         void (*cb_log)(int level, int port, char *tmpl, ...);
386         int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
387 };
388
389 /***** USER IFACE **********/
390
391 void misdn_lib_nt_keepcalls(int kc);
392
393 void misdn_lib_nt_debug_init( int flags, char *file );
394
395 int misdn_lib_init(char *portlist, struct misdn_lib_iface* iface, void *user_data);
396 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event );
397 void misdn_lib_destroy(void);
398
399 void misdn_lib_isdn_l1watcher(int port);
400
401 void misdn_lib_log_ies(struct misdn_bchannel *bc);
402
403 char *manager_isdn_get_info(enum event_e event);
404
405 void misdn_lib_transfer(struct misdn_bchannel* holded_bc);
406
407 struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel, int inout, int dec);
408
409 void manager_bchannel_activate(struct misdn_bchannel *bc);
410 void manager_bchannel_deactivate(struct misdn_bchannel * bc);
411
412 int misdn_lib_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
413
414 void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
415
416 void isdn_lib_update_rxgain (struct misdn_bchannel *bc);
417 void isdn_lib_update_txgain (struct misdn_bchannel *bc);
418 void isdn_lib_update_ec (struct misdn_bchannel *bc);
419 void isdn_lib_stop_dtmf (struct misdn_bchannel *bc);
420
421 int misdn_lib_port_restart(int port);
422 int misdn_lib_pid_restart(int pid);
423 int misdn_lib_send_restart(int port, int channel);
424
425 int misdn_lib_get_port_info(int port);
426
427 int misdn_lib_is_port_blocked(int port);
428 int misdn_lib_port_block(int port);
429 int misdn_lib_port_unblock(int port);
430
431 int misdn_lib_port_is_pri(int port);
432 int misdn_lib_port_is_nt(int port);
433
434 int misdn_lib_port_up(int port, int notcheck);
435
436 int misdn_lib_get_port_down(int port);
437
438 int misdn_lib_get_port_up (int port) ;
439      
440 int misdn_lib_maxports_get(void) ;
441
442 void misdn_lib_release(struct misdn_bchannel *bc);
443
444 int misdn_cap_is_speech(int cap);
445 int misdn_inband_avail(struct misdn_bchannel *bc);
446
447 void manager_ec_enable(struct misdn_bchannel *bc);
448 void manager_ec_disable(struct misdn_bchannel *bc);
449
450 void misdn_lib_send_tone(struct misdn_bchannel *bc, enum tone_e tone);
451
452 void get_show_stack_details(int port, char *buf);
453
454
455 void misdn_lib_tone_generator_start(struct misdn_bchannel *bc);
456 void misdn_lib_tone_generator_stop(struct misdn_bchannel *bc);
457
458
459 void misdn_lib_setup_bc(struct misdn_bchannel *bc);
460
461 void misdn_lib_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
462 void misdn_lib_split_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
463
464 void misdn_lib_echo(struct misdn_bchannel *bc, int onoff);
465
466 int misdn_lib_is_ptp(int port);
467 int misdn_lib_get_maxchans(int port);
468
469 void misdn_lib_reinit_nt_stack(int port);
470
471 #define PRI_TRANS_CAP_SPEECH                                    0x0
472 #define PRI_TRANS_CAP_DIGITAL                                   0x08
473 #define PRI_TRANS_CAP_RESTRICTED_DIGITAL                        0x09
474 #define PRI_TRANS_CAP_3_1K_AUDIO                                0x10
475 #define PRI_TRANS_CAP_7K_AUDIO                                  0x11
476
477
478
479 char *bc_state2str(enum bchannel_state state);
480 void bc_state_change(struct misdn_bchannel *bc, enum bchannel_state state);
481
482 void misdn_dump_chanlist(void);
483
484 void misdn_make_dummy(struct misdn_bchannel *dummybc, int port, int l3id, int nt, int channel);
485
486
487 #endif