Fixes and improves parsing of config file.
[lcr.git] / ss5.h
1 /*****************************************************************************\
2 **                                                                           **
3 ** LCR                                                                       **
4 **                                                                           **
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg                                              **
7 **                                                                           **
8 ** ss5-port header file                                                      **
9 **                                                                           **
10 \*****************************************************************************/ 
11
12 #define SS5_ENABLE                      0x00000001
13 #define SS5_FEATURE_CONNECT             0x00000002
14 #define SS5_FEATURE_NODISCONNECT        0x00000004
15 #define SS5_FEATURE_RELEASEGUARDTIMER   0x00000008
16 #define SS5_FEATURE_BELL                0x00000010
17 #define SS5_FEATURE_PULSEDIALING        0x00000020
18 #define SS5_FEATURE_DELAY               0x00000040
19 #define SS5_FEATURE_STAR_RELEASE        0x00000080
20 #define SS5_FEATURE_SUPPRESS            0x00000100
21
22 /* SS5 port classes */
23 class Pss5 : public PmISDN
24 {
25         public:
26         Pss5(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode);
27         ~Pss5();
28         int handler(void);
29         int message_epoint(unsigned int epoint_id, int message, union parameter *param);
30         void set_tone(const char *dir, const char *name);
31
32         int p_m_s_state; /* current signalling state */
33         int p_m_s_signal; /* current state of current signal */
34         char p_m_s_dial[64]; /* current dialing register */
35         int p_m_s_digit_i; /* current digit of register counter */
36         int p_m_s_pulsecount; /* counts pule dialing half cycles */
37         char p_m_s_last_digit; /* stores last digit to fill short signal losses */
38         int p_m_s_signal_loss; /* sample counter for loss of signal check */
39         int p_m_s_decoder_count; /* samples currently decoded */
40         unsigned char p_m_s_decoder_buffer[SS5_DECODER_NPOINTS]; /* buffer for storing one goertzel window */
41         unsigned char p_m_s_delay_digits[3000/SS5_DECODER_NPOINTS]; /* delay buffer for received digits */
42         unsigned char p_m_s_delay_mute[400/SS5_DECODER_NPOINTS]; /* 40 ms delay on mute, so a 'chirp' can be heared */
43         int p_m_s_sample_nr; /* decoder's sample number, counter */
44         int p_m_s_recog; /* sample counter to wait for signal recognition time */
45         double p_m_s_timer;
46         void (Pss5::*p_m_s_timer_fn)(void);
47         int p_m_s_answer; /* queued signal */
48         int p_m_s_busy_flash; /* queued signal */
49         int p_m_s_clear_back; /* queued signal */
50
51         void _new_ss5_state(int state, const char *func, int line);
52         void _new_ss5_signal(int signal, const char *func, int line);
53         void inband_receive(unsigned char *buffer, int len);
54         int inband_send(unsigned char *buffer, int len);
55         int inband_dial_mf(unsigned char *buffer, int len, int count);
56         int inband_dial_pulse(unsigned char *buffer, int len, int count);
57         void start_signal(int);
58         void start_outgoing(void);
59         void do_release(int cause, int location);
60         void do_setup(char *digit, int complete);
61
62         void seizing_ind(void);
63         void digit_ind(char digit);
64         void pulse_ind(int on);
65         void proceed_to_send_ind(void);
66         void busy_flash_ind(void);
67         void answer_ind(void);
68         void forward_ind(void);
69         void clear_back_ind(void);
70         void clear_forward_ind(void);
71         void release_guard_ind(void);
72         void double_seizure_ind(void);
73         void forward_transfer_ind(void);
74         void message_setup(unsigned int epoint_id, int message_id, union parameter *param);
75         void message_connect(unsigned int epoint_id, int message_id, union parameter *param);
76         void message_disconnect(unsigned int epoint_id, int message_id, union parameter *param);
77         void message_release(unsigned int epoint_id, int message_id, union parameter *param);
78
79 };
80
81 #define new_ss5_state(a) _new_ss5_state(a, __FUNCTION__, __LINE__)
82 #define new_ss5_signal(a) _new_ss5_signal(a, __FUNCTION__, __LINE__)
83
84 void ss5_create_channel(struct mISDNport *mISDNport, int i);
85 class Pss5 *ss5_hunt_line(struct mISDNport *mISDNport);
86