2149374_ja-JP

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

2149374_ja-JP

2149374_ja-JP

RW612とOpenthread関数txpower

u-Blox IRIS-W106-10B (RW612) を MCUXpresso/Zephyr 4.2.0 で使用しています。OpenThread ではほとんどの機能が問題なく動作します。デバイスはメッシュ接続やping などが可能です。ただし、ソフトウェアでは一部の機能が動作しません。例えば、otPlatRadioSetTransmitPower() を使用するとリセットが発生します。

補足: たとえば -1 dBm は有効な設定なので、API は符号付き整数をサポートする必要があります。

ベンダーが送信電力を設定した例があることに気づきましたが、これを移植しても機能しません。otPlatRadioSetTransmitPower () 関数にフックする必要があると思います。

#SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMDを定義します( SPINEL_PROP_VENDOR__BEGIN + 0x10B)


また、おそらく関連していると思いますが、eui64 の取得がうまくいきません。関数
hwinfo_get_device_id を修正して、hwinfo アドレスの下位 8 バイトを返すようにしました。おそらくこれは正しくないと思われます。

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_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD コールバック用のベンダー フックも追加しました。

modules/openthread/プラットフォーム/radio_spinel.cppにこれを追加しました

+otError otPlatRadioGetVendorMaxTransmitPower(otInstance *aInstance, uint8_t *aPower)
+{
+ otError エラー;
+
+ OT_UNUSED_VARIABLE(インスタンス);
+
+ if (psRadioSpinel == NULL)
+ {
+ otLogWarnPlat("最大tx取得のpsRadioSpinelがnullです");
+ OT_ERROR_GENERIC を返します。
+ }
+
+ VerifyOrExit(aPower != NULL、エラー = OT_ERROR_INVALID_ARGS);
+ エラー = psRadioSpinel->GetVendorMaxTransmitPower(*aPower);
+
+終了:
+ エラーを返します。
+}
+
+otError otPlatRadioSetVendorMaxTransmitPower(otInstance *aInstance, uint8_t aPower)
+{
+ if (psRadioSpinel == NULL)
+ {
+ otLogWarnPlat("最大送信電力を設定するためのpsRadioSpinelがnullです");
+ OT_ERROR_GENERIC を返します。
+ }
+
+ OT_UNUSED_VARIABLE(インスタンス);
+ psRadioSpinel->SetVendorMaxTransmitPower(aPower) を返します。
+}
+

openthread モジュールはベンダー フックをサポートするように変更されました。
変更: include/openthread/プラットフォーム/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.h に追加されました。
SPINEL_PROP_VENDOR_NXP_GET_SET_TXPOWERLIMIT_CMD = (SPINEL_PROP_VENDOR__BEGIN + 0x10B)、

 
int main ( void )
{
   LOG_INF ( "nxp_ot_cli エントリ" );

   k_sleep ( K_MSEC ( 500 ));

   ot_context = openthread_get_default_context ();
   __ASSERT ( ot_context != NULL , "致命的: OpenThread コンテキストが利用できません!" );

   ot_instance = openthread_get_default_instance ();
   __ASSERT ( ot_instance != NULL , "致命的: OpenThread インスタンスが利用できません!" );

   LOG_INF ( "オープンスレッドリーダーの重みを設定" );
   otThreadSetLocalLeaderWeight ( ot_instance , 2 );
   LOG_INF ( "リーダーウェイトの設定が完了しました" );

   k_sleep ( K_MSEC ( 500 ));
   LOG_INF ( "OpenThread 無線の最大送信電力を 12/2 dBm に設定しています..." );
   otError err1 = otPlatRadioSetVendorMaxTransmitPower ( ot_instance , 12 );
   LOG_INF ( "オープンスレッド無線の最大送信電力を設定: %s (err= %d )" , otThreadErrorToString ( err1 ), err1 );

   k_sleep ( K_MSEC ( 500 ));
   uint8_t aPower = 0 ;
   LOG_INF ( "OpenThread 無線送信電力を取得しています..." );
   otError err2 = otPlatRadioGetVendorMaxTransmitPower ( ot_instance & aPower );
   もし(( aPower % 2 == 0 ))
    {
      LOG_INF ( "オープンスレッド無線送信電力は%uまたは%u .0 dBm、 %s (err= %d ) です" aPower aPower / 2 otThreadErrorToString ( err2 ) 、 err2 );
   }
   それ以外
    {
      LOG_INF ( "オープンスレッド無線送信電力は%uまたは%u .5 dBm、 %s (err= %d ) です" aPower aPower / 2 otThreadErrorToString ( err2 ) 、 err2 );
   }

   //LOG_INF("今すぐループ");
   一方 1
    {
      LOG_INF ( "今すぐループ" );
      k_sleep ( K_MSEC ( 1000 ));
   }

   0を返します
}


Re: RW612 and Openthread function txpower

こんにちは@joanou 、お元気ですか。

テストはカスタム アプリケーションで実行していますか、それとも既存の例で実行していますか?既存の例の場合、どのような変更を加えましたか?

さらに、OpenThread の「シェル」の例をテストしていただけますか?この例では、送信電力を変更するための入力コマンドを示します。

この方法がうまくいくかどうか、あるいは異なる動作が見られるかどうかをお知らせください。

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