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 struct at_call_id
00104 {
00105 char *id;
00106 char *value;
00107 struct at_call_id *next;
00108 };
00109
00110
00111
00112
00113 typedef struct
00114 {
00115
00116 int echo;
00117
00118 int verbose;
00119
00120 int result_code_format;
00121
00122 int pulse_dial;
00123
00124 int double_escape;
00125
00126 int adaptive_receive;
00127
00128 uint8_t s_regs[100];
00129 } at_profile_t;
00130
00131
00132
00133
00134
00135 struct at_state_s
00136 {
00137 at_profile_t p;
00138
00139 int country_of_installation;
00140
00141 int dte_inactivity_timeout;
00142
00143 int dte_inactivity_action;
00144
00145 int speaker_volume;
00146
00147 int speaker_mode;
00148
00149
00150
00151 int dte_rate;
00152
00153 int dte_char_format;
00154
00155 int dte_parity;
00156
00157 int rlsd_behaviour;
00158
00159 int dtr_behaviour;
00160
00161 int carrier_loss_timeout;
00162
00163 int result_code_mode;
00164
00165 int dsr_option;
00166
00167 int long_space_disconnect_option;
00168
00169 int sync_tx_clock_source;
00170
00171 int rx_window;
00172
00173 int tx_window;
00174
00175 int v8bis_signal;
00176 int v8bis_1st_message;
00177 int v8bis_2nd_message;
00178 int v8bis_sig_en;
00179 int v8bis_msg_en;
00180 int v8bis_supp_delay;
00181
00182 uint8_t rx_data[256];
00183 int rx_data_bytes;
00184
00185 int display_call_info;
00186 int call_info_displayed;
00187 struct at_call_id *call_id;
00188 char *local_id;
00189
00190 int fclass_mode;
00191 int at_rx_mode;
00192 int rings_indicated;
00193 int do_hangup;
00194 int silent_dial;
00195 int ok_is_pending;
00196 int dte_is_waiting;
00197
00198 int rx_signal_present;
00199
00200 int rx_trained;
00201 int transmit;
00202
00203 char line[256];
00204 int line_ptr;
00205
00206 at_modem_control_handler_t *modem_control_handler;
00207 void *modem_control_user_data;
00208 at_tx_handler_t *at_tx_handler;
00209 void *at_tx_user_data;
00210 at_class1_handler_t *class1_handler;
00211 void *class1_user_data;
00212
00213
00214 logging_state_t logging;
00215 };
00216
00217 #if defined(__cplusplus)
00218 extern "C"
00219 {
00220 #endif
00221
00222 void at_set_at_rx_mode(at_state_t *s, int new_mode);
00223
00224 void at_put_response(at_state_t *s, const char *t);
00225
00226 void at_put_numeric_response(at_state_t *s, int val);
00227
00228 void at_put_response_code(at_state_t *s, int code);
00229
00230 void at_reset_call_info(at_state_t *s);
00231
00232
00233
00234
00235
00236
00237 void at_set_call_info(at_state_t *s, char const *id, char const *value);
00238
00239 void at_display_call_info(at_state_t *s);
00240
00241 int at_modem_control(at_state_t *s, int op, const char *num);
00242
00243 void at_call_event(at_state_t *s, int event);
00244
00245 void at_interpreter(at_state_t *s, const char *cmd, int len);
00246
00247 void at_set_class1_handler(at_state_t *s, at_class1_handler_t handler, void *user_data);
00248
00249 at_state_t *at_init(at_state_t *s,
00250 at_tx_handler_t *at_tx_handler,
00251 void *at_tx_user_data,
00252 at_modem_control_handler_t *modem_control_handler,
00253 void *modem_control_user_data);
00254
00255 #if defined(__cplusplus)
00256 }
00257 #endif
00258
00259 #endif
00260