MTK6276拨号建立数据连接后如何中断

因为硬件限制,modem和mcu只能通过1个uart口通讯,MTK平台CMUX默认都是关闭的,所以在使用ATD*99#拨号成功后,AT指令会被堵住

根据MTK的答复有以下3中方法中断数据连接:

主动断开拨号方法: 

1. 先下+++切到AT模式,然后下ATH或AT+CGACT=0 

2. 在AP端直接发送断开数据连接的数据包 

3. 拨号上网,贵司应该会配置一个对应的网络连接,可以在网络连接上直接操作断开。 


我无法解析PPP数据,第2点无法验证

第3点经过验证也是可以的,不过方法比较粗暴,作为后续解决方案

直接调用mmi_cnmgr_disconnect_all_bearer_pre_handler的应用层函数,最终发送MSG_ID_MMI_ABM_DISCONNECT_REQ消息中断网络连接

第1点是常规方法,不过测试过程中发现,拨号成功的状态下,如果对方没有任何回复,即没有通过握手进入激活状态,下+++是无效的

尝试修改:

查看代码,整理一下流程,+是作为EscChar,在UART_RecHandler会判断接收的字符是否是EscChar,

            /* detect escape sequence  */
            if (UARTData->Rec_state != UART_RecNormal)
            {
               if (cRXChar == UARTData->ESCDet.EscChar)
               {
                  UARTData->EscCount++;
                  if(UARTData->EscCount == 3)
                  {
                     UARTData->Rec_state = UART_Get3EscChar;
                  }
                  else if(UARTData->EscCount > 3)
                  {
                     UARTData->Rec_state = UART_RecNormal;
                     UARTData->EscCount = 0;
                  }
               }

然后系统会调用UART_Calback,根据UARTData->Rec_state的状态,UART_Get3EscChar发送消息MSG_ID_UART_ESCAPE_DETECTED_IND来中断数据连接

但是在实际测试过程中发现,uart中断并没有调用UART_RecHandler,所以UARTData->Rec_state一直是0,无法发送消息出去

尝试在uart口收到“+++”命令时,直接发送MSG_ID_UART_ESCAPE_DETECTED_IND消息,测试是可以中断数据连接的

UART_Handler函数中SIO_CMD_GET_BYTES状态下判断如果buffer是+++,则直接发送消息

UART_sendilm(uart_port1, MSG_ID_UART_ESCAPE_DETECTED_IND);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值