21 #include "platform/mbed_retarget.h"    22 #include "platform/mbed_chrono.h"    24 #include "events/EventQueue.h"    25 #include "netsocket/nsapi_types.h"    28 #include "rtos/Kernel.h"    32 #include "drivers/BufferedSerial.h"    40 #define AT_HANDLER_MUTEX    42 #if defined AT_HANDLER_MUTEX && defined MBED_CONF_RTOS_PRESENT    43 #include "rtos/ConditionVariable.h"    50 extern const char *OK;
    51 extern const char *CRLF;
    56 enum DeviceErrorType {
    57     DeviceErrorTypeNoError = 0,
    59     DeviceErrorTypeErrorCMS,    
    60     DeviceErrorTypeErrorCME     
    65     DeviceErrorType errType;
    91     ATHandler(
FileHandle *fh, 
events::EventQueue &queue, mbed::chrono::milliseconds_u32 timeout, 
const char *output_delimiter, std::chrono::duration<uint16_t, std::milli> send_delay = std::chrono::milliseconds(0));
   139     void set_at_timeout(uint32_t timeout_milliseconds, 
bool default_timeout = 
false);
   146     void set_at_timeout(mbed::chrono::milliseconds_u32 timeout, 
bool default_timeout = 
false);
   150     void restore_at_timeout();
   170     void set_is_filehandle_usable(
bool usable);
   177     bool sync(
int timeout_ms);
   184     bool sync(std::chrono::duration<int, std::milli> timeout);
   190     void set_send_delay(uint16_t send_delay);
   196     void set_baud(
int baud_rate);
   203     void cmd_start(
const char *cmd);
   215     void cmd_start_stop(
const char *cmd, 
const char *cmd_chr, 
const char *format = 
"", ...);
   227     nsapi_error_t at_cmd_str(
const char *cmd, 
const char *cmd_chr, 
char *resp_buf, 
size_t resp_buf_size, 
const char *format = 
"", ...);
   238     nsapi_error_t at_cmd_int(
const char *cmd, 
const char *cmd_chr, 
int &resp, 
const char *format = 
"", ...);
   248     nsapi_error_t at_cmd_discard(
const char *cmd, 
const char *cmd_chr, 
const char *format = 
"", ...);
   255     void write_int(int32_t param);
   264     void write_string(
const char *param,  
bool useQuotations = 
true);
   273     void cmd_stop_read_resp();
   283     size_t write_bytes(
const uint8_t *data, 
size_t len);
   291     void set_stop_tag(
const char *stop_tag_seq);
   298     void set_delimiter(
char delimiter);
   302     void set_default_delimiter();
   308     void use_delimiter(
bool use_delimiter);
   314     void skip_param(uint32_t count = 1);
   321     void skip_param(ssize_t len, uint32_t count);
   329     ssize_t read_bytes(uint8_t *buf, 
size_t len);
   339     ssize_t read_string(
char *str, 
size_t size, 
bool read_even_stop_tag = 
false);
   350     ssize_t read_hex_string(
char *str, 
size_t size);
   358     void write_hex_string(
const char *str, 
size_t size);
   374     void resp_start(
const char *prefix = NULL, 
bool stop = 
false);
   404     bool info_elem(
char start_tag);
   410     bool consume_to_stop_tag();
   415     int get_3gpp_error();
   427     void set_debug(
bool debug_on);
   434     bool get_debug() 
const;
   469     void inc_ref_count();
   475     void dec_ref_count();
   487     void remove_urc_handler(
const char *prefix);
   492     void handle_args(
const char *format, std::va_list 
list);
   495     void handle_start(
const char *cmd, 
const char *cmd_chr);
   498     bool ok_to_proceed();
   507     void rewind_buffer();
   510     int poll_timeout(
bool wait_for_timeout = 
true);
   513     bool fill_buffer(
bool wait_for_timeout = 
true);
   515     void set_tag(tag_t *tag_dest, 
const char *tag_seq);
   518     bool match(
const char *str, 
size_t size);
   527     bool consume_char(
char ch);
   530     bool consume_to_tag(
const char *tag, 
bool consume_tag);
   532     void resp(
const char *prefix, 
bool check_urc);
   534     void set_scope(ScopeType scope_type);
   536     ScopeType get_scope();
   539     void information_response_stop();
   541     void information_response_element_stop();
   544     void at_error(
bool error_code, DeviceErrorType error_type);
   550     void set_3gpp_error(
int err, DeviceErrorType error_type);
   552     bool check_cmd_send();
   553     size_t write(
const void *data, 
size_t len);
   564     const char *mem_str(
const char *dest, 
size_t dest_len, 
const char *src, 
size_t src_len);
   567     bool find_urc_handler(
const char *prefix);
   576     void debug_print(
const char *p, 
int len, ATType type);
   580 #if defined AT_HANDLER_MUTEX && defined MBED_CONF_RTOS_PRESENT   588     int _last_3gpp_error;
   590     uint16_t _oob_string_max_length;
   591     char *_output_delimiter;
   594     mbed::chrono::milliseconds_u32 _at_timeout;
   595     mbed::chrono::milliseconds_u32 _previous_at_timeout;
   597     std::chrono::duration<uint16_t, std::milli> _at_send_delay;
   598     rtos::Kernel::Clock::time_point _last_response_stop;
   604     char _recv_buff[BUFF_SIZE];
   610     ScopeType _current_scope;
   624     bool _prefix_matched;
   630     size_t _max_resp_length;
   633     char _info_resp_prefix[BUFF_SIZE];
   639     rtos::Kernel::Clock::time_point _start_time;
   643     char _cmd_buffer[BUFF_SIZE];
   648 #endif //AT_HANDLER_H_ 
signed int nsapi_error_t
Type used to represent error codes. 
The Mutex class is used to synchronize the execution of threads. 
AT response error with error code and type. 
The ConditionVariable class is a synchronization primitive that allows threads to wait until a partic...
Connected isochronous stream linked list. 
Callback class based on template specialization. 
Class for sending AT commands and parsing AT responses.