RT-Thread-packages / ppp_device

lwIP PPP porting for GSM modem (like sim800)
Apache License 2.0
39 stars 32 forks source link

ppp_recv_entry中的PPP_STATE_PREPARE下,丢掉脏数据的处理不合理 #26

Open denghengli opened 3 years ago

denghengli commented 3 years ago
    if (device->state == PPP_STATE_PREPARE)
    {
            ......
            /* throw away the dirty data in the uart buffer */
            rt_device_read(device->uart, 0, buffer, PPP_RECV_READ_MAX);
            .....
    }

在ppp_recv_entry中,模块拨号成功后,加了清理脏数据处理。如果真有脏的数据,这样最多也只能清理掉PPP_RECV_READ_MAX(32字节)长度的数据吧,如果RT_SERIAL_RB_BUFSZ比PPP_RECV_READ_MAX大,是清理不干净的

xiangxistu commented 3 years ago

确实是有这个可能性的,一般来说,AT 命令开启 PPP 拨号后,一旦模块回复了 connent ,后续的数据就为 PPP 格式的数据。

不过在 master 版本,已经删掉了这个逻辑;在具体的使用中发现,ppp 的帧结构有压缩的情况;而且 lwip 内部也有对 ppp 完整性的判断,所以在 1.0.0 后就删除了这个逻辑。直接把数据交到 lwip 的 ppp 中去匹配了。