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.

[参考译文] CC3120:通过 POST 请求保持活动

Guru**** 2589275 points
Other Parts Discussed in Thread: CC3120, CC3100

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/769613/cc3120-keep-alive-with-post-request

器件型号:CC3120
主题中讨论的其他器件: CC3100

我正在将使用用户令牌获取和发布的 CC3100设计迁移到使用 MSP432的 CC3120设计。  令牌通过 CC3100等 https 服务器事件在 CC3120上工作。 通过帖子保持活动正在为我预期作为 httpserver 事件出现的帖子创建一个 NetAppRequest 事件。  我现在是否必须让 MSP432处理此 HTTP 请求?

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

    您好、Gary、

    之前由网络处理器处理而不唤醒主机的所有令牌(如器件和网络信息)在 CC3120上仍然有效。 CC3x20 NWP 编程人员指南在"HTTP 服务器"一章中提供了受支持令牌的完整列表、包括有关我的以下帖子的详细信息: http://www.ti.com/lit/swru455

    HTTP 服务器主机请求(需要由应用处理的请求)在第1代和第2代之间从令牌更改为 RESTful API。 您可以在便携式+ Wi-Fi SimpleLink Academy 中看到此新功能、其中讨论了基本的内部 HTTP 服务器: dev.ti.com/.../

    您还可以使用保留在主机驱动程序中的传统 API 进行移植、即 SimpleLinkHttpServerEventHandler。 如果您将第1代 HTTP 服务器回调的内容移至 CC3120应用代码中的 SimpleLinkHttpServerEventHandler、它应该会为您提供类似的功能。

    此致、
    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Sarah、
    我已经阅读过便携式+ Wi-Fi 示例、该示例帮助我了解了第2代的功能。 它还帮助我将令牌处理连接到 SimpleLinkHttpServerEventHandler。 当我从手机应用程序中获得以保持活动开头的 POST 令牌时、POST 令牌不会触发 SimpleLinkHttpServerEventHandler。 相反、保持活动触发 SimpleLinkNetAppRequestEventHandler、并且 POST 令牌是保持活动的一部分。 我已经了解了如何从 Portable + Wi-Fi 项目中添加 httpserver.c、但我添加了更多开销和另一个线程。 在第1代中、保持活动由网络处理器处理、并提取后令牌并传递给 HttpServerCallback。 如果时间允许、我们可能会在将来迁移到使用 SimpleLinkNetAppRequestEventHandler。 理想情况下、保持活动将像过去一样由网络处理器处理、并将 POST 令牌传递给 SimpleLinkHttpServerEventHandler。

    SimpleLinkNetAppRequestEventHandler 为我提供了以下事件包:

    AppID = 1.
    类型= 2
    句柄= 258
    pMetaData = 98
    元数据= HTTP/1.1 //无内容! application/x-www-form-urlencoded keep-alive irrigreen.net -_sl_P_UDB=Server:0|日期:2/6/2019|时间:10:58|
    pPayload = 45
    有效载荷=__SL_P_UDB=服务器:0|日期:2/6/2019|时间:10:58|

    我可以处理有效载荷、但必须为保持活动提供适当的响应。 如果能就如何开展工作提供任何建议,将不胜感激。
    Gary
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sarah、
    我明白了。 感谢您向正确的方向指示。 我只是需要更多一些代码来使 CC3120像 CC3100一样工作。 将以下代码放入 SimpleLinkNetAppRequestEventHandler 后、用户发布令牌和内容将传递给 SimpleLinkHttpServerEventHandler。

    Gary

    void SimpleLinkNetAppRequestEventHandler (slNetAppRequest_t * pNetAppRequest、
    slNetAppResponse_t * pNetAppResponse)

    UART_PRINT ("NetAppRequest.Event\n"\});

    switch (pNetAppRequest->Type)

    案例 SL_NetApp_Request_HTTP_POST:
    /*准备待处理的响应*/
    pNetAppResponse->Status = SL_NetApp_HTTP_RESPONSE_204_OK_NO_content;
    pNetAppResponse->ResponseData.pMetadata =空;
    pNetAppResponse->ResponseData.MetadataLen = 0;
    pNetAppResponse->ResponseData.pPayload =空;
    pNetAppResponse->ResponseData.PayloadLen = 0;
    pNetAppResponse->ResponseData.Flags = 0;
    中断;

    默认值:
    中断;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在上一篇帖子中添加了204个回复、这不是我想的解决方案。 我打开了手机上的数据包捕获应用程序、这似乎改变了动态。 在启用数据包捕获的情况下、我通过 SimpleLinkHttpServerEventHandler 接收 POST 请求、至少直到 POST 触发 SimpleLinkNetAppRequestEventHandler 为止。 根据数据包捕获应用程序、SimpleLinkNetAppRequestEventHandler 在收到帖子时未收到回复。 我正在使用 MSP-EXP432P4111启动板为新电路板准备代码。 我尝试更改时钟速度和 CC3120升压板、但没有更改。 如果我延迟来自 MSP432的响应、我会看到相同的结果只会延迟。 通常、在数据包捕获应用程序关闭的情况下、我从我们的应用程序接收3个生成 SimpleLinkHttpServerEventHandler 的 Get 字符串、然后接收触发 SimpleLinkNetAppRequestEventHandler 的帖子、之后该应用程序会抛出错误。 如果能提供有关下一步尝试的任何建议、我们将不胜感激。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Gary、

    您是否准备过账元数据、然后发回一个 NetAppRequest (sl_NetAppSend)? 在我的第一篇文章中链接到的 SimpleLink Academy 中,我在 httpPostHandle()中执行此操作。 SimpleLinkNetAppRequestEventHandler 没有像 SimpleLinkHttpServerEventHandler 那样将 SlNetAppHttpServerResponse_t 内置到该处理程序中。

    此致、

    Sarah

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

    您好、Sarah、

    我确实继续使用 SlNetAppHttpServerResponse 来响应该帖子。  我花了一点时间才知道如何添加到服务器头文件中、但在我完成后、我们的应用程序通过 SimpleLinkHttpServerEventHandler 完成了所有获取、并通过 SlNetAppHttpServerResponse 完成了所有发布、没有任何问题。  我还在通过 SlNetAppHttpServerResponse 实施 POST 解析。 我不确定为什么我无法通过 SimpleLinkHttpServerEventHandler 可靠地获取 POST 令牌、获取令牌正常工作。  在我看来,我似乎缺少一些东西。  对于 CC3100、我们有7个包含嵌入式 Get 令牌的网页、这些网页对应于我们编程到 CC3100闪存中的7个应用页面。  (我在 PC 上使用 Fiddler 来诊断我的 POST 响应问题。  在这个过程中、我注意到、如果我重复发送3个以上的 Get 请求、某些请求需要一秒钟以上的时间才能得到回复。  我可以尝试使用 SlNetAppHttpServerResponse 来查看是否更快)。

    Gary

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

    您能否举一个获取令牌与不会进入 SimpleLinkHttpServerEventHandler 的 POST 令牌的示例?

    新的 SimpleLinkNetAppRequestEventHandler 方法确实会将响应的准备传递给线程、而不是传递给处理程序内部 SimpleLinkHttpServerEventHandler 的方式、因此如果应用程序代码中存在其他操作、它可以更好地控制优先级。 我不认为它应该增加大量开销、因为它应该只是更改元数据是由应用 MCU 还是 NWP 准备的、但如果您看到差异、请告诉我。

    此致、
    Sarah
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sarah、
    我们与 CC3100一起使用的系统具有此表单。 www.irrigreen.net/dashboard.html?__SL_G_UDB。dashboard.html 位于 CC3100的文件系统中、html 中嵌入了__sl_G_UDB。 例如、使用 www.irrigreen.net/dashboard.html 发布__sl_P_UDB=Server:0的帖子与此帖子类似。 _sl_P_UDB 不在 CC3100文件系统中。 我使用 SimpleLinkNetAppRequestEventHandler 成功地实现了该帖子、但我收到500个内部服务器错误。 手机将忽略它、以便应用能够发布值。 当我将 Get 切换到 SimpleLinkNetAppRequestEventHandler 时、找不到 Get 资源。 当我使用 SimpleLinkNetAppRequestEventHandler 处理 Get 和 POST 时,响应是立即的,不会延迟。 如果我实现了 httpserver.c、我会稍微添加特性、并且不确定/dashboard.html 是否会成为问题。
    Gary
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sarah、

    我已经使用 SimpleLinkNetAppRequestEventHandler 完全实现了旧版 CC3100令牌,而 SimpleLinkHttpServerEventHandler 又调用了 SimpleLinkHttpServerEventHandler。  我喜欢这种解决方案、因为它消除了在 CC3120闪存上使用特殊令牌文件的需求、并重新使用了我们的 SimpleLinkHttpServerEventHandler 代码。  (之前提到的500内部服务器错误是我的、我错误地将响应缓冲区放置在函数内、因此它不会持久)。  

    对于 Get、我在请求数据中搜索 TLV 以查找 SL_NetApp_Request_metadata_type_HTTP_QUEST_string (即令牌)并检查令牌长度。  我使用 SimpleLinkHttpServerEventHandler 的事件和响应数据结构传递令牌并返回数据。  我们使用由 SimpleLinkHttpServerEventHandler 处理的多个令牌。  返回 Get 响应后、我会将其打包成 html、因为这正是我们的应用所期望的。  响应将分配给有效负载、并在元数据中添加内容类型标题。  (由于内容位于 html 内、因此不需要内容长度)。  自动生成服务器标头。  

    对于 POST、令牌位于有效负载的起始位置、因此我在 SimpleLinkHttpServerEventHandler 的 HttpPostData 结构中为令牌名称和令牌值(POST 数据位于令牌之后)分配令牌名称和令牌值。   响应为204_OK_NO_content。  (我最初遇到了问题,因为 Beacuse POST 标记不会发送到 SimpleLinkHttpServerEventHandler)。

    对于 Get 和 POST、将立即返回响应。  在这种有限的情况下、这比添加 httpserver.c 容易得多

    我确实找到了一个看起来是错误的东西。  起初、该帖子没有元数据、只有 SL_NetApp_HTTP_RESPONSE_204_OK_NO_content 响应、并且没有像 Get 中一样发送服务器标头。  当我添加服务器标头时、我得到了其中的2个。  我猜测元数据中可能需要有一些东西才能获取服务器标头、因此我在元数据中放置一个空格字符、然后自动发送服务器标头。

    我们可以关闭此主题、感谢您的支持。

    Gary

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您解释实施 Gary! 如果其他客户处于类似情况、我们非常感谢您的参与。

    我将检查您遇到的最后一个问题。 很高兴您现在发现了权变措施。

    此致、
    Sarah