RedHawk Property query/Config from Component A to Component B

元气小坏坏 提交于 2019-12-25 08:07:08

问题


I'm very new to RedHawk and I have the following scenario:

I have three component A B and C, B and C both have a property skill, which is one keyword describing what B or C's capability. The flow is: A starts and queries B.skill and C.skill so A knows what B and C can do. Then when A encounters a task that fits in B's or C's skill set, A will start up that specific component to do the task.

My question is: how does component A access a property of B? I looked up online and found some simple redhawk query introduction (https://redhawksdr.github.io/Documentation/mainch4.html section 4.6.2), but I hope if someone can show me a code snippet that demos how A accesses B's property. Also, I can't find any detailed documentation of the query api. It would be great if someone can direct me to it.

Thank you.


回答1:


This example could probably get cleaned up a bit but in my example snippet, CompA has two output ports, both of type resource with the names compB_connection and compC_connection. We can then connect to compB and compC's resource port (also called the lollipop port) which is a direct connection to the component itself since it inherits from the resource API. This gives us access to methods on the component like start, stop, configure, query etc. For a full list see the idl files.

CompB and CompC both have a property with the id of "skill". We can use the query API to query the values of those properties.

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;
}

Now when we connect CompA up to CompB and CompC and Start the waveform, or sandbox we get the following output:

CompB Skills: nunchuck skills
CompC Skills: bow hunting skills

The any_to_string method was found in prop_helpers.cpp in the core framework code; there is probably a helper function in a header file somewhere that would be a better fix.



来源:https://stackoverflow.com/questions/39799136/redhawk-property-query-config-from-component-a-to-component-b

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!