Other Parts Discussed in Thread: MSP432E401Y
器件型号: MSP432E401Y
我已在 MSP432E401Y 上使用了以太网接口、 现在我正在尝试通过调制解调器添加对 PPP 连接的支持。 我已经做了很多在线阅读,并有它的大部分工作.
我移植了 TM4C129 示例中的代码。 我编写了处理调制解调器初始化和建立连接的例程。 然后、我将句柄传递到接收数据并将数据包推入堆栈的任务中。 这将启动成功的 PPP 协商、并分配 IP 地址。 然后使用连接的 IP 地址调用 netIPAddrHook 函数、就像以太网接口一样。 在 hook 函数中、我初始化 SlNet、并使用以下命令添加 PPP 接口:
status = SlNetIf_add(SLNETIF_ID_3, "ppp0",(const SlNetIf_Config_t *)&SlNetIfConfigNDKSec,8);
此时、我看到堆栈定期发送一个小数据包、串行接收任务接收和验证有效数据包并将其推入堆栈。 我认为这是一条大约每秒运行一次的 LCP 状态消息。
当我尝试打开套接字时、堆栈使用以太网接口、因为它的优先级更高。 当我拔下以太网电缆时、插槽出现故障、堆栈不会切换到调制解调器连接。 我还尝试使用 SlNetIf_setState 禁用以太网接口、并交换了两个接口的优先级。 这些更改都不会导致调制解调器连接上出现任何其他活动、我仍然看到 LCP 状态消息定期移动。
我找到了一些有关使用 STKEVENT_SIGNAL 发送链路建立消息并在接收任务中实现该消息的信息。 它在检测到一堆有效数据包已被解码后发出 LinkUp 信号。
我注意到调用 SlNetIf_getConnectionStatus 从不返回调制解调器连接的已连接状态。 我在代码中跟随了这一步骤、发现 PPP 驱动程序未实现 IOCTL 函数。 SlNetIf_getConnectionStatus 使用此值来获取接口的连接状态、因此不会通过该函数报告为已连接。 堆栈是否使用此函数? 这可能是它不切换的原因吗?
我还尝试了仅包含 PPP 接口的构建、获得相同的基本响应。 已建立 PPP 连接并分配了 IP 地址、但我无法创建任何套接字连接。
什么是我的缺失?