00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #if !defined(_SPANDSP_AT_INTERPRETER_H_)
00031 #define _SPANDSP_AT_INTERPRETER_H_
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 typedef struct at_state_s at_state_t;
00042
00043 typedef int (at_modem_control_handler_t)(at_state_t *s, void *user_data, int op, const char *num);
00044 typedef int (at_tx_handler_t)(at_state_t *s, void *user_data, const uint8_t *buf, size_t len);
00045 typedef int (at_class1_handler_t)(at_state_t *s, void *user_data, int direction, int operation, int val);
00046
00047 enum at_rx_mode_e
00048 {
00049 AT_MODE_ONHOOK_COMMAND,
00050 AT_MODE_OFFHOOK_COMMAND,
00051 AT_MODE_CONNECTED,
00052 AT_MODE_DELIVERY,
00053 AT_MODE_HDLC,
00054 AT_MODE_STUFFED
00055 };
00056
00057 enum at_call_event_e
00058 {
00059 AT_CALL_EVENT_ALERTING = 1,
00060 AT_CALL_EVENT_CONNECTED,
00061 AT_CALL_EVENT_ANSWERED,
00062 AT_CALL_EVENT_BUSY,
00063 AT_CALL_EVENT_NO_DIALTONE,
00064 AT_CALL_EVENT_NO_ANSWER,
00065 AT_CALL_EVENT_HANGUP
00066 };
00067
00068 enum at_modem_control_operation_e
00069 {
00070 AT_MODEM_CONTROL_CALL,
00071 AT_MODEM_CONTROL_ANSWER,
00072 AT_MODEM_CONTROL_HANGUP,
00073 AT_MODEM_CONTROL_OFFHOOK,
00074 AT_MODEM_CONTROL_ONHOOK,
00075 AT_MODEM_CONTROL_DTR,
00076 AT_MODEM_CONTROL_RTS,
00077 AT_MODEM_CONTROL_CTS,
00078 AT_MODEM_CONTROL_CAR,
00079 AT_MODEM_CONTROL_RNG,
00080 AT_MODEM_CONTROL_DSR,
00081 AT_MODEM_CONTROL_SETID,
00082
00083
00084 AT_MODEM_CONTROL_RESTART,
00085 AT_MODEM_CONTROL_DTE_TIMEOUT
00086 };
00087
00088 enum
00089 {
00090 AT_RESPONSE_CODE_OK = 0,
00091 AT_RESPONSE_CODE_CONNECT,
00092 AT_RESPONSE_CODE_RING,
00093 AT_RESPONSE_CODE_NO_CARRIER,
00094 AT_RESPONSE_CODE_ERROR,
00095 AT_RESPONSE_CODE_XXX,
00096 AT_RESPONSE_CODE_NO_DIALTONE,
00097 AT_RESPONSE_CODE_BUSY,
00098 AT_RESPONSE_CODE_NO_ANSWER,
00099 AT_RESPONSE_CODE_FCERROR,
00100 AT_RESPONSE_CODE_FRH3
00101 };
00102
00103
00104
00105
00106 typedef struct
00107 {
00108
00109 int echo;
00110
00111 int verbose;
00112
00113 int result_code_format;
00114
00115 int pulse_dial;
00116
00117 int double_escape;
00118
00119 int adaptive_receive;
00120
00121 uint8_t s_regs[100];
00122 } at_profile_t;
00123
00124
00125
00126
00127
00128 struct at_state_s
00129 {
00130 at_profile_t p;
00131
00132 int country_of_installation;
00133
00134 int dte_inactivity_timeout;
00135
00136 int dte_inactivity_action;
00137
00138 int speaker_volume;
00139
00140 int speaker_mode;
00141
00142
00143
00144 int dte_rate;
00145
00146 int dte_char_format;
00147
00148 int dte_parity;
00149
00150 int rlsd_behaviour;
00151
00152 int dtr_behaviour;
00153
00154 int carrier_loss_timeout;
00155
00156 int result_code_mode;
00157
00158 int dsr_option;
00159
00160 int long_space_disconnect_option;
00161
00162 int sync_tx_clock_source;
00163
00164 int rx_window;
00165
00166 int tx_window;
00167
00168 int v8bis_signal;
00169 int v8bis_1st_message;
00170 int v8bis_2nd_message;
00171 int v8bis_sig_en;
00172 int v8bis_msg_en;
00173 int v8bis_supp_delay;
00174
00175 uint8_t rx_data[256];
00176 int rx_data_bytes;
00177
00178 int display_call_info;
00179 int call_info_displayed;
00180 char *call_date;
00181 char *call_time;
00182 char *originating_name;
00183 char *originating_number;
00184 char *originating_ani;
00185 char *destination_number;
00186 char *local_id;
00187
00188 int fclass_mode;
00189 int at_rx_mode;
00190 int rings_indicated;
00191 int do_hangup;
00192 int silent_dial;
00193 int ok_is_pending;
00194 int dte_is_waiting;
00195
00196 int rx_signal_present;
00197
00198 int rx_trained;
00199 int transmit;
00200
00201 char line[256];
00202 int line_ptr;
00203
00204 at_modem_control_handler_t *modem_control_handler;
00205 void *modem_control_user_data;
00206 at_tx_handler_t *at_tx_handler;
00207 void *at_tx_user_data;
00208 at_class1_handler_t *class1_handler;
00209 void *class1_user_data;
00210
00211
00212 logging_state_t logging;
00213 };
00214
00215 #if defined(__cplusplus)
00216 extern "C"
00217 {
00218 #endif
00219
00220 void at_set_at_rx_mode(at_state_t *s, int new_mode);
00221
00222 void at_put_response(at_state_t *s, const char *t);
00223
00224 void at_put_numeric_response(at_state_t *s, int val);
00225
00226 void at_put_response_code(at_state_t *s, int code);
00227
00228 void at_reset_call_info(at_state_t *s);
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239 void at_set_call_info(at_state_t *s,
00240 char const *call_date,
00241 char const *call_time,
00242 char const *originating_name,
00243 char const *originating_number,
00244 char const *originating_ani,
00245 char const *destination_number);
00246
00247 void at_display_call_info(at_state_t *s);
00248
00249 int at_modem_control(at_state_t *s, int op, const char *num);
00250
00251 void at_call_event(at_state_t *s, int event);
00252
00253 void at_interpreter(at_state_t *s, const char *cmd, int len);
00254
00255 void at_set_class1_handler(at_state_t *s, at_class1_handler_t handler, void *user_data);
00256
00257 at_state_t *at_init(at_state_t *s,
00258 at_tx_handler_t *at_tx_handler,
00259 void *at_tx_user_data,
00260 at_modem_control_handler_t *modem_control_handler,
00261 void *modem_control_user_data);
00262
00263 #if defined(__cplusplus)
00264 }
00265 #endif
00266
00267 #endif
00268