Other Parts Discussed in Thread: CC2340R5
器件型号: CC2340R5
连接到协调器后、我使用函数 ZB_zdo_get_diag_data (0、&LQI、&RSSI);1s 获得一个 RSSI 值、但每次获得 RSSI 值时、它都不会改变。 它与获得的第一个 RSSI 值保持相同。
SDK:9_10
CC2340R5
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.
您好、
您是否使用 ZED 或 ZR、以及它与 ZC 进行通信(数据轮询之外)的频率如何? 您能否提供一个代码片段来说明它在您的应用中的使用方式?
static void handle_diag_data_resp(zb_bufid_t buf)
{
zb_zdo_get_diag_data_resp_params_t *resp_params;
resp_params = ZB_BUF_GET_PARAM(buf, zb_zdo_get_diag_data_resp_params_t);
ZVUNUSED(resp_params);
Log_printf(LogModule_Zigbee_App, Log_INFO, "handle_diag_data_resp, status: %d, addr: 0x%x, lqi: %d, rssi: %d",
resp_params->status, resp_params->short_address,
resp_params->lqi, resp_params->rssi);
zb_buf_free(buf);
}
static void send_diag_data_req(zb_uint16_t short_address)
{
zb_zdo_get_diag_data_req_params_t *req;
zb_bufid_t buf;
buf = zb_buf_get_out();
if (buf != ZB_BUF_INVALID)
{
req = ZB_BUF_GET_PARAM(buf, zb_zdo_get_diag_data_req_params_t);
ZB_BZERO(req, sizeof(*req));
req->short_address = short_address;
zb_zdo_get_diag_data_async(buf, handle_diag_data_resp);
}
else
{
Log_printf(LogModule_Zigbee_App, Log_ERROR, "Failed to get a buffer");
}
}
zb_uint8_t zcl_specific_cluster_cmd_handler(zb_uint8_t param)
{
//...
send_diag_data_req(g_dst_addr);
//...
}
此致、
Ryan
我在休眠 Zed 和非休眠 ZR 节点遇到类似的问题、下面是解决方法、我可以使用以下解决方法:
#include "zb_nwk_neighbor.h"
//...
volatile zb_uint8_t lqi = ZB_MAC_LQI_UNDEFINED;
volatile zb_int8_t rssi = ZB_MAC_RSSI_UNDEFINED;
zb_ret_t ret;
zb_neighbor_tbl_ent_t *nbt;
ret = zb_nwk_neighbor_get_by_idx(0, &nbt);
if (ret == RET_OK)
{
lqi = nbt->lqi;
rssi = nbt->rssi;
}
注意:“Volatile “分配仅用于防止编译器优化 LQI/RSSI。 将 ZB_Nwk_neighber_get_by_idx 替换为 ZB_Nwk_neighber_get_by_short 也是完全可以接受的。
此致、
Ryan