微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 请问CC2540把扫描完的list印出后,可否把list内addr的RSSI值也一并印出?

请问CC2540把扫描完的list印出后,可否把list内addr的RSSI值也一并印出?

时间:10-02 整理:3721RD 点击:

我在case GAP_DEVICE_DISCOVERY_EVENT中

使用for loop把simpleBLEDevList的addr全印出

for (int i=0;i<simpleBLEScanRes;i++)

{

  SerialPrintString((uint8*) bdAddr2Str( simpleBLEDevList[i].addr ));

 }

这里是可以正常动作的

 

后来想要把list内每个addr的RSSI也一并印出

所以加了一行SerialPrintValue("rssi:-",  (uint8)(-(pEvent->deviceInfo.rssi)),10);

 

for (int i=0;i<simpleBLEScanRes;i++)

{

  SerialPrintString((uint8*) bdAddr2Str( simpleBLEDevList[i].addr ));

SerialPrintValue("rssi:-",  (uint8)(-(pEvent->deviceInfo.rssi)),10);

 

 }

 

但印出来都是-142,请问要怎么做才能正确印出llist内每个addr的RSSI呢?

备注,我使用的是SimpleBLECentral

(1)你搞错了。

(2)discovery的过程会产生两个事件,一个是GAP_DEVICE_INFO_EVENT,一个是GAP_DEVICE_DISCOVERY_EVENT

GAP_DEVICE_INFO_EVENT 是每发现一个设备就会产生一次这个事件

GAP_DEVICE_DISCOVERY_EVENT 是发现过程完成了。

所以,你在GAP_DEVICE_DISCOVERY_EVENT 处理每个节点的rssi是不对了

GAP_DEVICE_INFO_EVENT 对应的是pEvent->deviceInfo。

GAP_DEVICE_DISCOVERY_EVENT对应的是pEvent->discCmpl

你在GAP_DEVICE_DISCOVERY_EVENT处理pEvent->deviceInfo 是有问题的。你应该在GAP_DEVICE_INFO_EVENT 里做

建议的做法是,建立一个数组,在每次GAP_DEVICE_INFO_EVENT 事件里,记录设备addr和RSSI. 然后在GAP_DEVICE_DISCOVERY_EVENT事件,即发现完成中,打印你自己的那个数组里的addr和rssi.

TY分析的非常到位。

GAP_DEVICE_DISCOVERY_EVENT在discover完了之后才会进入该事件的case里面。

而每次发现到新的设备都会在GAP_DEVICE_INFO_EVENT。

有几个结构体你不得不知:

typedef union
{
gapEventHdr_t gap; //!< GAP_MSG_EVENT and status.
gapDeviceInitDoneEvent_t initDone; //!< GAP initialization done.
gapDeviceInfoEvent_t deviceInfo; //!< Discovery device information event structure.
gapDevDiscEvent_t discCmpl; //!< Discovery complete event structure.
} gapObserverRoleEvent_t;

/**
* GAP_DEVICE_INFO_EVENT message format. This message is sent to the
* app during a Device Discovery Request, when a new advertisement or scan
* response is received.
*/
typedef struct
{
osal_event_hdr_t hdr; //!< GAP_MSG_EVENT and status
uint8 opcode; //!< GAP_DEVICE_INFO_EVENT
uint8 eventType; //!< Advertisement Type: @ref GAP_ADVERTISEMENT_REPORT_TYPE_DEFINES
uint8 addrType; //!< address type: @ref ADDRTYPE_DEFINES
uint8 addr[B_ADDR_LEN]; //!< Address of the advertisement or SCAN_RSP
int8 rssi; //!< Advertisement or SCAN_RSP RSSI
uint8 dataLen; //!< Length (in bytes) of the data field (evtData)
uint8 *pEvtData; //!< Data field of advertisement or SCAN_RSP
} gapDeviceInfoEvent_t;

在GAP_DEVICE_DISCOVERY_EVENT事件中读取pEvent->deviceInfo.rssi即为该从设备的RSSI,对应的从设备MAC地址也在里面。

多谢TY的回应,

的确,我在GAP_DEVICE_INFO_EVENT 处理就可以成功打印了

 

谢谢

很详细的讲述,赞

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top