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.

[参考译文] CC2540:尝试使 OAD 特性可读

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1028545/cc2540-trying-to-make-oad-characteristic-readable

器件型号:CC2540

我们将 OAD 固件与"oad_target"服务一起使用。

但是、我一直在 Android 上遇到执行无线下载的问题、手机何时发送固件并同时订阅相同的字符。 因此、到目前为止最好的解决方案就是不订阅、只盲目发送固件。

由于这将是完全盲区的操作、我希望使 oadReadAttrCB 每隔100个块或某种情况从电话发送一次读取请求、并从 这样的更新状态获得反馈。

我添加了读取特性属性"GATT_PROP_READ | GATT_PROP_WRITE_NO_RSP | GATT_PROP_WRITE | GATT_PROP_NOTINO_NOTIFY"的功能

这是因为在我进行此更改后、手机报告特征是可读的。 但是,当我发送读取请求时,电话会抛出不允许读取的错误。 很明显这个问题可能是在电话上、但我以前成功使用过这样的读取请求、所以我想我在固件方面缺少一些东西来使其可读。

我的问题基本上是:我是否需要执行一些操作来使 OAD_TARGET 特征 adImgBlock 可读?  

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

    您好!

    我对较旧的 CC254x 器件不太熟悉、但查看您的描述、我将检查您是否启用了滤波器接受列表(以前称为白名单)并允许包含电话。 此外,行为与特征加密但电话未配对时发生的情况非常相似-鉴于特征属性列表不包括任何加密()GATT_PERMIT_ENCRYPT_READ,我怀疑情况并非如此,但可能值得检查。

    一个问题:为什么属性列表同时具有 GATT_PROP_WRITE_NO_RSP 和 GATT_PROP_WRITE?

    希望这对您有所帮助、

    拉斐尔

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

    编辑:我刚刚找到了另一个未设置的权限、现在可以通过发送读取请求在 ReadAttrCB 中触发断点。 我现在要测试这个、以查看我正在读取的数据是否实际上是我所期望的、如果是这样、则将其标记为 Resolved (已解析)。

    大家好、感谢您的信息。

    我可以将手机连接到 BLE 设备、执行写请求、还可以通过通知接收数据、因此我认为白名单不会是问题。 我之前从未使用过白名单、因此我不会100%确定。

    OAD 固件是 TI 提供的固件、我只想在读取请求时添加行为。 TI 已经实现了 ReadAttr 回调函数、甚至有一个//TBD 注释、指出:"TBD:是否有任何用途支持 readsread 行为"、这基本上就是我要尝试的操作。

    我还认为加密不是问题。 只是为了澄清。 我可以使用此固件执行完整且成功的固件更新。 因此、一切都按预期工作、我只想添加读取功能以提高 Android 设备的可扩展性。

    GATT_PROP_WRITE_NO_RSP 和 GATT_PROP_WRITE 已由 TI 根据标准进行设置。 但 ALIS 同时设置是有道理的、因为发送数据的设备要决定是不是盲目发送还是有成功提示。

    那么、添加 GATT_PROP_Read 似乎通常应该足以启用读取? 我已经尝试在 AttrReadCB 中设置一个从未达到的断点。

    解决方案:

    这是有效的。 首先将 GATT_PROP_READ 添加到特征属性。

    GATT_PROP_READ | GATT_PROP_WRITE_NO_RSP | GATT_PROP_WRITE | GATT_PROP_NOTIFY;

    然后将 GATT_permit_read 添加到属性表中。 这两种情况下、读取请求都会起作用。

    // OAD Image Block Request/Response Characteristic Value
          {
            { ATT_UUID_SIZE, oadCharUUID[1] },
            GATT_PERMIT_WRITE | GATT_PERMIT_READ,
            0,
            oadCharVals+1
          },