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.

[参考译文] LAUNCHXL-CC3235S:2个 WiFi 模块之间的通信、用于从毫米波雷达到 PC 的数据传输

Guru**** 2480195 points
Other Parts Discussed in Thread: IWR6843, TIDA-010022, CC3235S

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/908377/launchxl-cc3235s-communication-between-2-wifi-modules-for-data-transfer-from-mmwave-radar-to-pc

器件型号:LAUNCHXL-CC3235S
主题中讨论的其他器件:IWR6843TIDA-010022CC3235S

1、已经3天了、我无法在 TI 网站上下载 cc32xx SDK、请提供另一个链接。

我的目的是通过 wifi 将跟踪数据从 IWR6843传输到 PC。 我可以通过 SPI 将 IWR6843直接连接到 CC3235、而 CC3235通过 UART (USB)连接到 PC、对吧?

3.我是否必须通过 TCP/IP 在2个 CC3235模块之间进行通信? 还有其他方法吗? 请为我提供源代码的路径、并举例说明这2个模块之间的通信。

4.如果我使用 mmWave SDK 03_03_00_03、它是否与 用于 IWR6843和 CC3235之间通信的 SimpleLink CC32XX SDK 4.10.00.07匹配?  

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

    Hector、

    我在下载 SDK 时没有问题。 尝试清除缓存和 Cookie 并重试、或使用其他浏览器。 以下是链接: http://www.ti.com/tool/download/SIMPLELINK-CC32XX-SDK

    是的、您可以使用 SPI 传输数据。 我不熟悉毫米波器件、因此我们需要与他们联系、以了解在这里可以实现的功能。  

    要通过 Wi-Fi 发送数据、您需要创建套接字并通过 UDP 或 TCP 发送数据。 您可以查看我们的 SimpleLink 学院的实验、这些实验应该有助于您了解我们的器件。

    http://dev.ti.com/tirex/explore/node?node=ACXX7T0yv567-BCqBKH.uw__fc2e6sr__LATEST

    BR、

    Vince

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

    文森特

    请向我发送 使用毫米波雷达的 TIDA-010022人员计数和跟踪源代码以供参考。  

    我下载了 CC32xx SDK。 在驱动程序路径  中,我看到 UART 有两个版本:UARTCC32XX.c 和 UARTCC32XXDMA.c。 有什么区别? 何时使用它们中的每一个?

    2.如果我想通过 UART 或 SPI 将数据从另一个器件发送到 CC3235、我可以使用哪个函数来接收这些数据?  

    UARTCC32XX.c 代码中的 UARTCC32XX_READ 和 UARTCC32XXDMA_READPolling 有何区别?

    4、CC32xx SDK 中 TCP/IP 和 UDP 的示例代码在哪里?

    5.请向我发送 pdf 文档和源代码,用于2个 CC3235模块之间的 TCP/IP 和 UDP 通信。 我无法访问您发送的链接。

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

    Hector -  

    对于 UART、请在 drivers 示例文件夹下查找一个示例。 UART 的区别在于使用 DMA 发送/接收字符。

    对于 TCP/UDP、请在"Demos"下查找网络终端示例

    我建议从查看示例项目开始、您可以构建和测试这些项目、然后以自己的方式修改它们。 我没有该 TI 设计的源代码、请创建一个新的申请帖子、并将其发送给相应的团队。

    BR、

    Vince

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

    文森特

    SDK 中的 UART 能否仅发送/接收字符? 如何传输具有不同数据类型(数据结构、整数组...)的跟踪数据 TI 毫米波传感器提供的? 请简单地编写示例代码、让 CC3235读取从传感器测量的数据结构

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

    您好!

    这是 C 语言的一般问题、与 CC32xx 或毫米波无关。 请参阅 C 语言的一些介绍。

    例如、使用可以使用以下内容:

    char dataBuffer[10];
    
    //如果您不想对齐结构
    #pragma pack (push、1)
    typedef 结构{
    char id;
    int len
    ;}myStructDef;
    #pragma pack (pop)
    
    #define myStruct (myStructDef*)&dataBuffer[0]);myStruct
    
    
    
    
    ("%2x">myStringf);%2x (<printf);%datasurf (<trabu</trabu</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</tru</ 

    1月

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

    您好、Jan、

    TI 工程师告诉我、请查看 SDK 中的 network_terminal、以了解通过 TCP/IP 与2个 WiFi 模块进行通信的方式。 但我检查了源代码没有实现套接字(未使用)。 请告诉我如何将数据从 CC3235传感器节点传输到 CC3235收集器节点。

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

    您好!

    是的、回答正确。 请继续执行 network_terminal 示例。

    上面的异步处理程序与通过套接字发送数据的位置无关。 请参阅使用 sl_Send() sl_Recv()的代码部分。 有关如何使用套接字 API 的好示例、请访问 TI Resource Explorer 中的 SimpleLink Academy。 如果您仍然无法打开 TI Resource Explorer、正如我记得您之前的一些回答中所述、您应该在第一步中使用计算机解决此问题(请咨询您的网络管理员或 ISP)。

    1月

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

    您好、Jan、

    1.我发现 socket_cmd.c 包含 TCP 服务器/客户端代码。 我是否需要将 socket_cmd.c 中的代码集成到 network_terminal.c 中、然后针对我自己的应用进行构建? 我是否可以将雷达跟踪数据放入 socket_cmd.c 中、以便将雷达数据传输到 CC3235收集器并保持 network_terminal.c 为原始数据?

    2.我在 TCPServer 中看到 IPv6。 何时应设置 IPv6或 IPv4?

    3.关于 NB -设置套接字类型:阻塞或非阻塞。 何时使用非阻塞或阻塞?  

    关于问题2和3、我看到自述文件建议不分块而不是分块和 IPv6、而不是 IPv4、但不知道原因。

    我看到非阻塞套接字允许用户处理其他任务、而不是阻止套接字 API 调用。 它是否与多线程相同?

    4. SendcmdCallback & FreeSendCmd (&SendCmdParams)的用途是什么? 我认为这并不是真正必要的、对吧?

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

    您好!

    1.如果您要从已连接到 WLAN 的 CC32xx 器 件发送数据、则需要使用套接字 API /sl_Send ()、sl_Recv ()等。/有关套接字通信的说明、请参见 SimpleLink Academy 演示或第6章。 network_terminal 示例是一个围绕 sl_套接字 API 调用的"包装程序"。

    2.如果您希望在两个 CC3235器件之间进行通信(一个是 STA、另一个是 AP 模式)、则应使用 IPv4。 如果您已将两个器件连接到基础设施 AP (两个器件均处于 STA 模式)、则应根据网络基础设施的功能选择 IP 版本。

    3.阻塞插座和阻塞插座之间的选择取决于应用的设计。 这个选择由你决定。 但是、通常情况下、如果您想使用 CC32xx 器件的省电模式、则应选择阻塞套接字。

    4.我不熟悉 network_terminal 示例的这一部分。

    1月

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

    您好、Jan、

    在 socket_cmd.c 代码中、TCPServer (uint8_t NB、uint16_t portNumber、uint8_t IPv6、uint32_t numberOfPackets、 uint8_t TX)

    也就是说、如果 TX = True、此函数将发送数据、TX= false 将接收数据。 我认为 TX 应该是 bool 而不是 unit8_t、不是吗?

    2.原始 TCP 服务器代码 sl_Send (newsock、&APP_CB.gDataBuffer.nwData、buflen、0)

    如果我执行 UART_Read (handle、rxBuf)从 IWR6843获取雷达数据、那么我只需将 rxBuf 放置在 sl_Send 的第二个参数中、以替换&APP_CB.gDataBuffer.nwData、而不必使用 APP_CB (appControlBlock_t 结构)、对吧?  

    我能否在 TCP 服务器功能内初始化 UART? 我担心会像在 SPI 和 UART 初始化之间同时发生冲突一样发生冲突。

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

    您好!

    请参阅 socket_cmd.c 中的源代码:

    IF (TX)
    {
    
    …
    状态= sl_Send (newsock、&app_CB.gDataBuffer.nwData、buflen、0);
    
    } 否则{
    
    (笑声)
    状态= sl_Recv (newsock、&APP_CB.gDataBuffer.nwData、MAX_BUF_SIZE
    
    、} 

    请参阅 SL_ API 调用的文档。 所有参数都在此处进行了说明。 第一个参数是对打开的套接字的句柄、2个参数是对数据的指针、第三个参数是数据的长度。

    您可以在任何需要的位置初始化 UART。 但通常所有初始化都在代码的开始阶段完成。 因为这可以防止您在再次调用函数时多次意外初始化。

    您是编程人员、代码设计由您决定。

    1月

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

    您好!

    1.如何设置 端口号、TCP 服务器/客户端的 IP 地址彼此匹配? 在 socket_cmd.c 中,它们只写入 TCPServer(),而不声明 portNumber、IP 地址、 numberOfPackets。

    2.如果我想将 CC3235模块设置为 STA 或接入点、则必须在刷写之前在 Image Creator 上设置该模块、对吧? P2P 如何? 何时使用?  

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

    您好!

    1.很抱歉,我不理解你的问题。 因为在函数 TCPServer()中,端口号肯定设置为:

    int32_t TCPServer (uint8_t NB、
    uint16_t portNumber、
    uint8_t IPv6、
    uint32_t numberOfPackets、
    uint8_t TX) 

    您不应忘记 network_terminal 只是一个演示项目。 您需要根据需要更改此代码。

    2.如果要从 CCS 进行调试、则无需上载 sFlash 的内容。 如果您想对持续器件复位的代码进行编码、则需要上传闪存内容。 有关 P2P 模式的详细信息、请参见 swru455第4.5章

    1月

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

    您好、Jan、

    1.我是说我在不使用 TI SKD 之前已经完成了 TCP/IP 代码。 通常,我们必须为每个设备(服务器/客户端)设置端口号和 IP 地址。 但在 network_terminal.c 中、我看不到这些设置。

    2.在用户指南中学习套接字命令后,我没有看到用于检查服务器/客户端通信是否正常的部分。 我正在尝试将 network_terminal 示例代码刷写到2 个 CC3235S 模块。 如果服务器成功地从客户端获取数据、我们如何检查该消息? 通常、如果我们使用 UART、我们可以使用 Teraterm 进行检查。 如何在 TI SDK 中通过 TCP/IP 检查数据?

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

    您好!

    这取决于您的需求、代码设计、计算机网络知识等 没有通用的答案。 您有许多选项、例如:

    • 调试期间、您可以使用调试器直接在 CCS 中读取/显示数据(存储器位置变量)
    • 您可以通过 UART 向计算机发送数据
    • 您可以通过 TCP 或 UDP 将值发送到您的计算机
    • 您可以在器件 Web 上显示值
    • 您可以重视某些云服务等

    但是、根据这个论坛上的所有问题、我认为您应该尝试两种首选方法。

    您在学校/家庭项目或商业项目中工作? 如果是商业项目、那么我恐怕您正准备好使该项目失败。 也许您应该稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍稍

    • 数字逻辑基础知识和对电子原理图的理解
    • C 语言简介
    • 实时操作系统简介
    • 计算机网络基础知识

    1月

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

    1月、

    1.我的经理希望我将数据从 CC3235传感器节点作为 WiFi 直接模式发送到 PC。 因此 、通过 UART 检查收集器节点中的数据不是他的要求。 如何在本例中检查?

    2.关于 CCS 上的调试模式:您是否意味着我们设置 CC3235收集器节点 J9跳线以路由到 COM 端口并连接到 PC 上的 CCS? 我认为它与 UART 方法相同、不是吗?

    3. 我的计算机中的 TCP 或 UDP:您能告诉我如何使用此方法检查接收到的数据吗? 您是否意味着我只需要使用一个 CC3235、通过套接字发送数据、并在 PC 上编写另一个套接字代码来接收数据? 是否有任何命令窗口可用于查看消息/数据? 我认为这是 WiFi Direct 模式、对吧? 如果是、CC32XX SDK 中的哪个示例涉及此方法?

    您能否通过 UART 或 SPI 以及 CC3232XX 的 WiFi 直接模式与外部器件共享 CC3235之间的工作程序? 我将引用它、不打算复制/粘贴。

    以前、我在 Arduino 上正常处理 UART、SPI、TCP/IP。 但我不熟悉 TI SDK 和器件。

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

    您好!

    1.您可以通过 TCP 或 UDP 将数据从 CC32xx 发送到您的计算机。 在计算机端、您需要自行创建应用程序来解释此数据。 也可以使用一些用于显示数据的 TCP/UDP 软件。 选择由你决定。 但这与 CC32xx 器件绝对不相关、它需要计算机网络工作原理的基本知识。 如果选择 TCP 连接、则可以将 CC32xx 用作 TCP 服务器或客户端。 选择也由您决定。

    2.不 我是说在 CCS 中使用调试器(JTAG/SWD)、使用断点等。

    3.您需要使用一些 TCP 终端软件在 PC 上发送/接收数据(例如,telent、PuTTy、ipref 等)。 您需要知道自己的要求是什么。 但是、如果您想将数据发送到计算机、只使用一个模块是有道理的。 您可以在互联网上搜索如何在 Windows 上通过 TCP 连接接收/发送数据(本主题与 CC32xx 器件无关)。 如果您希望在 CC32xx 和计算机之间进行直接通信(不使用任何接入点)、则应使用 P2P 模式(=Wifi Direct)。 例如、"网络终端"支持 P2P 模式。

    1月

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

    您好、Jan、

    我使用 Teraterm by WLAN & socket 命令测试了 network_terminal。 状态如下:

    1. WLAN:当我运行扫描-n 30时,在我仍然得到我所在区域的网络列表之前。 然后运行命令:

    setpolicy -i 30 -c 1D5 -r -48
    wlanconnect -s "myhome network" -t WPA2 -p "password" -ip 10.123.45.11
    p2pstart 


    我看到 Teraterm 仍然显示消息、因为这些命令可以正常工作。

    但在我关闭 CC3235大约1小时后。 然后、我再次进行测试。 这次 WLAN 扫描命令没有像以前那样显示网络列表:scan -n 30命令显示消息: [scan]:无法检索网络列表。

    2.套接字命令:  

    send -c 10.123.45.6 -p 5050 -n 2000

    它总是显示: 没有这样的命令

    这是 Teraterm 屏幕的照片

    请解释 WLAN 和套接字命令为什么会出现这些问题。 谢谢你。

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

    您好!

    请等待其他用户的输入。

    1月

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

    尊敬的 Vincent:

    1.如何在无需使用 Teraterm 中的命令的情况下使设备直接相互通信(在 network_terminal 示例中)? 我的意思是、只需打开器件并连接、即可自动发送/接收数据、而无需键入任何命令。 例如、STA 可以检测 AP 的 SSID、IP 地址以自动连接和发送数据、因此每次打开 Teraterm 时、我不必再次键入。

    2.我检查了 network_terminal。 据我了解、即使我想通过套接字发送/恢复数据、我仍然需要先初始化并连接 WLAN 吗?

    如果我想让2个 CC3235S 模块进行通信、 如何设置 IP 地址、网关... 每个模块? 目前、我仅在 AP/Wifi Direct Go In Image Creator 中为 AP 模块的 IP 地址设置网络设置10.123.45.6 、STA 模块  的 IP 地址为  10.123.45.1.这2个模块可以通过 Teraterm 成功通信。

    我是否需要注意其他设置?

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

    Hector、

    我会尽力回答这些问题-  

    1.从 Wi-Fi 的角度来看,您需要连接到另一台设备才能传输数据。 一种架构是 STA-AP、这在家庭用例中最为常见。 您有一个用作接入点的路由器、所有 Wi-Fi 设备都以基站的方式连接到它。 在连接过程中、它们会被关联并进行身份验证。 此步骤可确保器件能够连接到网络、并具有用于连接的凭据(WPA2-WPA3密码)。 连接后、通常设备将执行 DHCP 以获取在网络内外发送数据所需的 IP 地址、网关和 DNS 服务器。 如果在 wlanconnect 中指定 IP 地址、则设置静态 IP 地址。 这意味着设备将跳过 DHCP 步骤、并假定它已经知道其 IP 是什么以及其他参数。 如果执行此操作、还需要设置网关地址、以便器件正确发送数据。 我个人不会分配静态 IP 地址、除非您知道自己在做什么。

    假设您现在有两个 LaunchPad 连接到同一网络并通过 DHCP 获取 IP 地址(应看到带有 IP 地址的 TeraTerm 输出)。 接收数据的下一步是打开器件上的套接字。 这是通过 SEND/RECV 命令完成的。 您首先需要将 Recv 端设置为服务器、并指定所需的所有参数。 接下来,您可以使用 SEND 命令将数据发送到特定的 IP 地址/端口组合。  

    所有这些都通过以下链接完成: https://dev.ti.com/tirex/explore/node?node=ALWtZjCm8OuMpFE4qMu3DQ__fc2e6sr__LATEST

    2.是的、您必须连接到 AP 才能发送数据。

    3.您是否希望在器件上执行 P2P 模式或 STA 模式? 这些是不同的模式、不能同时完成。 P2P 是 STA-AP 方案的替代方案、在该方案中、器件可以直接协商并相互连接、而无需 AP。 这是完全不同的、因此我不知道您需要如何使用此模式。

    最后、网络终端示例是展示我们器件的许多不同功能和特性的演示。 该示例非常适合演示、但我不建议使用它来创建成熟的软件设计。 想法是、您可以将函数拉出示例并将其添加到软件中。 如果您希望更自动地执行操作、那么这就是您必须执行的操作。  

    BR、

    Vince

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

    尊敬的 Vincent:

    感谢您的回复。 据我所知,即使是 WLAN、套接字、netapp...的处理程序 仅用于通过控制台窗口中的命令进行 IP 地址采集和通信。 如果我们要执行 WLAN 初始化、让器件无需在 Teraterm 中执行命令即可获取其 IP 地址、我们必须编写单独的函数 、例如 Wlanconnect()、IPget()、TCPServer() 以执行 sl_WlanSetMode (Role_STA)、 sl_NetCfgSet ()、sl_Send、sl_Recv... 对吧?

    目前、我有一个问题:我必须使用1 个 CC3235模块通过 UART 从 IWR6843接收数据、因此我必须使用 BoosterPack 接头上的 UART 引脚并将 J9、J10跳线设置到底部。 如果是、UART 不再路由到 COM 端口。 因此、我无法使用 Teraterm 为 AP 初始化 WLAN。 请告诉我在 Teraterm 中设置通信而无需执行命令的最佳方法。

    下面是我在 Teraterm 中执行命令时 AP 和 STA 之间通信的简要代码。 如果我对事件处理程序的目的和我提到的其他事情的想法有任何问题、请告诉我:

    静态 long ConfigureSimpleLinkToDefaultState ()
    {
    lMode = sl_Start (0、0、0);
    //如果器件不处于站点模式,请尝试在站点模式下配置它
    if (Role_STA!= lMode)
    {
    如果(Role_AP == lMode)
    {
    //如果器件处于 AP 模式,我们需要等待该事件
    //然后再执行任何操作
    while (!is_ip_acquired (g_ulStatus))
    {
    #ifndef sl_platform_multi_threaded
    _SlNonOsMainLoopTask();
    #endif
    }
    }
    
    //切换到 STA 角色并重新启动
    lRetVal = sl_WlanSetMode (Role_STA);
    ASSERT_ON_ERROR (lRetVal);
    
    lRetVal = sl_Stop (0xFF);
    ASSERT_ON_ERROR (lRetVal);
    
    lRetVal = sl_Start (0、0、0);
    ASSERT_ON_ERROR (lRetVal);
    
    //检查设备是否再次处于工作站中
    if (Role_STA!= lRetVal)
    {
    //如果器件未以 STA 模式启动、我们不想继续
    返回 DEVICE_NOT IN_STATE_MODE;
    }
    }
    //将连接策略设置为 Auto + SmartConfig
    // (设备的默认连接策略)
    lRetVal = sl_WlanPolicySet (sl_policy_connection、
    sl_connection_policy (1、0、0、1)、 空,0);
    lRetVal = sl_WlanDisconnect ();
    //启用 DHCP 客户端
    lRetVal = sl_NetCfgSet (sl_IPv4_STA_P2P_CL_DHCP_ENABLE、1、&ucVal);
    ASSERT_ON_ERROR (lRetVal);
    }
    
    静态长 WlanConnect ()
    {
    ConnectCmd_t ConnectParams;
    //ConnectParams.secParams ={0};
    //long lRetVal = 0;
    int32_t ret = 0;
    
    //ConnectParams.secParams.Key =(signed char*) security_key;
    //ConnectParams.secParams.KeyLen = strlen (security_key);
    //ConnectParams.secParams.Type = SECURITY_TYPE;
    
    memset (ConnectParams、0x0、sizeof (ConnectCmd_t));
    
    RET = sl_WlanConnect ((const signed char *)(ConnectParams.SSID)、
    strlen(
    (const char *)(ConnectParams.SSID))、0、
    ConnectParams.secParams、0);
    ASSERT_AND_CLEAR_CONNECT (RET、WLAN_ERROR、ConnectParams);
    
    //lRetVal = sl_WlanConnect ((signed char*) SSID_NAME、strlen (SSID_NAME)、0、&secParams、0);
    //assert_ON_ERROR (lRetVal);
    
    /*等待*/
    /*while ((!is_connected (g_ulStatus)))||(!is_ip_acquired (g_ulStatus)))
    {
    //等待 WLAN 事件
    #ifndef sl_platform_multi_threaded
    _SlNonOsMainLoopTask();
    #endif
    }*/
    
    if (!is_connected (app_b.Status))(如果!is_connected (app_bc.Status)
    {
    RET = SEM_WAIT_TIMEOUT (&APP_CB.CON_CB.connectEventSyncObj、
    wlan_event_tout);
    if (ret ==timeout_sem)
    {
    UART_PRINT ("\n\n\r\n[wlanconnect]:连接到 AP 的超时:%s\n\r\n、
    ConnectParams.ssid);
    //FreeConnectCmd (ConnectParams);
    return(-1);
    }
    }
    
    if (!is_ip_acquired (app_cb.Status))(如果!is_ip_acquired (app_c
    {
    RET = SEM_WAIT_TIMEOUT (&APP_CB.CON_CB.ip4acquireEventSyncObj、
    wlan_event_tout);
    if (ret ==timeout_sem)
    {
    /*在下一步尝试获取 IPv6,
    路由器/AP 可能不支持 IPv4 *
    UART_PRINT (
    "\n\r\n[wlanconnect]:获取 IPv4地址超时。\n\n");
    }
    }
    
    return (0);//Success;
    
    }
    
    int32_t BsdTcpServer (unsigned short usPort)
    {
    SlSockAddrIn_t sAddr;
    SlSockAddrIn_t sLocalAddr;
    内部 iCounter;
    内部 iAddrSize;
    内部 iSockID;
    内部 iStatus;
    内部 iNewSockID;
    长 lLoopCount = 0;
    长 lNonBlocking = 1;
    内部 iTestBufLen;
    
    //填充缓冲区
    for (iCounter=0;iCounter "recieved="" %u="" successfully\n\r",g_ulpacketcount);="" close="" after="" receiving="" assert_on_error(istatus,="" sl_socket_error);="" return="" 0;="" success="" void="" *="" mainthread(void="" *arg)="" int32_t="" retval="" pthread_attr_t="" pattrs_spawn;="" sched_param="" priparam;="" timespec="" ts="{0};" initializes="" spi="" interface="" network="" processor="" and="" peripheral="" (if="" defined="" in="" board="" file)="" spi_init();="" gpio_init();="" init="" application="" variables="" terminal="" uart="" initterm();="" mmwavetaskinit();="" acquire="" ip="" by="" this="" function="" configuresimplelinktodefaultstate();="" wlanconnect();="" bsdtcpclient(port_num);="" bsdtcpserver(port_num);="" ...="" }
    

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

    您需要将一个设备设置为服务器、并将另一个设备设置为客户端。 在您的代码中、这看起来是服务器端正确的吗? 您将需要与其他设备上的客户端相同、但需要相同的。

    BR、

    Vince

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

    尊敬的 Vincent:

    我在 socket_cmd.c 中看到 cmdRecvCallback(),它通过 sl_WlanRxStatStart 和 sl_WlanRxStatGet 以 drawRxHist ()发送数据。 对于我的应用程序,没有必要使用 cmdRecvCallback(),但调用 TCPServer()和 TCPClient(),因为每个设备都可以传输数据,对吧?

    2.目前、我已经将数据从毫米波 IWR6843发送到 CC3235S 传感器节点(AP)。 我想将其发送到 CC3235S 收集器(STA)。

    下面是我的简单想法:

    mmwave.c

    uint8_t readmmWave ()
    
    {
    //返回毫米波数据
    返回 mmWaveSensor;
    }
    
    
    void mmwaveTaskFxn (UArg a0、UArg A1)
    {
    /*用于设置事件的实用程序函数
    Util_setEvent (&Sensor_Events、sensor_mmWave_EVT);
    //在等待时钟事件时唤醒应用程序线程*/
    Semaphore_post (sensorSem);
    } 

    WiFi_Client.c

    int32_t BsdTcpClient (无符号短距 usPort)
    {
    Smsgs_sensorMsg_t 传感器;//传感器通过 TCP
    memset (&sensor、0、sizeof (Smsgs_sensorMsg_t)发送);
    //将雷达数据复制到传感器变量
    memcpy (&sensor.mmwaveSensor、&mmwaveSensor、传感器
    sizeof (Smsgs_mmwaveSensorField_t));
    //将数据发送到服务器
    sl_Send (iSockID、sensor.mmwaveSensor、sTestBufLen、0);
    
    }
    
    int main ()
    {
    wlanConnect ();
    BsdTcpClient();
    } 

    正确吗? 我对数据传输方式有点担心。 正如我研究过的,为了以 network_terminal 代码发送数据,我们必须通过 transc_cmd.c 中的 Txtask()和 radio_tool.c 中的 radioTool_TxStart()来完成 这些函数是否使用原始套接字而不是套接字? 我不确定原始套接字相对于套接字的优势。 如何通过 radioTool_TxStart()在上述代码中传输传感器数据? 我应该使用收发器_cmd.c 代码来实现我的目的、还是只需将其删除并使用上面的套接字方法?

    然后、我参考了 out_for_box & power_measurement 示例。 这些示例,特别是 power_measurement 示例有3种模式: traniverMode()、 alwaysConnected()、 不稳定性 connected()。 何时应使用 transceivermode()发送数据?

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

    尊敬的 Vincent:

    我尝试通过套接字发送数据。 但是在 sl_Send()中,我放置了一个表示传感器数据的数据结构,然后在重建项目时出现错误。 我只能在发送 char 数据时正常构建工程,但当我尝试通过 sl_Send()发送传感器数据结构时,它显示错误:与参数不兼容,如下所示。 Smsgs_mmwaveSensorField_t 是数据结构、包括帧编号、对象数量...

    /*!
    mmWave Sensor Field
    */
    typedef struct _smsgs_mmwavesensorfield_t
    {
    /*! 毫米波帧编号*/
    uint32_t frame_number;
    
    /*! 检测到的物体数量*/
    uint16_t num_objs;
    
    /*! 每个对象的跟踪信息*/
    Smsgs_objtrackingfield_t objInfo[SMSGS_SENSOR_mmWave_MAX_obj];
    
    }Smsgs_mmwaveSensorField_t; 

    在 mmWave_sensor.c 中、我有

    uint8_t readmmwave (Smsgs_mmwaveSensorField_t* mmWaveData)
    {
    //此处估算 mmWaveData
    } 

    然后、我将 mmwaveSensor 声明为 extern。 在 network_terminal 代码中,我调用 readmmwave (&mmwaveSensor)。 我使用 mmwaveSensor 组件来放入 sl_Send()。

    问题是、我只能发送 毫米波传感器的每个组件。

    例如 sl_Send (iSockID、&mmwaveSensor.frame_number、sTestBufLen、0);

    或 sl_Send (iSockID、&mmwaveSensor.num_objs、sTestBufLen、0);

    我不仅想发送帧编号、还想发送毫米波传感器的其他数据。  如何一次发送所有数据?  

    这里是我的客户端和服务器总代码。 我希望您能帮助我通过插座使其正常工作。 如果您没有 IWR6843、能否将一组数据作为 UART_READ 的输入、然后在套接字传输阶段测试我的代码?  

    客户端代码

    e2e.ti.com/.../network_5F00_terminal_5F00_Client_5F00_CC3235S_5F00_LAUNCHXL_5F00_tirtos_5F00_ccs.zip

    服务器代码

    e2e.ti.com/.../network_5F00_terminal_5F00_Server_5F00_CC3235S_5F00_LAUNCHXL_5F00_tirtos_5F00_ccs.zip

    在客户端代码文件夹中、mmWave_sensor.c 用于 CC3235S 通过 UART 读取 IWR6843数据。 在 BsdTcpClient()中,我调用 readmmwave (&mmwaveSensor),然后将 mmwaveSensor 用于 sl_Send ()。

    请为我提供一种以数据结构形式传输 IWR6843数据的好方法(毫米波传感器字段 FRAME_NUMBER、objInfo... 以上)。 因为它比 network_terminal 示例的 drawRxHist()中的发送消息要复杂一些。

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

    Hector、

    问题是您尝试将对象传递到需要缓冲区的函数。 您需要将传感器数据封装到缓冲器中、然后将其提供给 SL_Send 命令。

    BR、

    Vince  

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

    文森特

    如果我使用如下对象变量、我会收到数字值:  

    sl_Send (iSockID,&mmwaveSensor.objInfo[i]。posx,sTestBufLen,0); 

    但我始终从 sl_Recv ()获得相同的5370470040值。 我们可以在下面的第二个问题中讨论它。 首先、讨论我通过 char[]缓冲区传输数据时的问题。

    我尝试使用 char []执行基本的发送/恢复操作,如下所示

    服务器代码:

    TCPServer (端口)
    {
    char SendBuf[]="Hello";
    //套接字创建、绑定、侦听...
    sl_Send (iSockID、SendBuf、strlen (SendBuf)、0);
    } 

    客户端代码:

    TCPClient (port)
    {
    char RecvBuf[BUF_SIZE];
    iTestBufLen = BUF_SIZE;
    while (lLoopCount < g_ulPacketCount)
    {
    iStatus = sl_Recv (iNewSockID、RecvBuf、iTestBufLen、0);
    UART_PRINT ("接收位置=%d 成功\n"、RecvBuf);
    
    if (iStatus < 0)
    {
    //错误
    sl_close (iSockID);
    ASSERT_ON_ERROR (iSockID、sl_socket_error);
    }
    lLoopCount++;
    }
    } 

    如果我使用 char[]发送/恢复、我总是会在客户端获取奇怪的数据(看起来像中文字符)。

    
    

    1.请解释我为什么会得到奇怪的中文值,以防我使用 char[]作为缓冲区(上面的代码)

    2. 请解释为什么在使用对象作为缓冲区但值不变的情况下我得到了正常的数值

    这是接收所有相同数字的代码

    服务器代码:

    TCPServer (端口)
    {
    readmmwave (&mmwaveSensor);// mmwaveSensor 包含 x、y 坐标
    //套接字创建...
    while (lLoopCount < g_ulPacketCount)
    {
    sl_Send (iSockID、&mmwaveSensor.objInfo[i].posx、sTestBufLen、0);
    UART_PRINT ("发送的 X 位置=%d 成功\n\r\n、&mmwaveSensor.objInfo[i].posx);
    if
    (<= 0)
    //错误
    sl_close (iSockID);
    ASSERT_ON_ERROR (iSockID、sl_socket_error);
    }
    lLLOOPCount++;
    }
    

    客户端代码:

    TCPClient (port)
    {
    uint32_t Data[BUF_size];
    sl_Socket ();
    sl_Connect ();
    ...
    while (lLoopCount < g_ulPacketCount)
    {
    iStatus = sl_Recv (iNewSockID、Data、iTestBufLen、0);
    UART_PRINT ("接收位置=%d 成功\n"Data);
    if (iStatus < 0)
    {
    //错误
    sl_close (iSockID);
    ASSERT_ON_ERROR (iSockID、sl_socket_error);
    }
    lLoopCount++;
    }
    

    我不认为我的对象变量放入 sl_Send、sl_Recv 是错误的、因为我检查了 socket_cmd.c 代码。 在 TCPServer()中,它还使用对象作为类似的缓冲区。

    socket_cmd.c 代码:

    状态= sl_Send (newsock、&app_CB.gDataBuffer.nwData、buflen、0);
    状态= sl_Recv (newsock、 &APP_CB.gDataBuffer.nwData、MAX_BUF_SIZE、0); 

    服务器代码中的 posx 具有类型 uint32_t、与客户端代码中的数据缓冲区相同。 但我在客户端始终得到相同的数字:  5370470040。即使我更改为另一个变量作为发送缓冲区、客户端仍会获得相同的值。 这似乎比我的中文人物的情况要好,但它仍然不像预期的那样。 请帮助我处理该问题、并详细解释获取正确数据的原则。

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

    Hector、

    将对象替换为已知良好的缓冲区、例如 char buf[5]="test"、然后使用 buf 和 sizeof (buf)调用 sl_send ()作为参数。 验证是否正常工作。  

    如果是、则需要对代码进行一些调试、以了解为何不发送预期的值。

    BR、

    Vince  

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

    文森特

    如果我想通过套接字发送大小为32字节倍数的数据结构该怎么办? 有可能吗? 如何发送/重新接收? 请提供一个简短的代码。

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

    您好!

    答案与 此处完全相同。 您需要将结构转换为字节数组(char*),并通过面向字节的接口发送它们,无论它是 TCP 套接字还是 UART。

    1月