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-CC2650:添加 SPP 的多角色示例

Guru**** 2564090 points
Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/585931/launchxl-cc2650-multi-role-example-adding-spp

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件:CC2650

大家好、

我正在使用两个 LaunchPad CC2650、我正在执行一个项目、其中我需要一个焊盘像外设一样工作、另一个像多角色一样工作、但两个都必须使用串行端口服务进行通信。 为此、我对一个器件使用示例"spp ble server"、而对另一个器件使用"ulti-role" 、然后我尝试将 SPP 添加到多角色。 我该怎么做?

我遇到了另一个问题:在多角色示例中添加 SPP 之前、我尝试将 SPP 服务器与多角色连接、但它不起作用。 这两个器件似乎连接了一秒钟、但随后立即断开连接。 为什么?

谢谢大家

此致

  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    显然、
    我已将#define DEFAULT_DEV_DISC_by_SVC_UUID 设置为 false
    但它仍然不起作用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    我能够连接到它。 您使用的是哪个版本的堆栈、v2.2.1?

    您还可以在 SPP_ble_server.h 中取消定义 DEBUG_SIMPLE、它将为您提供更多打印语句。  

    祝你一切顺利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你 Zahid。
    是的、我使用的是 ble stack 版本2.2.2。 这两个器件似乎连接了一秒钟、但随后立即断开连接
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能解释一下如何在多角色示例中实现串行端口配置文件吗? 我要执行哪些步骤?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    本文档介绍了这些步骤:

    在第4.1节中,客户端将遵循与服务器相同的步骤。  

    祝你一切顺利

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

    我已经完成了这些步骤、但在构建过程中、SDI 文件夹文件中出现了多个错误。 在"添加"中、我无法在配置文件文件夹中添加 serial_port_service 文件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注意到、多角色示例使用 simple_gatt_profile、而在 SPP_ble_peripheral 和中央位置使用串行端口服务配置文件。 这两个不同的配置文件是否可以共存? 我是否需要制作"定制"配置文件来混合它们? 还是只需添加串行端口配置文件? 如何选择要使用的配置文件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以为同一项目具有多个配置文件。 中央端可以发现服务器端的任何配置文件。 如果您查看 SPP_ble_client.c、则客户端会按 UUID 查找、在本例中为 SERIALPORTSERVICE_SERV_UUID。 请注意,配置文件在服务器端定义,在客户端发现。 服务器端使用 x_AddService (GATT_All_services) API 添加配置文件。  

    祝你一切顺利

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

    感谢您的回答。

    现在我更清楚了。 但我仍然不明白客户是如何选择配置文件的。 我查看了您建议我使用的代码、但我不理解 我必须在此处添加串行端口服务配置文件的方式和位置:

     否则(discInfo[connIndex].discState=BLE_DISC_State_MTU)
       {
         //收到 MTU 大小响应,发现简单 BLE 服务
         if (pMsg->method =ATT_EXCHANGE_MTU_RSP)
         {
           uint8_t uuuid[ATT_BT_UUID_SIZE]={LO_UINT16 (SIMPLEPROFILE_SERV_UUID)、
           hi_uint16 (SIMPLEPROFILE_SERV_UUID)};        
           //advanec 状态
           discInfo[connIndex].discState= BLE_DISC_State_SVC;
           
           //发现简单 BLE 服务
           void GATT_DiscPrimaryServiceByUUID (pMsg->connHandle、uuid、ATT_BT_UUART_size、
                                              自实体);
         }

    可以帮帮我吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、我是否还要更改或添加服务器端的"AddertData"和 GAPRole_SetParameter?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我会尽量从 SPP_ble_client 复制和粘贴代码。  

    发现过程会发现随后用于读取和写入特征的句柄。  

    如果您已经知道句柄、还可以在客户端对其进行硬编码、只需调用 API 来编写特征:

    //执行写操作
    attWriteReq_t req;

    REQ.pValue = GATT_BM_alloc (connHandle、ATT_WRITE_REQ、1、NULL);
    if (req.pValue!= NULL)

    REQ.Handle = charDataHdl;
    Req.len = 1;
    REQ.pValue[0]= charV++;
    REQ.SIG = 0;
    REQ.cmd = 1;

    状态= GATT_WriteNoRsp (connHandle、&req);

    祝你一切顺利

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

    感谢您的回答、但我不理解您想对我说什么。 我将此代码放在哪里?  在 task_fxn 中? 还是在 HandleKeys 中?   

    我成功创建了串行端口服务、但仅作为外设!!! 不是客户端。  现在、使用 Android 手机、我可以看到两种不同的服务、但我无法在另一个编程为 SPP_bleSERVER 的 Launchpad 上充当客户端。 这是因为文件 serial_port_service.c 仅用于外设角色吗?

    在"添加"中、当我调试器件时添加了服务后、我再看不到 Putty 上的扫描、广播等菜单! 为什么会发生这种情况?

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

    是的、添加服务是针对外设角色的。 您要做的是尝试将 SPP_ble_client 移植到多角色、这样多角色就可以连接到 SPP_ble_server。  

    代码片段从 SPP_ble_client 项目复制。  

    祝你一切顺利

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

    感谢您的回答。

    是的、您理解这一点。 我无法将 SPP_ble_client 移植到多角色! 我是否必须仅移植 SPP_ble_client.c 或其他来源中的代码? 因为我添加了 UARTmsg、但它不起作用。

    此外、当我添加串行端口服务时、 我无法再从 Putty 中看到'memu'、因此我无法选择进行广播或扫描。 为什么会发生这种情况?

    此致

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

    您好!

    是的、您将移植 SPP_ble_client.c 中的代码以及 SDI 文件以通过 UART 进行通信。

    您不必在多角色项目中添加串行端口服务(仅包括头文件),SPP_BLE_server 已实现该服务。

    祝你一切顺利

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

    谢谢你 Zahid! 我成功地将 SPP_ble_client 移植到多角色中。 但仍然存在一个问题:当我 在 main 中使用 SDITASK_CREASE_TASK 时、我看不到任何内容(菜单选项)  在 PuTTY 屏幕上、但当我使用 blescanner 将器件链接到电话并在 SPP 数据字符上写入时、我 可以在屏幕上看到我所写的内容 如果我注释这行、我 可以看到 PuTTY 上的菜单、但当我链接时、我可以看到该菜单  设备到带条形音器的电话、我在 SPP 数据字符上写入我 在屏幕上看不到我所写的内容。 问题是它们具有不同的波特率吗?

    我注意到多角色示例使用 Display_UART 在屏幕上显示菜单 ETC,而 SPP_CENTRAL 和 SPP_PERPeripheral 角色则不显示。 它们使用调试命令。 如何在 putty/terminal 屏幕上查看菜单选项和电话写入的数据?

    谢谢你

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

    是的、多角色 UART 显示功能可能会干扰菜单和 SPP UART 数据。 通过在应用项目中使用 display_disable_all define 禁用显示、并使用与 SPP-BLE 相同的 UART 功能。