Запрос/конфигурация свойства RedHawk от компонента A к компоненту B

Я очень новичок в RedHawk, и у меня есть следующий сценарий:

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. Поток таков: a начинает и запрашивает B. умение и C. умение, так что A знает, что B и C могут сделать. Затем, когда A сталкивается с задачей, которая соответствует набору навыков B или C, A запускает этот конкретный компонент для выполнения задачи.

Мой вопрос: как компонент a получает доступ к свойству B? Я посмотрел в интернете и нашел простой redhawk запрос введение ( https://redhawksdr.github.io/Documentation/mainch4.html раздел 4.6.2), но я надеюсь, что кто-то может показать мне фрагмент кода, который показывает, как A обращается к свойству B. Кроме того, я не могу найти никакой подробной документации api запроса. Было бы здорово, если бы кто-то мог направить меня к нему.

Спасибо!.

1 ответ

  1. Этот пример, вероятно, может быть немного очищен, но в моем примере фрагмент CompA имеет два выходных порта, оба типа resource с именами compB_connection и compC_connection. Затем мы можем подключиться к ресурсному порту compB и compC (также называемому Lollipop port), который является прямым подключением к самому компоненту, поскольку он наследует от resource API. Это дает нам доступ к методам компонента, таким как start, stop, configure, query и т.д. Полный список см. в idl-файлах.

    CompB и CompC имеют свойство с идентификатором «skill». Для запроса значений этих свойств можно использовать API запроса.

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

    Теперь, когда мы подключаем CompA к CompB и CompC и запускаем форму волны или песочницу, мы получаем следующий выход:

    CompB Skills: nunchuck skills
    CompC Skills: bow hunting skills
    

    Метод any_to_string найден в prop_helpers.cpp в коде core framework; вероятно, есть вспомогательная функция в файле заголовка где-то, что было бы лучше исправить.