#ifndef __AT_SERVER_H_
#define __AT_SERVER_H_

#include "sr_sunrise.h"

#define ARGC_LIMIT 5 /* 输入参数最大限制5个 */

/**
 * @brief AT指令的操作类型。
 */
typedef enum
{
    SR_AT_OPT_QUERY = 0x01,   /*! 查询命令 AT? */
    SR_AT_OPT_EXECUTE = 0x02, /*! 执行命令 AT */
    SR_AT_OPT_SET = 0x03,     /*! 设置命令 AT= */
} SR_AT_OPT_E;

/**
 * @brief AT指令结构体。
 */
typedef struct
{
    char *cmd;                                                 /*!< AT指令 */
    int (*deal_func)(SR_AT_OPT_E opt, int argc, char *argv[]); /*!< AT指令的处理函数 */
} SR_AT_CMD_T;

typedef int (*AtServerResponse)(char *data, uint16_t size);

/**
 * @brief AT组件管理器。
 */
typedef struct
{
    void *queue;           /* 消息队列 */
    SR_AT_CMD_T *table;    /* AT命令列表 */
    int tableNum;          /* AT命令个数 */
    AtServerResponse func; /* AT发送函数指针 */
} SR_AT_MNG_T;

SR_AT_MNG_T *SR_AtServerCreate(void);
int SR_AtCmdTableRegister(SR_AT_MNG_T *atServer, SR_AT_CMD_T *table, int tableNum);
int SR_AtServerSetResponseFun(SR_AT_MNG_T *atServer, AtServerResponse func);
int SR_AtSendToServer(SR_AT_MNG_T *atServer, uint8_t *pData, uint16_t datasize);
int SR_AtServerParse(SR_AT_MNG_T *atServer, uint8_t *pData, uint16_t datasize);
int SR_AtServerDestroy(SR_AT_MNG_T *atServer);

#endif
