2016-09-30 4 views
0

私はのRedHawkに非常に新しいですし、私は次のシナリオを持っている:成分Bに成分AからのRedHawkプロパティクエリ/コンフィグ

私は3成分のABとC、BとCの両方の特性スキルを持っている、これはBまたはCの機能を説明する1つのキーワードです。流れは次のようになります。AはB.skillとC.skillを起動して照会するので、AはBとCが何をすることができるかを知っています。次に、AがBまたはCのスキルセットに適合するタスクに遭遇すると、Aはその特定のコンポーネントを起動してタスクを実行します。

私の質問は、コンポーネントAがBのプロパティにどのようにアクセスするのですか?私はオンラインを見て、簡単なredhawkクエリの紹介(https://redhawksdr.github.io/Documentation/mainch4.htmlセクション4.6.2)を見つけましたが、AがBのプロパティにアクセスする方法をデモするコードスニペットを表示できるかどうかを願っています。また、クエリapiの詳細なドキュメントを見つけることができません。誰かが私にそれを指示することができれば素晴らしいだろう。

ありがとうございます。

+0

スニペットの作成を支援するには、これらのコンポーネントがどの言語で記述されているかを教えてください。 –

+0

こんにちはYoussef、これらのコンポーネントは、cppで書かれています。 – KKsan

答えて

0

この例題は、ちょっとクリーンアップされるかもしれませんが、私の例のスニペットでは、CompAはcompB_connectionとcompC_connectionの2つの出力ポートを持っています。 compBとcompCのリソースポート(lollipopポートとも呼ばれる)に接続できます。これは、リソースAPIから継承しているため、コンポーネント自体に直接接続しています。これにより、start、stop、configure、queryなどのコンポーネントのメソッドにアクセスできます。完全なリストについては、idlファイルを参照してください。

CompBとCompCの両方にidというスキルのプロパティがあります。クエリAPIを使用して、これらのプロパティの値を照会することができます。

CompB Skills: nunchuck skills 
CompC Skills: bow hunting skills 

any_to_string方法は、コアフレームワークにprop_helpers.cppで見つかりました:今、私たちはCOMPBとCOMPCまでのコンパを接続して、波形、またはサンドボックスを起動したときに、我々は次の出力を得る

std::string CompA_i::any_to_string(CORBA::Any value) { 
    std::ostringstream result; 
    const char* tmp; 
    value >>= tmp; 
    result << tmp; 
    return result.str(); 
} 

int CompA_i::serviceFunction() { 
    CF::Properties compB_props, compC_props; 

    compB_props.length(1); 
    compC_props.length(1); 

    compB_props[0].id = "skill"; 
    compC_props[0].id = "skill"; 

    compB_connection->query(compB_props); 
    compC_connection->query(compC_props); 

    std::cout << "CompB Skills: " << any_to_string(compB_props[0].value) << std::endl; 
    std::cout << "CompC Skills: " << any_to_string(compC_props[0].value) << std::endl; 

    return FINISH; 
} 

コード;ヘッダーファイルにはおそらくヘルパー関数があり、これはより良い修正となるでしょう。

+0

ありがとうございました! – KKsan

+0

AはBの 'firepower'という名前のプロパティにアクセスしたいとします( 'firepower'は構造体で、 'caliber'という名前の文字列が1つ含まれています)。 – KKsan

関連する問題