2149374_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2149374_zh-CN

2149374_zh-CN

RW612 和开放线程函数 txpower

使用搭载 McuXpresso/Zephyr 4.2.0 的 u-blox IRIS-W106-10B (RW612)。大多数功能在 openthread 中都能正常运行。设备可以进入网状网络和 ping 等。但是软件中缺少一些功能。例如,使用 OTplatradiosetTransmippower () 会导致 RESET。

旁注:API 应支持带符号的整数,因为例如,-1 dBm 是有效的设置。

我注意到有一个例子是供应商设置的发射功率,在我将其插入后它不起作用。我认为它应该连接到 OTPlatradiosetTransmitpower () 函数中。

#define spinel_prop_vendor_nxp_get_set_txpowerlimit_cmd(spinel_prop_vendor__begin+ 0x10B)


另外,也许相关的是,获取 eui64 不起作用。我重新设计了该函数以返回 hwinfo 地址的低 8 字节:
hwinfo_get_device_id。我怀疑这可能不正确。

从 C 应用程序设置 Tx 功率对我们的应用程序至关重要。

谢谢


Re: RW612 and Openthread function txpower

你好@joanou.

我可以推断你正在将 OpenThead 示例移植到 Zephyr,如果我说错了,请指正。正如我之前提到的,我建议你将Zephyr存储库中的OpenThread Shell示例作为参考和/或测试,以检查与传输功率控制相关的其他移植细节,本示例中包含了该示例。

如果该示例对您有用,请告诉我。

Re: RW612 and Openthread function txpower

您好,

我在使用 nxp_ot_cli 样本时进行了一些定制。下面是 main()。 我还为spinel 的 SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD 回调 添加了供应商钩子。

我为 modules/openthread/platform/radio_spinel.cpp 添加了以下内容

+otError otPlatRadioGetVendorMaxTransmitPower(otInstance *aInstance, uint8_t *aPower)
+{
+ otError error;
+
+ OT_UNUSED_VARIABLE(aInstance);
+
+ if (psRadioSpinel == NULL)
+ {
+ otLogWarnPlat("psRadioSpinel for max tx get is null");
+ return OT_ERROR_GENERIC;
+ }
+
+ VerifyOrExit(aPower != NULL, error = OT_ERROR_INVALID_ARGS);
+ error = psRadioSpinel->GetVendorMaxTransmitPower(*aPower);
+
+exit:
+ return error;
+}
+
+otError otPlatRadioSetVendorMaxTransmitPower(otInstance *aInstance, uint8_t aPower)
+{
+ if (psRadioSpinel == NULL)
+ {
+ otLogWarnPlat("psRadioSpinel for set max Tx power is null");
+ return OT_ERROR_GENERIC;
+ }
+
+ OT_UNUSED_VARIABLE(aInstance);
+ return psRadioSpinel->SetVendorMaxTransmitPower(aPower);
+}
+

修改了 openthread 模块,以支持供应商钩子。
修改:include/openthread/platform/radio.h
修改: src/lib/spinel/CMakeLists.txt
修改: src/lib/spinel/radio_spinel.cpp
修改: src/lib/spinel/radio_spinel.hpp
修改: src/lib/spinel/spinel.h
修改: src/lib/spinel/spinel_driver.cpp


SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD = (SPINEL_PROP_VENDOR__BEGIN + 0x10B)、

 
int main(void)
{
日志文件("nxp_ot_cli entry");

k_sleep(K_MSEC(500));

ot_context = openthread_get_default_context();
__确定(ot_context != NULL, "Fatal: OpenThread context not available!");

ot_instance = openthread_get_default_instance();
__确定(ot_instance != NULL, "Fatal: OpenThread instance not available!");

日志文件("设置开放线程领导权重");
otThreadSetLocalLeaderWeight(ot_实例, 2);
日志文件("完成设置领导权重");

k_sleep(K_MSEC(500));
日志文件("设置 openthread 无线电最大发射功率为 12/2 dBm ...");
错误 err1 = otPlatRadioSetVendorMaxTransmitPower(ot_instance, 12);
日志文件("设置开放线程无线电最大发射功率: %s(错误=%d)", otThreadErrorToString(otThreadErrorToString(err1), err1);

k_sleep(K_MSEC(500));
uint8_t aPower = 0;
日志文件("获取开放线程无线电发射功率 ...");
错误 err2 = otPlatRadioGetVendorMaxTransmitPower(ot_instance, &aPower);
如果((aPower % 2 == 0))
    {
日志文件("获取开放线程无线电发射功率为 %u%u.0 dBm、 %s(err=%d)", aPower, aPower/2, otThreadErrorToString(err2), err2);
   }
不然
    {
日志文件("获取开放线程无线电发射功率为 %u%u.5 dBm、 %s(err=%d)", aPower, aPower/2, otThreadErrorToString(err2), err2);
   }

//LOG_INF("Loop now");
虽然(1)
    {
日志文件("现在循环");
k_sleep(K_MSEC(1000));
   }

返回 0;
}


Re: RW612 and Openthread function txpower

你好,@joanou,希望你一切都好。

您是在自定义应用程序中进行测试,还是在任何现有示例中进行测试?如果是现有范例,您做了哪些修改?

此外,能否请您测试一下 openthread"shell" 示例?该示例提供了一条更改传输功率的输入命令。

请告诉我这是否对您有效,或者您是否看到了不同的行为。

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 11:44 PM
Updated by: