added TONE_HANGUP, also added Tone generation by mISDN_dsp for post hangup tones...
[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 #ifndef TE_LIB
15 #define TE_LIB
16
17
18 /** For initialization usage **/
19 /* typedef int ie_nothing_t ;*/
20 /** end of init usage **/
21
22
23
24 enum tone_e {
25         TONE_NONE=0,
26         TONE_DIAL,
27         TONE_ALERTING,
28         TONE_FAR_ALERTING,
29         TONE_BUSY,
30         TONE_HANGUP,
31         TONE_CUSTOM,
32         TONE_FILE
33 };
34
35
36
37 #define MAX_BCHANS 30
38
39 enum bchannel_state {
40         BCHAN_CLEANED=0,
41         BCHAN_EMPTY,
42         BCHAN_SETUP,
43         BCHAN_SETUPED,
44         BCHAN_ACTIVE,
45         BCHAN_ACTIVATED,
46         BCHAN_BRIDGE,
47         BCHAN_BRIDGED,
48         BCHAN_RELEASE,
49         BCHAN_RELEASED,
50         BCHAN_CLEAN,
51         BCHAN_CLEAN_REQUEST,
52         BCHAN_ERROR
53 };
54
55
56 enum misdn_err_e {
57         ENOCHAN=1
58 };
59
60
61 enum mISDN_NUMBER_PLAN {
62         NUMPLAN_UNINITIALIZED=-1,
63         NUMPLAN_INTERNATIONAL=0x1,
64         NUMPLAN_NATIONAL=0x2,
65         NUMPLAN_SUBSCRIBER=0x4,
66         NUMPLAN_UNKNOWN=0x0
67 }; 
68
69
70 enum event_response_e {
71         RESPONSE_IGNORE_SETUP_WITHOUT_CLOSE,
72         RESPONSE_IGNORE_SETUP,
73         RESPONSE_ERR,
74         RESPONSE_OK
75 };
76
77
78 enum event_e {
79         EVENT_NOTHING,
80         EVENT_TONE_GENERATE,
81         EVENT_BCHAN_DATA,
82         EVENT_BCHAN_ACTIVATED,
83         EVENT_CLEANUP,
84         EVENT_PROCEEDING,
85         EVENT_PROGRESS,
86         EVENT_SETUP,
87         EVENT_ALERTING,
88         EVENT_CONNECT,
89         EVENT_SETUP_ACKNOWLEDGE,
90         EVENT_CONNECT_ACKNOWLEDGE ,
91         EVENT_USER_INFORMATION,
92         EVENT_SUSPEND_REJECT,
93         EVENT_RESUME_REJECT,
94         EVENT_HOLD,
95         EVENT_SUSPEND,
96         EVENT_RESUME,
97         EVENT_HOLD_ACKNOWLEDGE,
98         EVENT_SUSPEND_ACKNOWLEDGE,
99         EVENT_RESUME_ACKNOWLEDGE,
100         EVENT_HOLD_REJECT,
101         EVENT_RETRIEVE,
102         EVENT_RETRIEVE_ACKNOWLEDGE,
103         EVENT_RETRIEVE_REJECT,
104         EVENT_DISCONNECT,
105         EVENT_RESTART,
106         EVENT_RELEASE,
107         EVENT_RELEASE_COMPLETE,
108         EVENT_FACILITY,
109         EVENT_NOTIFY,
110         EVENT_STATUS_ENQUIRY,
111         EVENT_INFORMATION,
112         EVENT_STATUS,
113         EVENT_TIMEOUT,
114         EVENT_DTMF_TONE,
115         EVENT_NEW_L3ID,
116         EVENT_NEW_BC,
117         EVENT_NEW_CHANNEL,
118         EVENT_UNKNOWN
119 }; 
120
121
122 enum ie_name_e {
123         IE_DUMMY,
124         IE_LAST
125 };
126
127 enum { /* bearer capability */
128         INFO_CAPABILITY_SPEECH=0,
129         INFO_CAPABILITY_AUDIO_3_1K=0x10 ,
130         INFO_CAPABILITY_AUDIO_7K=0x11 ,
131         INFO_CAPABILITY_VIDEO =0x18,
132         INFO_CAPABILITY_DIGITAL_UNRESTRICTED =0x8,
133         INFO_CAPABILITY_DIGITAL_RESTRICTED =0x09,
134         INFO_CAPABILITY_DIGITAL_UNRESTRICTED_TONES
135 };
136
137 enum { /* progress indicators */
138         INFO_PI_CALL_NOT_E2E_ISDN =0x01,
139         INFO_PI_CALLED_NOT_ISDN =0x02,
140         INFO_PI_CALLER_NOT_ISDN =0x03,
141         INFO_PI_CALLER_RETURNED_TO_ISDN =0x04,
142         INFO_PI_INBAND_AVAILABLE =0x08,
143         INFO_PI_DELAY_AT_INTERF =0x0a,
144         INFO_PI_INTERWORKING_WITH_PUBLIC =0x10,
145         INFO_PI_INTERWORKING_NO_RELEASE =0x11,
146         INFO_PI_INTERWORKING_NO_RELEASE_PRE_ANSWER =0x12,
147         INFO_PI_INTERWORKING_NO_RELEASE_POST_ANSWER =0x13
148 };
149
150 enum { /*CODECS*/
151         INFO_CODEC_ULAW=2,
152         INFO_CODEC_ALAW=3
153 }; 
154
155
156 enum layer_e {
157         L3,
158         L2,
159         L1,
160         UNKNOWN
161 }; 
162
163
164
165 /** FACILITY STUFF **/
166
167 enum facility_type {
168         FACILITY_NONE,
169         FACILITY_CALLDEFLECT=0x91,
170         FACILITY_CENTREX=0x88
171 };
172
173 union facility {
174         char calldeflect_nr[15];
175         char cnip[256];
176 };
177
178
179
180
181 struct misdn_bchannel {
182
183         int nt;
184         int port;
185         /** init stuff **/
186         int b_stid;
187         /* int b_addr; */
188         int layer_id;
189
190         void *ack_hdlc;
191         
192         int layer;
193         
194         
195         /** var stuff**/
196         int l3_id;
197         int pid;
198         int ces;
199
200         int restart_channel;
201         int channel;
202         int channel_preselected;
203         
204         int in_use;
205         int addr;
206
207         unsigned char * bframe;
208         int bframe_len;
209         int time_usec;
210         
211         
212         void *astbuf;
213
214         void *misdnbuf;
215
216         int te_choose_channel;
217         int early_bconnect;
218         
219         /* dtmf digit */
220         int dtmf;
221         int send_dtmf;
222
223         /* get setup ack */
224         int need_more_infos;
225
226         /* may there be more infos ?*/
227         int sending_complete;
228
229
230         /* wether we should use jollys dsp or not */
231         int nodsp;
232         
233         /* wether we should use our jitter buf system or not */
234         int nojitter;
235         
236         enum mISDN_NUMBER_PLAN dnumplan;
237         enum mISDN_NUMBER_PLAN rnumplan;
238         enum mISDN_NUMBER_PLAN onumplan;
239         enum mISDN_NUMBER_PLAN cpnnumplan;
240
241         int progress_coding;
242         int progress_location;
243         int progress_indicator;
244         
245         enum facility_type fac_type;
246         union facility fac;
247         
248         enum facility_type out_fac_type;
249         union facility out_fac;
250         
251         enum event_e evq;
252         
253         /*** CRYPTING STUFF ***/
254         
255         int crypt;
256         int curprx;
257         int curptx; 
258         char crypt_key[255];
259   
260         int crypt_state;
261     
262         /*char ast_dtmf_buf[255];
263           char misdn_dtmf_buf[255]; */
264   
265         /*** CRYPTING STUFF END***/
266   
267         int active;
268         int upset;
269
270         int generate_tone;
271         int tone_cnt;
272  
273         enum bchannel_state bc_state;
274         enum bchannel_state next_bc_state;
275
276         int conf_id;
277         
278         int holded;
279         int stack_holder;
280
281         struct misdn_bchannel *holded_bc;
282         
283         int pres;
284         int screen;
285         
286         int capability;
287         int law;
288         /** V110 Stuff **/
289         int rate;
290         int mode;
291
292         int user1;
293         int urate;
294         int hdlc;
295         /* V110 */
296   
297         unsigned char display[84];
298         unsigned char msn[32];
299         unsigned char oad[32];
300         unsigned char rad[32];
301         unsigned char dad[32];
302         unsigned char cad[32];
303         unsigned char orig_dad[32];
304         unsigned char keypad[32];
305
306         unsigned char info_dad[64];
307         unsigned char infos_pending[64];
308
309 /*      unsigned char info_keypad[32]; */
310 /*      unsigned char clisub[24]; */
311 /*      unsigned char cldsub[24]; */
312 /*      unsigned char uu[256]; */
313   
314         int cause;
315         int out_cause;
316   
317         /* struct misdn_bchannel hold_bc; */
318   
319         /** list stuf **/
320
321         int ec_enable;
322         int ec_deftaps;
323         int ec_whenbridged;
324         int ec_training;
325         
326         int orig;
327
328         int txgain;
329         int rxgain;
330   
331         struct misdn_bchannel *next;
332 };
333
334
335 enum event_response_e (*cb_event) (enum event_e event, struct misdn_bchannel *bc, void *user_data);
336 void (*cb_log) (int level, int port, char *tmpl, ...);
337 int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
338
339 struct misdn_lib_iface {
340         
341         enum event_response_e (*cb_event)(enum event_e event, struct misdn_bchannel *bc, void *user_data);
342         void (*cb_log)(int level, int port, char *tmpl, ...);
343         int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
344         
345         int l1watcher_timeout;
346 };
347
348 /***** USER IFACE **********/
349
350 int misdn_lib_init(char *portlist, struct misdn_lib_iface* iface, void *user_data);
351 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event );
352 void misdn_lib_destroy(void);
353
354 void misdn_lib_log_ies(struct misdn_bchannel *bc);
355
356 char *manager_isdn_get_info(enum event_e event);
357
358 void misdn_lib_transfer(struct misdn_bchannel* holded_bc);
359
360 struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel);
361
362 void manager_bchannel_activate(struct misdn_bchannel *bc);
363 void manager_bchannel_deactivate(struct misdn_bchannel * bc);
364
365 int misdn_lib_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
366
367 void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
368
369
370 int misdn_lib_port_restart(int port);
371 int misdn_lib_get_port_info(int port);
372
373 int misdn_lib_port_up(int port, int notcheck);
374
375 int misdn_lib_get_port_down(int port);
376
377 int misdn_lib_get_port_up (int port) ;
378      
379 int misdn_lib_maxports_get(void) ;
380
381 void misdn_lib_release(struct misdn_bchannel *bc);
382
383 int misdn_cap_is_speech(int cap);
384 int misdn_inband_avail(struct misdn_bchannel *bc);
385
386 int misdn_lib_send_facility(struct misdn_bchannel *bc, enum facility_type fac, void *data);
387
388
389 void manager_ec_enable(struct misdn_bchannel *bc);
390 void manager_ec_disable(struct misdn_bchannel *bc);
391
392 void misdn_lib_send_tone(struct misdn_bchannel *bc, enum tone_e tone);
393
394 void get_show_stack_details(int port, char *buf);
395
396
397 void misdn_lib_tone_generator_start(struct misdn_bchannel *bc);
398 void misdn_lib_tone_generator_stop(struct misdn_bchannel *bc);
399
400
401 void misdn_lib_setup_bc(struct misdn_bchannel *bc);
402
403 void misdn_lib_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
404 void misdn_lib_split_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
405
406 void misdn_lib_echo(struct misdn_bchannel *bc, int onoff);
407
408 int misdn_lib_is_ptp(int port);
409
410 #define PRI_TRANS_CAP_SPEECH                                    0x0
411 #define PRI_TRANS_CAP_DIGITAL                                   0x08
412 #define PRI_TRANS_CAP_RESTRICTED_DIGITAL                        0x09
413 #define PRI_TRANS_CAP_3_1K_AUDIO                                0x10
414 #define PRI_TRANS_CAP_7K_AUDIO                                  0x11
415
416
417
418 char *bc_state2str(enum bchannel_state state);
419 void bc_state_change(struct misdn_bchannel *bc, enum bchannel_state state);
420
421
422
423 #endif