Make groups be 64-bits (bug #3351, with mods)
[asterisk/asterisk.git] / include / asterisk / vmodem.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Voice Modem Definitions
5  * 
6  * Copyright (C) 1999-2004, Digium, Inc.
7  *
8  * Mark Spencer <markster@digium.com>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #ifndef _ASTERISK_VMODEM_H
15 #define _ASTERISK_VMODEM_H
16
17 #include <asterisk/frame.h>
18 #include <asterisk/channel.h>
19 #include <asterisk/channel_pvt.h>
20
21 #define CHAR_DLE                0x10
22 #define CHAR_ETX                0x03
23 #define CHAR_DC4                0x14
24
25 #define MODEM_DEV_TELCO         0
26 #define MODEM_DEV_TELCO_SPK     4
27 #define MODEM_DEV_SPKRPHONE     6
28 #define MODEM_DEV_HANDSET       9
29
30 #define MODEM_DTMF_NONE (1 << 0)
31 #define MODEM_DTMF_AST  (1 << 1)
32 #define MODEM_DTMF_I4L  (1 << 2)
33
34 /* Thirty millisecond sections */
35 #define MODEM_MAX_LEN 30
36 #define MODEM_MAX_BUF MODEM_MAX_LEN * 16
37
38 #define AST_MAX_INIT_STR        256
39
40 struct ast_modem_pvt;
41
42 struct ast_modem_driver {
43         char *name;
44         char **idents;
45         int formats;
46         int fullduplex;
47         void (*incusecnt)(void);
48         void (*decusecnt)(void);
49         char * (*identify)(struct ast_modem_pvt *);
50         int (*init)(struct ast_modem_pvt *);
51         int (*setdev)(struct ast_modem_pvt *, int dev);
52         struct ast_frame * (*read)(struct ast_modem_pvt *);
53         int (*write)(struct ast_modem_pvt *, struct ast_frame *fr);
54         int (*dial)(struct ast_modem_pvt *, char *);
55         int (*answer)(struct ast_modem_pvt *);
56         int (*hangup)(struct ast_modem_pvt *);
57         int (*startrec)(struct ast_modem_pvt *);
58         int (*stoprec)(struct ast_modem_pvt *);
59         int (*startpb)(struct ast_modem_pvt *);
60         int (*stoppb)(struct ast_modem_pvt *);
61         int (*setsilence)(struct ast_modem_pvt *, int onoff);
62         int (*dialdigit)(struct ast_modem_pvt *, char digit);
63         struct ast_modem_driver *next;
64 };
65
66 #define MODEM_MODE_IMMEDIATE            0
67 #define MODEM_MODE_WAIT_RING            1
68 #define MODEM_MODE_WAIT_ANSWER          2
69
70 //! Private data that needs to be filled by modem driver
71 struct ast_modem_pvt {
72         /*! Raw file descriptor for this device */
73         int fd;                                                 
74         /*! FILE * representation of device */
75         FILE *f;                                                
76         /*! Channel we belong to, possibly NULL */
77         struct ast_channel *owner;              
78         /* Device name */
79         char dev[256];                                  
80         /*! Frame */
81         struct ast_frame fr;                    
82         
83         char offset[AST_FRIENDLY_OFFSET];
84         /*! Outgoing buffer */
85         char obuf[MODEM_MAX_BUF];               
86         
87         int tail;
88         /*! Pulse or tone dialling */
89         char dialtype;                                  
90         /*! Time to wait for dial timeout */
91         char dialtimeout;                               
92         
93         int obuflen;
94         /*! Immediate, or wait for an answer */
95         int mode;                                               
96         /*! State of modem in miniature */
97         int ministate;                                  
98         /*! Digits to strip on outgoing numbers */
99         int stripmsd;                                   
100         /*! Is the last thing we saw an escape */
101         int escape;                                     
102         /*! flag to say if has caller*id yet*/
103         int gotclid;                            
104         /*! ringer timeout */
105         int ringt;                              
106         /*! actual time of last ring */
107         time_t lastring;                        
108         /*! dtmf receive state/data */
109         char dtmfrx;                            
110         
111         char context[AST_MAX_EXTENSION];
112         /*! Multiple Subscriber Number */
113         char msn[AST_MAX_EXTENSION];    
114         /*! Multiple Subscriber Number we listen to (; seperated list) */
115         char incomingmsn[AST_MAX_EXTENSION];    
116         /*! Multiple Subscriber Number we accept for outgoing calls (; seperated list) */
117         char outgoingmsn[AST_MAX_EXTENSION];    
118         /*! Group(s) we belong to if available */
119         ast_group_t group;
120         /*! Caller ID if available */
121         char cid_name[AST_MAX_EXTENSION];       
122         /*! Caller ID if available */
123         char cid_num[AST_MAX_EXTENSION];        
124         /*! DTMF-detection mode (i4l/asterisk) */
125         int dtmfmode;
126         /*! DTMF-generation mode (i4l (outband) / asterisk (inband) */
127         int dtmfmodegen;
128         /*! DSP for DTMF detection */
129         struct ast_dsp *dsp;
130         /*! Dialed Number if available */
131         char dnid[AST_MAX_EXTENSION];   
132         /*! Modem initialization String */
133         char initstr[AST_MAX_INIT_STR]; 
134         /*! default language */
135         char language[MAX_LANGUAGE];    
136         /*! Static response buffer */
137         char response[256];                             
138         /*! Modem Capability */
139         struct ast_modem_driver *mc;    
140         /*! Next channel in list */
141         struct ast_modem_pvt *next;                     
142 };
143
144
145 //! Register a modem driver
146 /*! Register a driver */
147 extern int ast_register_modem_driver(struct ast_modem_driver *mc);
148
149 //! Unregisters a modem driver
150 /*! Unregister a driver */
151 extern int ast_unregister_modem_driver(struct ast_modem_driver *mc);
152
153 //! Sends command
154 /*! Send the command cmd (length len, or 0 if pure ascii) on modem */
155 extern int ast_modem_send(struct ast_modem_pvt *p, char *cmd, int len);
156
157 //! Waits for result
158 /*! Wait for result to occur.  Return non-zero if times out or error, last
159    response is stored in p->response  */
160 extern int ast_modem_expect(struct ast_modem_pvt *p,  char *result, int timeout);
161
162 //! Waits for result
163 /*! Wait for result to occur.    response is stored in p->response  */
164 extern int ast_modem_read_response(struct ast_modem_pvt *p,  int timeout);
165
166 //! Used to start up the PBX on a RING
167 /*! Used by modem drivers to start up the PBX on a RING */
168 extern struct ast_channel *ast_modem_new(struct ast_modem_pvt *i, int state);
169
170 //! Trim string of trailing stuff
171 /*! Trim off trailing mess */
172 extern void ast_modem_trim(char *s);
173 #endif