* removed tone_indicate, we genrate only the dialtone by ourself (and the hanguptone...
[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         /*state stuff*/
195         int need_disconnect;
196         int need_release;
197         int need_release_complete;
198
199         /** var stuff**/
200         int l3_id;
201         int pid;
202         int ces;
203
204         int restart_channel;
205         int channel;
206         int channel_preselected;
207         
208         int in_use;
209         int addr;
210
211         unsigned char * bframe;
212         int bframe_len;
213         int time_usec;
214         
215         
216         void *astbuf;
217
218         void *misdnbuf;
219
220         int te_choose_channel;
221         int early_bconnect;
222         
223         /* dtmf digit */
224         int dtmf;
225         int send_dtmf;
226
227         /* get setup ack */
228         int need_more_infos;
229
230         /* may there be more infos ?*/
231         int sending_complete;
232
233
234         /* wether we should use jollys dsp or not */
235         int nodsp;
236         
237         /* wether we should use our jitter buf system or not */
238         int nojitter;
239         
240         enum mISDN_NUMBER_PLAN dnumplan;
241         enum mISDN_NUMBER_PLAN rnumplan;
242         enum mISDN_NUMBER_PLAN onumplan;
243         enum mISDN_NUMBER_PLAN cpnnumplan;
244
245         int progress_coding;
246         int progress_location;
247         int progress_indicator;
248         
249         enum facility_type fac_type;
250         union facility fac;
251         
252         enum facility_type out_fac_type;
253         union facility out_fac;
254         
255         enum event_e evq;
256         
257         /*** CRYPTING STUFF ***/
258         
259         int crypt;
260         int curprx;
261         int curptx; 
262         char crypt_key[255];
263   
264         int crypt_state;
265     
266         /*char ast_dtmf_buf[255];
267           char misdn_dtmf_buf[255]; */
268   
269         /*** CRYPTING STUFF END***/
270   
271         int active;
272         int upset;
273
274         int generate_tone;
275         int tone_cnt;
276  
277         enum bchannel_state bc_state;
278         enum bchannel_state next_bc_state;
279
280         int conf_id;
281         
282         int holded;
283         int stack_holder;
284
285         struct misdn_bchannel *holded_bc;
286         
287         int pres;
288         int screen;
289         
290         int capability;
291         int law;
292         /** V110 Stuff **/
293         int rate;
294         int mode;
295
296         int user1;
297         int urate;
298         int hdlc;
299         /* V110 */
300   
301         unsigned char display[84];
302         unsigned char msn[32];
303         unsigned char oad[32];
304         unsigned char rad[32];
305         unsigned char dad[32];
306         unsigned char cad[32];
307         unsigned char orig_dad[32];
308         unsigned char keypad[32];
309
310         unsigned char info_dad[64];
311         unsigned char infos_pending[64];
312
313 /*      unsigned char info_keypad[32]; */
314 /*      unsigned char clisub[24]; */
315 /*      unsigned char cldsub[24]; */
316 /*      unsigned char uu[256]; */
317   
318         int cause;
319         int out_cause;
320   
321         /* struct misdn_bchannel hold_bc; */
322   
323         /** list stuf **/
324
325         int ec_enable;
326         int ec_deftaps;
327         int ec_whenbridged;
328         int ec_training;
329         
330         int orig;
331
332         int txgain;
333         int rxgain;
334   
335         struct misdn_bchannel *next;
336 };
337
338
339 enum event_response_e (*cb_event) (enum event_e event, struct misdn_bchannel *bc, void *user_data);
340 void (*cb_log) (int level, int port, char *tmpl, ...);
341 int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
342
343 struct misdn_lib_iface {
344         
345         enum event_response_e (*cb_event)(enum event_e event, struct misdn_bchannel *bc, void *user_data);
346         void (*cb_log)(int level, int port, char *tmpl, ...);
347         int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
348         
349         int l1watcher_timeout;
350 };
351
352 /***** USER IFACE **********/
353
354 void misdn_lib_nt_debug_init( int flags, char *file );
355
356 int misdn_lib_init(char *portlist, struct misdn_lib_iface* iface, void *user_data);
357 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event );
358 void misdn_lib_destroy(void);
359
360 void misdn_lib_log_ies(struct misdn_bchannel *bc);
361
362 char *manager_isdn_get_info(enum event_e event);
363
364 void misdn_lib_transfer(struct misdn_bchannel* holded_bc);
365
366 struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel);
367
368 void manager_bchannel_activate(struct misdn_bchannel *bc);
369 void manager_bchannel_deactivate(struct misdn_bchannel * bc);
370
371 int misdn_lib_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
372
373 void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
374
375
376 int misdn_lib_port_restart(int port);
377 int misdn_lib_get_port_info(int port);
378
379 int misdn_lib_port_up(int port, int notcheck);
380
381 int misdn_lib_get_port_down(int port);
382
383 int misdn_lib_get_port_up (int port) ;
384      
385 int misdn_lib_maxports_get(void) ;
386
387 void misdn_lib_release(struct misdn_bchannel *bc);
388
389 int misdn_cap_is_speech(int cap);
390 int misdn_inband_avail(struct misdn_bchannel *bc);
391
392 int misdn_lib_send_facility(struct misdn_bchannel *bc, enum facility_type fac, void *data);
393
394
395 void manager_ec_enable(struct misdn_bchannel *bc);
396 void manager_ec_disable(struct misdn_bchannel *bc);
397
398 void misdn_lib_send_tone(struct misdn_bchannel *bc, enum tone_e tone);
399
400 void get_show_stack_details(int port, char *buf);
401
402
403 void misdn_lib_tone_generator_start(struct misdn_bchannel *bc);
404 void misdn_lib_tone_generator_stop(struct misdn_bchannel *bc);
405
406
407 void misdn_lib_setup_bc(struct misdn_bchannel *bc);
408
409 void misdn_lib_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
410 void misdn_lib_split_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
411
412 void misdn_lib_echo(struct misdn_bchannel *bc, int onoff);
413
414 int misdn_lib_is_ptp(int port);
415 int misdn_lib_get_maxchans(int port);
416
417 void misdn_lib_reinit_nt_stack(int port);
418
419 #define PRI_TRANS_CAP_SPEECH                                    0x0
420 #define PRI_TRANS_CAP_DIGITAL                                   0x08
421 #define PRI_TRANS_CAP_RESTRICTED_DIGITAL                        0x09
422 #define PRI_TRANS_CAP_3_1K_AUDIO                                0x10
423 #define PRI_TRANS_CAP_7K_AUDIO                                  0x11
424
425
426
427 char *bc_state2str(enum bchannel_state state);
428 void bc_state_change(struct misdn_bchannel *bc, enum bchannel_state state);
429
430
431
432 #endif