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