CIPSEND

1.参数判定及处理
2.stAT_Tcpip_Paras *tcpipParas = &(g_uCipContexts.nTcpipParas[uMuxIndex]);//获取链接的信息
3. if (AT_CMD_LINE_BUFF_LEN < uLength || tcpipParas->uState != CIP_CONNECTED)//如果长度超过或者状态没连接好,则返回
4. if (!pParam->iExDataLen)判断外部数据长度,首次长度为0,执行at_CmdRespOutputPrompt(pParam->engine);,设置成 > 提示输入,设置成CMD_PARSE_MODE_FIXED,搜索CMD_PARSE_MODE_FIXED,在at_CmdPushData中调用,->at_CmdPushInRawMode等待提供符合长度的数据,UART等待输入。得到符合长度的数据,会将数据添加到cache,调用at_CmdRawFinished,设置成CMD_PARSE_MODE_LINE模式->at_ModuleRunCommandExtra 回到AT_TCPIP_CmdFunc_CIPSEND(???)->

        if (uLength == 0)//如果 不带设定的长度,即AT+CIPSEND
        {
            if (pParam->pExData[pParam->iExDataLen - 1] == 27)
            {//输入的是ESC,则取消发送
                AT_TC(g_sw_TCPIP, "end with esc, cancel send");
                AT_CMD_RETURN(at_CmdRespOK(pParam->engine));
            }
            else if ((pParam->pExData[pParam->iExDataLen - 1] != 26 || pParam->iExDataLen <= 1) && (!cipATS_setTimer))
            {//非正常结束
                AT_TC(g_sw_TCPIP, "not end with ctl+z, err happen");
                AT_CMD_RETURN(at_CmdRespCmeError(pParam->engine, ERR_AT_CMS_INVALID_LEN));
            }
        }
        else if (uLength != 0 && uLength != pParam->iExDataLen)(????)
        {
            AT_TC(g_sw_TCPIP, "pParam->iExDataLen=%d,uLength=%d", pParam->iExDataLen, uLength);
            AT_CMD_RETURN(at_CmdRespCmeError(pParam->engine, ERR_AT_CMS_INVALID_LEN));
        }
        
         if (tcpipParas->uProtocol != CFW_TCPIP_IPPROTO_UDP)
        {//如果不是UDP传输,进行send data,UDP传输会调用CFW_TcpipSocketSendto发送数据。
            iResult = CFW_TcpipSocketSend(tcpipParas->uSocket, (UINT8 *)pParam->pExData, (UINT16)pParam->iExDataLen - ((uLength == 0) && (pParam->pExData[pParam->iExDataLen - 1] == 26)), 0);
            if (iResult == SOCKET_ERROR)
            {
                AT_TC(g_sw_TCPIP, "TCPIP send socket data error");
            }
        }
        if (cipATS_setTimer)(????)
        {
            at_TCPIPBufDestroy(g_bypass_buf);
            g_bypass_buf = NULL;
        }
        AT_SetAsyncTimerMux(pParam->engine, 120);(异步timer作用????)
        当受到主机端发回的ack包的时候,lwip层会发送EV_CFW_TCPIP_SOCKET_SEND_RSP的 response,tcpip_rsp回复 SEND OK

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值