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
00071 AT_MODEM_CONTROL_CALL,
00072
00073 AT_MODEM_CONTROL_ANSWER,
00074
00075 AT_MODEM_CONTROL_HANGUP,
00076
00077 AT_MODEM_CONTROL_OFFHOOK,
00078
00079 AT_MODEM_CONTROL_ONHOOK,
00080
00081 AT_MODEM_CONTROL_DTR,
00082
00083 AT_MODEM_CONTROL_RTS,
00084
00085 AT_MODEM_CONTROL_CTS,
00086
00087 AT_MODEM_CONTROL_CAR,
00088
00089 AT_MODEM_CONTROL_RNG,
00090
00091 AT_MODEM_CONTROL_DSR,
00092
00093 AT_MODEM_CONTROL_SETID,
00094
00095
00096 AT_MODEM_CONTROL_RESTART,
00097 AT_MODEM_CONTROL_DTE_TIMEOUT
00098 };
00099
00100 enum
00101 {
00102 AT_RESPONSE_CODE_OK = 0,
00103 AT_RESPONSE_CODE_CONNECT,
00104 AT_RESPONSE_CODE_RING,
00105 AT_RESPONSE_CODE_NO_CARRIER,
00106 AT_RESPONSE_CODE_ERROR,
00107 AT_RESPONSE_CODE_XXX,
00108 AT_RESPONSE_CODE_NO_DIALTONE,
00109 AT_RESPONSE_CODE_BUSY,
00110 AT_RESPONSE_CODE_NO_ANSWER,
00111 AT_RESPONSE_CODE_FCERROR,
00112 AT_RESPONSE_CODE_FRH3
00113 };
00114
00115 struct at_call_id
00116 {
00117 char *id;
00118 char *value;
00119 struct at_call_id *next;
00120 };
00121
00122
00123
00124
00125 typedef struct
00126 {
00127
00128 int echo;
00129
00130 int verbose;
00131
00132 int result_code_format;
00133
00134 int pulse_dial;
00135
00136 int double_escape;
00137
00138 int adaptive_receive;
00139
00140 uint8_t s_regs[100];
00141 } at_profile_t;
00142
00143
00144
00145
00146
00147 struct at_state_s
00148 {
00149 at_profile_t p;
00150
00151 int country_of_installation;
00152
00153 int dte_inactivity_timeout;
00154
00155 int dte_inactivity_action;
00156
00157 int speaker_volume;
00158
00159 int speaker_mode;
00160
00161
00162
00163 int dte_rate;
00164
00165 int dte_char_format;
00166
00167 int dte_parity;
00168
00169 int rlsd_behaviour;
00170
00171 int dtr_behaviour;
00172
00173 int carrier_loss_timeout;
00174
00175 int result_code_mode;
00176
00177 int dsr_option;
00178
00179 int long_space_disconnect_option;
00180
00181 int sync_tx_clock_source;
00182
00183 int rx_window;
00184
00185 int tx_window;
00186
00187 int v8bis_signal;
00188 int v8bis_1st_message;
00189 int v8bis_2nd_message;
00190 int v8bis_sig_en;
00191 int v8bis_msg_en;
00192 int v8bis_supp_delay;
00193
00194 uint8_t rx_data[256];
00195 int rx_data_bytes;
00196
00197 int display_call_info;
00198 int call_info_displayed;
00199 struct at_call_id *call_id;
00200 char *local_id;
00201
00202 int fclass_mode;
00203 int at_rx_mode;
00204 int rings_indicated;
00205 int do_hangup;
00206 int silent_dial;
00207 int command_dial;
00208 int ok_is_pending;
00209 int dte_is_waiting;
00210
00211 int rx_signal_present;
00212
00213 int rx_trained;
00214 int transmit;
00215
00216 char line[256];
00217 int line_ptr;
00218
00219 at_modem_control_handler_t *modem_control_handler;
00220 void *modem_control_user_data;
00221 at_tx_handler_t *at_tx_handler;
00222 void *at_tx_user_data;
00223 at_class1_handler_t *class1_handler;
00224 void *class1_user_data;
00225
00226
00227 logging_state_t logging;
00228 };
00229
00230 #if defined(__cplusplus)
00231 extern "C"
00232 {
00233 #endif
00234
00235 void at_set_at_rx_mode(at_state_t *s, int new_mode);
00236
00237 void at_put_response(at_state_t *s, const char *t);
00238
00239 void at_put_numeric_response(at_state_t *s, int val);
00240
00241 void at_put_response_code(at_state_t *s, int code);
00242
00243 void at_reset_call_info(at_state_t *s);
00244
00245
00246
00247
00248
00249
00250 void at_set_call_info(at_state_t *s, char const *id, char const *value);
00251
00252 void at_display_call_info(at_state_t *s);
00253
00254 int at_modem_control(at_state_t *s, int op, const char *num);
00255
00256 void at_call_event(at_state_t *s, int event);
00257
00258 void at_interpreter(at_state_t *s, const char *cmd, int len);
00259
00260 void at_set_class1_handler(at_state_t *s, at_class1_handler_t handler, void *user_data);
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270 at_state_t *at_init(at_state_t *s,
00271 at_tx_handler_t *at_tx_handler,
00272 void *at_tx_user_data,
00273 at_modem_control_handler_t *modem_control_handler,
00274 void *modem_control_user_data);
00275
00276
00277
00278
00279
00280 int at_free(at_state_t *s);
00281
00282 #if defined(__cplusplus)
00283 }
00284 #endif
00285
00286 #endif
00287