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.

[参考译文] CC2650:通过 BLE 发送180字节的阵列

Guru**** 2587345 points
Other Parts Discussed in Thread: BLE-STACK, CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/594978/cc2650-sending-an-array-of-180-bytes-over-ble

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

我有一个数组、其中每个数组在1字节下有180个有符号整数。 数组每隔几分钟就会获得新值、但它们始终小于1字节。 因此、每隔几分钟、我就需要通过 BLE 发送180字节。

这是否像将 MAX_PDU_SIZE 至少更改为180字节那样简单、然后只需调用 MyService_SetParameter、或者我是否需要多个写入 ATT 过程?

我正在运行 BLE 堆栈(2_02_00_31)。  

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

    1.您可以更改为 MAX_PDU_SIZE 以满足您的需要,然后只需使用 GATT_WriteLongCharDesc()以无线方式发送数据。 BLE-STACK 将为您提供碎片整理。

    2.您还可以启用 BT 4.2功能、数据长度扩展,只需使用 GATT_WriteCharValue()发送数据即可。
    您可以在我们的软件开发人员指南中找到有关 API 使用和 DLE 的更多信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Christin。

    是否有这两种方法之一的示例? 我想进一步澄清 几个方面(我正在尝试使用 GATT_WriteLongCharDesc()函数)。 我的应用程序是对 Project Zero 的直接修改。

    1.在哪里可以找到 taskId?

    2.如何合并失调电压?

    3.我是否只需执行以下操作即可获得连接句柄:pEvent->linkCmpl.connectionHandle?

    下面是我的当前代码:我有一个单独的时钟、每隔几分钟调用一次该函数。

    静态空 DATA_performTask(){

    attPrepareWriteReq_t writeReq;

    writeReq.offset=0;

    writeReq.len = data_len;

    writeReq.handle = 0;

    writeReq.pValue = osal_mem_alloc (data_len);

    OSAL_mem_cpy (writeReq.pValue、data、data_len);

    状态= GATT_Writ延伸 CharDesc (connHandle、writeReq、???????)

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

    您好!

    没有使用 GATT_WriteLongCharDesc 的特定示例、但您可以查看 simple_central 项目或使用了的多角色项目  

    GATT_WriteCharValue()。 用法相当相似。  

    1.在哪里可以找到 taskId?

    -->任务 ID 已在名为"selfEntity"的项目中定义

    2.如何合并失调电压?

    --> BLE 堆栈将负责您的移动。 您只需要设置数据结构。

    3.我是否只需执行以下操作即可获得连接句柄: pEvent->linkCmpl.connectionHandle?

    -->我不确定您在说 pEvent->linkcmpl.connectionHandle 时所谈论的是哪个函 数,但您始终可以通过使用以下 API GAPRole_GetParameter 获取连接句柄,并将参数设置为 GAPROLE_CONNNANDLE。

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

    感谢您的回复。


     还有3个快速问题:

    1、我实际上有更多的字节、而不是180字节、因为一些值是负的。 因此、我的数组实际上是 int16_t 数组、而不是 uint8。 attPrepareWriteReq_t 将'pValue'变量设置为 uint8。 在这种情况下、Typasting 不起作用、因此是否有另一个函数?

    2.我的另一端没有 BLE 监听器(只使用浅蓝色应用)、因此当我使用 GATT_WriteLongCharDesc 发送阵列时、开发套件是否会传输所有值、然后特征将返回到其初始值0? 还是一次将数据发送一个数组值、以便我可以在应用程序上看到它?

    3.在项目零应用程序中,为 attPrepareWriteReq_t 结构定义的句柄在哪里? 我不知道如何找到手柄? 他们在 simple_central 项目上执行该操作的方式不是很直观、由于 launchpad 是一个外设、因此它不会应用于我的项目。 我只需将其设置为 writeReq.handle = 0、但这是不正确的。

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

    您只需在接收器端重新组装数据

    我现在有点困惑。 您是否计划使用 GATT_WriteLongCharDesc 来点亮蓝色应用? 您需要确保接收器端具有要写入的特征。 (我建议您完成 simplelink Academy 培训:自定义配置文件部分)

    然后、您需要在项目0中实现客户端角色、以便从 GATT 服务器读取数据或向 GATT 服务器写入数据。 请查看我们的软件开发人员指南、了解如何将客户角色添加到您的项目中。

    或者、您可以使用通知将数据发送到电话端
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Christin:

    我只是使用浅蓝色应用程序来检查我的数据是否已写入特征。

    我已经创建了一个自定义服务。 之前、我写入的特征最大为10字节。 我实际上可以在浅蓝色上看到值更新(使用 Service_SetParameter 函数)。

    现在、对于这个新特性、我将使用 GATT_WriteLongCharDesc、因为我需要为其中一个特性发送大约250个字节。

    我认为"writeReq.handle = 0;"不正确、因为我不知道特征的句柄(因为我们在声明时被告知将其保留为0)。

    在没有监听器的情况下如何找到句柄?

    由于手机是客户端、CC2650实际上是服务器、我只需要在手机上设置客户端代码、Launchpad 不正确? 电话只读取正在发送的数据、而不会写入服务器。

    谢谢、

    ARSH 缓冲器

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

    现在、我将修改 simple_peripheral 应用。

    根据开发人员指南、我使用 BT 4.2开启了 DLE。 但是、仍然不知道数据的处理方式。 我不知道如果不知道这一点,我是否可以继续前进。

    由于我基本上是从其他示例复制格式、因此句柄必须不正确?

    以下是我的执行任务函数中的代码:

    uint8_t connHandle;
          uint8_t status;
          attPrepareWriteReq_t writeReq;
          writeReq.handle=0;
          writeReq.offset = 0;
          writeReq.len = len
          writeReq.pValue=数据;;
          GAPRole_GetParameter (GAPROLE_CONNNANDLE、connHandle);
          状态= GATT_WriteLongCharDesc (connHandle、&writeReq、self 实体);//或 GATT_WriteLongCharValue (connHandle、&writeReq、self 实体)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您只希望项目0自身更新特性(而不是通过客户端(电话)更新),则只需使用 Service_SetParameter 即可。
    GATT_WriteLongCharDesc 或 GATT_WriteCharDesc 由客户端用于将数据写入服务器。

    您不需要获取句柄值、因为仅当您希望客户端更新服务器上的特征值时才需要句柄值。

    此外、您还必须确保您的手机应用程序支持 DLE。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有趣。
    我曾尝试过:
    myService_SetParameter (service_data、DRUGABUSESERVICE_DATA_LEN、array_data);

    其中 array_data 是180个值的数组、此特征的浅蓝色应用程序上没有显示任何内容(我正在使用 iPhone)。 但是、它确实表现为其他特性。 这是因为 iphone 可能还没有 DLE 吗? 或者、因为我收到整数截断的警告(我的数组是 int16_t)。

    谢谢、

    ARSH 缓冲器

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从应用程序说明中可以看到:
    "LightBlue Explorer 可将您连接到所有使用低功耗蓝牙4.0 (也称为蓝牙智能或蓝牙光)的设备。"
    itunes.apple.com/.../id557428110
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的。 完全正确! 因此、当我打开特征时、我可以看到有250个字节的0 (这是我的初始值)。 该值不会使用 set 参数进行更改。 这意味着即使我将阵列设置为 int16_t、它也必须是整数截断的问题

    谢谢!