RW612 and Openthread function txpower

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

RW612 and Openthread function txpower

1,260 次查看
joanou
Contributor II

Using the u-Blox IRIS-W106-10B (RW612) with MCUXpresso/Zephyr 4.2.0.  Most features work fine with openthread.  The device can get on mesh and ping, etc.  But some features are missing in software.  Using otPlatRadioSetTransmitPower() causes a reset, for example.

Side note: The API should be support a signed int because, for example, -1 dBm is a valid setting.

I noticed there is an example with vendor set tx power, which does not work after I port it in.  I think it should be hooked into the otPlatRadioSetTransmitPower() function.

#define SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD (SPINEL_PROP_VENDOR__BEGIN + 0x10B)


Also, perhaps related, getting the eui64 does not work.  I reworked the function to return the lower 8 bytes of the hwinfo address: 
hwinfo_get_device_id.  I suspect that this is probably not correct.

Setting the Tx power from the C app is crucial for our application.

Thanks


0 项奖励
回复
3 回复数

1,221 次查看
RomanVR
NXP Employee
NXP Employee

Hello @joanou, hope you are doing well.

Are you doing your testings in a custom application or is it in any existing example? If it is an existing example what changes have you done?

Additionally, could you please test the openthread "shell" example? The example provides an input command to change the transmission power.

Please let me know whether this works for you or if you see a different behavior.

Best Regards!
0 项奖励
回复

1,179 次查看
joanou
Contributor II

Hi,

I am using the nxp_ot_cli sample with some of my customizations. Here is main() below.  I also added vendor hook for the SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD callback from spinel. 

I added this for 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);
+}
+

The openthread module was modified to support hte vendor hook.
modified: include/openthread/platform/radio.h
modified: src/lib/spinel/CMakeLists.txt
modified: src/lib/spinel/radio_spinel.cpp
modified: src/lib/spinel/radio_spinel.hpp
modified: src/lib/spinel/spinel.h
modified: src/lib/spinel/spinel_driver.cpp

This was added to spinel.h.
SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD = (SPINEL_PROP_VENDOR__BEGIN + 0x10B),

 
int main(void)
{
   LOG_INF("nxp_ot_cli entry");

   k_sleep(K_MSEC(500));

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

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

   LOG_INF("Setting openthread leader weight");
   otThreadSetLocalLeaderWeight(ot_instance, 2);
   LOG_INF("Done setting leaderweight");

   k_sleep(K_MSEC(500));
   LOG_INF("Setting openthread radio max transmit power to 12/2 dBm ...");
   otError err1 = otPlatRadioSetVendorMaxTransmitPower(ot_instance, 12);
   LOG_INF("Set openthread radio max transmit power: %s (err=%d)", otThreadErrorToString(err1), err1);

   k_sleep(K_MSEC(500));
   uint8_t aPower = 0;
   LOG_INF("Getting openthread radio transmit power ...");
   otError err2 = otPlatRadioGetVendorMaxTransmitPower(ot_instance, &aPower);
   if ((aPower % 2 == 0))
   {
      LOG_INF("Getting openthread radio transmit power is %u or %u.0 dBm, %s (err=%d)", aPower, aPower/2, otThreadErrorToString(err2), err2);
   }
   else
   {
      LOG_INF("Getting openthread radio transmit power is %u or %u.5 dBm, %s (err=%d)", aPower, aPower/2, otThreadErrorToString(err2), err2);
   }

   //LOG_INF("Loop now");
   while (1)
   {
      LOG_INF("Loop now");
      k_sleep(K_MSEC(1000));
   }

   return 0;
}

 

标记 (1)
0 项奖励
回复

1,146 次查看
RomanVR
NXP Employee
NXP Employee

Hello @joanou.

I can infer that you are porting an OpenThead example to Zephyr, although please correct me if I'm wrong. As I mentioned before, I suggest that you take as reference and/or test the OpenThread Shell example from the Zephyr repository to check for additional porting details related to the transmit power control, which is included in this example.

Please let me know if the example works for you.

Best Regards!
0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2149374%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERW612%20%E5%92%8C%E5%BC%80%E6%94%BE%E7%BA%BF%E7%A8%8B%E5%87%BD%E6%95%B0%20txpower%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2149374%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%BF%E7%94%A8%3CSPAN%3E%E6%90%AD%E8%BD%BD%20McuXpresso%2FZephyr%204.2.0%20%E7%9A%84%20u-blox%20IRIS-W106-10B%20(RW612)%E3%80%82%E5%A4%A7%E5%A4%9A%E6%95%B0%E5%8A%9F%E8%83%BD%E5%9C%A8%20openthread%20%E4%B8%AD%E9%83%BD%E8%83%BD%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C%E3%80%82%E8%AE%BE%E5%A4%87%E5%8F%AF%E4%BB%A5%E8%BF%9B%E5%85%A5%E7%BD%91%E7%8A%B6%E7%BD%91%E7%BB%9C%E5%92%8C%20ping%20%E7%AD%89%E3%80%82%E4%BD%86%E6%98%AF%E8%BD%AF%E4%BB%B6%E4%B8%AD%E7%BC%BA%E5%B0%91%E4%B8%80%E4%BA%9B%E5%8A%9F%E8%83%BD%E3%80%82%E4%BE%8B%E5%A6%82%EF%BC%8C%E4%BD%BF%E7%94%A8%3C%2FSPAN%3E%20%3CSPAN%3EOTplatradiosetTransmippower%20()%20%E4%BC%9A%E5%AF%BC%E8%87%B4%20RESET%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%97%81%E6%B3%A8%EF%BC%9AAPI%20%E5%BA%94%E6%94%AF%E6%8C%81%E5%B8%A6%E7%AC%A6%E5%8F%B7%E7%9A%84%E6%95%B4%E6%95%B0%EF%BC%8C%E5%9B%A0%E4%B8%BA%E4%BE%8B%E5%A6%82%EF%BC%8C-1%20dBm%20%E6%98%AF%E6%9C%89%E6%95%88%E7%9A%84%E8%AE%BE%E7%BD%AE%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E6%88%91%E6%B3%A8%E6%84%8F%E5%88%B0%E6%9C%89%E4%B8%80%E4%B8%AA%E4%BE%8B%E5%AD%90%E6%98%AF%E4%BE%9B%E5%BA%94%E5%95%86%E8%AE%BE%E7%BD%AE%E7%9A%84%E5%8F%91%E5%B0%84%E5%8A%9F%E7%8E%87%EF%BC%8C%E5%9C%A8%E6%88%91%E5%B0%86%E5%85%B6%E6%8F%92%E5%85%A5%E5%90%8E%E5%AE%83%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E3%80%82%E6%88%91%E8%AE%A4%E4%B8%BA%E5%AE%83%E5%BA%94%E8%AF%A5%E8%BF%9E%E6%8E%A5%E5%88%B0%20%3CSPAN%3EOTPlatradiosetTransmitpower%20()%20%E5%87%BD%E6%95%B0%E4%B8%AD%E3%80%82%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E%23define%3C%2FSPAN%3E%20%3CSPAN%3Espinel_prop_vendor_nxp_get_set_txpowerlimit_cmd%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Espinel_prop_vendor__begin%3C%2FSPAN%3E%3CSPAN%3E%2B%200x10B)%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CP%3E%3CSPAN%3E%3CSPAN%3E%3CBR%20%2F%3E%E5%8F%A6%E5%A4%96%EF%BC%8C%E4%B9%9F%E8%AE%B8%E7%9B%B8%E5%85%B3%E7%9A%84%E6%98%AF%EF%BC%8C%E8%8E%B7%E5%8F%96%20eui64%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E3%80%82%E6%88%91%E9%87%8D%E6%96%B0%E8%AE%BE%E8%AE%A1%E4%BA%86%E8%AF%A5%E5%87%BD%E6%95%B0%E4%BB%A5%E8%BF%94%E5%9B%9E%20hwinfo%20%E5%9C%B0%E5%9D%80%E7%9A%84%E4%BD%8E%208%20%E5%AD%97%E8%8A%82%EF%BC%9A%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%3Ehwinfo_get_device_id%E3%80%82%E6%88%91%E6%80%80%E7%96%91%E8%BF%99%E5%8F%AF%E8%83%BD%E4%B8%8D%E6%AD%A3%E7%A1%AE%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E4%BB%8E%20C%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E8%AE%BE%E7%BD%AE%20Tx%20%E5%8A%9F%E7%8E%87%E5%AF%B9%E6%88%91%E4%BB%AC%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E8%87%B3%E5%85%B3%E9%87%8D%E8%A6%81%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E8%B0%A2%E8%B0%A2%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2153828%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RW612%20and%20Openthread%20function%20txpower%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2153828%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F248805%22%20target%3D%22_blank%22%3E%40joanou%3C%2FA%3E.%3C%2FP%3E%0A%3CP%3E%E6%88%91%E5%8F%AF%E4%BB%A5%E6%8E%A8%E6%96%AD%E4%BD%A0%E6%AD%A3%E5%9C%A8%E5%B0%86%20OpenThead%20%E7%A4%BA%E4%BE%8B%E7%A7%BB%E6%A4%8D%E5%88%B0%20Zephyr%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%88%91%E8%AF%B4%E9%94%99%E4%BA%86%EF%BC%8C%E8%AF%B7%E6%8C%87%E6%AD%A3%E3%80%82%E6%AD%A3%E5%A6%82%E6%88%91%E4%B9%8B%E5%89%8D%E6%8F%90%E5%88%B0%E7%9A%84%EF%BC%8C%E6%88%91%E5%BB%BA%E8%AE%AE%E4%BD%A0%E5%B0%86Zephyr%E5%AD%98%E5%82%A8%E5%BA%93%E4%B8%AD%E7%9A%84OpenThread%20Shell%E7%A4%BA%E4%BE%8B%E4%BD%9C%E4%B8%BA%E5%8F%82%E8%80%83%E5%92%8C%2F%E6%88%96%E6%B5%8B%E8%AF%95%EF%BC%8C%E4%BB%A5%E6%A3%80%E6%9F%A5%E4%B8%8E%E4%BC%A0%E8%BE%93%E5%8A%9F%E7%8E%87%E6%8E%A7%E5%88%B6%E7%9B%B8%E5%85%B3%E7%9A%84%E5%85%B6%E4%BB%96%E7%A7%BB%E6%A4%8D%E7%BB%86%E8%8A%82%EF%BC%8C%E6%9C%AC%E7%A4%BA%E4%BE%8B%E4%B8%AD%E5%8C%85%E5%90%AB%E4%BA%86%E8%AF%A5%E7%A4%BA%E4%BE%8B%E3%80%82%3C%2FP%3E%0A%3CP%3E%E5%A6%82%E6%9E%9C%E8%AF%A5%E7%A4%BA%E4%BE%8B%E5%AF%B9%E6%82%A8%E6%9C%89%E7%94%A8%EF%BC%8C%E8%AF%B7%E5%91%8A%E8%AF%89%E6%88%91%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2153263%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RW612%20and%20Openthread%20function%20txpower%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2153263%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%82%A8%E5%A5%BD%EF%BC%8C%3C%2FP%3E%3CP%3E%E6%88%91%E5%9C%A8%E4%BD%BF%E7%94%A8%20nxp_ot_cli%20%E6%A0%B7%E6%9C%AC%E6%97%B6%E8%BF%9B%E8%A1%8C%E4%BA%86%E4%B8%80%E4%BA%9B%E5%AE%9A%E5%88%B6%E3%80%82%E4%B8%8B%E9%9D%A2%E6%98%AF%20main()%E3%80%82%20%E6%88%91%E8%BF%98%E4%B8%BA%3CSPAN%3Espinel%20%E7%9A%84%20SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD%20%E5%9B%9E%E8%B0%83%20%3C%2FSPAN%3E%E6%B7%BB%E5%8A%A0%E4%BA%86%E4%BE%9B%E5%BA%94%E5%95%86%E9%92%A9%E5%AD%90%E3%80%82%20%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E%E6%88%91%E4%B8%BA%20modules%2Fopenthread%2Fplatform%2Fradio_spinel.cpp%20%E6%B7%BB%E5%8A%A0%E4%BA%86%E4%BB%A5%E4%B8%8B%E5%86%85%E5%AE%B9%3CBR%20%2F%3E%3CBR%20%2F%3E%2BotError%20otPlatRadioGetVendorMaxTransmitPower(otInstance%20*aInstance%2C%20uint8_t%20*aPower)%3CBR%20%2F%3E%2B%7B%3CBR%20%2F%3E%2B%20otError%20error%3B%3CBR%20%2F%3E%2B%3CBR%20%2F%3E%2B%20OT_UNUSED_VARIABLE(aInstance)%EF%BC%9B%3CBR%20%2F%3E%2B%3CBR%20%2F%3E%2B%20if%20(psRadioSpinel%20%3D%3D%20NULL)%3CBR%20%2F%3E%2B%20%7B%3CBR%20%2F%3E%2B%20otLogWarnPlat(%22psRadioSpinel%20for%20max%20tx%20get%20is%20null%22)%3B%3CBR%20%2F%3E%2B%20return%20OT_ERROR_GENERIC%3B%3CBR%20%2F%3E%2B%20%7D%3CBR%20%2F%3E%2B%3CBR%20%2F%3E%2B%20VerifyOrExit(aPower%20%EF%BC%81%3D%20NULL%2C%20error%20%3D%20OT_ERROR_INVALID_ARGS)%3B%3CBR%20%2F%3E%2B%20error%20%3D%20psRadioSpinel-%26gt%3BGetVendorMaxTransmitPower(*aPower)%3B%3CBR%20%2F%3E%2B%3CBR%20%2F%3E%2Bexit%EF%BC%9A%3CBR%20%2F%3E%2B%20return%20error%3B%3CBR%20%2F%3E%2B%7D%3CBR%20%2F%3E%2B%3CBR%20%2F%3E%2BotError%20otPlatRadioSetVendorMaxTransmitPower(otInstance%20*aInstance%2C%20uint8_t%20aPower)%3CBR%20%2F%3E%2B%7B%3CBR%20%2F%3E%2B%20if%20(psRadioSpinel%20%3D%3D%20NULL)%3CBR%20%2F%3E%2B%20%7B%3CBR%20%2F%3E%2B%20otLogWarnPlat(%22psRadioSpinel%20for%20set%20max%20Tx%20power%20is%20null%22)%EF%BC%9B%3CBR%20%2F%3E%2B%20return%20OT_ERROR_GENERIC%3B%3CBR%20%2F%3E%2B%20%7D%3CBR%20%2F%3E%2B%3CBR%20%2F%3E%2B%20OT_UNUSED_VARIABLE(aInstance)%3B%3CBR%20%2F%3E%2B%20return%20psRadioSpinel-%26gt%3BSetVendorMaxTransmitPower(aPower)%3B%3CBR%20%2F%3E%2B%7D%3CBR%20%2F%3E%2B%3CBR%20%2F%3E%3CBR%20%2F%3E%E4%BF%AE%E6%94%B9%E4%BA%86%20openthread%20%E6%A8%A1%E5%9D%97%EF%BC%8C%E4%BB%A5%E6%94%AF%E6%8C%81%E4%BE%9B%E5%BA%94%E5%95%86%E9%92%A9%E5%AD%90%E3%80%82%3CBR%20%2F%3E%E4%BF%AE%E6%94%B9%EF%BC%9Ainclude%2Fopenthread%2Fplatform%2Fradio.h%3CBR%20%2F%3E%E4%BF%AE%E6%94%B9%EF%BC%9A%20src%2Flib%2Fspinel%2FCMakeLists.txt%3CBR%20%2F%3E%E4%BF%AE%E6%94%B9%EF%BC%9A%20src%2Flib%2Fspinel%2Fradio_spinel.cpp%3CBR%20%2F%3E%E4%BF%AE%E6%94%B9%EF%BC%9A%20src%2Flib%2Fspinel%2Fradio_spinel.hpp%3CBR%20%2F%3E%E4%BF%AE%E6%94%B9%EF%BC%9A%20src%2Flib%2Fspinel%2Fspinel.h%3CBR%20%2F%3E%E4%BF%AE%E6%94%B9%EF%BC%9A%20src%2Flib%2Fspinel%2Fspinel_driver.cpp%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3ESPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD%20%3D%20(SPINEL_PROP_VENDOR__BEGIN%20%2B%200x10B)%E3%80%81%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3C%2FDIV%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3Eint%3C%2FSPAN%3E%20%3CSPAN%3Emain%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Evoid%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22nxp_ot_cli%20entry%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3Ek_sleep%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EK_MSEC%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E500%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3Eot_context%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3Eopenthread_get_default_context%3C%2FSPAN%3E%3CSPAN%3E()%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E__%E7%A1%AE%E5%AE%9A%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eot_context%3C%2FSPAN%3E%20%3CSPAN%3E!%3D%3C%2FSPAN%3E%20%3CSPAN%3ENULL%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%22Fatal%3A%20OpenThread%20context%20not%20available%EF%BC%81%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3Eot_instance%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3Eopenthread_get_default_instance%3C%2FSPAN%3E%3CSPAN%3E()%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E__%E7%A1%AE%E5%AE%9A%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eot_instance%3C%2FSPAN%3E%20%3CSPAN%3E!%3D%3C%2FSPAN%3E%20%3CSPAN%3ENULL%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%22Fatal%3A%20OpenThread%20instance%20not%20available%EF%BC%81%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E8%AE%BE%E7%BD%AE%E5%BC%80%E6%94%BE%E7%BA%BF%E7%A8%8B%E9%A2%86%E5%AF%BC%E6%9D%83%E9%87%8D%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3EotThreadSetLocalLeaderWeight%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eot_%E5%AE%9E%E4%BE%8B%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E2%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E5%AE%8C%E6%88%90%E8%AE%BE%E7%BD%AE%E9%A2%86%E5%AF%BC%E6%9D%83%E9%87%8D%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3Ek_sleep%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EK_MSEC%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E500%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E8%AE%BE%E7%BD%AE%20openthread%20%E6%97%A0%E7%BA%BF%E7%94%B5%E6%9C%80%E5%A4%A7%E5%8F%91%E5%B0%84%E5%8A%9F%E7%8E%87%E4%B8%BA%2012%2F2%20dBm%20...%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E9%94%99%E8%AF%AF%3C%2FSPAN%3E%20%3CSPAN%3Eerr1%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3EotPlatRadioSetVendorMaxTransmitPower%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eot_instance%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E12%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E8%AE%BE%E7%BD%AE%E5%BC%80%E6%94%BE%E7%BA%BF%E7%A8%8B%E6%97%A0%E7%BA%BF%E7%94%B5%E6%9C%80%E5%A4%A7%E5%8F%91%E5%B0%84%E5%8A%9F%E7%8E%87%EF%BC%9A%20%3C%2FSPAN%3E%3CSPAN%3E%25s%3C%2FSPAN%3E%3CSPAN%3E%EF%BC%88%E9%94%99%E8%AF%AF%3D%3C%2FSPAN%3E%3CSPAN%3E%25d%3C%2FSPAN%3E%3CSPAN%3E)%22%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EotThreadErrorToString%EF%BC%88otThreadErrorToString%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eerr1%3C%2FSPAN%3E%3CSPAN%3E)%2C%20%3C%2FSPAN%3E%3CSPAN%3Eerr1%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3Ek_sleep%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EK_MSEC%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E500%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3Euint8_t%3C%2FSPAN%3E%20%3CSPAN%3EaPower%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E8%8E%B7%E5%8F%96%E5%BC%80%E6%94%BE%E7%BA%BF%E7%A8%8B%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%91%E5%B0%84%E5%8A%9F%E7%8E%87%20...%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E9%94%99%E8%AF%AF%3C%2FSPAN%3E%20%3CSPAN%3Eerr2%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3C%2FSPAN%3E%20%3CSPAN%3EotPlatRadioGetVendorMaxTransmitPower%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eot_instance%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B%3C%2FSPAN%3E%3CSPAN%3EaPower%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E5%A6%82%E6%9E%9C%3C%2FSPAN%3E%3CSPAN%3E((%3C%2FSPAN%3E%3CSPAN%3EaPower%3C%2FSPAN%3E%20%3CSPAN%3E%25%3C%2FSPAN%3E%20%3CSPAN%3E2%3C%2FSPAN%3E%20%3CSPAN%3E%3D%3D%3C%2FSPAN%3E%20%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E))%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E8%8E%B7%E5%8F%96%E5%BC%80%E6%94%BE%E7%BA%BF%E7%A8%8B%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%91%E5%B0%84%E5%8A%9F%E7%8E%87%E4%B8%BA%20%3C%2FSPAN%3E%3CSPAN%3E%25u%3C%2FSPAN%3E%3CSPAN%3E%E6%88%96%20%3C%2FSPAN%3E%3CSPAN%3E%25u%3C%2FSPAN%3E%3CSPAN%3E.0%20dBm%E3%80%81%20%3C%2FSPAN%3E%3CSPAN%3E%25s%3C%2FSPAN%3E%3CSPAN%3E(err%3D%3C%2FSPAN%3E%3CSPAN%3E%25d%3C%2FSPAN%3E%3CSPAN%3E)%22%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EaPower%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EaPower%3C%2FSPAN%3E%3CSPAN%3E%2F%3C%2FSPAN%3E%3CSPAN%3E2%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EotThreadErrorToString%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eerr2%3C%2FSPAN%3E%3CSPAN%3E)%2C%20%3C%2FSPAN%3E%3CSPAN%3Eerr2%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E4%B8%8D%E7%84%B6%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E8%8E%B7%E5%8F%96%E5%BC%80%E6%94%BE%E7%BA%BF%E7%A8%8B%E6%97%A0%E7%BA%BF%E7%94%B5%E5%8F%91%E5%B0%84%E5%8A%9F%E7%8E%87%E4%B8%BA%20%3C%2FSPAN%3E%3CSPAN%3E%25u%3C%2FSPAN%3E%3CSPAN%3E%E6%88%96%20%3C%2FSPAN%3E%3CSPAN%3E%25u%3C%2FSPAN%3E%3CSPAN%3E.5%20dBm%E3%80%81%20%3C%2FSPAN%3E%3CSPAN%3E%25s%3C%2FSPAN%3E%3CSPAN%3E(err%3D%3C%2FSPAN%3E%3CSPAN%3E%25d%3C%2FSPAN%3E%3CSPAN%3E)%22%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EaPower%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EaPower%3C%2FSPAN%3E%3CSPAN%3E%2F%3C%2FSPAN%3E%3CSPAN%3E2%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3EotThreadErrorToString%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3Eerr2%3C%2FSPAN%3E%3CSPAN%3E)%2C%20%3C%2FSPAN%3E%3CSPAN%3Eerr2%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%2F%2FLOG_INF(%22Loop%20now%22)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E8%99%BD%E7%84%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E1%3C%2FSPAN%3E%3CSPAN%3E)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E%22%E7%8E%B0%E5%9C%A8%E5%BE%AA%E7%8E%AF%22%3C%2FSPAN%3E%3CSPAN%3E)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Ek_sleep%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3EK_MSEC%3C%2FSPAN%3E%3CSPAN%3E(%3C%2FSPAN%3E%3CSPAN%3E1000%3C%2FSPAN%3E%3CSPAN%3E))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CDIV%3E%3CSPAN%3E%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%E8%BF%94%E5%9B%9E%3C%2FSPAN%3E%20%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2150337%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20RW612%20and%20Openthread%20function%20txpower%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2150337%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F248805%22%20target%3D%22_blank%22%3E%40joanou%3C%2FA%3E%EF%BC%8C%E5%B8%8C%E6%9C%9B%E4%BD%A0%E4%B8%80%E5%88%87%E9%83%BD%E5%A5%BD%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E6%98%AF%E5%9C%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E8%BF%9B%E8%A1%8C%E6%B5%8B%E8%AF%95%EF%BC%8C%E8%BF%98%E6%98%AF%E5%9C%A8%E4%BB%BB%E4%BD%95%E7%8E%B0%E6%9C%89%E7%A4%BA%E4%BE%8B%E4%B8%AD%E8%BF%9B%E8%A1%8C%E6%B5%8B%E8%AF%95%EF%BC%9F%E5%A6%82%E6%9E%9C%E6%98%AF%E7%8E%B0%E6%9C%89%E8%8C%83%E4%BE%8B%EF%BC%8C%E6%82%A8%E5%81%9A%E4%BA%86%E5%93%AA%E4%BA%9B%E4%BF%AE%E6%94%B9%EF%BC%9F%3C%2FP%3E%0A%3CP%3E%E6%AD%A4%E5%A4%96%EF%BC%8C%E8%83%BD%E5%90%A6%E8%AF%B7%E6%82%A8%E6%B5%8B%E8%AF%95%E4%B8%80%E4%B8%8B%20openthread%22shell%22%20%E7%A4%BA%E4%BE%8B%EF%BC%9F%E8%AF%A5%E7%A4%BA%E4%BE%8B%E6%8F%90%E4%BE%9B%E4%BA%86%E4%B8%80%E6%9D%A1%E6%9B%B4%E6%94%B9%E4%BC%A0%E8%BE%93%E5%8A%9F%E7%8E%87%E7%9A%84%E8%BE%93%E5%85%A5%E5%91%BD%E4%BB%A4%E3%80%82%3C%2FP%3E%0A%3CP%3E%E8%AF%B7%E5%91%8A%E8%AF%89%E6%88%91%E8%BF%99%E6%98%AF%E5%90%A6%E5%AF%B9%E6%82%A8%E6%9C%89%E6%95%88%EF%BC%8C%E6%88%96%E8%80%85%E6%82%A8%E6%98%AF%E5%90%A6%E7%9C%8B%E5%88%B0%E4%BA%86%E4%B8%8D%E5%90%8C%E7%9A%84%E8%A1%8C%E4%B8%BA%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E