AT指令的添加

四种命令类型

  • : 确认符

  • : 换行符

  • <…>: 参数名称,尖括号不体现在命令行中

  • : 空格符

指令名称AT命令语法传入参数
设置AT+CMD=AT_CMD_SET
执行AT+CMD[=]AT_CMD_EXE
测试AT+CMD==?AT_CMD_TEST
查询AT+CMD?AT_CMD_READ

AT指令的实现

1.在AT命令表中添加AT名称和对应函数

在这里插入图片描述

+QWETEST,			AT_CmdFunc_QWETEST,   SA_CMDCLS_GPRS, 1, AT_CGSMS_PERM

第一个参数为AT指令名,第二个参数为该指令调用的函数

2.根据所需AT功能添加case

VOID AT_CmdFunc_QWETEST(AT_CMD_PARA *pParam)
{
    uint8_t ask[10] = {0}; 
    uint8_t buf[100] = {0};
    INT32 iResult = 0;
    UINT8 uParamCount = 0;
    UINT16 uSize;
    
    if (NULL == pParam)
    {
        AT_CMD_RETURN(at_CmdRespCmeError(pParam->engine, ERR_AT_CME_PARAM_INVALID));
    }

    switch (pParam->iType)
    {
    //设置参数,一次获取输入的几个参数进行操作
    case AT_CMD_SET:
    {
        iResult = AT_Util_GetParaCount(pParam->pPara, &uParamCount);
        if ((iResult != ERR_SUCCESS) || (uParamCount != 1))
        {
             AT_CMD_RETURN(at_CmdRespError(pParam->engine));
        }
        uSize = sizeof(buf);
        iResult = AT_Util_GetParaWithRule(pParam->pPara, 0, AT_UTIL_PARA_TYPE_STRING, buf, &uSize);
        
        strcat(buf, "\n");
        putout(pParam, buf);
        //AT_AsyncWriteUart(pParam->engine, buf, AT_StrLen(buf));
        //COS_LOGI(0, "GetParaWithRule, serverIpType=%d", buf);
        if (iResult != ERR_SUCCESS)
        {
             AT_CMD_RETURN(at_CmdRespError(pParam->engine));
        }
        AT_CMD_RETURN(at_CmdRespOK(pParam->engine));
        break;
    }
    //执行不需要获取参数的命令
    case AT_CMD_EXE:
    {
        
        //putout(pParam,ask);
        strcpy(ask,"test EXE");
        at_CmdRespInfoText(pParam->engine, ask);
        AT_CMD_RETURN(at_CmdRespOK(pParam->engine));
        break;
    }
	//查询参数范围,
    case AT_CMD_TEST:
    {
        sprintf(buf, "+QWETEST: (0-1)");
        at_CmdRespInfoText(pParam->engine, buf);
        AT_CMD_RETURN(at_CmdRespOK(pParam->engine));
        /*NW_Print("uParamCount = %d\n",uParamCount);
        at_CmdRespOK(pParam->engine);*/
        break;
    }
    //查询现在状态        
    case AT_CMD_READ:
    {
        sprintf(buf, "+QWETEST READ");
        at_CmdRespInfoText(pParam->engine, buf);
        //AT_AsyncWriteUart(pParam->engine, "+read ok\n", AT_StrLen("+read ok\n"));
        AT_CMD_RETURN(at_CmdRespOK(pParam->engine));

        break;
    }
    default:
    {
        COS_LOGI(0x1000476c, "QWETEST ERROR");
        AT_CMD_RETURN(at_CmdRespCmeError(pParam->engine, ERR_AT_CME_PARAM_INVALID));
    }
    }
    return;
}

AT指令如果一定有需要阻塞的部分 要单独注册一个回调去执行

3.AT测试

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值