目的:自定义AT命令的基础
结构体
esp_at_cmd_struct 该结构体用来定义AT命令
typedef struct {
char *at_cmdName; /*!< at command name */
uint8_t (*at_testCmd)(uint8_t *cmd_name); /*!<测试命令函数指针 */
uint8_t (*at_queryCmd)(uint8_t *cmd_name); /*!<查询命令函数指针 */
uint8_t (*at_setupCmd)(uint8_t para_num); /*!< 设置命令函数指针 */
uint8_t (*at_exeCmd)(uint8_t *cmd_name); /*!< 执行命令函数指针 */
} esp_at_cmd_struct;
/**
* @brief esp_at_device_ops_struct
* 设备操作AT的函数结构
*/
typedef struct {
int32_t (*read_data) (uint8_t *data, int32_t len); /*!< 从设备读数据 */
int32_t (*write_data)(uint8_t *data, int32_t len); /*!< 写数据到设备 */
int32_t (*get_data_length)(void); /*!< 获取接收数据的长度 */
bool (*wait_write_complete)(int32_t timeout_msec); /*!< 等待写数据结束 */
} esp_at_device_ops_struct;
/*
*@brief esp_at_custom_net_ops_struct
*网络接收函数结构 for AT
*
*/
typedef struct {
int32_t (*recv_data)(uint8_t*data,int32_t len);
void (*connect_cb)(void);
void (*disconnect_cb)(void);
} esp_at_custom_net_ops_struct;
/**
* @brief esp_at_status
* some custom function interacting with AT
*
*/
typedef enum {
ESP_AT_STATUS_NORMAL = 0x0, /*!< 一般模式.mcu 可以发送AT command */
ESP_AT_STATUS_TRANSMIT, /*!<透传模式 */
} esp_at_status_type;
/**
* @brief esp_at_ops_struct
* AT的用户函数接口
*
*/
typedef struct {
void (*status_callback) (esp_at_status_type status); /*!< callback when AT status changes */
void (*pre_deepsleep_callback) (void); /*!< callback before enter deep sleep */
void (*pre_restart_callback) (void);
} esp_at_custom_ops_struct;
/**
* @AT特定的回调类型
*
*/
typedef void (*esp_at_port_specific_callback_t) (void);
// error number
/**
* @brief module number,Now just AT module
*
*/
typedef enum {
ESP_AT_MODULE_NUM = 0x01
} esp_at_module;
/**
* @brief 子类别编号
*
*/
typedef enum {
ESP_AT_SUB_OK = 0x00, /*!< OK */
ESP_AT_SUB_COMMON_ERROR = 0x01,
ESP_AT_SUB_NO_TERMINATOR = 0x02, /*!< 不以 "\r\n"结束 */
ESP_AT_SUB_NO_AT = 0x03, /*!< 没有发现 AT or at or At or aT */
ESP_AT_SUB_PARA_LENGTH_MISMATCH = 0x04, /*!< 参数长度不匹配 */
ESP_AT_SUB_PARA_TYPE_MISMATCH = 0x05, /*!< 参数长度不匹配 */
ESP_AT_SUB_PARA_NUM_MISMATCH = 0x06, /*!< 参数长度不匹配 */
ESP_AT_SUB_PARA_INVALID = 0x07,
ESP_AT_SUB_PARA_PARSE_FAIL = 0x08, /*!< 解析参数失败 */
ESP_AT_SUB_UNSUPPORT_CMD = 0x09,
ESP_AT_SUB_CMD_EXEC_FAIL = 0x0A,
ESP_AT_SUB_CMD_PROCESSING = 0x0B, /*!< 上一个命令正在处理 */
ESP_AT_SUB_CMD_OP_ERROR = 0x0C,
} esp_at_error_code;
#define ESP_AT_ERROR_NO(subcategory,extension) \
((ESP_AT_MODULE_NUM << 24) | ((subcategory) << 16) | (extension))
#define ESP_AT_CMD_ERROR_OK ESP_AT_ERROR_NO(ESP_AT_SUB_OK,0x00)
#define ESP_AT_CMD_ERROR_NON_FINISH ESP_AT_ERROR_NO(ESP_AT_SUB_NO_TERMINATOR,0x00)
#define ESP_AT_CMD_ERROR_NOT_FOUND_AT ESP_AT_ERROR_NO(ESP_AT_SUB_NO_AT,0x00)
#define ESP_AT_CMD_ERROR_PARA_LENGTH(which_para) ESP_AT_ERROR_NO(ESP_AT_SUB_PARA_LENGTH_MISMATCH,which_para)
#define ESP_AT_CMD_ERROR_PARA_TYPE(which_para) ESP_AT_ERROR_NO(ESP_AT_SUB_PARA_TYPE_MISMATCH,which_para)
#define ESP_AT_CMD_ERROR_PARA_NUM(need,given) ESP_AT_ERROR_NO(ESP_AT_SUB_PARA_NUM_MISMATCH,(((need) << 8) | (given)))
#define ESP_AT_CMD_ERROR_PARA_INVALID(which_para) ESP_AT_ERROR_