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.

[参考译文] CCS/CC2564MODN:未调用 etGATT_SERVER_Device_Buffer_empty

Guru**** 2553450 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/575257/ccs-cc2564modn-etgatt_server_device_buffer_empty-not-called

器件型号:CC2564MODN

工具/软件:Code Composer Studio

我想使用函数调用写入 SPPLE 示例中的一个特征(我采用了该示例代码并出于我自己的目的对其进行了修改)

结果= GATT_Write_Withning_Response_Request (
BluetoothStackID、ConnectionID、
DeviceInfo_->ClientInfo.Rx_Characteristic、
(word_t) DataCount、
&SPPLEBufferNotify[TransmitIndex]);

但是、当我发送太多数据时、我会得到返回值:BTPS_ERROR_INFLOADCK_Buffer_space。 那么、很显然、我将发送太多数据包。 Bluetopia 文档指出、用户必须等待回调 etGATT_Connection_Device_Buffer_empty 被调用、然后才能发送更多数据。 因此、我希望在队列变为空时进行此回调、但似乎从未调用此回调、所以问题是为什么? 如果没有溢出、我还希望进行此回调、比如说、如果我发送、只有50个字节、但情况并非如此。  

首先、我在 etGATT_SERVER_Write_Request 回调中执行了所有操作。 但是、我认为 、如果我坚持在那里、则 etGATT_Connection_Device_Buffer_Empty 回调可能会错过、因此我只需设置一个标志来执行设置调度程序的主文件中的发送过程。 但是 、既未调用 etGATT_Connection_Device_Buffer_empty、也未调用 etGATT_Connection_Device_Buffer_Empty。 此外、一旦错误 BTPS_ERROR_INFLOAD_Buffer_space 触发、它就会不断返回该错误、因此我必须重新启动器件、为什么它会卡在那里?

提前感谢

帕斯卡尔

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

    如果您参考 SPPLEDemo、则 etGATT_Connection_Device_Buffer_Empty 事件位于 GATT_Connection_Event_Callback 下、而不是 GATT_ServerEventCallback 下。

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

    好的、我的错。 是的、该器件充当服务器、因此需要调用  

    结果= GATT_Handle_Value_Notification (
    BluetoothStackID、SPPLEServiceID、ConnectionID、
    SPPLE_RX_and_TX_characteristic_attribute_offset、
    (word_t) DataCount、
    &SPPLEBufferNotify[TransmitIndex]);

    它应该在  GATT_ServerEventCallback()中调用 etGATT_Server_Device_Buffer_empty()。 但这不是发生的。 因此、我仍然有与之前描述的相同的问题。

    谢谢

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

    我确实看到默认 SPPLEDemo 中 GATT_Connection_Device_Buffer_Empty 事件弹出、用于 GATT_Handle_Value_Notification () API。 您是否对演示的这一部分进行了任何重大更改?

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

    感谢您的回复。 实际上、我返回到原始版本(其他引脚排列)的稍微更改的版本。 但是、我希望 调用 etGATT_SERVER_Device_Buffer_empty、而不是 etGATT_Connection_Device_Buffer_empty。 在我的设置中、设备充当平板电脑(运行 LightBlue)作为客户端运行的服务器。 我按照 SPPLEDemo-Wiki 中所述执行这些步骤。

    SPP+LE>服务器
    
    SPP+LE>RegisterSPPLE 
    已成功注册 SPPLE 服务。

    SPP+LE>AdvertiseLE 1.
    GAP_LE_Advertising_Enable 成功。

    之后、我启用侦听有关 TX 和 RX 计量特征的通知、并按照说明执行以下操作:
    1. 打开 Tx 计量特征(0xBA04C4B2-892B-43BE-B69C-5D13F2195392)。
    2. 选择"写入新值"。
    3. 类型  6400.(100个点数= 0x0064小端字节序)
    4. 选择 "完成"
    5. 按左上角的“Back (后退)”按钮

    然后我进入控制台:

    SPP+LE>LESend 5cfc3252180b 100
    
    发送完成,发送100。 

    GATT_SET_Queuing_Parameters (BluetoothStackID、(unsigned int) NumberLEPackets、(unsigned int)(NumberLEPackets -1)、false);HUS
    NumberLEPackets 设置为7,并且我添加了一个 Display 调用来检测 将要调用 GATT_Handle_Value_Notification()之后的回调。 

    静态空 BTPSAPI GATT_ServerEventCallback (unsigned int BluetoothStackID、GATT_SERVER_EVENT_Data_t * GATT_ServerEventData、unsigned long CallbackParameter)

    Int LEConnectionIndex;
    Byte_t Temp[2];
    word_t value;
    word_t PreviousValue;
    WORD_t AttributeOffset;
    DeviceInfo_t *设备信息;

    /*验证此回调的所有参数均为半有效。 *
    if ((BluetoothStackID)&&(GATT_ServerEventData))

    交换机(GATT_ServerEventData->Event_Data_Type)

    案例 etGATT_SERVER_Device_Buffer_empty:
    Display (("etGATT_SERVER_Device_Buffer_empty\r\n"));
    中断;
    案例 etGATT_SERVER_READ_REQUEST:
    /*验证事件数据是否有效。 *
    if (GATT_ServerEventData->Event_Data.GATT_Read_Request_Data)

    我还在跟踪 etGATT_Connection_Device_Buffer_empty 回调、这也不被调用。

    有什么想法吗?

    谢谢、

    帕斯卡尔




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我意识到只有存在缓冲区溢出时才调用回调。