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.

[参考译文] 比较 pEvent->deviceInfo.pEvtData 中的广播数据时遇到问题

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

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/568932/trouble-comparing-advertisement-data-from-pevent--deviceinfo-pevtdata

Thread 中讨论的其他器件:CC2650

大家好、我正在使用 Code Composer Studio 6中的 CC2650 Launchpad 开发自动门锁。

为此、我从 simple_Observer 开始。

想法是等待 RSSI 大于(-40)并检查 pEvent->deviceInfo.pEvtData 以查看它是否与存储在变量中的 RSSI 相同。

我将在上下文中发布相关代码:

 

//变量与我在 termite 中看到的数据相同,抛出 UART

 静态 uint8_t MsgData[512]={0x02、0x01、0x1a、0x06、0x09、0x50、0x6f、0x72、0x74、0x61、0x04、0xff、0xf2、0xf1、0x02、0x02、0x2、0x4、0xb2





、0x4、0x2、0x4、0xb2、0x4、0x4、0x4、0x4、0xb2、0x4、0xf2、0x4、0x4、0xb2、0x

{



静态 char cmd[512]、cmd2[512];//变量"cmd"接收来自广播器的数据,变量"cmd2"接收来自内部变量的数据,该数据应与"cmd"相同。

静态 int ret;//此变量用于(memcmp 函数)



//仅写入 RSSI 级别
UART_WRITE (UART、"level:"、sizeof ("level:")-1);

sprintf (cmd、"%d\r\n"、pEvent->deviceInfo.RSSI);

UART_WRITE (UART、cmd、strlen (cmd)-1);





//将接收到的广播数据从 uint8转换为字符串 in (sprintf 函数)

UART_WRITE (UART、"Data:"、sizeof ("Data:")-1);

对于(int j=0;j DeviceInfo.dataLen;j++)

{

sprintf (cmd、"%02x "、pEvent->deviceInfo.pEvtData[j]);

UART_WRITE (UART、cmd、3);

}



UART_WRITE (UART、"\r\n"、sizeof ("\r\n")-1);

UART_WRITE (UART、"\r\n"、sizeof ("\r\n")-1);



//检查 RSSI 水平,直到这里一切都很好

if (pEvent->deviceInfo.RSSI >=(-40))

{

Flag = 1;

}

否则(pEvent->deviceInfo.RSSI <(-40))

{

标志= 0;

}

//在这里,我从与接收到的 uint8矢量具有相同 uint8矢量的变量 MsgData 转换到转换为"cmd"变量的 UART

if (flag = 1)

{

for (int i=0;i DeviceInfo.dataLen;i++)

{

sprintf (cmd2、"%02x "、MsgData[i]);

UART_WRITE (UART、cmd2、3);

}

//这里我比较两个字符串。

RET = memcmp (cmd、cmd2、pEvent->deviceInfo.dataLen);



if (ret =0)

{

PIN_setOutputValue (pinHandle、IOID_6、1);

PIN_setOutputValue (pinHandle、IOID_7、1);

Clock_start (Clock_handle (&myClock));

}

否则、如果(RET < 0)

{

UART_WRITE (UART、"cmd2 > cmd \n\r"、sizeof ("Erro ret < 0 \n\r")-1);

}

否则(RET >0)

{
//我从 memcmp 获取此响应 
UART_WRITE (UART、"cmd2 < cmd \n\r"、sizeof ("Erro ret < 0 \n\r")-1); 

}//返回;

所以我不知道为什么,但是它说 CM2比 cmd 小,这让我很奇怪,我是否看到了从广播包接收到的所有数据?

接下来是我在 Termite 中看到的内容:

发现

地址:70925d364852Level:-28

数据:02 01 1a 06 09 50 6F 72 74 61 04 ff f2 B2 02 0A 01 04 16 F4 F9 B2  

02 01 1a 06 09 50 6F 72 74 61 04 ff f2 b2 02 0A 01 04 16 f4 f9 b2 cmd2 < cmd  

[00]à

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

    Nicholas、您好!

    您可能应该检查 MsgData[i]和 pEvent->deviceInfo.pEvtData[j]的值,并验证它们是否相同。

    我猜您正在读取空字符或其他内容、并且默认 cmd 大于 cmd2。

    此外、您一定要升级到最新的堆栈! (2.2.1)


    此致、
    反叛分子