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.

[参考译文] CC2340R5-Q1:为每个事件更新广播传输数据

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1438756/cc2340r5-q1-update-advertisement-transmission-data-for-each-event

器件型号:CC2340R5-Q1

工具与软件:

您好、TI 团队。

我们想要更改数据(例如、事件编号) 在广播传输中停止。

我们认为、当 Util_Event 发生"BLEAPPUTIL_ADV_END"事件"BLEAPPUTIL_ADV_END"时、我们可以改变它。
实际上、我们已经确认"BLEAPPUTIL_ADV_END"事件发生在发送每个事件并执行应用程序进程(端口输出)之后。 (参见下图)

但是、即使我们在"BLEAPPUTIL_ADV_END"事件期间使用以下代码更新发送的数据(两个代码都已测试)、接收到的数据也没有变化。

*API: GapAdv_loadByBuffer()或 GapAdv_loadByHandle()

void Broadcaster_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
{
	switch(event) {
	case BLEAPPUTIL_ADV_START_AFTER_ENABLE:
		/* Null */
		break;
	case BLEAPPUTIL_ADV_END_AFTER_DISABLE:
        GPIO_write(CONFIG_GPIO_1, 1);
        ++event_no;
        GPIO_write(CONFIG_GPIO_1, 0);
		break;
	case BLEAPPUTIL_ADV_SET_TERMINATED:
		/* Null */
		break;
    case BLEAPPUTIL_ADV_END:
        GPIO_write(CONFIG_GPIO_0, 1);
        ++event_no;
        txData[15] = (char)event_no;
        GapAdv_loadByHandle(broadcasterAdvHandle_1, GAP_ADV_DATA_TYPE_ADV, 14, &txData[2]);
        GPIO_write(CONFIG_GPIO_0, 0);
        break;
	default:
		break;
	}
}

void Broadcaster_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
{
	switch(event) {
	case BLEAPPUTIL_ADV_START_AFTER_ENABLE:
		/* Null */
		break;
	case BLEAPPUTIL_ADV_END_AFTER_DISABLE:
        GPIO_write(CONFIG_GPIO_1, 1);
        ++event_no;
        GPIO_write(CONFIG_GPIO_1, 0);
		break;
	case BLEAPPUTIL_ADV_SET_TERMINATED:
		/* Null */
		break;
    case BLEAPPUTIL_ADV_END:
        GPIO_write(CONFIG_GPIO_0, 1);
        ++event_no;
        txData[15] = (char)event_no;
        GapAdv_loadByBuffer(14, &txData[2]);
        GPIO_write(CONFIG_GPIO_0, 0);
        break;
	default:
		break;
	}
}

我们是否有任何方法可以实现我们想要做的事情?

我们使用的是 SDK:7.40。

此致。

译文:DeepL.com (免费版)

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

    嗨、

    您需要 先执行 GapAdv_prepareLoadByHandle()、然后再执行  GapAdv_loadByHandle。  

    请在此处查看有关如何执行此操作的文档:

    https://dev.ti.com/tirex/explore/node?node=A__AORV2P9xKyaQCr.Dunw8Rg__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST

    此致、

    Marvin

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

    您好、Marvin。

    感谢您的答复。

    我在执行 GapAdv_loadByHandle()之前添加了 GapAdv_prepareLoadByHandle()、正如你教我的那样。 (请参阅下面的代码)

    void Broadcaster_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
    {
    	switch(event) {
    	case BLEAPPUTIL_ADV_START_AFTER_ENABLE:
    		/* Null */
    		break;
    	case BLEAPPUTIL_ADV_END_AFTER_DISABLE:
            GPIO_write(CONFIG_GPIO_1, 1);
            ++gu8_c_frame_no;
            GPIO_write(CONFIG_GPIO_1, 0);
    		break;
    	case BLEAPPUTIL_ADV_SET_TERMINATED:
    		/* Null */
    		break;
        case BLEAPPUTIL_ADV_END:
            GPIO_write(CONFIG_GPIO_0, 1);
            ++gu8_c_frame_no;
    #if 1   /* Add Dec 9 */
            GPIO_write(CONFIG_GPIO_2, 1);
            GapAdv_prepareLoadByBuffer(&txData[2], GAP_ADV_FREE_OPTION_ADV_DATA);
            GPIO_write(CONFIG_GPIO_2, 0);
    #endif  /* Add Dec 9 */
            txData[15] = (char)gu8_c_frame_no;
            GapAdv_loadByHandle(broadcasterAdvHandle_1, GAP_ADV_DATA_TYPE_ADV, 14, &txData[2]);
            //        GapAdv_loadByBuffer(14, &txData[2]);
            GPIO_write(CONFIG_GPIO_0, 0);
            break;
    	default:
    		break;
    	}
    }

    然而,它并不像预期的那样工作,似乎在 GapAdv_prepareLoadByHandle()中过渡到无限循环。 (参见下图)。

    我是不是做错了什么?
    请告诉我正确的方法。

    此致。

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

    您将会在这里混合一些内容。

    首先、 由于仍在使用相同的缓冲器、因此不需要输入 GAP_ADV_FREE_OPTION_ADV_DATA。

    它应该是这样的:

    //不释放任何内容、因为我们要使用相同的缓冲区重新加载
    2 GapAdv_prepareLoadByBuffer (txDatafalse);
    3
     4 //样本缓冲
    
    
    区修改5 txData[15]=
    (char) gu8_c_frame_no;6 7 //重新加载由广播集处理8 GapAdv_loadByBuffer (ADV_DATA_LEN、txData)使用的缓冲区; 

    加载一个完整的新缓冲区如下所示:

    //释放缓冲区(避免双重复制)、因为我们正在加载新缓冲区
    2 GapAdv_prepareLoadByHandle (advHandleLegacyGAP_ADV_FREE_OPTION_ADV_DATA);
    3
     4
    
    
     //分配新的缓冲区
    (然后根据需要填充) 5 uint8_t * advertData2= iCall_malloc (ADV_DATA2_OPTION_ADV_LEN); 

    然后、advertData2是新缓冲区、旧缓冲区被释放。

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

    您好、Marvin。

    感谢您的答复。

    我检查了你给我的代码。
    我想使用相同的缓冲区、因此我将代码更改为下面的缓冲区。

    void Broadcaster_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
    {
    	switch(event) {
    	case BLEAPPUTIL_ADV_START_AFTER_ENABLE:
    		/* Null */
    		break;
    	case BLEAPPUTIL_ADV_END_AFTER_DISABLE:
            GPIO_write(CONFIG_GPIO_1, 1);
            ++gu8_c_frame_no;
            GPIO_write(CONFIG_GPIO_1, 0);
    		break;
    	case BLEAPPUTIL_ADV_SET_TERMINATED:
    		/* Null */
    		break;
        case BLEAPPUTIL_ADV_END:
            GPIO_write(CONFIG_GPIO_0, 1);
            ++gu8_c_frame_no;
    #if 1   /* Add Dec 9 */
            GPIO_write(CONFIG_GPIO_2, 1);
            GapAdv_prepareLoadByBuffer(&txData[2], FALSE);
            GPIO_write(CONFIG_GPIO_2, 0);
    #endif  /* Add Dec 9 */
            txData[15] = (char)gu8_c_frame_no;
            GapAdv_loadByBuffer(14, &txData[2]);
            GPIO_write(CONFIG_GPIO_0, 0);
            break;
    	default:
    		break;
    	}
    }

    然后执行广播传输、我们能够更改每个数据包的传输数据(本例中指的是批量的37通道、38通道和39通道传输)。

    但是、如下图所示、与以100毫秒的间隔发送5个数据包的目的相反、数据以5.6ms 的间隔永远发送。

    我还应该做些什么改变吗?

    此致。