This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM6421:MCU+ SDK V8/ENET -如何获取异步 IO_CTRL 命令的返回值?

Guru**** 2392625 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1458707/am6421-mcu-sdk-v8-enet---how-can-i-get-the-return-value-to-an-asynchonous-io_ctrl-command

器件型号:AM6421

工具/软件:

我使用 ICSSG_FDB_IOCTL_ADD_ENTRY 和 ICSSG_FDB_IOCTL_REMOVE_ENTRY 在转发数据库(FDB)中添加和删除条目。
作为返回值、我获得了 ENET_IOCTL 调用的 ENET_SINPROGRESS、这是正常情况。
作为回调函数、我注册一个函数

fdb_entry_asyncIoctlCb (可能为 Enet_Event、uint32_t evtNum、void *evtCbArgs、void *arg1、void *arg2)

我能从回调函数的参数告诉操作是否成功吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    附录:
    在 icssg.c 函数 Icssg_pollHwQAsyncResp()的源代码中、您可以看到事件回调

    hIcssg->asyncCmdRespCbEvtInfo.evtCb (ENET_EVT_ASYNC_CMD_RESP 、0U、 hIcssg->asyncCmdRespCbEvtInfo.evtCbArgs 、(void * )&RESP、NULL);

    包含作为参数的响应(&resp)。
    您可以通过这种方式判断操作是否成功?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gerd:

    是的、正确、这就是您可以判断操作是否成功的方法。

    此致、
    Miriam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Miriam、
    非常感谢您的回答。 但这并不能完全回答我的问题。 作为对 IOCTL 命令的响应、我得到了类型为 Icssg_Ioctl CmdResp 的结构。 为了能够评估对命令的响应、我在哪里可以找到 Icssg_Ioctl CmdResp 参数的含义? (status、paramsLen、params)
    大概来说、随响应传递的附加参数(params)特定于命令。 不幸的是、我没有找到这方面的说明、因此无法解释对该命令的答复。

    Icssg_pollHwQAsyncResp()的摘录:

    /*对于状态为0x3的命令响应、其用于添加 FDB 条目的 cmd 响应。                   
    如果添加条目导致删除过期的 FDB 条目、则会返回给呼叫方
    响应参数*/

    如果(RESP.STATUS == 0x3){
     RESP.paramsLen = 2;
     memcpy (&resp.params、cmd->spare、2);
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gerd:

    感谢您的详细介绍、我已将此查询传递给特定团队、以便在此处获取更多详细信息。
    我将在本周之前回到这里。

    此致、
    Miriam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Gerd:

    很抱歉回复延迟、感谢您的耐心等待。

    异步 FDB IOCTL 命令返回 Icssg_Ioctl 类型 CmdResp 的结构。 结构的成员(即 status params[])分别填充结构 Icssg_Ioctl 命令的成员、即 param 和 spare[]、这分别从固件填充的硬件队列中弹出。
    这是在 Icssg_pollHwQAsyncResp()中完成的。

    首先、根据 FDB IOCTL 子命令类型、结构的部分或全部成员在函数 IcsgUtils_sendFdbCmd()中填充为 Icssg_Ioctl 命令。 感兴趣的成员详述如下:
    param = subcmd
    Type = FDB 命令
    SPARE[0]= MAC 地址字节0至3
    SPARE[1]= FID_C2 | FID_C1 | MAC 地址字节4至5
    spare[2]=宽边插槽

    这会传递到固件、固件会执行命令、固件状态会更新并推入硬件队列。

    这是如何判断操作是否成功?

    因此、返回的 resp.status 值将对应于固件的状态(resp.status = cmd->param)。
    如果命令执行成功、
    cmd->param = 0x01 (成功)
    如果命令执行失败、
    cmd->param = 0x10 (错误)

    resp.params 将保存上面提到的 cmd->spare[]详细信息、具体取决于子命令的性质。

    然而、从 Icssg_pollHwQAsyncResp ()[报价 userid="547016" url="~/support/processors-group/processors/f/processors-forum/1458707/am6421-mcu-sdk-v8-enet---how-can-i-get-the-return-value-to-an-asynchonous-io_ctrl-command/5659378 #5659378"]Icssg_pollHwQAsyncResp ()摘录中摘录:

    /*对于状态为0x3的命令响应、其用于添加 FDB 条目的 cmd 响应。                   
    如果添加条目导致删除过期的 FDB 条目、则会返回给呼叫方
    响应参数*/

    如果(RESP.STATUS == 0x3){
     RESP.paramsLen = 2;
     memcpy (&resp.params、cmd->spare、2);
    }
    RESP.status == 0x03不与固件返回值对齐、因此已在内部采取措施来更新此值、并添加更多注释以了解 RESP.status 中的成功/失败状态。 未来版本会跟踪此情况。

    感谢您的提问、如果您有进一步的说明、请告知我们。

    此致、
    Miriam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。  SDK 中是否有头文件、我可以在其中找到成功/错误的定义?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gerd:

    [引述 userid="538813" url="~/support/processors-group/processors/f/processors-forum/1458707/am6421-mcu-sdk-v8-enet---how-can-i-get-the-return-value-to-an-asynchonous-io_ctrl-command/5701292 #5701292"]
    因此、返回的 resp.status 值将对应于固件的状态(resp.status = cmd->param)。
    如果命令执行成功、
    cmd->param = 0x01 (成功)
    如果命令执行失败、
    cmd->param = 0x10 (错误)
    [/报价]

    目前、SDK 中尚未定义这些固件状态。 我们正在跟踪将其添加到未来版本中。

    此致、
    Miriam