/**
 * @Brief: The AT component drives the interface implementation
 * @Author: roger.luo
 * @Date: 2021-04-04
 * @Last Modified by: roger.luo
 * @Last Modified time: 2021-11-27
 */
#ifndef __AT_PORT_H__
#define __AT_PORT_H__

/**
 *@brief Default correct response identifier.
 */
#define AT_DEF_RESP_OK    "OK"     
/**
 *@brief Default error response identifier.
 */
#define AT_DEF_RESP_ERR   "ERROR"

/**
 *@brief Default command timeout (ms)
 */
#define AT_DEF_TIMEOUT    500  

/**
 *@brief Number of retries when a command timeout/error occurs.
 */
#define AT_DEF_RETRY      3

/**
 *@brief Default URC frame receive timeout (ms).
 */
#define AT_URC_TIMEOUT    500

/**
 *@brief Maximum AT command send data length (only for variable parameter commands).
 */
#define AT_MAX_CMD_LEN    512

/**
 *@brief Maximum number of work in queue (limit memory usage).
 */
#define AT_LIST_WORK_COUNT 32     
 
/**
 *@brief Enable URC watcher.
 */
#define AT_URC_WARCH_EN     1

/**
 *@brief A list of specified URC end marks (fill in as needed, the fewer the better).
 */
#define AT_URC_END_MARKS  ":,\n"
/**
 *@brief Enable memory watcher.
 */
#define AT_MEM_WATCH_EN     1u
  
/**
 *@brief Maximum memory usage limit (Valid when AT_MEM_WATCH_EN is enabled)
 */
#define AT_MEM_LIMIT_SIZE   (8 * 1024)

/**
 *@brief Enable AT work context interfaces.
 */
#define AT_WORK_CONTEXT_EN  1u

/**
 * @brief Supports raw data transparent transmission
 */
#define AT_RAW_TRANSPARENT_EN  1u

void *at_malloc(unsigned int nbytes);

void  at_free(void *ptr);

unsigned int at_get_ms(void);

#endif
