1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #ifndef _SANGOMA_PRI_H
17 #define _SANGOMA_PRI_H
18 #include <libpri.h>
19 #include <pri_internal.h>
20
21
22 #define SANGOMA_MAX_CHAN_PER_SPAN 32
23
24 typedef enum {
25 SANGOMA_PRI_EVENT_ANY = 0,
26 SANGOMA_PRI_EVENT_DCHAN_UP = PRI_EVENT_DCHAN_UP,
27 SANGOMA_PRI_EVENT_DCHAN_DOWN = PRI_EVENT_DCHAN_DOWN,
28 SANGOMA_PRI_EVENT_RESTART = PRI_EVENT_RESTART,
29 SANGOMA_PRI_EVENT_CONFIG_ERR = PRI_EVENT_CONFIG_ERR,
30 SANGOMA_PRI_EVENT_RING = PRI_EVENT_RING,
31 SANGOMA_PRI_EVENT_HANGUP = PRI_EVENT_HANGUP,
32 SANGOMA_PRI_EVENT_RINGING = PRI_EVENT_RINGING,
33 SANGOMA_PRI_EVENT_ANSWER = PRI_EVENT_ANSWER,
34 SANGOMA_PRI_EVENT_HANGUP_ACK = PRI_EVENT_HANGUP_ACK,
35 SANGOMA_PRI_EVENT_RESTART_ACK = PRI_EVENT_RESTART_ACK,
36 SANGOMA_PRI_EVENT_FACNAME = PRI_EVENT_FACNAME,
37 SANGOMA_PRI_EVENT_INFO_RECEIVED = PRI_EVENT_INFO_RECEIVED,
38 SANGOMA_PRI_EVENT_PROCEEDING = PRI_EVENT_PROCEEDING,
39 SANGOMA_PRI_EVENT_SETUP_ACK = PRI_EVENT_SETUP_ACK,
40 SANGOMA_PRI_EVENT_HANGUP_REQ = PRI_EVENT_HANGUP_REQ,
41 SANGOMA_PRI_EVENT_NOTIFY = PRI_EVENT_NOTIFY,
42 SANGOMA_PRI_EVENT_PROGRESS = PRI_EVENT_PROGRESS,
43 SANGOMA_PRI_EVENT_KEYPAD_DIGIT = PRI_EVENT_KEYPAD_DIGIT
44 } sangoma_pri_event_t;
45
46 typedef enum {
47 SANGOMA_PRI_NETWORK = PRI_NETWORK,
48 SANGOMA_PRI_CPE = PRI_CPE
49 } sangoma_pri_node_t;
50
51 typedef enum {
52 SANGOMA_PRI_SWITCH_UNKNOWN = PRI_SWITCH_UNKNOWN,
53 SANGOMA_PRI_SWITCH_NI2 = PRI_SWITCH_NI2,
54 SANGOMA_PRI_SWITCH_DMS100 = PRI_SWITCH_DMS100,
55 SANGOMA_PRI_SWITCH_LUCENT5E = PRI_SWITCH_LUCENT5E,
56 SANGOMA_PRI_SWITCH_ATT4ESS = PRI_SWITCH_ATT4ESS,
57 SANGOMA_PRI_SWITCH_EUROISDN_E1 = PRI_SWITCH_EUROISDN_E1,
58 SANGOMA_PRI_SWITCH_EUROISDN_T1 = PRI_SWITCH_EUROISDN_T1,
59 SANGOMA_PRI_SWITCH_NI1 = PRI_SWITCH_NI1,
60 SANGOMA_PRI_SWITCH_GR303_EOC = PRI_SWITCH_GR303_EOC,
61 SANGOMA_PRI_SWITCH_GR303_TMC = PRI_SWITCH_GR303_TMC,
62 SANGOMA_PRI_SWITCH_QSIG = PRI_SWITCH_QSIG
63 } sangoma_pri_switch_t;
64
65 typedef enum {
66 SANGOMA_PRI_READY = (1 << 0)
67 } sangoma_pri_flag_t;
68
69 struct sangoma_pri;
70 typedef int (*event_handler)(struct sangoma_pri *, sangoma_pri_event_t, pri_event *);
71 typedef int (*loop_handler)(struct sangoma_pri *);
72 #define MAX_EVENT 18
73
74 struct sangoma_pri {
75 struct pri *pri;
76 int span;
77 int dchan;
78 unsigned int flags;
79 void *private_info;
80 event_handler eventmap[MAX_EVENT+1];
81 loop_handler on_loop;
82 ftdm_channel_t *zdchan;
83 };
84
85 struct sangoma_pri_event_list {
86 int event_id;
87 int pri_event;
88 char *name;
89 };
90
91
92
93 #define SANGOMA_MAP_PRI_EVENT(spri, event, func) spri.eventmap[event] = func;
94
95 char *sangoma_pri_event_str(sangoma_pri_event_t event_id);
96 int sangoma_one_loop(struct sangoma_pri *spri);
97 int sangoma_init_pri(struct sangoma_pri *spri, int span, int dchan, int swtype, int node, int debug);
98 int sangoma_run_pri(struct sangoma_pri *spri);
99
100 #endif