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